Pagination
Pagination enables you to get more results, or offset the results you get when making multiple searches
Pagination controls how many results you receive and where in the result set to start. This is essential for building user interfaces that display results in pages or when you need to fetch large numbers of venues.
Query parameters
Pagination is controlled through two query parameters on the search endpoint:
limit
Maximum number of results to return (1-100). Defaults to 20.
offset
Number of results to skip before starting to return results. Defaults to 0.
Basic usage
Get first page (default)
const response = await fetch("/v1/search/?limit=20&offset=0");POST /v1/search/?limit=20&offset=0const response = await fetch("/v1/search/?limit=20&offset=0");response = requests.get("/v1/search/?limit=20&offset=0")$response = HttpClient::get("/v1/search/?limit=20&offset=0");let response = reqwest::get("/v1/search/?limit=20&offset=0").await?;Get second page
const response = await fetch("/v1/search/?limit=20&offset=20");POST /v1/search/?limit=20&offset=20const response = await fetch("/v1/search/?limit=20&offset=20");response = requests.get("/v1/search/?limit=20&offset=20")$response = HttpClient::get("/v1/search/?limit=20&offset=20");let response = reqwest::get("/v1/search/?limit=20&offset=20").await?;Request examples
First page of results
const = await ("/v1/search/?limit=20&offset=0", {
: "POST",
: {
"Content-Type": "application/json",
"API-Key": "YOUR_API_KEY",
},
: .({
: [{ : 51.5072, : -0.1276 }],
: { : "POINT", : 1000 },
: { : ["restaurant"] },
}),
});curl -X POST https://api.inbe.us/v1/search/?limit=20&offset=0 \
-H "Content-Type: application/json" \
-H "API-Key: YOUR_API_KEY" \
-d '{
"locations": [{ "lat": 51.5072, "lon": -0.1276 }],
"mode": { "mode": "POINT", "maxDistance": 1000 },
"preferences": {
"establishmentFilters": ["restaurant"]
}
}'type SearchRequest struct {
Locations []Location `json:"locations"`
Mode Mode `json:"mode"`
Preferences Preferences `json:"preferences"`
}
searchReq := SearchRequest{
Locations: []Location{
{Lat: 51.5072, Lon: -0.1276},
},
Mode: Mode{
Mode: "POINT",
MaxDistance: 1000,
},
Preferences: Preferences{
EstablishmentFilters: []string{"restaurant"},
},
}
jsonData, _ := json.Marshal(searchReq)
req, _ := http.NewRequest("POST", "https://api.inbe.us/v1/search/?limit=20&offset=0", bytes.NewBuffer(jsonData))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("API-Key", "YOUR_API_KEY")
client := &http.Client{}
response, err := client.Do(req)from dataclasses import dataclass
from typing import List, Optional, Union
import requests
@dataclass
class SearchRequest:
locations: List[Location]
mode: Mode
preferences: Preferences
search_req = SearchRequest(
locations=[Location(lat=51.5072, lon=-0.1276)],
mode=Mode(mode="POINT", max_distance=1000),
preferences=Preferences(establishment_filters=["restaurant"])
)
response = requests.post(
"https://api.inbe.us/v1/search/?limit=20&offset=0",
headers={
"Content-Type": "application/json",
"API-Key": "YOUR_API_KEY"
},
json=search_req.__dict__
)<?php
class SearchRequest {
public array $locations;
public Mode $mode;
public Preferences $preferences;
public function __construct(array $locations, Mode $mode, Preferences $preferences) {
$this->locations = $locations;
$this->mode = $mode;
$this->preferences = $preferences;
}
}
$searchReq = new SearchRequest(
[new Location(51.5072, -0.1276)],
new Mode("POINT", 1000),
new Preferences(['establishmentFilters' => ['restaurant']])
);
$response = HttpClient::post(
"https://api.inbe.us/v1/search/?limit=20&offset=0",
[
'headers' => [
'Content-Type' => 'application/json',
'API-Key' => 'YOUR_API_KEY'
],
'json' => $searchReq
]
);use serde::{Deserialize, Serialize};
use reqwest::Client;
#[derive(Serialize, Deserialize)]
struct SearchRequest {
locations: Vec<Location>,
mode: Mode,
preferences: Preferences,
}
let search_req = SearchRequest {
locations: vec![Location {
lat: 51.5072,
lon: -0.1276,
label: None,
weight: None,
}],
mode: Mode {
mode: "POINT".to_string(),
max_distance: 1000,
},
preferences: Preferences {
establishment_filters: Some(vec!["restaurant".to_string()]),
..Default::default()
},
};
let client = Client::new();
let response = client
.post("https://api.inbe.us/v1/search/?limit=20&offset=0")
.header("Content-Type", "application/json")
.header("API-Key", "YOUR_API_KEY")
.json(&search_req)
.send()
.await?;Second page of results
const = await ("/v1/search/?limit=20&offset=0", {
= await ("/v1/search/?limit=20&offset=20", {
: "POST",
: {
"Content-Type": "application/json",
"API-Key": "YOUR_API_KEY",
},
: .({
: [{ : 51.5072, : -0.1276 }],
: { : "POINT", : 1000 },
: { : ["restaurant"] },
}),
});curl -X POST https://api.inbe.us/v1/search/?limit=20&offset=20 \
-H "Content-Type: application/json" \
-H "API-Key: YOUR_API_KEY" \
-d '{
"locations": [{ "lat": 51.5072, "lon": -0.1276 }],
"mode": { "mode": "POINT", "maxDistance": 1000 },
"preferences": {
"establishmentFilters": ["restaurant"]
}
}'type SearchRequest struct {
Locations []Location `json:"locations"`
Mode Mode `json:"mode"`
Preferences Preferences `json:"preferences"`
}
searchReq := SearchRequest{
Locations: []Location{
{Lat: 51.5072, Lon: -0.1276},
},
Mode: Mode{
Mode: "POINT",
MaxDistance: 1000,
},
Preferences: Preferences{
EstablishmentFilters: []string{"restaurant"},
},
}
jsonData, _ := json.Marshal(searchReq)
req, _ := http.NewRequest("POST", "https://api.inbe.us/v1/search/?limit=20&offset=0", bytes.NewBuffer(jsonData))
req, _ := http.NewRequest("POST", "https://api.inbe.us/v1/search/?limit=20&offset=20", bytes.NewBuffer(jsonData))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("API-Key", "YOUR_API_KEY")
client := &http.Client{}
response, err := client.Do(req)from dataclasses import dataclass
from typing import List, Optional, Union
import requests
@dataclass
class SearchRequest:
locations: List[Location]
mode: Mode
preferences: Preferences
search_req = SearchRequest(
locations=[Location(lat=51.5072, lon=-0.1276)],
mode=Mode(mode="POINT", max_distance=1000),
preferences=Preferences(establishment_filters=["restaurant"])
)
response = requests.post(
"https://api.inbe.us/v1/search/?limit=20&offset=20",
headers={
"Content-Type": "application/json",
"API-Key": "YOUR_API_KEY"
},
json=search_req.__dict__
)<?php
class SearchRequest {
public array $locations;
public Mode $mode;
public Preferences $preferences;
public function __construct(array $locations, Mode $mode, Preferences $preferences) {
$this->locations = $locations;
$this->mode = $mode;
$this->preferences = $preferences;
}
}
$searchReq = new SearchRequest(
[new Location(51.5072, -0.1276)],
new Mode("POINT", 1000),
new Preferences(['establishmentFilters' => ['restaurant']])
);
$response = HttpClient::post(
"https://api.inbe.us/v1/search/?limit=20&offset=20",
[
'headers' => [
'Content-Type' => 'application/json',
'API-Key' => 'YOUR_API_KEY'
],
'json' => $searchReq
]
);use serde::{Deserialize, Serialize};
use reqwest::Client;
#[derive(Serialize, Deserialize)]
struct SearchRequest {
locations: Vec<Location>,
mode: Mode,
preferences: Preferences,
}
let search_req = SearchRequest {
locations: vec![Location {
lat: 51.5072,
lon: -0.1276,
label: None,
weight: None,
}],
mode: Mode {
mode: "POINT".to_string(),
max_distance: 1000,
},
preferences: Preferences {
establishment_filters: Some(vec!["restaurant".to_string()]),
..Default::default()
},
};
let client = Client::new();
let response = client
.post("https://api.inbe.us/v1/search/?limit=20&offset=0")
.post("https://api.inbe.us/v1/search/?limit=20&offset=20")
.header("Content-Type", "application/json")
.header("API-Key", "YOUR_API_KEY")
.json(&search_req)
.send()
.await?;Best practice
- Use reasonable limits: 20-50 results to not overwhelm your users
- Implement proper error handling: Handle cases where offset exceeds total results
- Show loading states: Indicate when fetching more results
- Consider user experience: Don't make users wait for large result sets
Billing considerations
Currently, billing is applied assuming 20 result groups. For example; if you request 20 results, 0.006 will be charged to your account, if you requested 100 results, 0.03 will be charged to your account, if you requested 35 results, 0.012 will be charged to your account.