List customers
curl --request GET \
--url https://api.bitbybit.studio/customer/api/open/v1/customers \
--header 'x-api-key: <api-key>'import requests
url = "https://api.bitbybit.studio/customer/api/open/v1/customers"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.bitbybit.studio/customer/api/open/v1/customers', 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.bitbybit.studio/customer/api/open/v1/customers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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://api.bitbybit.studio/customer/api/open/v1/customers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<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://api.bitbybit.studio/customer/api/open/v1/customers")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bitbybit.studio/customer/api/open/v1/customers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"email": "<string>",
"phoneNumber": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"imageUrl": "<string>",
"tags": [
"<string>"
],
"addresses": [
{
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"phone": "<string>",
"address1": "<string>",
"address2": "<string>",
"city": "<string>",
"province": "<string>",
"country": "<string>",
"zip": "<string>"
}
],
"additionalData": {
"favorite_food": "Nasi Goreng",
"shirt_size": "L",
"loyalty_signup_year": 2024
},
"subscriptionStatus": [
{
"app": "BITCRM",
"status": "subscribe"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"meta": {
"page": 123,
"limit": 123,
"total": 123,
"hasNextPage": true
}
}{
"error": {
"code": "INVALID_API_KEY",
"message": "Invalid or expired API key"
}
}{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please retry after the reset period."
}
}Customers
List Customers
Retrieve a paginated list of customers, with search, source, and tag filters, sorting, and additional data fields.
GET
/
customers
List customers
curl --request GET \
--url https://api.bitbybit.studio/customer/api/open/v1/customers \
--header 'x-api-key: <api-key>'import requests
url = "https://api.bitbybit.studio/customer/api/open/v1/customers"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.bitbybit.studio/customer/api/open/v1/customers', 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.bitbybit.studio/customer/api/open/v1/customers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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://api.bitbybit.studio/customer/api/open/v1/customers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<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://api.bitbybit.studio/customer/api/open/v1/customers")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bitbybit.studio/customer/api/open/v1/customers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"email": "<string>",
"phoneNumber": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"imageUrl": "<string>",
"tags": [
"<string>"
],
"addresses": [
{
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"phone": "<string>",
"address1": "<string>",
"address2": "<string>",
"city": "<string>",
"province": "<string>",
"country": "<string>",
"zip": "<string>"
}
],
"additionalData": {
"favorite_food": "Nasi Goreng",
"shirt_size": "L",
"loyalty_signup_year": 2024
},
"subscriptionStatus": [
{
"app": "BITCRM",
"status": "subscribe"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"meta": {
"page": 123,
"limit": 123,
"total": 123,
"hasNextPage": true
}
}{
"error": {
"code": "INVALID_API_KEY",
"message": "Invalid or expired API key"
}
}{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please retry after the reset period."
}
}Returns a page of customers for your company. Each item uses the same shape as Get Customer, so every customer carries its
additionalData field map and subscriptionStatus entries.
limit caps at 100 per page. When you are syncing additional data fields for a large audience, page through with sort=updatedAt:desc and stop once you reach records you already have.Authorizations
API key for authentication. Create one in Settings > Developer.
Query Parameters
Page number
Required range:
x >= 1Number of results per page
Required range:
1 <= x <= 100Search by name, email, or phone number
Filter by source values (comma-separated)
Filter by tags (comma-separated)
Sort field and direction (e.g., updatedAt:desc)
⌘I

