Get Users
Fetch the contacts in your Splashify workspace with arbitrary trait-level filters and pagination. Useful for syncing Splashify customers back into your data warehouse, building a custom segment outside the app, or auditing who you’ve imported.
Endpoint
POST https://apis.splashifypro.com/api/v1/public/apis/users/?offset=0&limit=100Headers
| Header | Value |
|---|---|
Authorization | Basic YOUR_API_KEY |
Content-Type | application/json |
Query parameters
| Param | Type | Default | Notes |
|---|---|---|---|
offset | int | 0 | Number of customers to skip — use for pagination |
limit | int | 100 | Page size, max 100 |
Request body
The request body is a list of trait filters. Each filter targets a single trait (created_at_utc, email, phone_number, anything you’ve stored) and applies a comparison operator.
{
"filters": [
{
"trait": "created_at_utc",
"op": "gt",
"val": "2021-09-08T11:35:47.089Z"
},
{
"trait": "created_at_utc",
"op": "lt",
"supr_op": "and",
"val": "2021-09-08T11:40:47.089Z"
}
]
}| Field | Required | Description |
|---|---|---|
trait | yes | The trait name to filter on |
op | yes | Comparison operator: eq, ne, gt, gte, lt, lte, contains, in |
val | yes | The value to compare against. ISO 8601 strings for timestamps, numbers, plain strings, or arrays for in |
supr_op | required for filters 2..N | Combinator with the previous filter — and or or |
The first filter in the list does not need supr_op; every subsequent filter does.
Example
curl -X POST 'https://apis.splashifypro.com/api/v1/public/apis/users/?offset=0&limit=100' \
-H "Authorization: Basic YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filters": [
{
"trait": "created_at_utc",
"op": "gt",
"val": "2021-09-08T11:35:47.089Z"
},
{
"trait": "created_at_utc",
"op": "lt",
"supr_op": "and",
"val": "2021-09-08T11:40:47.089Z"
}
]
}'Successful response — 200 OK
{
"result": true,
"message": "Customers",
"data": {
"total_customers": 1,
"offset": 0,
"limit": 100,
"has_next_page": false,
"customers": [
{
"id": "a537a43e-49b7-4306-9763-6a97417de0bb",
"created_at_utc": "2021-08-27T08:48:02.970000",
"modified_at_utc": "2021-08-27T08:48:03.112000",
"phone_number": "9999999999",
"country_code": "+376",
"user_id": "",
"traits": {
"name": "John Doe",
"email": null,
"whatsapp_opted_in": true,
"total_orders_count": 1,
"last_order_id": 3993626378418,
"last_order_name": "#1025",
"total_spent": "7080.00",
"address": {
"address1": "abc",
"address2": "test",
"city": "Pune",
"state": "Maharashtra",
"country": "India",
"zip_code": "411002"
},
"created_at": "2021-08-27T08:47:56",
"currency": "INR",
"first_name": "John",
"last_name": "Doe"
},
"customer_created_at_source": "Shopify"
}
]
}
}| Field | Description |
|---|---|
data.total_customers | Total number of customers matching your filter — use to build pagination UI |
data.has_next_page | true while more pages remain. Increment offset by limit until this becomes false |
data.customers[].id | Splashify-internal customer UUID |
data.customers[].traits | Free-form key/value bag of traits — every event you’ve sent us is reflected here |
customer_created_at_source | Which source created the contact (Shopify, manual import, API, etc.) |
Pagination loop
let offset = 0;
const pageSize = 100;
while (true) {
const r = await fetch(
`https://apis.splashifypro.com/api/v1/public/apis/users/?offset=${offset}&limit=${pageSize}`,
{ method: 'POST', headers, body: JSON.stringify({ filters: [] }) }
).then(r => r.json());
for (const c of r.data.customers) await ingest(c);
if (!r.data.has_next_page) break;
offset += pageSize;
}