<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="proximitybeacon_v1beta1.html">Google Proximity Beacon API</a> . <a href="proximitybeacon_v1beta1.beacons.html">beacons</a> . <a href="proximitybeacon_v1beta1.beacons.attachments.html">attachments</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#batchDelete">batchDelete(beaconName, namespacedType=None, projectId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes multiple attachments on a given beacon. This operation is</p>
<p class="toc_element">
  <code><a href="#create">create(beaconName, body, projectId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Associates the given data with the specified beacon. Attachment data must</p>
<p class="toc_element">
  <code><a href="#delete">delete(attachmentName, projectId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified attachment for the given beacon. Each attachment has</p>
<p class="toc_element">
  <code><a href="#list">list(beaconName, namespacedType=None, projectId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the attachments for the specified beacon that match the specified</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchDelete">batchDelete(beaconName, namespacedType=None, projectId=None, x__xgafv=None)</code>
  <pre>Deletes multiple attachments on a given beacon. This operation is
permanent and cannot be undone.

You can optionally specify `namespacedType` to choose which attachments
should be deleted. If you do not specify `namespacedType`,  all your
attachments on the given beacon will be deleted. You also may explicitly
specify `*/*` to delete all.

Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)
from a signed-in user with **Is owner** or **Can edit** permissions in the
Google Developers Console project.

Args:
  beaconName: string, The beacon whose attachments should be deleted. A beacon name has the
format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast
by the beacon and N is a code for the beacon's type. Possible values are
`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
for AltBeacon. For Eddystone-EID beacons, you may use either the
current EID or the beacon's "stable" UID.
Required. (required)
  namespacedType: string, Specifies the namespace and type of attachments to delete in
`namespace/type` format. Accepts `*/*` to specify
"all types in all namespaces".
Optional.
  projectId: string, The project id to delete beacon attachments under. This field can be
used when "*" is specified to mean all attachment namespaces. Projects
may have multiple attachments with multiple namespaces. If "*" is
specified and the projectId string is empty, then the project
making the request is used.
Optional.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for a request to delete attachments.
    "numDeleted": 42, # The number of attachments that were deleted.
  }</pre>
</div>

<div class="method">
    <code class="details" id="create">create(beaconName, body, projectId=None, x__xgafv=None)</code>
  <pre>Associates the given data with the specified beacon. Attachment data must
contain two parts:
<ul>
<li>A namespaced type.</li>
<li>The actual attachment data itself.</li>
</ul>
The namespaced type consists of two parts, the namespace and the type.
The namespace must be one of the values returned by the `namespaces`
endpoint, while the type can be a string of any characters except for the
forward slash (`/`) up to 100 characters in length.

Attachment data can be up to 1024 bytes long.

Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)
from a signed-in user with **Is owner** or **Can edit** permissions in the
Google Developers Console project.

Args:
  beaconName: string, Beacon on which the attachment should be created. A beacon name has the
format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast
by the beacon and N is a code for the beacon's type. Possible values are
`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
for AltBeacon. For Eddystone-EID beacons, you may use either the
current EID or the beacon's "stable" UID.
Required. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Project-specific data associated with a beacon.
    "data": "A String", # An opaque data container for client-provided data. Must be
        # [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP
        # requests, and will be so encoded (with padding) in responses.
        # Required.
    "creationTimeMs": "A String", # The UTC time when this attachment was created, in milliseconds since the
        # UNIX epoch.
    "attachmentName": "A String", # Resource name of this attachment. Attachment names have the format:
        # <code>beacons/<var>beacon_id</var>/attachments/<var>attachment_id</var></code>.
        # Leave this empty on creation.
    "namespacedType": "A String", # Specifies what kind of attachment this is. Tells a client how to
        # interpret the `data` field. Format is <var>namespace/type</var>. Namespace
        # provides type separation between clients. Type describes the type of
        # `data`, for use by the client when parsing the `data` field.
        # Required.
  }

  projectId: string, The project id of the project the attachment will belong to. If
the project id is not specified then the project making the request
is used.
Optional.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Project-specific data associated with a beacon.
      "data": "A String", # An opaque data container for client-provided data. Must be
          # [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP
          # requests, and will be so encoded (with padding) in responses.
          # Required.
      "creationTimeMs": "A String", # The UTC time when this attachment was created, in milliseconds since the
          # UNIX epoch.
      "attachmentName": "A String", # Resource name of this attachment. Attachment names have the format:
          # <code>beacons/<var>beacon_id</var>/attachments/<var>attachment_id</var></code>.
          # Leave this empty on creation.
      "namespacedType": "A String", # Specifies what kind of attachment this is. Tells a client how to
          # interpret the `data` field. Format is <var>namespace/type</var>. Namespace
          # provides type separation between clients. Type describes the type of
          # `data`, for use by the client when parsing the `data` field.
          # Required.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(attachmentName, projectId=None, x__xgafv=None)</code>
  <pre>Deletes the specified attachment for the given beacon. Each attachment has
a unique attachment name (`attachmentName`) which is returned when you
fetch the attachment data via this API. You specify this with the delete
request to control which attachment is removed. This operation cannot be
undone.

Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)
from a signed-in user with **Is owner** or **Can edit** permissions in the
Google Developers Console project.

Args:
  attachmentName: string, The attachment name (`attachmentName`) of
the attachment to remove. For example:
`beacons/3!893737abc9/attachments/c5e937-af0-494-959-ec49d12738`. For
Eddystone-EID beacons, the beacon ID portion (`3!893737abc9`) may be the
beacon's current EID, or its "stable" Eddystone-UID.
Required. (required)
  projectId: string, The project id of the attachment to delete. If not provided, the project
that is making the request is used.
Optional.
  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="list">list(beaconName, namespacedType=None, projectId=None, x__xgafv=None)</code>
  <pre>Returns the attachments for the specified beacon that match the specified
namespaced-type pattern.

To control which namespaced types are returned, you add the
`namespacedType` query parameter to the request. You must either use
`*/*`, to return all attachments, or the namespace must be one of
the ones returned from the  `namespaces` endpoint.

Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)
from a signed-in user with **viewer**, **Is owner** or **Can edit**
permissions in the Google Developers Console project.

Args:
  beaconName: string, Beacon whose attachments should be fetched. A beacon name has the
format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast
by the beacon and N is a code for the beacon's type. Possible values are
`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`
for AltBeacon. For Eddystone-EID beacons, you may use either the
current EID or the beacon's "stable" UID.
Required. (required)
  namespacedType: string, Specifies the namespace and type of attachment to include in response in
<var>namespace/type</var> format. Accepts `*/*` to specify
"all types in all namespaces".
  projectId: string, The project id to list beacon attachments under. This field can be
used when "*" is specified to mean all attachment namespaces. Projects
may have multiple attachments with multiple namespaces. If "*" is
specified and the projectId string is empty, then the project
making the request is used.
Optional.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response to `ListBeaconAttachments` that contains the requested attachments.
    "attachments": [ # The attachments that corresponded to the request params.
      { # Project-specific data associated with a beacon.
          "data": "A String", # An opaque data container for client-provided data. Must be
              # [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP
              # requests, and will be so encoded (with padding) in responses.
              # Required.
          "creationTimeMs": "A String", # The UTC time when this attachment was created, in milliseconds since the
              # UNIX epoch.
          "attachmentName": "A String", # Resource name of this attachment. Attachment names have the format:
              # <code>beacons/<var>beacon_id</var>/attachments/<var>attachment_id</var></code>.
              # Leave this empty on creation.
          "namespacedType": "A String", # Specifies what kind of attachment this is. Tells a client how to
              # interpret the `data` field. Format is <var>namespace/type</var>. Namespace
              # provides type separation between clients. Type describes the type of
              # `data`, for use by the client when parsing the `data` field.
              # Required.
        },
    ],
  }</pre>
</div>

</body></html>