Retrieve a paginated list of groups in your Tallyfy organization using the GET endpoint with optional search, sorting, and related data includes.
List members
GET /organizations/{org_id}/users
This endpoint returns a paginated list of members (users) in your Tallyfy organization.
Replace {org_id} with your actual Organization ID.
Authorization: Bearer {your_access_token}Accept: application/jsonX-Tallyfy-Client: APIClient
with(string): Comma-separated list of related data to include. Supported values includegroups,stats,organizations,preferences,assets,member_watchers,guest_watchers,auth_methods,country.q(string): Search query to filter members by first name, last name, or email.sort(string): Field to sort by. Prefix with-for descending order (e.g.,-created_at).per_page(integer): Number of results per page. Defaults to9999if not specified.page(integer): Page number for paginated results.
const accessToken = 'YOUR_PERSONAL_ACCESS_TOKEN';const orgId = 'YOUR_ORGANIZATION_ID';
const queryParams = '?with=groups&per_page=50&page=1';const apiUrl = `https://go.tallyfy.com/api/organizations/${orgId}/users${queryParams}`;
const headers = new Headers();headers.append('Authorization', `Bearer ${accessToken}`);headers.append('Accept', 'application/json');headers.append('X-Tallyfy-Client', 'APIClient');
fetch(apiUrl, { method: 'GET', headers: headers}).then(response => { return response.json().then(data => { if (!response.ok) { console.error("Failed to list members:", data); throw new Error(`HTTP error! status: ${response.status}`); } return data; });}).then(data => { console.log('Successfully listed members:'); console.log(JSON.stringify(data, null, 2));}).catch(error => { console.error('Error listing members:', error.message);});import requestsimport jsonimport os
access_token = os.environ.get('TALLYFY_ACCESS_TOKEN', 'YOUR_PERSONAL_ACCESS_TOKEN')org_id = os.environ.get('TALLYFY_ORG_ID', 'YOUR_ORGANIZATION_ID')api_url = f'https://go.tallyfy.com/api/organizations/{org_id}/users'
headers = { 'Authorization': f'Bearer {access_token}', 'Accept': 'application/json', 'X-Tallyfy-Client': 'APIClient'}
params = { 'with': 'groups', 'per_page': 50, 'page': 1}
response = Nonetry: response = requests.get(api_url, headers=headers, params=params) response.raise_for_status()
members_data = response.json() print('Successfully listed members:') print(json.dumps(members_data, indent=4))
except requests.exceptions.HTTPError as http_err: print(f"HTTP error occurred listing members: {http_err}") if response is not None: print(f"Response Body: {response.text}")except requests.exceptions.RequestException as req_err: print(f"Request failed listing members: {req_err}")except json.JSONDecodeError: print("Failed to decode JSON response when listing members") if response is not None: print(f"Response Text: {response.text}")except Exception as err: print(f"An unexpected error occurred: {err}")import java.net.URI;import java.net.URLEncoder;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.io.IOException;import java.nio.charset.StandardCharsets;import java.util.Map;import java.util.stream.Collectors;
public class ListMembers { public static void main(String[] args) { String accessToken = System.getenv().getOrDefault("TALLYFY_ACCESS_TOKEN", "YOUR_PERSONAL_ACCESS_TOKEN"); String orgId = System.getenv().getOrDefault("TALLYFY_ORG_ID", "YOUR_ORGANIZATION_ID"); String baseUrl = "https://go.tallyfy.com/api/organizations/" + orgId + "/users";
Map<String, String> queryParamsMap = Map.of("with", "groups", "per_page", "50", "page", "1"); String queryParamsString = queryParamsMap.entrySet().stream() .map(entry -> URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8) + "=" + URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8)) .collect(Collectors.joining("&", "?", ""));
String apiUrl = baseUrl + (queryParamsMap.isEmpty() ? "" : queryParamsString);
HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(apiUrl)) .header("Authorization", "Bearer " + accessToken) .header("Accept", "application/json") .header("X-Tallyfy-Client", "APIClient") .GET() .build();
try { HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) { System.out.println("Successfully listed members:"); System.out.println(response.body()); } else { System.err.println("Failed to list members. Status: " + response.statusCode()); System.err.println("Response Body: " + response.body()); } } catch (IOException | InterruptedException e) { System.err.println("Request failed: " + e.getMessage()); Thread.currentThread().interrupt(); } catch (Exception e) { System.err.println("An unexpected error occurred: " + e.getMessage()); e.printStackTrace(); } }}package main
import ( "bytes" "encoding/json" "fmt" "io" "net/http" "net/url" "os" "time")
func main() { accessToken := os.Getenv("TALLYFY_ACCESS_TOKEN") if accessToken == "" { accessToken = "YOUR_PERSONAL_ACCESS_TOKEN" } orgId := os.Getenv("TALLYFY_ORG_ID") if orgId == "" { orgId = "YOUR_ORGANIZATION_ID" } baseURL := fmt.Sprintf("https://go.tallyfy.com/api/organizations/%s/users", orgId)
queryParams := url.Values{} queryParams.Add("with", "groups") queryParams.Add("per_page", "50") queryParams.Add("page", "1")
apiUrl := baseURL if len(queryParams) > 0 { apiUrl += "?" + queryParams.Encode() }
client := &http.Client{Timeout: 15 * time.Second} req, err := http.NewRequest("GET", apiUrl, nil) if err != nil { fmt.Printf("Error creating list members request: %v\n", err) return }
req.Header.Set("Authorization", "Bearer "+accessToken) req.Header.Set("Accept", "application/json") req.Header.Set("X-Tallyfy-Client", "APIClient")
resp, err := client.Do(req) if err != nil { fmt.Printf("Error executing list members request: %v\n", err) return } defer resp.Body.Close()
body, err := io.ReadAll(resp.Body) if err != nil { fmt.Printf("Error reading list members response body: %v\n", err) return }
if resp.StatusCode != http.StatusOK { fmt.Printf("Failed to list members. Status: %d\nBody: %s\n", resp.StatusCode, string(body)) return }
fmt.Println("Successfully listed members:") var prettyJSON bytes.Buffer if err := json.Indent(&prettyJSON, body, "", " "); err == nil { fmt.Println(prettyJSON.String()) } else { fmt.Println(string(body)) }}#include <iostream>#include <string>#include <cpprest/http_client.h>#include <cpprest/json.h>
using namespace web;using namespace web::http;using namespace web::http::client;using namespace web::json;
pplx::task<void> ListTallyfyMembers(){ utility::string_t accessToken = U("YOUR_PERSONAL_ACCESS_TOKEN"); utility::string_t orgId = U("YOUR_ORGANIZATION_ID");
uri_builder builder(U("https://go.tallyfy.com/api/organizations/")); builder.append_path(orgId); builder.append_path(U("users")); builder.append_query(U("with"), U("groups")); builder.append_query(U("per_page"), 50); builder.append_query(U("page"), 1); utility::string_t apiUrl = builder.to_string();
http_client client(apiUrl); http_request request(methods::GET);
request.headers().add(U("Authorization"), U("Bearer ") + accessToken); request.headers().add(U("Accept"), U("application/json")); request.headers().add(U("X-Tallyfy-Client"), U("APIClient"));
return client.request(request).then([](http_response response) { return response.extract_json().then([response](pplx::task<value> task) { try { value const & body = task.get(); if (response.status_code() == status_codes::OK) { std::wcout << L"Successfully listed members:\n" << body.serialize() << std::endl; } else { std::wcerr << L"Failed to list members. Status: " << response.status_code() << L"\nResponse: " << body.serialize() << std::endl; } } catch (const http_exception& e) { std::wcerr << L"HTTP exception during list members: " << e.what() << std::endl; } catch (const std::exception& e) { std::wcerr << L"Exception during list members response handling: " << e.what() << std::endl; } }); });}
int main() { try { ListTallyfyMembers().wait(); } catch (const std::exception &e) { std::cerr << "Error in main: " << e.what() << std::endl; } return 0;}// Requires C++ REST SDK (Casablanca)using System;using System.Net.Http;using System.Net.Http.Headers;using System.Threading.Tasks;using System.Text.Json;using System.Web;
public class TallyfyMemberLister{ private static readonly HttpClient client = new HttpClient();
public static async Task ListMembersAsync() { var accessToken = Environment.GetEnvironmentVariable("TALLYFY_ACCESS_TOKEN") ?? "YOUR_PERSONAL_ACCESS_TOKEN"; var orgId = Environment.GetEnvironmentVariable("TALLYFY_ORG_ID") ?? "YOUR_ORGANIZATION_ID";
var query = HttpUtility.ParseQueryString(string.Empty); query["with"] = "groups"; query["per_page"] = "50"; query["page"] = "1"; string queryString = query.ToString(); var apiUrl = $"https://go.tallyfy.com/api/organizations/{orgId}/users?{queryString}";
try { using var request = new HttpRequestMessage(HttpMethod.Get, apiUrl); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); request.Headers.Add("X-Tallyfy-Client", "APIClient");
HttpResponseMessage response = await client.SendAsync(request); string responseBody = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode) { Console.WriteLine("Successfully listed members:"); try { using var doc = JsonDocument.Parse(responseBody); Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true })); } catch (JsonException) { Console.WriteLine(responseBody); } } else { Console.WriteLine($"Failed to list members. Status: {response.StatusCode}"); Console.WriteLine($"Response: {responseBody}"); } } catch (HttpRequestException e) { Console.WriteLine($"Request Exception listing members: {e.Message}"); } catch (Exception ex) { Console.WriteLine($"An unexpected error occurred: {ex.Message}"); } }
// Example Usage: // static async Task Main(string[] args) // { // await ListMembersAsync(); // }}A successful request returns a 200 OK status code and a JSON object with a data array of member objects, plus a meta object containing pagination details.
{ "data": [ { "id": 1001, "email": "alice@example.com", "username": "alice", "first_name": "Alice", "last_name": "Smith", "full_name": "Alice Smith", "profile_pic": "https://.../profile.jpg", "country_id": 1, "is_active": true, "last_login_at": "2025-01-15T10:30:00+00:00", "activated_at": "2024-06-01T08:00:00+00:00", "type": "standard", "created_at": "2024-06-01T08:00:00+00:00", "updated_at": "2025-01-15T10:30:00+00:00", "phone": "+1234567890", "job_title": "Project Manager", "timezone": "America/New_York", "UTC_offset": "-05:00", "role": "Admin", "status": "active", "date_format": "MM/DD/YYYY", "is_default_admin": false, "groups": { "data": [ { "id": "group_id_1", "name": "Sales Team", "logo": null, "members": [1001, 1002], "guests": [] } ] } }, { "id": 1002, "email": "bob@example.com", "first_name": "Bob", "last_name": "Jones", "status": "active", "role": "Standard" } ], "meta": { "pagination": { "total": 2, "count": 2, "per_page": 50, "current_page": 1, "total_pages": 1 } }} This API endpoint retrieves detailed profile information for a specific organization member by their user ID and supports optional query parameters to include related data like statistics and group memberships with code examples provided in JavaScript Python Java Go C++ and C#.
Retrieve all guest users for a Tallyfy organization with optional search, sorting, and pagination.
Retrieve all tags for an organization with optional search, filtering, sorting, and pagination. Returns tag details including title, color, and usage statistics.
Was this helpful?
About Tallyfy
- 2025 Tallyfy, Inc.
- Privacy Policy
- Terms of Use
- Report Issue
- Trademarks