curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/entities/User \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/entities/User"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/entities/User', 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://app.base44.com/api/apps/{app_id}/entities/User",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.base44.com/api/apps/{app_id}/entities/User"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/apps/{app_id}/entities/User")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/entities/User")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "6874b0c2e1a94d0031bb77de",
"email": "jane@acme.com",
"full_name": "Jane Cooper",
"role": "user",
"collaborator_role": "editor",
"created_date": "2026-06-01T09:23:41.481000Z",
"updated_date": "2026-06-04T14:07:02.115000Z"
}
]List app users
Returns the app’s users: the people who signed up to it, or who accepted an invitation and signed in. Someone you’ve invited who hasn’t signed in yet isn’t listed.
Like Count app users, it leaves out accounts Base44 added to the app on its own, such as workspace admins and support staff granted access, and the short-lived accounts a test run creates. Row-level security on the User entity applies, so rules that narrow reads narrow this list too.
Filter with q, or by passing a field name directly as a query parameter for an exact match, as in ?role=admin. Users come back in the order they joined unless you set sort.
curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/entities/User \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/entities/User"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/entities/User', 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://app.base44.com/api/apps/{app_id}/entities/User",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.base44.com/api/apps/{app_id}/entities/User"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/apps/{app_id}/entities/User")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/entities/User")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "6874b0c2e1a94d0031bb77de",
"email": "jane@acme.com",
"full_name": "Jane Cooper",
"role": "user",
"collaborator_role": "editor",
"created_date": "2026-06-01T09:23:41.481000Z",
"updated_date": "2026-06-04T14:07:02.115000Z"
}
]Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the app whose users you want to list.
Query Parameters
Filter as a JSON object of field names and values, for example {"status": "paid"} for an exact match, or using an operator such as $gt for a comparison. See Filtering, sorting, and paging for a full list of operators.
Maximum number of users to return, from 1 to 10000. Leave it out to get every matching user in one response.
Number of users to skip before the ones you get back, 0 or more. Defaults to 0. Use it with limit to page through a long list.
Single field to sort by, prefixed with - for descending. For example, -created_date returns newest first. Sorting by more than one field isn't supported.
Comma-separated list of fields to return, which reduces the response size on a wide entity. Reach a field inside an object with dots, as in customer.email. Each record still carries its id whether you ask for it or not.
Response
The app's users.
ID of the user.
"6874b0c2e1a94d0031bb77de"
Email the user signs in with.
"jane@acme.com"
The user's name, or null if they haven't given one.
"Jane Cooper"
The user's role in the app. user and admin are built in, and an app can define its own.
"user"
editor when the user can also edit the app in Base44, otherwise null.
"editor""editor"
When the user joined the app, as a UTC timestamp in ISO 8601 format.
"2026-06-01T09:23:41.481000Z"
When the user's record last changed, as a UTC timestamp in ISO 8601 format.
"2026-06-04T14:07:02.115000Z"
Was this page helpful?