<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="apigee_v1.html">Apigee API</a> . <a href="apigee_v1.organizations.html">organizations</a> . <a href="apigee_v1.organizations.environments.html">environments</a> . <a href="apigee_v1.organizations.environments.keystores.html">keystores</a> . <a href="apigee_v1.organizations.environments.keystores.aliases.html">aliases</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="#create">create(parent, alias=None, body=None, format=None, ignoreExpiryValidation=None, ignoreNewlineValidation=None, x__xgafv=None, x_password=None)</a></code></p>
<p class="firstline">Creates an alias from a key/certificate pair. The structure of the request is controlled by the `format` query parameter: - `keycertfile` - Separate PEM-encoded key and certificate files are uploaded. Set `Content-Type: multipart/form-data` and include the `keyFile`, `certFile`, and `password` (if keys are encrypted) fields in the request body. If uploading to a truststore, omit `keyFile`. - `pkcs12` - A PKCS12 file is uploaded. Set `Content-Type: multipart/form-data`, provide the file in the `file` field, and include the `password` field if the file is encrypted in the request body. - `selfsignedcert` - A new private key and certificate are generated. Set `Content-Type: application/json` and include CertificateGenerationSpec in the request body.</p>
<p class="toc_element">
  <code><a href="#csr">csr(name, x__xgafv=None)</a></code></p>
<p class="firstline">Generates a PKCS #10 Certificate Signing Request for the private key in an alias.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an alias.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets an alias.</p>
<p class="toc_element">
  <code><a href="#getCertificate">getCertificate(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the certificate from an alias in PEM-encoded form.</p>
<p class="toc_element">
  <code><a href="#update">update(name, body=None, ignoreExpiryValidation=None, ignoreNewlineValidation=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the certificate in an alias.</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(parent, alias=None, body=None, format=None, ignoreExpiryValidation=None, ignoreNewlineValidation=None, x__xgafv=None, x_password=None)</code>
  <pre>Creates an alias from a key/certificate pair. The structure of the request is controlled by the `format` query parameter: - `keycertfile` - Separate PEM-encoded key and certificate files are uploaded. Set `Content-Type: multipart/form-data` and include the `keyFile`, `certFile`, and `password` (if keys are encrypted) fields in the request body. If uploading to a truststore, omit `keyFile`. - `pkcs12` - A PKCS12 file is uploaded. Set `Content-Type: multipart/form-data`, provide the file in the `file` field, and include the `password` field if the file is encrypted in the request body. - `selfsignedcert` - A new private key and certificate are generated. Set `Content-Type: application/json` and include CertificateGenerationSpec in the request body.

Args:
  parent: string, Required. Name of the keystore. Use the following format in your request: `organizations/{org}/environments/{env}/keystores/{keystore}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Message that represents an arbitrary HTTP body. It should only be used for payload formats that can&#x27;t be represented as JSON, such as raw binary or an HTML page. This message can be used both in streaming and non-streaming API methods in the request as well as the response. It can be used as a top-level request field, which is convenient if one wants to extract parameters from either the URL or HTTP template into the request fields and also want access to the raw HTTP body. Example: message GetResourceRequest { // A unique request id. string request_id = 1; // The raw HTTP body is bound to this field. google.api.HttpBody http_body = 2; } service ResourceService { rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); } Example with streaming methods: service CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); rpc UpdateCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); } Use of this type only changes how the request and response bodies are handled, all other features will continue to work unchanged.
  &quot;contentType&quot;: &quot;A String&quot;, # The HTTP Content-Type header value specifying the content type of the body.
  &quot;data&quot;: &quot;A String&quot;, # The HTTP request/response body as raw binary.
  &quot;extensions&quot;: [ # Application specific response metadata. Must be set in the first response for streaming APIs.
    {
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
  ],
}

  alias: string, Alias for the key/certificate pair. Values must match the regular expression `[\w\s-.]{1,255}`. This must be provided for all formats except `selfsignedcert`; self-signed certs may specify the alias in either this parameter or the JSON body.
  format: string, Required. Format of the data. Valid values include: `selfsignedcert`, `keycertfile`, or `pkcs12`
  ignoreExpiryValidation: boolean, Flag that specifies whether to ignore expiry validation. If set to `true`, no expiry validation will be performed.
  ignoreNewlineValidation: boolean, Flag that specifies whether to ignore newline validation. If set to `true`, no error is thrown when the file contains a certificate chain with no newline between each certificate. Defaults to `false`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  x_password: string, DEPRECATED: For improved security, specify the password in the request body instead of using the query parameter. To specify the password in the request body, set `Content-type: multipart/form-data` part with name `password`. Password for the private key file, if required.

Returns:
  An object of the form:

    { # Reference to a certificate or key/certificate pair.
  &quot;alias&quot;: &quot;A String&quot;, # Resource ID for this alias. Values must match the regular expression `[^/]{1,255}`.
  &quot;certsInfo&quot;: { # Chain of certificates under this alias.
    &quot;certInfo&quot;: [ # Chain of certificates under this name.
      { # X.509 certificate as defined in RFC 5280.
        &quot;basicConstraints&quot;: &quot;A String&quot;, # X.509 basic constraints extension.
        &quot;expiryDate&quot;: &quot;A String&quot;, # X.509 `notAfter` validity period in milliseconds since epoch.
        &quot;isValid&quot;: &quot;A String&quot;, # Flag that specifies whether the certificate is valid. Flag is set to `Yes` if the certificate is valid, `No` if expired, or `Not yet` if not yet valid.
        &quot;issuer&quot;: &quot;A String&quot;, # X.509 issuer.
        &quot;publicKey&quot;: &quot;A String&quot;, # Public key component of the X.509 subject public key info.
        &quot;serialNumber&quot;: &quot;A String&quot;, # X.509 serial number.
        &quot;sigAlgName&quot;: &quot;A String&quot;, # X.509 signatureAlgorithm.
        &quot;subject&quot;: &quot;A String&quot;, # X.509 subject.
        &quot;subjectAlternativeNames&quot;: [ # X.509 subject alternative names (SANs) extension.
          &quot;A String&quot;,
        ],
        &quot;validFrom&quot;: &quot;A String&quot;, # X.509 `notBefore` validity period in milliseconds since epoch.
        &quot;version&quot;: 42, # X.509 version.
      },
    ],
  },
  &quot;type&quot;: &quot;A String&quot;, # Type of alias.
}</pre>
</div>

<div class="method">
    <code class="details" id="csr">csr(name, x__xgafv=None)</code>
  <pre>Generates a PKCS #10 Certificate Signing Request for the private key in an alias.

Args:
  name: string, Required. Name of the alias. Use the following format in your request: `organizations/{org}/environments/{env}/keystores/{keystore}/aliases/{alias}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Message that represents an arbitrary HTTP body. It should only be used for payload formats that can&#x27;t be represented as JSON, such as raw binary or an HTML page. This message can be used both in streaming and non-streaming API methods in the request as well as the response. It can be used as a top-level request field, which is convenient if one wants to extract parameters from either the URL or HTTP template into the request fields and also want access to the raw HTTP body. Example: message GetResourceRequest { // A unique request id. string request_id = 1; // The raw HTTP body is bound to this field. google.api.HttpBody http_body = 2; } service ResourceService { rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); } Example with streaming methods: service CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); rpc UpdateCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); } Use of this type only changes how the request and response bodies are handled, all other features will continue to work unchanged.
  &quot;contentType&quot;: &quot;A String&quot;, # The HTTP Content-Type header value specifying the content type of the body.
  &quot;data&quot;: &quot;A String&quot;, # The HTTP request/response body as raw binary.
  &quot;extensions&quot;: [ # Application specific response metadata. Must be set in the first response for streaming APIs.
    {
      &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="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes an alias.

Args:
  name: string, Required. Name of the alias. Use the following format in your request: `organizations/{org}/environments/{env}/keystores/{keystore}/aliases/{alias}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Reference to a certificate or key/certificate pair.
  &quot;alias&quot;: &quot;A String&quot;, # Resource ID for this alias. Values must match the regular expression `[^/]{1,255}`.
  &quot;certsInfo&quot;: { # Chain of certificates under this alias.
    &quot;certInfo&quot;: [ # Chain of certificates under this name.
      { # X.509 certificate as defined in RFC 5280.
        &quot;basicConstraints&quot;: &quot;A String&quot;, # X.509 basic constraints extension.
        &quot;expiryDate&quot;: &quot;A String&quot;, # X.509 `notAfter` validity period in milliseconds since epoch.
        &quot;isValid&quot;: &quot;A String&quot;, # Flag that specifies whether the certificate is valid. Flag is set to `Yes` if the certificate is valid, `No` if expired, or `Not yet` if not yet valid.
        &quot;issuer&quot;: &quot;A String&quot;, # X.509 issuer.
        &quot;publicKey&quot;: &quot;A String&quot;, # Public key component of the X.509 subject public key info.
        &quot;serialNumber&quot;: &quot;A String&quot;, # X.509 serial number.
        &quot;sigAlgName&quot;: &quot;A String&quot;, # X.509 signatureAlgorithm.
        &quot;subject&quot;: &quot;A String&quot;, # X.509 subject.
        &quot;subjectAlternativeNames&quot;: [ # X.509 subject alternative names (SANs) extension.
          &quot;A String&quot;,
        ],
        &quot;validFrom&quot;: &quot;A String&quot;, # X.509 `notBefore` validity period in milliseconds since epoch.
        &quot;version&quot;: 42, # X.509 version.
      },
    ],
  },
  &quot;type&quot;: &quot;A String&quot;, # Type of alias.
}</pre>
</div>

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

Args:
  name: string, Required. Name of the alias. Use the following format in your request: `organizations/{org}/environments/{env}/keystores/{keystore}/aliases/{alias}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Reference to a certificate or key/certificate pair.
  &quot;alias&quot;: &quot;A String&quot;, # Resource ID for this alias. Values must match the regular expression `[^/]{1,255}`.
  &quot;certsInfo&quot;: { # Chain of certificates under this alias.
    &quot;certInfo&quot;: [ # Chain of certificates under this name.
      { # X.509 certificate as defined in RFC 5280.
        &quot;basicConstraints&quot;: &quot;A String&quot;, # X.509 basic constraints extension.
        &quot;expiryDate&quot;: &quot;A String&quot;, # X.509 `notAfter` validity period in milliseconds since epoch.
        &quot;isValid&quot;: &quot;A String&quot;, # Flag that specifies whether the certificate is valid. Flag is set to `Yes` if the certificate is valid, `No` if expired, or `Not yet` if not yet valid.
        &quot;issuer&quot;: &quot;A String&quot;, # X.509 issuer.
        &quot;publicKey&quot;: &quot;A String&quot;, # Public key component of the X.509 subject public key info.
        &quot;serialNumber&quot;: &quot;A String&quot;, # X.509 serial number.
        &quot;sigAlgName&quot;: &quot;A String&quot;, # X.509 signatureAlgorithm.
        &quot;subject&quot;: &quot;A String&quot;, # X.509 subject.
        &quot;subjectAlternativeNames&quot;: [ # X.509 subject alternative names (SANs) extension.
          &quot;A String&quot;,
        ],
        &quot;validFrom&quot;: &quot;A String&quot;, # X.509 `notBefore` validity period in milliseconds since epoch.
        &quot;version&quot;: 42, # X.509 version.
      },
    ],
  },
  &quot;type&quot;: &quot;A String&quot;, # Type of alias.
}</pre>
</div>

<div class="method">
    <code class="details" id="getCertificate">getCertificate(name, x__xgafv=None)</code>
  <pre>Gets the certificate from an alias in PEM-encoded form.

Args:
  name: string, Required. Name of the alias. Use the following format in your request: `organizations/{org}/environments/{env}/keystores/{keystore}/aliases/{alias}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Message that represents an arbitrary HTTP body. It should only be used for payload formats that can&#x27;t be represented as JSON, such as raw binary or an HTML page. This message can be used both in streaming and non-streaming API methods in the request as well as the response. It can be used as a top-level request field, which is convenient if one wants to extract parameters from either the URL or HTTP template into the request fields and also want access to the raw HTTP body. Example: message GetResourceRequest { // A unique request id. string request_id = 1; // The raw HTTP body is bound to this field. google.api.HttpBody http_body = 2; } service ResourceService { rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); } Example with streaming methods: service CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); rpc UpdateCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); } Use of this type only changes how the request and response bodies are handled, all other features will continue to work unchanged.
  &quot;contentType&quot;: &quot;A String&quot;, # The HTTP Content-Type header value specifying the content type of the body.
  &quot;data&quot;: &quot;A String&quot;, # The HTTP request/response body as raw binary.
  &quot;extensions&quot;: [ # Application specific response metadata. Must be set in the first response for streaming APIs.
    {
      &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="update">update(name, body=None, ignoreExpiryValidation=None, ignoreNewlineValidation=None, x__xgafv=None)</code>
  <pre>Updates the certificate in an alias.

Args:
  name: string, Required. Name of the alias. Use the following format in your request: `organizations/{org}/environments/{env}/keystores/{keystore}/aliases/{alias}` (required)
  body: object, The request body.
    The object takes the form of:

{ # Message that represents an arbitrary HTTP body. It should only be used for payload formats that can&#x27;t be represented as JSON, such as raw binary or an HTML page. This message can be used both in streaming and non-streaming API methods in the request as well as the response. It can be used as a top-level request field, which is convenient if one wants to extract parameters from either the URL or HTTP template into the request fields and also want access to the raw HTTP body. Example: message GetResourceRequest { // A unique request id. string request_id = 1; // The raw HTTP body is bound to this field. google.api.HttpBody http_body = 2; } service ResourceService { rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); } Example with streaming methods: service CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); rpc UpdateCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); } Use of this type only changes how the request and response bodies are handled, all other features will continue to work unchanged.
  &quot;contentType&quot;: &quot;A String&quot;, # The HTTP Content-Type header value specifying the content type of the body.
  &quot;data&quot;: &quot;A String&quot;, # The HTTP request/response body as raw binary.
  &quot;extensions&quot;: [ # Application specific response metadata. Must be set in the first response for streaming APIs.
    {
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
  ],
}

  ignoreExpiryValidation: boolean, Required. Flag that specifies whether to ignore expiry validation. If set to `true`, no expiry validation will be performed.
  ignoreNewlineValidation: boolean, Flag that specifies whether to ignore newline validation. If set to `true`, no error is thrown when the file contains a certificate chain with no newline between each certificate. Defaults to `false`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Reference to a certificate or key/certificate pair.
  &quot;alias&quot;: &quot;A String&quot;, # Resource ID for this alias. Values must match the regular expression `[^/]{1,255}`.
  &quot;certsInfo&quot;: { # Chain of certificates under this alias.
    &quot;certInfo&quot;: [ # Chain of certificates under this name.
      { # X.509 certificate as defined in RFC 5280.
        &quot;basicConstraints&quot;: &quot;A String&quot;, # X.509 basic constraints extension.
        &quot;expiryDate&quot;: &quot;A String&quot;, # X.509 `notAfter` validity period in milliseconds since epoch.
        &quot;isValid&quot;: &quot;A String&quot;, # Flag that specifies whether the certificate is valid. Flag is set to `Yes` if the certificate is valid, `No` if expired, or `Not yet` if not yet valid.
        &quot;issuer&quot;: &quot;A String&quot;, # X.509 issuer.
        &quot;publicKey&quot;: &quot;A String&quot;, # Public key component of the X.509 subject public key info.
        &quot;serialNumber&quot;: &quot;A String&quot;, # X.509 serial number.
        &quot;sigAlgName&quot;: &quot;A String&quot;, # X.509 signatureAlgorithm.
        &quot;subject&quot;: &quot;A String&quot;, # X.509 subject.
        &quot;subjectAlternativeNames&quot;: [ # X.509 subject alternative names (SANs) extension.
          &quot;A String&quot;,
        ],
        &quot;validFrom&quot;: &quot;A String&quot;, # X.509 `notBefore` validity period in milliseconds since epoch.
        &quot;version&quot;: 42, # X.509 version.
      },
    ],
  },
  &quot;type&quot;: &quot;A String&quot;, # Type of alias.
}</pre>
</div>

</body></html>