<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.beaconinfo.html">beaconinfo</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#getforobserved">getforobserved(body, x__xgafv=None)</a></code></p>
<p class="firstline">Given one or more beacon observations, returns any beacon information and attachments accessible to your application. Authorize by using the [API key](https://developers.google.com/beacons/proximity/how-tos/authorizing#APIKey) for the application.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="getforobserved">getforobserved(body, x__xgafv=None)</code>
  <pre>Given one or more beacon observations, returns any beacon information and attachments accessible to your application. Authorize by using the [API key](https://developers.google.com/beacons/proximity/how-tos/authorizing#APIKey) for the application.

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

{ # Request for beacon and attachment information about beacons that a mobile client has encountered "in the wild".
    "observations": [ # The beacons that the client has encountered. At least one must be given.
      { # Represents one beacon observed once.
        "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The ID advertised by the beacon the client has encountered. Clients may submit an Eddystone-EID `advertised_id`. If the client is not authorized to resolve the given Eddystone-EID, no data will be returned for that beacon. Required.
          "type": "A String", # Specifies the identifier type. Required.
          "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
        },
        "telemetry": "A String", # The array of telemetry bytes received from the beacon. The server is responsible for parsing it. This field may frequently be empty, as with a beacon that transmits telemetry only occasionally.
        "timestampMs": "A String", # Time when the beacon was observed.
      },
    ],
    "namespacedTypes": [ # Specifies what kind of attachments to include in the response. When given, the response will include only attachments of the given types. When empty, no attachments will be returned. Must be in the format namespace/type. Accepts `*` to specify all types in all namespaces. Optional.
      "A String",
    ],
  }

  x__xgafv: string, V1 error format.

Returns:
  An object of the form:

    { # Information about the requested beacons, optionally including attachment data.
    "beacons": [ # Public information about beacons. May be empty if the request matched no beacons.
      { # A subset of beacon information served via the `beaconinfo.getforobserved` method, which you call when users of your app encounter your beacons.
        "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The ID advertised by the beacon.
          "type": "A String", # Specifies the identifier type. Required.
          "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
        },
        "attachments": [ # Attachments matching the type(s) requested. May be empty if no attachment types were requested, or if none matched.
          { # A subset of attachment information served via the `beaconinfo.getforobserved` method, used when your users encounter your beacons.
            "data": "A String", # An opaque data container for client-provided data.
            "namespacedType": "A String", # Specifies what kind of attachment this is. Tells a client how to interpret the `data` field. Format is namespace/type, for example scrupulous-wombat-12345/welcome-message
          },
        ],
        "beaconName": "A String", # The name under which the beacon is registered.
      },
    ],
  }</pre>
</div>

</body></html>