<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="chromepolicy_v1.html">Chrome Policy API</a> . <a href="chromepolicy_v1.customers.html">customers</a> . <a href="chromepolicy_v1.customers.policySchemas.html">policySchemas</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Get a specific policy schema for a customer by its resource name.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a list of policy schemas that match a specified filter value for a given customer.</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Get a specific policy schema for a customer by its resource name.

Args:
  name: string, Required. The policy schema resource name to query. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Resource representing a policy schema. Next ID: 11
  &quot;accessRestrictions&quot;: [ # Output only. Specific access restrictions related to this policy.
    &quot;A String&quot;,
  ],
  &quot;additionalTargetKeyNames&quot;: [ # Output only. Additional key names that will be used to identify the target of the policy value. When specifying a `policyTargetKey`, each of the additional keys specified here will have to be included in the `additionalTargetKeys` map.
    { # Additional key names that will be used to identify the target of the policy value.
      &quot;key&quot;: &quot;A String&quot;, # Key name.
      &quot;keyDescription&quot;: &quot;A String&quot;, # Key description.
    },
  ],
  &quot;definition&quot;: { # Describes a complete .proto file. # Schema definition using proto descriptor.
    &quot;enumType&quot;: [
      { # Describes an enum type.
        &quot;name&quot;: &quot;A String&quot;,
        &quot;value&quot;: [
          { # Describes a value within an enum.
            &quot;name&quot;: &quot;A String&quot;,
            &quot;number&quot;: 42,
          },
        ],
      },
    ],
    &quot;messageType&quot;: [ # All top-level definitions in this file.
      { # Describes a message type.
        &quot;enumType&quot;: [
          { # Describes an enum type.
            &quot;name&quot;: &quot;A String&quot;,
            &quot;value&quot;: [
              { # Describes a value within an enum.
                &quot;name&quot;: &quot;A String&quot;,
                &quot;number&quot;: 42,
              },
            ],
          },
        ],
        &quot;field&quot;: [
          { # Describes a field within a message.
            &quot;defaultValue&quot;: &quot;A String&quot;, # For numeric types, contains the original text representation of the value. For booleans, &quot;true&quot; or &quot;false&quot;. For strings, contains the default text contents (not escaped in any way). For bytes, contains the C escaped value. All bytes &gt;= 128 are escaped.
            &quot;jsonName&quot;: &quot;A String&quot;, # JSON name of this field. The value is set by protocol compiler. If the user has set a &quot;json_name&quot; option on this field, that option&#x27;s value will be used. Otherwise, it&#x27;s deduced from the field&#x27;s name by converting it to camelCase.
            &quot;label&quot;: &quot;A String&quot;,
            &quot;name&quot;: &quot;A String&quot;,
            &quot;number&quot;: 42,
            &quot;oneofIndex&quot;: 42, # If set, gives the index of a oneof in the containing type&#x27;s oneof_decl list. This field is a member of that oneof.
            &quot;proto3Optional&quot;: True or False, # If true, this is a proto3 &quot;optional&quot;. When a proto3 field is optional, it tracks presence regardless of field type. When proto3_optional is true, this field must be belong to a oneof to signal to old proto3 clients that presence is tracked for this field. This oneof is known as a &quot;synthetic&quot; oneof, and this field must be its sole member (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs exist in the descriptor only, and do not generate any API. Synthetic oneofs must be ordered after all &quot;real&quot; oneofs. For message fields, proto3_optional doesn&#x27;t create any semantic change, since non-repeated message fields always track presence. However it still indicates the semantic detail of whether the user wrote &quot;optional&quot; or not. This can be useful for round-tripping the .proto file. For consistency we give message fields a synthetic oneof also, even though it is not required to track presence. This is especially important because the parser can&#x27;t tell if a field is a message or an enum, so it must always create a synthetic oneof. Proto2 optional fields do not set this flag, because they already indicate optional with `LABEL_OPTIONAL`.
            &quot;type&quot;: &quot;A String&quot;, # If type_name is set, this need not be set. If both this and type_name are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
            &quot;typeName&quot;: &quot;A String&quot;, # For message and enum types, this is the name of the type. If the name starts with a &#x27;.&#x27;, it is fully-qualified. Otherwise, C++-like scoping rules are used to find the type (i.e. first the nested types within this message are searched, then within the parent, on up to the root namespace).
          },
        ],
        &quot;name&quot;: &quot;A String&quot;,
        &quot;nestedType&quot;: [
          # Object with schema name: Proto2DescriptorProto
        ],
        &quot;oneofDecl&quot;: [
          { # Describes a oneof.
            &quot;name&quot;: &quot;A String&quot;,
          },
        ],
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # file name, relative to root of source tree
    &quot;package&quot;: &quot;A String&quot;, # e.g. &quot;foo&quot;, &quot;foo.bar&quot;, etc.
    &quot;syntax&quot;: &quot;A String&quot;, # The syntax of the proto file. The supported values are &quot;proto2&quot; and &quot;proto3&quot;.
  },
  &quot;fieldDescriptions&quot;: [ # Output only. Detailed description of each field that is part of the schema.
    { # Provides detailed information for a particular field that is part of a PolicySchema.
      &quot;description&quot;: &quot;A String&quot;, # Output only. The description for the field.
      &quot;field&quot;: &quot;A String&quot;, # Output only. The name of the field for associated with this description.
      &quot;fieldDependencies&quot;: [ # Output only. Provides a list of fields and the values they must have for this field to be allowed to be set.
        { # The field and the value it must have for another field to be allowed to be set.
          &quot;sourceField&quot;: &quot;A String&quot;, # The source field which this field depends on.
          &quot;sourceFieldValue&quot;: &quot;A String&quot;, # The value which the source field must have for this field to be allowed to be set.
        },
      ],
      &quot;inputConstraint&quot;: &quot;A String&quot;, # Output only. Any input constraints associated on the values for the field.
      &quot;knownValueDescriptions&quot;: [ # Output only. If the field has a set of known values, this field will provide a description for these values.
        { # Provides detailed information about a known value that is allowed for a particular field in a PolicySchema.
          &quot;description&quot;: &quot;A String&quot;, # Output only. Additional description for this value.
          &quot;value&quot;: &quot;A String&quot;, # Output only. The string represenstation of the value that can be set for the field.
        },
      ],
      &quot;nestedFieldDescriptions&quot;: [ # Output only. Provides the description of the fields nested in this field, if the field is a message type that defines multiple fields.
        # Object with schema name: GoogleChromePolicyV1PolicySchemaFieldDescription
      ],
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Format: name=customers/{customer}/policySchemas/{schema_namespace}
  &quot;notices&quot;: [ # Output only. Special notice messages related to setting certain values in certain fields in the schema.
    { # Provides special notice messages related to a particular value in a field that is part of a PolicySchema.
      &quot;acknowledgementRequired&quot;: True or False, # Output only. Whether the user needs to acknowledge the notice message before the value can be set.
      &quot;field&quot;: &quot;A String&quot;, # Output only. The field name associated with the notice.
      &quot;noticeMessage&quot;: &quot;A String&quot;, # Output only. The notice message associate with the value of the field.
      &quot;noticeValue&quot;: &quot;A String&quot;, # Output only. The value of the field that has a notice. When setting the field to this value, the user may be required to acknowledge the notice message in order for the value to be set.
    },
  ],
  &quot;policyDescription&quot;: &quot;A String&quot;, # Output only. Description about the policy schema for user consumption.
  &quot;schemaName&quot;: &quot;A String&quot;, # Output only. The full qualified name of the policy schema. This value is used to fill the field `policy_schema` in PolicyValue when calling BatchInheritOrgUnitPolicies or BatchModifyOrgUnitPolicies.
  &quot;supportUri&quot;: &quot;A String&quot;, # Output only. URI to related support article for this schema.
  &quot;validTargetResources&quot;: [ # Output only. Information about applicable target resources for the policy.
    &quot;A String&quot;,
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Gets a list of policy schemas that match a specified filter value for a given customer.

Args:
  parent: string, Required. The customer for which the listing request will apply. (required)
  filter: string, The schema filter used to find a particular schema based on fields like its resource name, description and `additionalTargetKeyNames`.
  pageSize: integer, The maximum number of policy schemas to return.
  pageToken: string, The page token used to retrieve a specific page of the listing request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for listing policy schemas that match a filter.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The page token used to get the next page of policy schemas.
  &quot;policySchemas&quot;: [ # The list of policy schemas that match the query.
    { # Resource representing a policy schema. Next ID: 11
      &quot;accessRestrictions&quot;: [ # Output only. Specific access restrictions related to this policy.
        &quot;A String&quot;,
      ],
      &quot;additionalTargetKeyNames&quot;: [ # Output only. Additional key names that will be used to identify the target of the policy value. When specifying a `policyTargetKey`, each of the additional keys specified here will have to be included in the `additionalTargetKeys` map.
        { # Additional key names that will be used to identify the target of the policy value.
          &quot;key&quot;: &quot;A String&quot;, # Key name.
          &quot;keyDescription&quot;: &quot;A String&quot;, # Key description.
        },
      ],
      &quot;definition&quot;: { # Describes a complete .proto file. # Schema definition using proto descriptor.
        &quot;enumType&quot;: [
          { # Describes an enum type.
            &quot;name&quot;: &quot;A String&quot;,
            &quot;value&quot;: [
              { # Describes a value within an enum.
                &quot;name&quot;: &quot;A String&quot;,
                &quot;number&quot;: 42,
              },
            ],
          },
        ],
        &quot;messageType&quot;: [ # All top-level definitions in this file.
          { # Describes a message type.
            &quot;enumType&quot;: [
              { # Describes an enum type.
                &quot;name&quot;: &quot;A String&quot;,
                &quot;value&quot;: [
                  { # Describes a value within an enum.
                    &quot;name&quot;: &quot;A String&quot;,
                    &quot;number&quot;: 42,
                  },
                ],
              },
            ],
            &quot;field&quot;: [
              { # Describes a field within a message.
                &quot;defaultValue&quot;: &quot;A String&quot;, # For numeric types, contains the original text representation of the value. For booleans, &quot;true&quot; or &quot;false&quot;. For strings, contains the default text contents (not escaped in any way). For bytes, contains the C escaped value. All bytes &gt;= 128 are escaped.
                &quot;jsonName&quot;: &quot;A String&quot;, # JSON name of this field. The value is set by protocol compiler. If the user has set a &quot;json_name&quot; option on this field, that option&#x27;s value will be used. Otherwise, it&#x27;s deduced from the field&#x27;s name by converting it to camelCase.
                &quot;label&quot;: &quot;A String&quot;,
                &quot;name&quot;: &quot;A String&quot;,
                &quot;number&quot;: 42,
                &quot;oneofIndex&quot;: 42, # If set, gives the index of a oneof in the containing type&#x27;s oneof_decl list. This field is a member of that oneof.
                &quot;proto3Optional&quot;: True or False, # If true, this is a proto3 &quot;optional&quot;. When a proto3 field is optional, it tracks presence regardless of field type. When proto3_optional is true, this field must be belong to a oneof to signal to old proto3 clients that presence is tracked for this field. This oneof is known as a &quot;synthetic&quot; oneof, and this field must be its sole member (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs exist in the descriptor only, and do not generate any API. Synthetic oneofs must be ordered after all &quot;real&quot; oneofs. For message fields, proto3_optional doesn&#x27;t create any semantic change, since non-repeated message fields always track presence. However it still indicates the semantic detail of whether the user wrote &quot;optional&quot; or not. This can be useful for round-tripping the .proto file. For consistency we give message fields a synthetic oneof also, even though it is not required to track presence. This is especially important because the parser can&#x27;t tell if a field is a message or an enum, so it must always create a synthetic oneof. Proto2 optional fields do not set this flag, because they already indicate optional with `LABEL_OPTIONAL`.
                &quot;type&quot;: &quot;A String&quot;, # If type_name is set, this need not be set. If both this and type_name are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
                &quot;typeName&quot;: &quot;A String&quot;, # For message and enum types, this is the name of the type. If the name starts with a &#x27;.&#x27;, it is fully-qualified. Otherwise, C++-like scoping rules are used to find the type (i.e. first the nested types within this message are searched, then within the parent, on up to the root namespace).
              },
            ],
            &quot;name&quot;: &quot;A String&quot;,
            &quot;nestedType&quot;: [
              # Object with schema name: Proto2DescriptorProto
            ],
            &quot;oneofDecl&quot;: [
              { # Describes a oneof.
                &quot;name&quot;: &quot;A String&quot;,
              },
            ],
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # file name, relative to root of source tree
        &quot;package&quot;: &quot;A String&quot;, # e.g. &quot;foo&quot;, &quot;foo.bar&quot;, etc.
        &quot;syntax&quot;: &quot;A String&quot;, # The syntax of the proto file. The supported values are &quot;proto2&quot; and &quot;proto3&quot;.
      },
      &quot;fieldDescriptions&quot;: [ # Output only. Detailed description of each field that is part of the schema.
        { # Provides detailed information for a particular field that is part of a PolicySchema.
          &quot;description&quot;: &quot;A String&quot;, # Output only. The description for the field.
          &quot;field&quot;: &quot;A String&quot;, # Output only. The name of the field for associated with this description.
          &quot;fieldDependencies&quot;: [ # Output only. Provides a list of fields and the values they must have for this field to be allowed to be set.
            { # The field and the value it must have for another field to be allowed to be set.
              &quot;sourceField&quot;: &quot;A String&quot;, # The source field which this field depends on.
              &quot;sourceFieldValue&quot;: &quot;A String&quot;, # The value which the source field must have for this field to be allowed to be set.
            },
          ],
          &quot;inputConstraint&quot;: &quot;A String&quot;, # Output only. Any input constraints associated on the values for the field.
          &quot;knownValueDescriptions&quot;: [ # Output only. If the field has a set of known values, this field will provide a description for these values.
            { # Provides detailed information about a known value that is allowed for a particular field in a PolicySchema.
              &quot;description&quot;: &quot;A String&quot;, # Output only. Additional description for this value.
              &quot;value&quot;: &quot;A String&quot;, # Output only. The string represenstation of the value that can be set for the field.
            },
          ],
          &quot;nestedFieldDescriptions&quot;: [ # Output only. Provides the description of the fields nested in this field, if the field is a message type that defines multiple fields.
            # Object with schema name: GoogleChromePolicyV1PolicySchemaFieldDescription
          ],
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # Format: name=customers/{customer}/policySchemas/{schema_namespace}
      &quot;notices&quot;: [ # Output only. Special notice messages related to setting certain values in certain fields in the schema.
        { # Provides special notice messages related to a particular value in a field that is part of a PolicySchema.
          &quot;acknowledgementRequired&quot;: True or False, # Output only. Whether the user needs to acknowledge the notice message before the value can be set.
          &quot;field&quot;: &quot;A String&quot;, # Output only. The field name associated with the notice.
          &quot;noticeMessage&quot;: &quot;A String&quot;, # Output only. The notice message associate with the value of the field.
          &quot;noticeValue&quot;: &quot;A String&quot;, # Output only. The value of the field that has a notice. When setting the field to this value, the user may be required to acknowledge the notice message in order for the value to be set.
        },
      ],
      &quot;policyDescription&quot;: &quot;A String&quot;, # Output only. Description about the policy schema for user consumption.
      &quot;schemaName&quot;: &quot;A String&quot;, # Output only. The full qualified name of the policy schema. This value is used to fill the field `policy_schema` in PolicyValue when calling BatchInheritOrgUnitPolicies or BatchModifyOrgUnitPolicies.
      &quot;supportUri&quot;: &quot;A String&quot;, # Output only. URI to related support article for this schema.
      &quot;validTargetResources&quot;: [ # Output only. Information about applicable target resources for the policy.
        &quot;A String&quot;,
      ],
    },
  ],
}</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>