You can change the default timeouts, or add extra HTTP headers to your API requests by passing options.
These API client methods support passing request options as extra key-value mappings:
To add options to all requests, you can create a custom configuration
Adding HTTP headers to your requests allow you to set parameters,
for example, a user identifier or an IP address. This can be useful
for analytics, geo search, or to implement API key rate limits.
You can add these headers to your requests:
Header |
Use case |
X-Algolia-UserToken |
Use API key rate limits |
X-Algolia-UserToken |
The Analytics API uses the value of this header to distinguish between users. It takes priority over any value in X-Forwarded-For . Use the X-Algolia-UserToken header to forward the user’s identity without relying on IP addresses. |
X-Forwarded-For |
For analytics in back-end implementations. If your server sends the user’s IP address with every search, analytics can distinguish between end users. Otherwise, the analytics uses the server’s IP address, and considers all your users as a single user. |
X-Forwarded-For |
For geolocation, when you perform searches from your back end. This ensures that the geolocation for a search uses the IP address of your end user, and not that of your server. |
1
2
3
4
5
| $index = $client->initIndex('indexName');
$res = $index->search('query string', [
'X-Algolia-UserToken' => 'user123'
]);
|
1
2
3
4
5
6
7
| index = client.init_index('indexName')
request_options = {
'X-Algolia-UserToken': 'user123'
}
res = index.search('query string', request_options)
|
1
2
3
4
5
6
7
8
9
10
| const index = client.initIndex('indexName');
const requestOptions = {
headers: { 'X-Algolia-UserToken': 'user123' }
}
index.search('query string', requestOptions)
.then(({ hits }) => {
console.log(hits);
});
|
1
2
3
4
5
6
7
| index = client.init_index('indexName')
request_options = {
'X-Algolia-UserToken': 'user123'
}
res = index.search('query string', request_options)
|
1
2
3
4
5
6
7
8
| let index = client.index(withName: "indexName")
var requestOptions = RequestOptions()
requestOptions.headers["X-Algolia-UserToken"] = "user123"
index.search(query: "query string", requestOptions: requestOptions) { result in
if case .success(let response) = result {
print("Response: \(response)")
}
}
|
1
2
3
4
5
6
7
8
| Index index = client.InitIndex("indexName");
RequestOptions requestOptions = new RequestOptions
{
Headers = new Dictionary<string,string>{ { "X-Algolia-UserToken", "user123" } }
};
var result = index.Search<Result>(new Query("query string"), requestOptions);
|
1
2
3
4
5
6
7
8
9
10
| SearchIndex<Result> index = client.initIndex("indexName", Result.class);
Query query = new Query("query string");
RequestOptions requestOptions =
new RequestOptions().addExtraHeader("X-Algolia-UserToken", "user123");
// Sync
SearchResult<Result> search = index.search(query, requestOptions);
// Async
CompletableFuture<SearchResult<Result>> search = index.searchAsync(query, requestOptions);
|
1
2
3
4
5
6
7
| opts := []interface{}{
opt.ExtraHeaders(map[string]string{
"X-Algolia-UserToken": "user123",
}),
}
res, err := index.Search("query string", opts...)
|
1
2
3
4
5
6
7
| client.execute {
search into "indexName" query Query(
query = Some("query string")
) options RequestOptions(
extraHeaders = Some(Map("X-Algolia-UserToken" -> "user123"))
)
}
|
1
2
3
4
5
6
7
8
| val indexName = IndexName("indexName")
val index = client.initIndex(indexName)
val query = Query("query string")
val requestOptions = requestOptions {
header("X-Algolia-User-ID", "user123")
}
index.search(query, requestOptions)
|
Change timeouts for your requests
Network connections and DNS resolution can be slow.
That’s why the API clients come with default timeouts.
1
2
3
4
5
6
| $index = $client->initIndex('indexName');
$res = $index->search('query string', [
// Set the readTimeout to 20 seconds
'readTimeout' => 20
]);
|
1
2
3
4
5
6
7
8
| index = client.init_index('indexName')
request_options = {
# Set the read_timeout to 20 seconds
'read_timeout': 20
}
res = index.search('query string', request_options)
|
1
2
3
4
5
6
7
8
9
10
11
| const index = client.initIndex('indexName');
const requestOptions = {
// Set the readTimeout to 20 seconds
timeouts: { read: 20 }
}
index.search('query string', requestOptions)
.then(({ hits }) => {
console.log(hits);
});
|
1
2
3
4
5
6
7
8
| index = client.init_index('indexName')
request_options = {
# Set the readTimeout to 20 seconds
"readTimeout": 20,
}
res = index.search('query string', request_options)
|
1
2
3
4
5
6
7
8
9
| let index = client.index(withName: "indexName")
var requestOptions = RequestOptions()
// Set the readTimeout to 20 seconds
requestOptions.readTimeout = 20
index.search(query: "query string", requestOptions: requestOptions) { result in
if case .success(let response) = result {
print("Response: \(response)")
}
}
|
1
2
3
4
5
6
7
8
9
| Index index = client.InitIndex("indexName");
RequestOptions requestOptions = new RequestOptions
{
// Set the readTimeout to 20 seconds
Timeout = 20
};
var result = index.Search<Result>(new Query("query string"), requestOptions);
|
1
2
3
4
5
6
7
8
9
10
11
12
| SearchIndex<Result> index = client.initIndex("indexName", Result.class);
Query query = new Query("query string");
RequestOptions requestOptions =
new RequestOptions()
// Set the timeout to 20 seconds
.setTimeout(20000);
// Sync
SearchResult<Result> search = index.search(query, requestOptions);
// Async
CompletableFuture<SearchResult<Result>> search = index.searchAsync(query, requestOptions);
|
1
2
3
4
5
6
7
8
| // Set the readTimeout to 20 seconds
ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
opts := []interface{}{
ctx,
}
res, err := index.Search("query string", opts...)
|
1
2
3
4
5
6
7
8
9
| val indexName = IndexName("indexName")
val index = client.initIndex(indexName)
val query = Query("query string")
val requestOptions = requestOptions {
// Set the readTimeout to 20 seconds
readTimeout = 20
}
index.search(query, requestOptions)
|
Some methods accept extra request options.
You can find them in the Parameters section for each method’s reference.