Search client environments
curl --request POST \
--url https://api.cloud.corbado.io/v1/observe/clientEnvSearch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userIDs": [
"<string>"
],
"limit": 100
}
'import requests
url = "https://api.cloud.corbado.io/v1/observe/clientEnvSearch"
payload = {
"userIDs": ["<string>"],
"limit": 100
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({userIDs: ['<string>'], limit: 100})
};
fetch('https://api.cloud.corbado.io/v1/observe/clientEnvSearch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cloud.corbado.io/v1/observe/clientEnvSearch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'userIDs' => [
'<string>'
],
'limit' => 100
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cloud.corbado.io/v1/observe/clientEnvSearch"
payload := strings.NewReader("{\n \"userIDs\": [\n \"<string>\"\n ],\n \"limit\": 100\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cloud.corbado.io/v1/observe/clientEnvSearch")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userIDs\": [\n \"<string>\"\n ],\n \"limit\": 100\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloud.corbado.io/v1/observe/clientEnvSearch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userIDs\": [\n \"<string>\"\n ],\n \"limit\": 100\n}"
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"handle": "<string>",
"osName": "Windows",
"clientEnvType": "web",
"createdMs": 123,
"dataWeb": [
{
"id": "<string>",
"createdMs": 123,
"osVersion": "<string>",
"browserName": "<string>",
"browserVersion": "<string>",
"privateMode": true,
"webdriver": true,
"bluetoothAvailable": true,
"conditionalMediationAvailable": true,
"userVerifyingPlatformAuthenticatorAvailable": true,
"conditionalGet": true,
"conditionalCreate": true,
"hybridTransport": true,
"passkeyPlatformAuthenticator": true,
"relatedOrigins": true,
"signalAllAcceptedCredentials": true,
"signalCurrentUserDetails": true,
"signalUnknownCredential": true,
"userVerifyingPlatformAuthenticator": true,
"extensionAppid": true,
"extensionAppidExclude": true,
"extensionCredBlob": true,
"extensionCredProps": true,
"extensionCredentialProtectionPolicy": true,
"extensionEnforceCredentialProtectionPolicy": true,
"extensionGetCredBlob": true,
"extensionHmacCreateSecret": true,
"extensionLargeBlob": true,
"extensionMinPinLength": true,
"extensionPayment": true,
"extensionPrf": true,
"maxTouchPoints": 123
}
],
"dataApp": [
{
"id": "<string>",
"createdMs": 123,
"osVersion": "<string>",
"model": "<string>",
"brand": "<string>",
"appName": "<string>",
"appVersion": "<string>",
"deviceOwnerAuth": "none",
"isBluetoothAvailable": true,
"androidGooglePlayServicesVersion": "<string>",
"locale": "<string>",
"screen": {
"widthPoints": 123,
"heightPoints": 123,
"scale": 123
}
}
]
}
]{
"error": {
"message": "Validation failed",
"details": [
{
"field": "projectID",
"message": "required"
}
]
}
}Journeys and users
Search client environments
Finds observed client environments for selected Observe users.
Required API key permission: observe:clientEnvs:read.
POST
/
observe
/
clientEnvSearch
Search client environments
curl --request POST \
--url https://api.cloud.corbado.io/v1/observe/clientEnvSearch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userIDs": [
"<string>"
],
"limit": 100
}
'import requests
url = "https://api.cloud.corbado.io/v1/observe/clientEnvSearch"
payload = {
"userIDs": ["<string>"],
"limit": 100
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({userIDs: ['<string>'], limit: 100})
};
fetch('https://api.cloud.corbado.io/v1/observe/clientEnvSearch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cloud.corbado.io/v1/observe/clientEnvSearch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'userIDs' => [
'<string>'
],
'limit' => 100
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cloud.corbado.io/v1/observe/clientEnvSearch"
payload := strings.NewReader("{\n \"userIDs\": [\n \"<string>\"\n ],\n \"limit\": 100\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cloud.corbado.io/v1/observe/clientEnvSearch")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userIDs\": [\n \"<string>\"\n ],\n \"limit\": 100\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloud.corbado.io/v1/observe/clientEnvSearch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userIDs\": [\n \"<string>\"\n ],\n \"limit\": 100\n}"
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"handle": "<string>",
"osName": "Windows",
"clientEnvType": "web",
"createdMs": 123,
"dataWeb": [
{
"id": "<string>",
"createdMs": 123,
"osVersion": "<string>",
"browserName": "<string>",
"browserVersion": "<string>",
"privateMode": true,
"webdriver": true,
"bluetoothAvailable": true,
"conditionalMediationAvailable": true,
"userVerifyingPlatformAuthenticatorAvailable": true,
"conditionalGet": true,
"conditionalCreate": true,
"hybridTransport": true,
"passkeyPlatformAuthenticator": true,
"relatedOrigins": true,
"signalAllAcceptedCredentials": true,
"signalCurrentUserDetails": true,
"signalUnknownCredential": true,
"userVerifyingPlatformAuthenticator": true,
"extensionAppid": true,
"extensionAppidExclude": true,
"extensionCredBlob": true,
"extensionCredProps": true,
"extensionCredentialProtectionPolicy": true,
"extensionEnforceCredentialProtectionPolicy": true,
"extensionGetCredBlob": true,
"extensionHmacCreateSecret": true,
"extensionLargeBlob": true,
"extensionMinPinLength": true,
"extensionPayment": true,
"extensionPrf": true,
"maxTouchPoints": 123
}
],
"dataApp": [
{
"id": "<string>",
"createdMs": 123,
"osVersion": "<string>",
"model": "<string>",
"brand": "<string>",
"appName": "<string>",
"appVersion": "<string>",
"deviceOwnerAuth": "none",
"isBluetoothAvailable": true,
"androidGooglePlayServicesVersion": "<string>",
"locale": "<string>",
"screen": {
"widthPoints": 123,
"heightPoints": 123,
"scale": 123
}
}
]
}
]{
"error": {
"message": "Validation failed",
"details": [
{
"field": "projectID",
"message": "required"
}
]
}
}Authorizations
Use an Observe API key from the management console. The key selects the project and must grant the permission listed on the operation. Keep this key on your server.
Body
application/json
Response
Matching client environments.
Client environment container ID (format tce-<number>).
Client environment handle.
Operating system name.
Available options:
Windows, macOS, Linux, iOS, iPadOS, Android, ChromeOS, Other Client environment type.
Available options:
web, app Creation time in milliseconds since epoch.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?