<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</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.
            "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>