<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="appengine_v1beta5.html">App Engine Admin API</a> . <a href="appengine_v1beta5.apps.html">apps</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="appengine_v1beta5.apps.locations.html">locations()</a></code>
</p>
<p class="firstline">Returns the locations Resource.</p>

<p class="toc_element">
  <code><a href="appengine_v1beta5.apps.operations.html">operations()</a></code>
</p>
<p class="firstline">Returns the operations Resource.</p>

<p class="toc_element">
  <code><a href="appengine_v1beta5.apps.services.html">services()</a></code>
</p>
<p class="firstline">Returns the services Resource.</p>

<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="#create">create(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates an App Engine application for a Google Cloud Platform project. Required fields:</p>
<p class="toc_element">
  <code><a href="#get">get(appsId, ensureResourcesExist=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets information about an application.</p>
<p class="toc_element">
  <code><a href="#patch">patch(appsId, body=None, mask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified Application resource. You can update the following fields:</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="create">create(body=None, x__xgafv=None)</code>
  <pre>Creates an App Engine application for a Google Cloud Platform project. Required fields:
id - The ID of the target Cloud Platform project.
location - The region (https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.For more information about App Engine applications, see Managing Projects, Applications, and Billing (https://cloud.google.com/appengine/docs/python/console/).

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

{ # An Application resource contains the top-level configuration of an App Engine application.
  &quot;authDomain&quot;: &quot;A String&quot;, # Google Apps authentication domain that controls which users can access this application.Defaults to open access for any Google Account.
  &quot;codeBucket&quot;: &quot;A String&quot;, # A Google Cloud Storage bucket that can be used for storing files associated with this application. This bucket is associated with the application and can be used by the gcloud deployment commands.@OutputOnly
  &quot;defaultBucket&quot;: &quot;A String&quot;, # A Google Cloud Storage bucket that can be used by the application to store content.@OutputOnly
  &quot;defaultCookieExpiration&quot;: &quot;A String&quot;, # Cookie expiration policy for this application.
  &quot;defaultHostname&quot;: &quot;A String&quot;, # Hostname used to reach the application, as resolved by App Engine.@OutputOnly
  &quot;dispatchRules&quot;: [ # HTTP path dispatch rules for requests to the application that do not explicitly target a service or version. Rules are order-dependent.@OutputOnly
    { # Rules to match an HTTP request and dispatch that request to a service.
      &quot;domain&quot;: &quot;A String&quot;, # Domain name to match against. The wildcard &quot;*&quot; is supported if specified before a period: &quot;*.&quot;.Defaults to matching all domains: &quot;*&quot;.
      &quot;path&quot;: &quot;A String&quot;, # Pathname within the host. Must start with a &quot;/&quot;. A single &quot;*&quot; can be included at the end of the path. The sum of the lengths of the domain and path may not exceed 100 characters.
      &quot;service&quot;: &quot;A String&quot;, # Resource id of a service in this application that should serve the matched request. The service must already exist. Example: default.
    },
  ],
  &quot;iap&quot;: { # Identity-Aware Proxy
    &quot;enabled&quot;: True or False, # Whether the serving infrastructure will authenticate and authorize all incoming requests.If true, the oauth2_client_id and oauth2_client_secret fields must be non-empty.
    &quot;oauth2ClientId&quot;: &quot;A String&quot;, # OAuth2 client ID to use for the authentication flow.
    &quot;oauth2ClientSecret&quot;: &quot;A String&quot;, # For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2_client_secret_sha256 field.@InputOnly
    &quot;oauth2ClientSecretSha256&quot;: &quot;A String&quot;, # Hex-encoded SHA-256 hash of the client secret.@OutputOnly
  },
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the Application resource. This identifier is equivalent to the project ID of the Google Cloud Platform project where you want to deploy your application. Example: myapp.
  &quot;location&quot;: &quot;A String&quot;, # Location from which this application will be run. Application instances will run out of data centers in the chosen location, which is also where all of the application&#x27;s end user content is stored.Defaults to us-central.Options are:us-central - Central USeurope-west - Western Europeus-east1 - Eastern US
  &quot;name&quot;: &quot;A String&quot;, # Full path to the Application resource in the API. Example: apps/myapp.@OutputOnly
}

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is false, it means the operation is still in progress. If true, the operation is completed, and either error or response is available.
  &quot;error&quot;: { # The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC (https://github.com/grpc). The error model is designed to be: # The error result of the operation in case of failure or cancellation.
      # Simple to use and understand for most users
      # Flexible enough to meet unexpected needsOverviewThe Status message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers understand and resolve the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package google.rpc that can be used for common error conditions.Language mappingThe Status message is the logical representation of the error model, but it is not necessarily the actual wire format. When the Status message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.Other usesThe error model and the Status message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.Example uses of this error model include:
      # Partial errors. If a service needs to return partial errors to the client, it may embed the Status in the normal response to indicate the partial errors.
      # Workflow errors. A typical workflow has multiple steps. Each step may have a Status message for error reporting.
      # Batch operations. If a client uses batch request and batch response, the Status message should be used directly inside batch response, one for each error sub-response.
      # Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the Status message.
      # Logging. If some API errors are stored in logs, the message Status could be used directly after any stripping needed for security/privacy reasons.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the name should have the format of operations/some/unique/name.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as Delete, the response is google.protobuf.Empty. If the original method is standard Get/Create/Update, the response should be the resource. For other methods, the response should have the type XxxResponse, where Xxx is the original method name. For example, if the original method name is TakeSnapshot(), the inferred response type is TakeSnapshotResponse.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(appsId, ensureResourcesExist=None, x__xgafv=None)</code>
  <pre>Gets information about an application.

Args:
  appsId: string, Part of `name`. Name of the application to get. Example: apps/myapp. (required)
  ensureResourcesExist: boolean, Certain resources associated with an application are created on-demand. Controls whether these resources should be created when performing the GET operation. If specified and any resources could not be created, the request will fail with an error code. Additionally, this parameter can cause the request to take longer to complete. Note: This parameter will be deprecated in a future version of the API.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Application resource contains the top-level configuration of an App Engine application.
  &quot;authDomain&quot;: &quot;A String&quot;, # Google Apps authentication domain that controls which users can access this application.Defaults to open access for any Google Account.
  &quot;codeBucket&quot;: &quot;A String&quot;, # A Google Cloud Storage bucket that can be used for storing files associated with this application. This bucket is associated with the application and can be used by the gcloud deployment commands.@OutputOnly
  &quot;defaultBucket&quot;: &quot;A String&quot;, # A Google Cloud Storage bucket that can be used by the application to store content.@OutputOnly
  &quot;defaultCookieExpiration&quot;: &quot;A String&quot;, # Cookie expiration policy for this application.
  &quot;defaultHostname&quot;: &quot;A String&quot;, # Hostname used to reach the application, as resolved by App Engine.@OutputOnly
  &quot;dispatchRules&quot;: [ # HTTP path dispatch rules for requests to the application that do not explicitly target a service or version. Rules are order-dependent.@OutputOnly
    { # Rules to match an HTTP request and dispatch that request to a service.
      &quot;domain&quot;: &quot;A String&quot;, # Domain name to match against. The wildcard &quot;*&quot; is supported if specified before a period: &quot;*.&quot;.Defaults to matching all domains: &quot;*&quot;.
      &quot;path&quot;: &quot;A String&quot;, # Pathname within the host. Must start with a &quot;/&quot;. A single &quot;*&quot; can be included at the end of the path. The sum of the lengths of the domain and path may not exceed 100 characters.
      &quot;service&quot;: &quot;A String&quot;, # Resource id of a service in this application that should serve the matched request. The service must already exist. Example: default.
    },
  ],
  &quot;iap&quot;: { # Identity-Aware Proxy
    &quot;enabled&quot;: True or False, # Whether the serving infrastructure will authenticate and authorize all incoming requests.If true, the oauth2_client_id and oauth2_client_secret fields must be non-empty.
    &quot;oauth2ClientId&quot;: &quot;A String&quot;, # OAuth2 client ID to use for the authentication flow.
    &quot;oauth2ClientSecret&quot;: &quot;A String&quot;, # For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2_client_secret_sha256 field.@InputOnly
    &quot;oauth2ClientSecretSha256&quot;: &quot;A String&quot;, # Hex-encoded SHA-256 hash of the client secret.@OutputOnly
  },
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the Application resource. This identifier is equivalent to the project ID of the Google Cloud Platform project where you want to deploy your application. Example: myapp.
  &quot;location&quot;: &quot;A String&quot;, # Location from which this application will be run. Application instances will run out of data centers in the chosen location, which is also where all of the application&#x27;s end user content is stored.Defaults to us-central.Options are:us-central - Central USeurope-west - Western Europeus-east1 - Eastern US
  &quot;name&quot;: &quot;A String&quot;, # Full path to the Application resource in the API. Example: apps/myapp.@OutputOnly
}</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(appsId, body=None, mask=None, x__xgafv=None)</code>
  <pre>Updates the specified Application resource. You can update the following fields:
auth_domain (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta5/apps#Application.FIELDS.auth_domain)
default_cookie_expiration (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta5/apps#Application.FIELDS.default_cookie_expiration)

Args:
  appsId: string, Part of `name`. Name of the Application resource to update. Example: apps/myapp. (required)
  body: object, The request body.
    The object takes the form of:

{ # An Application resource contains the top-level configuration of an App Engine application.
  &quot;authDomain&quot;: &quot;A String&quot;, # Google Apps authentication domain that controls which users can access this application.Defaults to open access for any Google Account.
  &quot;codeBucket&quot;: &quot;A String&quot;, # A Google Cloud Storage bucket that can be used for storing files associated with this application. This bucket is associated with the application and can be used by the gcloud deployment commands.@OutputOnly
  &quot;defaultBucket&quot;: &quot;A String&quot;, # A Google Cloud Storage bucket that can be used by the application to store content.@OutputOnly
  &quot;defaultCookieExpiration&quot;: &quot;A String&quot;, # Cookie expiration policy for this application.
  &quot;defaultHostname&quot;: &quot;A String&quot;, # Hostname used to reach the application, as resolved by App Engine.@OutputOnly
  &quot;dispatchRules&quot;: [ # HTTP path dispatch rules for requests to the application that do not explicitly target a service or version. Rules are order-dependent.@OutputOnly
    { # Rules to match an HTTP request and dispatch that request to a service.
      &quot;domain&quot;: &quot;A String&quot;, # Domain name to match against. The wildcard &quot;*&quot; is supported if specified before a period: &quot;*.&quot;.Defaults to matching all domains: &quot;*&quot;.
      &quot;path&quot;: &quot;A String&quot;, # Pathname within the host. Must start with a &quot;/&quot;. A single &quot;*&quot; can be included at the end of the path. The sum of the lengths of the domain and path may not exceed 100 characters.
      &quot;service&quot;: &quot;A String&quot;, # Resource id of a service in this application that should serve the matched request. The service must already exist. Example: default.
    },
  ],
  &quot;iap&quot;: { # Identity-Aware Proxy
    &quot;enabled&quot;: True or False, # Whether the serving infrastructure will authenticate and authorize all incoming requests.If true, the oauth2_client_id and oauth2_client_secret fields must be non-empty.
    &quot;oauth2ClientId&quot;: &quot;A String&quot;, # OAuth2 client ID to use for the authentication flow.
    &quot;oauth2ClientSecret&quot;: &quot;A String&quot;, # For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2_client_secret_sha256 field.@InputOnly
    &quot;oauth2ClientSecretSha256&quot;: &quot;A String&quot;, # Hex-encoded SHA-256 hash of the client secret.@OutputOnly
  },
  &quot;id&quot;: &quot;A String&quot;, # Identifier of the Application resource. This identifier is equivalent to the project ID of the Google Cloud Platform project where you want to deploy your application. Example: myapp.
  &quot;location&quot;: &quot;A String&quot;, # Location from which this application will be run. Application instances will run out of data centers in the chosen location, which is also where all of the application&#x27;s end user content is stored.Defaults to us-central.Options are:us-central - Central USeurope-west - Western Europeus-east1 - Eastern US
  &quot;name&quot;: &quot;A String&quot;, # Full path to the Application resource in the API. Example: apps/myapp.@OutputOnly
}

  mask: string, Standard field mask for the set of fields to be updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is false, it means the operation is still in progress. If true, the operation is completed, and either error or response is available.
  &quot;error&quot;: { # The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC (https://github.com/grpc). The error model is designed to be: # The error result of the operation in case of failure or cancellation.
      # Simple to use and understand for most users
      # Flexible enough to meet unexpected needsOverviewThe Status message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers understand and resolve the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package google.rpc that can be used for common error conditions.Language mappingThe Status message is the logical representation of the error model, but it is not necessarily the actual wire format. When the Status message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.Other usesThe error model and the Status message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.Example uses of this error model include:
      # Partial errors. If a service needs to return partial errors to the client, it may embed the Status in the normal response to indicate the partial errors.
      # Workflow errors. A typical workflow has multiple steps. Each step may have a Status message for error reporting.
      # Batch operations. If a client uses batch request and batch response, the Status message should be used directly inside batch response, one for each error sub-response.
      # Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the Status message.
      # Logging. If some API errors are stored in logs, the message Status could be used directly after any stripping needed for security/privacy reasons.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the name should have the format of operations/some/unique/name.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as Delete, the response is google.protobuf.Empty. If the original method is standard Get/Create/Update, the response should be the resource. For other methods, the response should have the type XxxResponse, where Xxx is the original method name. For example, if the original method name is TakeSnapshot(), the inferred response type is TakeSnapshotResponse.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

</body></html>