<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="content_v2.html">Content API for Shopping</a> . <a href="content_v2.accounts.html">accounts</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#authinfo">authinfo()</a></code></p>
<p class="firstline">Returns information about the authenticated user.</p>
<p class="toc_element">
  <code><a href="#custombatch">custombatch(body, dryRun=None)</a></code></p>
<p class="firstline">Retrieves, inserts, updates, and deletes multiple Merchant Center (sub-)accounts in a single request.</p>
<p class="toc_element">
  <code><a href="#delete">delete(merchantId, accountId, dryRun=None)</a></code></p>
<p class="firstline">Deletes a Merchant Center sub-account.</p>
<p class="toc_element">
  <code><a href="#get">get(merchantId, accountId)</a></code></p>
<p class="firstline">Retrieves a Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#insert">insert(merchantId, body, dryRun=None)</a></code></p>
<p class="firstline">Creates a Merchant Center sub-account.</p>
<p class="toc_element">
  <code><a href="#list">list(merchantId, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">Lists the sub-accounts in your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(merchantId, accountId, body, dryRun=None)</a></code></p>
<p class="firstline">Updates a Merchant Center account. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(merchantId, accountId, body, dryRun=None)</a></code></p>
<p class="firstline">Updates a Merchant Center account.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="authinfo">authinfo()</code>
  <pre>Returns information about the authenticated user.

Args:

Returns:
  An object of the form:

    {
    "kind": "content#accountsAuthInfoResponse", # Identifies what kind of resource this is. Value: the fixed string "content#accountsAuthInfoResponse".
    "accountIdentifiers": [ # The account identifiers corresponding to the authenticated user.
        # - For an individual account: only the merchant ID is defined
        # - For an aggregator: only the aggregator ID is defined
        # - For a subaccount of an MCA: both the merchant ID and the aggregator ID are defined.
      {
        "aggregatorId": "A String", # The aggregator ID, set for aggregators and subaccounts (in that case, it represents the aggregator of the subaccount).
        "merchantId": "A String", # The merchant account ID, set for individual accounts and subaccounts.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="custombatch">custombatch(body, dryRun=None)</code>
  <pre>Retrieves, inserts, updates, and deletes multiple Merchant Center (sub-)accounts in a single request.

Args:
  body: object, The request body. (required)
    The object takes the form of:

{
    "entries": [ # The request entries to be processed in the batch.
      { # A batch entry encoding a single non-batch accounts request.
        "batchId": 42, # An entry ID, unique within the batch request.
        "method": "A String",
        "account": { # Account data. # The account to create or update. Only defined if the method is insert or update.
            "reviewsUrl": "A String", # URL for individual seller reviews, i.e., reviews for each child account.
            "kind": "content#account", # Identifies what kind of resource this is. Value: the fixed string "content#account".
            "name": "A String", # Display name for the account.
            "adultContent": True or False, # Indicates whether the merchant sells adult content.
            "id": "A String", # Merchant Center account ID.
            "websiteUrl": "A String", # The merchant's website.
            "sellerId": "A String", # Client-specific, locally-unique, internal ID for the child account.
            "adwordsLinks": [ # List of linked AdWords accounts, active or pending approval. To create a new link request, add a new link with status active to the list. It will remain is state pending until approved or rejected in the AdWords interface. To delete an active link or to cancel a link request, remove it from the list.
              {
                "status": "A String", # Status of the link between this Merchant Center account and the AdWords account. Upon retrieval, it represents the actual status of the link and can be either active if it was approved in Google AdWords or pending if it's pending approval. Upon insertion, it represents the intended status of the link. Re-uploading a link with status active when it's still pending or with status pending when it's already active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status inactive is equivalent to not submitting the link at all and will delete the link if it was active or cancel the link request if it was pending.
                "adwordsId": "A String", # Customer ID of the AdWords account.
              },
            ],
            "users": [ # Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
              {
                "admin": True or False, # Whether user is an admin.
                "emailAddress": "A String", # User's email address.
              },
            ],
          },
        "merchantId": "A String", # The ID of the managing account.
        "accountId": "A String", # The ID of the account to get or delete. Only defined if the method is get or delete.
      },
    ],
  }

  dryRun: boolean, Flag to run the request in dry-run mode.

Returns:
  An object of the form:

    {
    "kind": "content#accountsCustomBatchResponse", # Identifies what kind of resource this is. Value: the fixed string "content#accountsCustomBatchResponse".
    "entries": [ # The result of the execution of the batch requests.
      { # A batch entry encoding a single non-batch accounts response.
        "batchId": 42, # The ID of the request entry this entry responds to.
        "account": { # Account data. # The retrieved, created, or updated account. Not defined if the method was delete.
            "reviewsUrl": "A String", # URL for individual seller reviews, i.e., reviews for each child account.
            "kind": "content#account", # Identifies what kind of resource this is. Value: the fixed string "content#account".
            "name": "A String", # Display name for the account.
            "adultContent": True or False, # Indicates whether the merchant sells adult content.
            "id": "A String", # Merchant Center account ID.
            "websiteUrl": "A String", # The merchant's website.
            "sellerId": "A String", # Client-specific, locally-unique, internal ID for the child account.
            "adwordsLinks": [ # List of linked AdWords accounts, active or pending approval. To create a new link request, add a new link with status active to the list. It will remain is state pending until approved or rejected in the AdWords interface. To delete an active link or to cancel a link request, remove it from the list.
              {
                "status": "A String", # Status of the link between this Merchant Center account and the AdWords account. Upon retrieval, it represents the actual status of the link and can be either active if it was approved in Google AdWords or pending if it's pending approval. Upon insertion, it represents the intended status of the link. Re-uploading a link with status active when it's still pending or with status pending when it's already active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status inactive is equivalent to not submitting the link at all and will delete the link if it was active or cancel the link request if it was pending.
                "adwordsId": "A String", # Customer ID of the AdWords account.
              },
            ],
            "users": [ # Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
              {
                "admin": True or False, # Whether user is an admin.
                "emailAddress": "A String", # User's email address.
              },
            ],
          },
        "errors": { # A list of errors returned by a failed batch entry. # A list of errors defined if and only if the request failed.
          "message": "A String", # The message of the first error in errors.
          "code": 42, # The HTTP status of the first error in errors.
          "errors": [ # A list of errors.
            { # An error returned by the API.
              "reason": "A String", # The error code.
              "domain": "A String", # The domain of the error.
              "message": "A String", # A description of the error.
            },
          ],
        },
        "kind": "content#accountsCustomBatchResponseEntry", # Identifies what kind of resource this is. Value: the fixed string "content#accountsCustomBatchResponseEntry".
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(merchantId, accountId, dryRun=None)</code>
  <pre>Deletes a Merchant Center sub-account.

Args:
  merchantId: string, The ID of the managing account. (required)
  accountId: string, The ID of the account. (required)
  dryRun: boolean, Flag to run the request in dry-run mode.
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(merchantId, accountId)</code>
  <pre>Retrieves a Merchant Center account.

Args:
  merchantId: string, The ID of the managing account. (required)
  accountId: string, The ID of the account. (required)

Returns:
  An object of the form:

    { # Account data.
      "reviewsUrl": "A String", # URL for individual seller reviews, i.e., reviews for each child account.
      "kind": "content#account", # Identifies what kind of resource this is. Value: the fixed string "content#account".
      "name": "A String", # Display name for the account.
      "adultContent": True or False, # Indicates whether the merchant sells adult content.
      "id": "A String", # Merchant Center account ID.
      "websiteUrl": "A String", # The merchant's website.
      "sellerId": "A String", # Client-specific, locally-unique, internal ID for the child account.
      "adwordsLinks": [ # List of linked AdWords accounts, active or pending approval. To create a new link request, add a new link with status active to the list. It will remain is state pending until approved or rejected in the AdWords interface. To delete an active link or to cancel a link request, remove it from the list.
        {
          "status": "A String", # Status of the link between this Merchant Center account and the AdWords account. Upon retrieval, it represents the actual status of the link and can be either active if it was approved in Google AdWords or pending if it's pending approval. Upon insertion, it represents the intended status of the link. Re-uploading a link with status active when it's still pending or with status pending when it's already active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status inactive is equivalent to not submitting the link at all and will delete the link if it was active or cancel the link request if it was pending.
          "adwordsId": "A String", # Customer ID of the AdWords account.
        },
      ],
      "users": [ # Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
        {
          "admin": True or False, # Whether user is an admin.
          "emailAddress": "A String", # User's email address.
        },
      ],
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(merchantId, body, dryRun=None)</code>
  <pre>Creates a Merchant Center sub-account.

Args:
  merchantId: string, The ID of the managing account. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Account data.
    "reviewsUrl": "A String", # URL for individual seller reviews, i.e., reviews for each child account.
    "kind": "content#account", # Identifies what kind of resource this is. Value: the fixed string "content#account".
    "name": "A String", # Display name for the account.
    "adultContent": True or False, # Indicates whether the merchant sells adult content.
    "id": "A String", # Merchant Center account ID.
    "websiteUrl": "A String", # The merchant's website.
    "sellerId": "A String", # Client-specific, locally-unique, internal ID for the child account.
    "adwordsLinks": [ # List of linked AdWords accounts, active or pending approval. To create a new link request, add a new link with status active to the list. It will remain is state pending until approved or rejected in the AdWords interface. To delete an active link or to cancel a link request, remove it from the list.
      {
        "status": "A String", # Status of the link between this Merchant Center account and the AdWords account. Upon retrieval, it represents the actual status of the link and can be either active if it was approved in Google AdWords or pending if it's pending approval. Upon insertion, it represents the intended status of the link. Re-uploading a link with status active when it's still pending or with status pending when it's already active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status inactive is equivalent to not submitting the link at all and will delete the link if it was active or cancel the link request if it was pending.
        "adwordsId": "A String", # Customer ID of the AdWords account.
      },
    ],
    "users": [ # Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
      {
        "admin": True or False, # Whether user is an admin.
        "emailAddress": "A String", # User's email address.
      },
    ],
  }

  dryRun: boolean, Flag to run the request in dry-run mode.

Returns:
  An object of the form:

    { # Account data.
      "reviewsUrl": "A String", # URL for individual seller reviews, i.e., reviews for each child account.
      "kind": "content#account", # Identifies what kind of resource this is. Value: the fixed string "content#account".
      "name": "A String", # Display name for the account.
      "adultContent": True or False, # Indicates whether the merchant sells adult content.
      "id": "A String", # Merchant Center account ID.
      "websiteUrl": "A String", # The merchant's website.
      "sellerId": "A String", # Client-specific, locally-unique, internal ID for the child account.
      "adwordsLinks": [ # List of linked AdWords accounts, active or pending approval. To create a new link request, add a new link with status active to the list. It will remain is state pending until approved or rejected in the AdWords interface. To delete an active link or to cancel a link request, remove it from the list.
        {
          "status": "A String", # Status of the link between this Merchant Center account and the AdWords account. Upon retrieval, it represents the actual status of the link and can be either active if it was approved in Google AdWords or pending if it's pending approval. Upon insertion, it represents the intended status of the link. Re-uploading a link with status active when it's still pending or with status pending when it's already active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status inactive is equivalent to not submitting the link at all and will delete the link if it was active or cancel the link request if it was pending.
          "adwordsId": "A String", # Customer ID of the AdWords account.
        },
      ],
      "users": [ # Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
        {
          "admin": True or False, # Whether user is an admin.
          "emailAddress": "A String", # User's email address.
        },
      ],
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(merchantId, pageToken=None, maxResults=None)</code>
  <pre>Lists the sub-accounts in your Merchant Center account.

Args:
  merchantId: string, The ID of the managing account. (required)
  pageToken: string, The token returned by the previous request.
  maxResults: integer, The maximum number of accounts to return in the response, used for paging.

Returns:
  An object of the form:

    {
    "nextPageToken": "A String", # The token for the retrieval of the next page of accounts.
    "kind": "content#accountsListResponse", # Identifies what kind of resource this is. Value: the fixed string "content#accountsListResponse".
    "resources": [
      { # Account data.
          "reviewsUrl": "A String", # URL for individual seller reviews, i.e., reviews for each child account.
          "kind": "content#account", # Identifies what kind of resource this is. Value: the fixed string "content#account".
          "name": "A String", # Display name for the account.
          "adultContent": True or False, # Indicates whether the merchant sells adult content.
          "id": "A String", # Merchant Center account ID.
          "websiteUrl": "A String", # The merchant's website.
          "sellerId": "A String", # Client-specific, locally-unique, internal ID for the child account.
          "adwordsLinks": [ # List of linked AdWords accounts, active or pending approval. To create a new link request, add a new link with status active to the list. It will remain is state pending until approved or rejected in the AdWords interface. To delete an active link or to cancel a link request, remove it from the list.
            {
              "status": "A String", # Status of the link between this Merchant Center account and the AdWords account. Upon retrieval, it represents the actual status of the link and can be either active if it was approved in Google AdWords or pending if it's pending approval. Upon insertion, it represents the intended status of the link. Re-uploading a link with status active when it's still pending or with status pending when it's already active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status inactive is equivalent to not submitting the link at all and will delete the link if it was active or cancel the link request if it was pending.
              "adwordsId": "A String", # Customer ID of the AdWords account.
            },
          ],
          "users": [ # Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
            {
              "admin": True or False, # Whether user is an admin.
              "emailAddress": "A String", # User's email address.
            },
          ],
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(merchantId, accountId, body, dryRun=None)</code>
  <pre>Updates a Merchant Center account. This method supports patch semantics.

Args:
  merchantId: string, The ID of the managing account. (required)
  accountId: string, The ID of the account. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Account data.
    "reviewsUrl": "A String", # URL for individual seller reviews, i.e., reviews for each child account.
    "kind": "content#account", # Identifies what kind of resource this is. Value: the fixed string "content#account".
    "name": "A String", # Display name for the account.
    "adultContent": True or False, # Indicates whether the merchant sells adult content.
    "id": "A String", # Merchant Center account ID.
    "websiteUrl": "A String", # The merchant's website.
    "sellerId": "A String", # Client-specific, locally-unique, internal ID for the child account.
    "adwordsLinks": [ # List of linked AdWords accounts, active or pending approval. To create a new link request, add a new link with status active to the list. It will remain is state pending until approved or rejected in the AdWords interface. To delete an active link or to cancel a link request, remove it from the list.
      {
        "status": "A String", # Status of the link between this Merchant Center account and the AdWords account. Upon retrieval, it represents the actual status of the link and can be either active if it was approved in Google AdWords or pending if it's pending approval. Upon insertion, it represents the intended status of the link. Re-uploading a link with status active when it's still pending or with status pending when it's already active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status inactive is equivalent to not submitting the link at all and will delete the link if it was active or cancel the link request if it was pending.
        "adwordsId": "A String", # Customer ID of the AdWords account.
      },
    ],
    "users": [ # Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
      {
        "admin": True or False, # Whether user is an admin.
        "emailAddress": "A String", # User's email address.
      },
    ],
  }

  dryRun: boolean, Flag to run the request in dry-run mode.

Returns:
  An object of the form:

    { # Account data.
      "reviewsUrl": "A String", # URL for individual seller reviews, i.e., reviews for each child account.
      "kind": "content#account", # Identifies what kind of resource this is. Value: the fixed string "content#account".
      "name": "A String", # Display name for the account.
      "adultContent": True or False, # Indicates whether the merchant sells adult content.
      "id": "A String", # Merchant Center account ID.
      "websiteUrl": "A String", # The merchant's website.
      "sellerId": "A String", # Client-specific, locally-unique, internal ID for the child account.
      "adwordsLinks": [ # List of linked AdWords accounts, active or pending approval. To create a new link request, add a new link with status active to the list. It will remain is state pending until approved or rejected in the AdWords interface. To delete an active link or to cancel a link request, remove it from the list.
        {
          "status": "A String", # Status of the link between this Merchant Center account and the AdWords account. Upon retrieval, it represents the actual status of the link and can be either active if it was approved in Google AdWords or pending if it's pending approval. Upon insertion, it represents the intended status of the link. Re-uploading a link with status active when it's still pending or with status pending when it's already active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status inactive is equivalent to not submitting the link at all and will delete the link if it was active or cancel the link request if it was pending.
          "adwordsId": "A String", # Customer ID of the AdWords account.
        },
      ],
      "users": [ # Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
        {
          "admin": True or False, # Whether user is an admin.
          "emailAddress": "A String", # User's email address.
        },
      ],
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(merchantId, accountId, body, dryRun=None)</code>
  <pre>Updates a Merchant Center account.

Args:
  merchantId: string, The ID of the managing account. (required)
  accountId: string, The ID of the account. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Account data.
    "reviewsUrl": "A String", # URL for individual seller reviews, i.e., reviews for each child account.
    "kind": "content#account", # Identifies what kind of resource this is. Value: the fixed string "content#account".
    "name": "A String", # Display name for the account.
    "adultContent": True or False, # Indicates whether the merchant sells adult content.
    "id": "A String", # Merchant Center account ID.
    "websiteUrl": "A String", # The merchant's website.
    "sellerId": "A String", # Client-specific, locally-unique, internal ID for the child account.
    "adwordsLinks": [ # List of linked AdWords accounts, active or pending approval. To create a new link request, add a new link with status active to the list. It will remain is state pending until approved or rejected in the AdWords interface. To delete an active link or to cancel a link request, remove it from the list.
      {
        "status": "A String", # Status of the link between this Merchant Center account and the AdWords account. Upon retrieval, it represents the actual status of the link and can be either active if it was approved in Google AdWords or pending if it's pending approval. Upon insertion, it represents the intended status of the link. Re-uploading a link with status active when it's still pending or with status pending when it's already active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status inactive is equivalent to not submitting the link at all and will delete the link if it was active or cancel the link request if it was pending.
        "adwordsId": "A String", # Customer ID of the AdWords account.
      },
    ],
    "users": [ # Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
      {
        "admin": True or False, # Whether user is an admin.
        "emailAddress": "A String", # User's email address.
      },
    ],
  }

  dryRun: boolean, Flag to run the request in dry-run mode.

Returns:
  An object of the form:

    { # Account data.
      "reviewsUrl": "A String", # URL for individual seller reviews, i.e., reviews for each child account.
      "kind": "content#account", # Identifies what kind of resource this is. Value: the fixed string "content#account".
      "name": "A String", # Display name for the account.
      "adultContent": True or False, # Indicates whether the merchant sells adult content.
      "id": "A String", # Merchant Center account ID.
      "websiteUrl": "A String", # The merchant's website.
      "sellerId": "A String", # Client-specific, locally-unique, internal ID for the child account.
      "adwordsLinks": [ # List of linked AdWords accounts, active or pending approval. To create a new link request, add a new link with status active to the list. It will remain is state pending until approved or rejected in the AdWords interface. To delete an active link or to cancel a link request, remove it from the list.
        {
          "status": "A String", # Status of the link between this Merchant Center account and the AdWords account. Upon retrieval, it represents the actual status of the link and can be either active if it was approved in Google AdWords or pending if it's pending approval. Upon insertion, it represents the intended status of the link. Re-uploading a link with status active when it's still pending or with status pending when it's already active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status inactive is equivalent to not submitting the link at all and will delete the link if it was active or cancel the link request if it was pending.
          "adwordsId": "A String", # Customer ID of the AdWords account.
        },
      ],
      "users": [ # Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
        {
          "admin": True or False, # Whether user is an admin.
          "emailAddress": "A String", # User's email address.
        },
      ],
    }</pre>
</div>

</body></html>