<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="androidmanagement_v1.html">Android Management API</a> . <a href="androidmanagement_v1.enterprises.html">enterprises</a> . <a href="androidmanagement_v1.enterprises.webApps.html">webApps</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a web app.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a web app.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a web app.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists web apps for a given enterprise.</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(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a web app.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a web app.

Args:
  parent: string, The name of the enterprise in the form enterprises/{enterpriseId}. (required)
  body: object, The request body.
    The object takes the form of:

{ # A web app.
    &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
    &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app.
    &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
    &quot;name&quot;: &quot;A String&quot;, # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
    &quot;icons&quot;: [ # A list of icons for the web app. Must have at least one element.
      { # An icon for a web app. Supported formats are: png, jpg and webp.
        &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). &lt;ul&gt; &lt;li&gt;The image type can be png or jpg. &lt;li&gt;The image should ideally be square. &lt;li&gt;The image should ideally have a size of 512x512. &lt;/ul&gt;
      },
    ],
    &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A web app.
      &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
      &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app.
      &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
      &quot;name&quot;: &quot;A String&quot;, # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
      &quot;icons&quot;: [ # A list of icons for the web app. Must have at least one element.
        { # An icon for a web app. Supported formats are: png, jpg and webp.
          &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). &lt;ul&gt; &lt;li&gt;The image type can be png or jpg. &lt;li&gt;The image should ideally be square. &lt;li&gt;The image should ideally have a size of 512x512. &lt;/ul&gt;
        },
      ],
      &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a web app.

Args:
  name: string, The name of the web app in the form enterprises/{enterpriseId}/webApps/{packageName}. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance:
      # service Foo {
      #   rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      # }
      # The JSON representation for Empty is empty JSON object {}.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a web app.

Args:
  name: string, The name of the web app in the form enterprises/{enterpriseId}/webApp/{packageName}. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A web app.
      &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
      &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app.
      &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
      &quot;name&quot;: &quot;A String&quot;, # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
      &quot;icons&quot;: [ # A list of icons for the web app. Must have at least one element.
        { # An icon for a web app. Supported formats are: png, jpg and webp.
          &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). &lt;ul&gt; &lt;li&gt;The image type can be png or jpg. &lt;li&gt;The image should ideally be square. &lt;li&gt;The image should ideally have a size of 512x512. &lt;/ul&gt;
        },
      ],
      &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists web apps for a given enterprise.

Args:
  parent: string, The name of the enterprise in the form enterprises/{enterpriseId}. (required)
  pageToken: string, A token identifying a page of results returned by the server.
  pageSize: integer, The requested page size. The actual page size may be fixed to a min or max value.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response to a request to list web apps for a given enterprise.
    &quot;webApps&quot;: [ # The list of web apps.
      { # A web app.
          &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
          &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app.
          &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
          &quot;name&quot;: &quot;A String&quot;, # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
          &quot;icons&quot;: [ # A list of icons for the web app. Must have at least one element.
            { # An icon for a web app. Supported formats are: png, jpg and webp.
              &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). &lt;ul&gt; &lt;li&gt;The image type can be png or jpg. &lt;li&gt;The image should ideally be square. &lt;li&gt;The image should ideally have a size of 512x512. &lt;/ul&gt;
            },
          ],
          &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
        },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # If there are more results, a token to retrieve next page of results.
  }</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>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a web app.

Args:
  name: string, The name of the web app in the form enterprises/{enterpriseId}/webApps/{packageName}. (required)
  body: object, The request body.
    The object takes the form of:

{ # A web app.
    &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
    &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app.
    &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
    &quot;name&quot;: &quot;A String&quot;, # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
    &quot;icons&quot;: [ # A list of icons for the web app. Must have at least one element.
      { # An icon for a web app. Supported formats are: png, jpg and webp.
        &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). &lt;ul&gt; &lt;li&gt;The image type can be png or jpg. &lt;li&gt;The image should ideally be square. &lt;li&gt;The image should ideally have a size of 512x512. &lt;/ul&gt;
      },
    ],
    &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
  }

  updateMask: string, The field mask indicating the fields to update. If not set, all modifiable fields will be modified.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A web app.
      &quot;versionCode&quot;: &quot;A String&quot;, # The current version of the app.Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.
      &quot;displayMode&quot;: &quot;A String&quot;, # The display mode of the web app.
      &quot;title&quot;: &quot;A String&quot;, # The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).
      &quot;name&quot;: &quot;A String&quot;, # The name of the web app, which is generated by the server during creation in the form enterprises/{enterpriseId}/webApps/{packageName}.
      &quot;icons&quot;: [ # A list of icons for the web app. Must have at least one element.
        { # An icon for a web app. Supported formats are: png, jpg and webp.
          &quot;imageData&quot;: &quot;A String&quot;, # The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 &quot;Base 64 Encoding with URL and Filename Safe Alphabet&quot;). &lt;ul&gt; &lt;li&gt;The image type can be png or jpg. &lt;li&gt;The image should ideally be square. &lt;li&gt;The image should ideally have a size of 512x512. &lt;/ul&gt;
        },
      ],
      &quot;startUrl&quot;: &quot;A String&quot;, # The start URL, i.e. the URL that should load when the user opens the application.
    }</pre>
</div>

</body></html>