Skip to main content
The userToken parameter links a search request to a specific pseudonymous user.
It enables features that rely on user-level tracking, including:

Usage

  • If not set explicitly, the user’s IP address is used as a fallback identifier.
  • The same token should be used across all search, click, and conversion events for consistent behavior tracking.
  • User token must not contain personally identifiable information.
For more information, see User token.

Example

Current API clients

var response = await client.SearchSingleIndexAsync<Hit>(
  "INDEX_NAME",
  new SearchParams(new SearchParamsObject { Query = "query", UserToken = "123456" })
);
final response = await client.searchSingleIndex(
  indexName: "INDEX_NAME",
  searchParams: SearchParamsObject(
    query: "query",
    userToken: "123456",
  ),
);
response, err := client.SearchSingleIndex(client.NewApiSearchSingleIndexRequest(
  "INDEX_NAME").WithSearchParams(search.SearchParamsObjectAsSearchParams(
  search.NewEmptySearchParamsObject().SetQuery("query").SetUserToken("123456"))))
if err != nil {
  // handle the eventual error
  panic(err)
}
SearchResponse response = client.searchSingleIndex(
  "INDEX_NAME",
  new SearchParamsObject().setQuery("query").setUserToken("123456"),
  Hit.class
);
const response = await client.searchSingleIndex({
  indexName: 'indexName',
  searchParams: { query: 'query', userToken: '123456' },
});
var response =
  client.searchSingleIndex(
    indexName = "INDEX_NAME",
    searchParams = SearchParamsObject(query = "query", userToken = "123456"),
  )
$response = $client->searchSingleIndex(
    'INDEX_NAME',
    ['query' => 'query',
        'userToken' => '123456',
    ],
);
response = client.search_single_index(
    index_name="INDEX_NAME",
    search_params={
        "query": "query",
        "userToken": "123456",
    },
)
response = client.search_single_index(
  "INDEX_NAME",
  Algolia::Search::SearchParamsObject.new(query: "query", user_token: "123456")
)
val response = Await.result(
  client.searchSingleIndex(
    indexName = "INDEX_NAME",
    searchParams = Some(
      SearchParamsObject(
        query = Some("query"),
        userToken = Some("123456")
      )
    )
  ),
  Duration(100, "sec")
)
let response: SearchResponse<Hit> = try await client.searchSingleIndex(
    indexName: "INDEX_NAME",
    searchParams: SearchSearchParams.searchSearchParamsObject(SearchSearchParamsObject(
        query: "query",
        userToken: "123456"
    ))
)
Query query = new Query("query");
query.UserToken = "123456";
res, err := index.Search(
	"query",
	opt.UserToken("123456"),
)
Query query = new Query("query").setUserToken("123456")
index
  .search("query", {
    userToken: "123456",
  })
  .then(({ hits }) => {
    console.log(hits);
  });
val query = query("query") {
    userToken = UserToken("123456")
}

index.search(query)
$index->search('query', ['userToken' => '123456'])
index.search("query", {"userToken": "123456"})
index.search("query", {userToken: "123456"})
client.execute {
  search into "myIndex" query Query(
    query = Some("query"),
    userToken = Some("123456")
  )
}
let query = Query("query")
  .set(\.userToken, to: "123456")

index.search(query: query) { result in
  if case .success(let response) = result {
    print("Response: \(response)")
  }
}
Last modified on April 27, 2026