curl --request GET \
--url https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey} \
--header 'Authorization: <api-key>'import requests
url = "https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}', 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://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"totalCount": 245,
"items": [
{
"lastPing": "2022-06-28T23:21:29.176609596Z",
"environmentId": "1234a56b7c89d012345e678f",
"ownerId": "12ab3c45de678910abc12345",
"user": {
"key": "user-key-123abc",
"secondary": "2398127",
"ip": "10.10.10.10",
"country": "United States",
"email": "sandy@example.com",
"firstName": "Sandy",
"lastName": "Smith",
"avatar": "http://example.com/avatar.png",
"name": "Sandy Smith",
"anonymous": false,
"custom": {},
"privateAttrs": [
"<string>"
]
},
"sortValue": "user-key-123abc",
"_links": {
"parent": {
"href": "/api/v2/users/my-project/my-environment",
"type": "application/json"
},
"self": {
"href": "/api/v2/users/my-project/my-environment/my-user",
"type": "application/json"
},
"settings": {
"href": "/api/v2/users/my-project/my-environment/my-user/flags",
"type": "text/html"
},
"site": {
"href": "/my-project/my-environment/users/my-user",
"type": "text/html"
}
},
"_access": {
"denied": [
{
"action": "<string>",
"reason": {
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
],
"role_name": "<string>"
}
}
],
"allowed": [
{
"action": "<string>",
"reason": {
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
],
"role_name": "<string>"
}
}
]
}
}
],
"_links": {
"next": {
"href": "/api/v2/user-search/my-project/my-environment?after=1647993600000&limit=20&searchAfter=my-user&sort=userKey",
"type": "application/json"
},
"self": {
"href": "/api/v2/user-search/my-project/my-environment?after=1647993600000&limit=20&sort=userKey",
"type": "application/json"
}
}
}{
"code": "invalid_request",
"message": "Invalid request body"
}{
"code": "unauthorized",
"message": "Invalid access token"
}{
"code": "forbidden",
"message": "Forbidden. Access to the requested resource was denied."
}{
"code": "not_found",
"message": "Invalid resource identifier"
}{
"code": "rate_limited",
"message": "You've exceeded the API rate limit. Try again later."
}Find users
Use contexts instead
After you have upgraded your LaunchDarkly SDK to use contexts instead of users, you should use Search for contexts instead of this endpoint.
Search users in LaunchDarkly based on their last active date, a user attribute filter set, or a search query.
An example user attribute filter set is filter=firstName:Anna,activeTrial:false. This matches users that have the user attribute firstName set to Anna, that also have the attribute activeTrial set to false.
To paginate through results, follow the next link in the _links object. To learn more, read Representations.
curl --request GET \
--url https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey} \
--header 'Authorization: <api-key>'import requests
url = "https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}', 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://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.launchdarkly.com/api/v2/user-search/{projectKey}/{environmentKey}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"totalCount": 245,
"items": [
{
"lastPing": "2022-06-28T23:21:29.176609596Z",
"environmentId": "1234a56b7c89d012345e678f",
"ownerId": "12ab3c45de678910abc12345",
"user": {
"key": "user-key-123abc",
"secondary": "2398127",
"ip": "10.10.10.10",
"country": "United States",
"email": "sandy@example.com",
"firstName": "Sandy",
"lastName": "Smith",
"avatar": "http://example.com/avatar.png",
"name": "Sandy Smith",
"anonymous": false,
"custom": {},
"privateAttrs": [
"<string>"
]
},
"sortValue": "user-key-123abc",
"_links": {
"parent": {
"href": "/api/v2/users/my-project/my-environment",
"type": "application/json"
},
"self": {
"href": "/api/v2/users/my-project/my-environment/my-user",
"type": "application/json"
},
"settings": {
"href": "/api/v2/users/my-project/my-environment/my-user/flags",
"type": "text/html"
},
"site": {
"href": "/my-project/my-environment/users/my-user",
"type": "text/html"
}
},
"_access": {
"denied": [
{
"action": "<string>",
"reason": {
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
],
"role_name": "<string>"
}
}
],
"allowed": [
{
"action": "<string>",
"reason": {
"effect": "allow",
"resources": [
"proj/*:env/*;qa_*:/flag/*"
],
"notResources": [
"<string>"
],
"actions": [
"*"
],
"notActions": [
"<string>"
],
"role_name": "<string>"
}
}
]
}
}
],
"_links": {
"next": {
"href": "/api/v2/user-search/my-project/my-environment?after=1647993600000&limit=20&searchAfter=my-user&sort=userKey",
"type": "application/json"
},
"self": {
"href": "/api/v2/user-search/my-project/my-environment?after=1647993600000&limit=20&sort=userKey",
"type": "application/json"
}
}
}{
"code": "invalid_request",
"message": "Invalid request body"
}{
"code": "unauthorized",
"message": "Invalid access token"
}{
"code": "forbidden",
"message": "Forbidden. Access to the requested resource was denied."
}{
"code": "not_found",
"message": "Invalid resource identifier"
}{
"code": "rate_limited",
"message": "You've exceeded the API rate limit. Try again later."
}Authorizations
Path Parameters
The project key
The environment key
Query Parameters
Full-text search for users based on name, first name, last name, e-mail address, or key
Specifies the maximum number of items in the collection to return (max: 50, default: 20)
Limits results to users with sort values after the value you specify. You can use this for pagination, but we recommend using the next link we provide instead.
A comma-separated list of user attribute filters. Each filter is in the form of attributeKey:attributeValue
Response
Users collection response
The total number of users in the environment
245
Details on the users
Show child attributes
Show child attributes
The location and content type of related resources
Show child attributes
Show child attributes
{ "next": { "href": "/api/v2/user-search/my-project/my-environment?after=1647993600000&limit=20&searchAfter=my-user&sort=userKey", "type": "application/json" }, "self": { "href": "/api/v2/user-search/my-project/my-environment?after=1647993600000&limit=20&sort=userKey", "type": "application/json" } }