Filter syntax

This page explains the syntax you must use to filter accounts .

Syntax

All values other than integers must be enclosed in double quotes ("). To learn what values a specific field accepts, see the reference documentation for that field.

You can use AND to filter for multiple fields in the same query. You can also use AND to combine multiple relationship(...) and service(...) filters. Here's an example that combines multiple relationship(...) and service(...) filters:

  ( 
 relationship 
 ( 
 service 
 ( 
 type 
  
 = 
  
 "ACCOUNT_MANAGEMENT" 
 ) 
  
 AND 
  
 service 
 ( 
 handshakeState 
  
 = 
  
 "PENDING" 
 ))) 
  
 OR 
  
 ( 
 accountName 
  
 = 
  
 "store" 
  
 AND 
  
 relationship 
 (...)) 
 

This example returns the following accounts:

  • All accounts with an account management relationship to another account, and an additional relationship that's pending acceptance.

  • All accounts with the display name "store" , who have relationships to other accounts.

You can't use AND to filter for multiple values in the same field. For example, you can't use accountName = "*A*" AND accountName = "*B*" .

You can use OR to filter for two fields in the same query. Enclose the filter criteria on each side of the OR operator with parentheses. For example, (accountName = "storeA") OR (accountName = "storeB") .

You can only use OR to combine two fields. For example, you can't use (accountName = "storeA") OR (accountName = "storeB") OR (accountName = "storeC") .

Parentheses aren't allowed other than with the AND and OR operators, and in function invocations, like relationship(...) and service(...) .

For string fields like accountName and accountIdAlias , you can filter for values that contain a certain word or sequence of characters by enclosing the sequence in asterisks ( * ). For example, accountName = "*foo*" returns all accounts with an accountName containing foo , like "storeFoo".

You can filter for values that don't contain a certain sequence by using != and * . For example, accountName != "*foo*" returns all accounts with an accountName that doesn't contain foo .

Extra white spaces are ignored. For example, foo AND bar is the same as foo AND bar .

Here are a few examples of filtering accounts using the account.list method:

"* All MCA sub-accounts containing "Store"

 accountName = "*store*" AND relationship(service(type = "ACCOUNT_AGGREGATION")) 
  • All accounts that are managed by provider 123456
 relationship(service(type = "ACCOUNT_MANAGEMENT") AND providerId = 123456) 
  • All accounts that have sent an invitation to provider 123456 or need to accept an invitation from this provider
 relationship(service(handshakeState = "PENDING" AND type ="ACCOUNT_MANAGEMENT")
AND providerId = 123456) 

To filter for the accounts the user making the request can access, use the google.shopping.merchant.accounts.v1.ListAccountsRequest method, as shown in the following sample.

Java

  import 
  
 com.google.api.gax.core.FixedCredentialsProvider 
 ; 
 import 
  
 com.google.auth.oauth2.GoogleCredentials 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.Account 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.AccountsServiceClient 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.AccountsServiceClient.ListAccountsPagedResponse 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.AccountsServiceSettings 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.ListAccountsRequest 
 ; 
 import 
  
 shopping.merchant.samples.utils.Authenticator 
 ; 
 import 
  
 shopping.merchant.samples.utils.Config 
 ; 
 /** This class demonstrates how to filter the accounts the user making the request has access to. */ 
 public 
  
 class 
 FilterAccountsSample 
  
 { 
  
 public 
  
 static 
  
 void 
  
 filterAccounts 
 ( 
 Config 
  
 config 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 // Obtains OAuth token based on the user's configuration. 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 new 
  
 Authenticator 
 (). 
 authenticate 
 (); 
  
 // Creates service settings using the credentials retrieved above. 
  
 AccountsServiceSettings 
  
 accountsServiceSettings 
  
 = 
  
 AccountsServiceSettings 
 . 
 newBuilder 
 () 
  
 . 
 setCredentialsProvider 
 ( 
 FixedCredentialsProvider 
 . 
 create 
 ( 
 credential 
 )) 
  
 . 
 build 
 (); 
  
 // Calls the API and catches and prints any network failures/errors. 
  
 try 
  
 ( 
 AccountsServiceClient 
  
 accountsServiceClient 
  
 = 
  
 AccountsServiceClient 
 . 
 create 
 ( 
 accountsServiceSettings 
 )) 
  
 { 
  
 // Filter for accounts with display names containing "store" and a provider with the ID "123": 
  
 String 
  
 filter 
  
 = 
  
 "accountName = \"*store*\" AND relationship(providerId = 123)" 
 ; 
  
 // Filter for all subaccounts of account "123": 
  
 // String filter2 = "relationship(providerId = 123 AND service(type = 
  
 // \"ACCOUNT_AGGREGATION\"))"; 
  
 // String filter3 = "relationship(service(handshakeState = \"APPROVED\" AND type = 
  
 // \"ACCOUNT_MANAGEMENT\") AND providerId = 123)"; 
  
 ListAccountsRequest 
  
 request 
  
 = 
  
 ListAccountsRequest 
 . 
 newBuilder 
 (). 
 setFilter 
 ( 
 filter 
 ). 
 build 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Sending list accounts request with filter:" 
 ); 
  
 ListAccountsPagedResponse 
  
 response 
  
 = 
  
 accountsServiceClient 
 . 
 listAccounts 
 ( 
 request 
 ); 
  
 int 
  
 count 
  
 = 
  
 0 
 ; 
  
 // Iterates over all rows in all pages and prints the sub-account 
  
 // in each row. 
  
 // `response.iterateAll()` automatically uses the `nextPageToken` and recalls the 
  
 // request to fetch all pages of data. 
  
 for 
  
 ( 
 Account 
  
 account 
  
 : 
  
 response 
 . 
 iterateAll 
 ()) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 account 
 ); 
  
 count 
 ++ 
 ; 
  
 } 
  
 System 
 . 
 out 
 . 
 print 
 ( 
 "The following count of elements were returned: " 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 count 
 ); 
  
 } 
  
 catch 
  
 ( 
 Exception 
  
 e 
 ) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 e 
 ); 
  
 } 
  
 } 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 Config 
  
 config 
  
 = 
  
 Config 
 . 
 load 
 (); 
  
 filterAccounts 
 ( 
 config 
 ); 
  
 } 
 } 
  
 

Specification

The filters follow a subset of the AIP filter specification, and its formal EBNF grammar :

 filter
    : accountFilterDisj
    | accountFilterConj

accountFilterDisj
    : "(" accountFilterConj " OR " accountFilterConj ")"
    ;
accountFilterConj
    : accountFilter {" AND " accountFilter}
    ;

accountFilter
    : accountNameFilter | capabilityFilter | relationshipFn
    ;

accountNameFilter
    : "accountName" comparator value
    ;

capabilityFilter
    : "capabilities:" capabilityValue
    | "-capabilities:" capabilityValue
    | "NOT capabilities:" capabilityValue
    ;
capabilityValue
    : "CAN_UPLOAD_PRODUCTS"
    ;

relationshipFn
    : "relationship(" relationshipConj ")"
    ;
relationshipConj
    : relationshipFilter {" AND " relationshipFilter}
    ;
relationshipFilter
    : "providerId = " numValue
    | "accountIdAlias" comparator value
    | serviceFn
    ;

serviceFn
    : "service(" serviceConj ")"
    ;
serviceConj
    : serviceFilter {" AND " serviceFilter}
    ;
serviceFilter
    : "externalAccountId" comparator value
    | "handshakeState = " handshakeState
    | "type = " serviceType
    ;

handshakeState
    : "PENDING"
    | "APPROVED"
    | "REJECTED"
    ;
serviceType
    : "ACCOUNT_AGGREGATION"
    | "ACCOUNT_MANAGEMENT"
    ;

comparator
    : " = " | " != "
    ; 
Design a Mobile Site
View Site in Mobile | Classic
Share by: