<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="dfareporting_v2_7.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_7.remarketingListShares.html">remarketingListShares</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(profileId, remarketingListId)</a></code></p>
<p class="firstline">Gets one remarketing list share by remarketing list ID.</p>
<p class="toc_element">
  <code><a href="#patch">patch(profileId, remarketingListId, body)</a></code></p>
<p class="firstline">Updates an existing remarketing list share. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(profileId, body)</a></code></p>
<p class="firstline">Updates an existing remarketing list share.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(profileId, remarketingListId)</code>
  <pre>Gets one remarketing list share by remarketing list ID.

Args:
  profileId: string, User profile ID associated with this request. (required)
  remarketingListId: string, Remarketing list ID. (required)

Returns:
  An object of the form:

    { # Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
      "sharedAdvertiserIds": [ # Advertisers that the remarketing list is shared with.
        "A String",
      ],
      "kind": "dfareporting#remarketingListShare", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListShare".
      "remarketingListId": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
      "sharedAccountIds": [ # Accounts that the remarketing list is shared with.
        "A String",
      ],
    }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(profileId, remarketingListId, body)</code>
  <pre>Updates an existing remarketing list share. This method supports patch semantics.

Args:
  profileId: string, User profile ID associated with this request. (required)
  remarketingListId: string, Remarketing list ID. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
    "sharedAdvertiserIds": [ # Advertisers that the remarketing list is shared with.
      "A String",
    ],
    "kind": "dfareporting#remarketingListShare", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListShare".
    "remarketingListId": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
    "sharedAccountIds": [ # Accounts that the remarketing list is shared with.
      "A String",
    ],
  }


Returns:
  An object of the form:

    { # Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
      "sharedAdvertiserIds": [ # Advertisers that the remarketing list is shared with.
        "A String",
      ],
      "kind": "dfareporting#remarketingListShare", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListShare".
      "remarketingListId": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
      "sharedAccountIds": [ # Accounts that the remarketing list is shared with.
        "A String",
      ],
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(profileId, body)</code>
  <pre>Updates an existing remarketing list share.

Args:
  profileId: string, User profile ID associated with this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
    "sharedAdvertiserIds": [ # Advertisers that the remarketing list is shared with.
      "A String",
    ],
    "kind": "dfareporting#remarketingListShare", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListShare".
    "remarketingListId": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
    "sharedAccountIds": [ # Accounts that the remarketing list is shared with.
      "A String",
    ],
  }


Returns:
  An object of the form:

    { # Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
      "sharedAdvertiserIds": [ # Advertisers that the remarketing list is shared with.
        "A String",
      ],
      "kind": "dfareporting#remarketingListShare", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListShare".
      "remarketingListId": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
      "sharedAccountIds": [ # Accounts that the remarketing list is shared with.
        "A String",
      ],
    }</pre>
</div>

</body></html>