<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="dns_v1beta2.html">Google Cloud DNS API</a> . <a href="dns_v1beta2.changes.html">changes</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(project, managedZone, body=None, clientOperationId=None)</a></code></p>
<p class="firstline">Atomically update the ResourceRecordSet collection.</p>
<p class="toc_element">
  <code><a href="#get">get(project, managedZone, changeId, clientOperationId=None)</a></code></p>
<p class="firstline">Fetch the representation of an existing Change.</p>
<p class="toc_element">
  <code><a href="#list">list(project, managedZone, maxResults=None, pageToken=None, sortBy=None, sortOrder=None)</a></code></p>
<p class="firstline">Enumerate Changes to a ResourceRecordSet collection.</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(project, managedZone, body=None, clientOperationId=None)</code>
  <pre>Atomically update the ResourceRecordSet collection.

Args:
  project: string, Identifies the project addressed by this request. (required)
  managedZone: string, Identifies the managed zone addressed by this request. Can be the managed zone name or id. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Change represents a set of ResourceRecordSet additions and deletions applied atomically to a ManagedZone. ResourceRecordSets within a ManagedZone are modified by creating a new Change element in the Changes collection. In turn the Changes collection also records the past modifications to the ResourceRecordSets in a ManagedZone. The current state of the ManagedZone is the sum effect of applying all Change elements in the Changes collection in sequence.
    &quot;additions&quot;: [ # Which ResourceRecordSets to add?
      { # A unit of data that will be returned by the DNS servers.
        &quot;kind&quot;: &quot;dns#resourceRecordSet&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#resourceRecordSet&quot;.
        &quot;name&quot;: &quot;A String&quot;, # For example, www.example.com.
        &quot;rrdatas&quot;: [ # As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1) -- see examples.
          &quot;A String&quot;,
        ],
        &quot;signatureRrdatas&quot;: [ # As defined in RFC 4034 (section 3.2).
          &quot;A String&quot;,
        ],
        &quot;ttl&quot;: 42, # Number of seconds that this ResourceRecordSet can be cached by resolvers.
        &quot;type&quot;: &quot;A String&quot;, # The identifier of a supported record type. See the list of Supported DNS record types.
      },
    ],
    &quot;deletions&quot;: [ # Which ResourceRecordSets to remove? Must match existing data exactly.
      { # A unit of data that will be returned by the DNS servers.
        &quot;kind&quot;: &quot;dns#resourceRecordSet&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#resourceRecordSet&quot;.
        &quot;name&quot;: &quot;A String&quot;, # For example, www.example.com.
        &quot;rrdatas&quot;: [ # As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1) -- see examples.
          &quot;A String&quot;,
        ],
        &quot;signatureRrdatas&quot;: [ # As defined in RFC 4034 (section 3.2).
          &quot;A String&quot;,
        ],
        &quot;ttl&quot;: 42, # Number of seconds that this ResourceRecordSet can be cached by resolvers.
        &quot;type&quot;: &quot;A String&quot;, # The identifier of a supported record type. See the list of Supported DNS record types.
      },
    ],
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
    &quot;isServing&quot;: True or False, # If the DNS queries for the zone will be served.
    &quot;kind&quot;: &quot;dns#change&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#change&quot;.
    &quot;startTime&quot;: &quot;A String&quot;, # The time that this operation was started by the server (output only). This is in RFC3339 text format.
    &quot;status&quot;: &quot;A String&quot;, # Status of the operation (output only). A status of &quot;done&quot; means that the request to update the authoritative servers has been sent, but the servers might not be updated yet.
  }

  clientOperationId: string, For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.

Returns:
  An object of the form:

    { # A Change represents a set of ResourceRecordSet additions and deletions applied atomically to a ManagedZone. ResourceRecordSets within a ManagedZone are modified by creating a new Change element in the Changes collection. In turn the Changes collection also records the past modifications to the ResourceRecordSets in a ManagedZone. The current state of the ManagedZone is the sum effect of applying all Change elements in the Changes collection in sequence.
      &quot;additions&quot;: [ # Which ResourceRecordSets to add?
        { # A unit of data that will be returned by the DNS servers.
          &quot;kind&quot;: &quot;dns#resourceRecordSet&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#resourceRecordSet&quot;.
          &quot;name&quot;: &quot;A String&quot;, # For example, www.example.com.
          &quot;rrdatas&quot;: [ # As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1) -- see examples.
            &quot;A String&quot;,
          ],
          &quot;signatureRrdatas&quot;: [ # As defined in RFC 4034 (section 3.2).
            &quot;A String&quot;,
          ],
          &quot;ttl&quot;: 42, # Number of seconds that this ResourceRecordSet can be cached by resolvers.
          &quot;type&quot;: &quot;A String&quot;, # The identifier of a supported record type. See the list of Supported DNS record types.
        },
      ],
      &quot;deletions&quot;: [ # Which ResourceRecordSets to remove? Must match existing data exactly.
        { # A unit of data that will be returned by the DNS servers.
          &quot;kind&quot;: &quot;dns#resourceRecordSet&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#resourceRecordSet&quot;.
          &quot;name&quot;: &quot;A String&quot;, # For example, www.example.com.
          &quot;rrdatas&quot;: [ # As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1) -- see examples.
            &quot;A String&quot;,
          ],
          &quot;signatureRrdatas&quot;: [ # As defined in RFC 4034 (section 3.2).
            &quot;A String&quot;,
          ],
          &quot;ttl&quot;: 42, # Number of seconds that this ResourceRecordSet can be cached by resolvers.
          &quot;type&quot;: &quot;A String&quot;, # The identifier of a supported record type. See the list of Supported DNS record types.
        },
      ],
      &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
      &quot;isServing&quot;: True or False, # If the DNS queries for the zone will be served.
      &quot;kind&quot;: &quot;dns#change&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#change&quot;.
      &quot;startTime&quot;: &quot;A String&quot;, # The time that this operation was started by the server (output only). This is in RFC3339 text format.
      &quot;status&quot;: &quot;A String&quot;, # Status of the operation (output only). A status of &quot;done&quot; means that the request to update the authoritative servers has been sent, but the servers might not be updated yet.
    }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(project, managedZone, changeId, clientOperationId=None)</code>
  <pre>Fetch the representation of an existing Change.

Args:
  project: string, Identifies the project addressed by this request. (required)
  managedZone: string, Identifies the managed zone addressed by this request. Can be the managed zone name or id. (required)
  changeId: string, The identifier of the requested change, from a previous ResourceRecordSetsChangeResponse. (required)
  clientOperationId: string, For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.

Returns:
  An object of the form:

    { # A Change represents a set of ResourceRecordSet additions and deletions applied atomically to a ManagedZone. ResourceRecordSets within a ManagedZone are modified by creating a new Change element in the Changes collection. In turn the Changes collection also records the past modifications to the ResourceRecordSets in a ManagedZone. The current state of the ManagedZone is the sum effect of applying all Change elements in the Changes collection in sequence.
      &quot;additions&quot;: [ # Which ResourceRecordSets to add?
        { # A unit of data that will be returned by the DNS servers.
          &quot;kind&quot;: &quot;dns#resourceRecordSet&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#resourceRecordSet&quot;.
          &quot;name&quot;: &quot;A String&quot;, # For example, www.example.com.
          &quot;rrdatas&quot;: [ # As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1) -- see examples.
            &quot;A String&quot;,
          ],
          &quot;signatureRrdatas&quot;: [ # As defined in RFC 4034 (section 3.2).
            &quot;A String&quot;,
          ],
          &quot;ttl&quot;: 42, # Number of seconds that this ResourceRecordSet can be cached by resolvers.
          &quot;type&quot;: &quot;A String&quot;, # The identifier of a supported record type. See the list of Supported DNS record types.
        },
      ],
      &quot;deletions&quot;: [ # Which ResourceRecordSets to remove? Must match existing data exactly.
        { # A unit of data that will be returned by the DNS servers.
          &quot;kind&quot;: &quot;dns#resourceRecordSet&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#resourceRecordSet&quot;.
          &quot;name&quot;: &quot;A String&quot;, # For example, www.example.com.
          &quot;rrdatas&quot;: [ # As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1) -- see examples.
            &quot;A String&quot;,
          ],
          &quot;signatureRrdatas&quot;: [ # As defined in RFC 4034 (section 3.2).
            &quot;A String&quot;,
          ],
          &quot;ttl&quot;: 42, # Number of seconds that this ResourceRecordSet can be cached by resolvers.
          &quot;type&quot;: &quot;A String&quot;, # The identifier of a supported record type. See the list of Supported DNS record types.
        },
      ],
      &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
      &quot;isServing&quot;: True or False, # If the DNS queries for the zone will be served.
      &quot;kind&quot;: &quot;dns#change&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#change&quot;.
      &quot;startTime&quot;: &quot;A String&quot;, # The time that this operation was started by the server (output only). This is in RFC3339 text format.
      &quot;status&quot;: &quot;A String&quot;, # Status of the operation (output only). A status of &quot;done&quot; means that the request to update the authoritative servers has been sent, but the servers might not be updated yet.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(project, managedZone, maxResults=None, pageToken=None, sortBy=None, sortOrder=None)</code>
  <pre>Enumerate Changes to a ResourceRecordSet collection.

Args:
  project: string, Identifies the project addressed by this request. (required)
  managedZone: string, Identifies the managed zone addressed by this request. Can be the managed zone name or id. (required)
  maxResults: integer, Optional. Maximum number of results to be returned. If unspecified, the server will decide how many results to return.
  pageToken: string, Optional. A tag returned by a previous list request that was truncated. Use this parameter to continue a previous list request.
  sortBy: string, Sorting criterion. The only supported value is change sequence.
    Allowed values
      changeSequence - 
  sortOrder: string, Sorting order direction: &#x27;ascending&#x27; or &#x27;descending&#x27;.

Returns:
  An object of the form:

    { # The response to a request to enumerate Changes to a ResourceRecordSets collection.
    &quot;changes&quot;: [ # The requested changes.
      { # A Change represents a set of ResourceRecordSet additions and deletions applied atomically to a ManagedZone. ResourceRecordSets within a ManagedZone are modified by creating a new Change element in the Changes collection. In turn the Changes collection also records the past modifications to the ResourceRecordSets in a ManagedZone. The current state of the ManagedZone is the sum effect of applying all Change elements in the Changes collection in sequence.
          &quot;additions&quot;: [ # Which ResourceRecordSets to add?
            { # A unit of data that will be returned by the DNS servers.
              &quot;kind&quot;: &quot;dns#resourceRecordSet&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#resourceRecordSet&quot;.
              &quot;name&quot;: &quot;A String&quot;, # For example, www.example.com.
              &quot;rrdatas&quot;: [ # As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1) -- see examples.
                &quot;A String&quot;,
              ],
              &quot;signatureRrdatas&quot;: [ # As defined in RFC 4034 (section 3.2).
                &quot;A String&quot;,
              ],
              &quot;ttl&quot;: 42, # Number of seconds that this ResourceRecordSet can be cached by resolvers.
              &quot;type&quot;: &quot;A String&quot;, # The identifier of a supported record type. See the list of Supported DNS record types.
            },
          ],
          &quot;deletions&quot;: [ # Which ResourceRecordSets to remove? Must match existing data exactly.
            { # A unit of data that will be returned by the DNS servers.
              &quot;kind&quot;: &quot;dns#resourceRecordSet&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#resourceRecordSet&quot;.
              &quot;name&quot;: &quot;A String&quot;, # For example, www.example.com.
              &quot;rrdatas&quot;: [ # As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1) -- see examples.
                &quot;A String&quot;,
              ],
              &quot;signatureRrdatas&quot;: [ # As defined in RFC 4034 (section 3.2).
                &quot;A String&quot;,
              ],
              &quot;ttl&quot;: 42, # Number of seconds that this ResourceRecordSet can be cached by resolvers.
              &quot;type&quot;: &quot;A String&quot;, # The identifier of a supported record type. See the list of Supported DNS record types.
            },
          ],
          &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the resource; defined by the server (output only).
          &quot;isServing&quot;: True or False, # If the DNS queries for the zone will be served.
          &quot;kind&quot;: &quot;dns#change&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dns#change&quot;.
          &quot;startTime&quot;: &quot;A String&quot;, # The time that this operation was started by the server (output only). This is in RFC3339 text format.
          &quot;status&quot;: &quot;A String&quot;, # Status of the operation (output only). A status of &quot;done&quot; means that the request to update the authoritative servers has been sent, but the servers might not be updated yet.
        },
    ],
    &quot;header&quot;: { # Elements common to every response.
      &quot;operationId&quot;: &quot;A String&quot;, # For mutating operation requests that completed successfully. This is the client_operation_id if the client specified it, otherwise it is generated by the server (output only).
    },
    &quot;kind&quot;: &quot;dns#changesListResponse&quot;, # Type of resource.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The presence of this field indicates that there exist more results following your last page of results in pagination order. To fetch them, make another list request using this value as your pagination token.
        #
        # In this way you can retrieve the complete contents of even very large collections one page at a time. However, if the contents of the collection change between the first and last paginated list request, the set of all elements returned will be an inconsistent view of the collection. There is no way to retrieve a &quot;snapshot&quot; of collections larger than the maximum page size.
  }</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 &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>