<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">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</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/get-started#request_a_browser_api_key)
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.
            #
            # If the submitted `advertised_id` type is Eddystone-EID, then the client
            # must be authorized to resolve the given beacon. Otherwise 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
        # <var>namespace/type</var>. Accepts `*` to specify all types in
        # all namespaces owned by the client.
        # Optional.
      "A String",
    ],
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 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.
          { # A subset of attachment information served via the
              # `beaconinfo.getforobserved` method, used when your users encounter your
              # beacons.
            "maxDistanceMeters": 3.14, # The distance away from the beacon at which this attachment should be
                # delivered to a mobile app.
                #
                # Setting this to a value greater than zero indicates that the app should
                # behave as if the beacon is "seen" when the mobile device is less than this
                # distance away from the beacon.
                #
                # Different attachments on the same beacon can have different max distances.
                #
                # Note that even though this value is expressed with fractional meter
                # precision, real-world behavior is likley to be much less precise than one
                # meter, due to the nature of current Bluetooth radio technology.
                #
                # Optional. When not set or zero, the attachment should be delivered at the
                # beacon's outer limit of detection.
            "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 <var>namespace/type</var>, for
                # example <code>scrupulous-wombat-12345/welcome-message</code>
          },
        ],
        "beaconName": "A String", # The name under which the beacon is registered.
      },
    ],
  }</pre>
</div>

</body></html>