Tallyfy’s API lets administrators change any organization member’s role to admin or standard or light by sending a PUT request with the new role value to the member’s role endpoint and returning the updated member profile on success.
Update member
PUT /organizations/{org_id}/users/{user_id}
Updates a member’s profile within your Tallyfy organization. Requires admin permission. Members can also update their own profile via PUT /organizations/{org_id}/me.
Replace {org_id} with your Organization ID and {user_id} with the member’s numeric ID.
| Header | Value |
|---|---|
| Authorization | Bearer {your_access_token} |
| Accept | application/json |
| X-Tallyfy-Client | APIClient |
| Content-Type | application/json |
Send a JSON object with the fields you want to update. Three fields are required in every request:
Required fields:
first_name(string, max 32 chars) - can’t be a URL or disallowed namelast_name(string, max 32 chars) - can’t be a URL or disallowed nametimezone(string, e.g.,Europe/London)
Optional fields:
phone(string, max 20 chars)job_title(string, nullable)job_description(string, nullable)team(string, nullable)country_id(integer) - must match a valid country IDdate_format(string) - eithermm/dd/yyyyordd/mm/yyyystep_preferences(boolean)
{ "first_name": "Alicia", "last_name": "Smith-Jones", "job_title": "Senior Support Agent", "timezone": "America/New_York"}const accessToken = 'YOUR_PERSONAL_ACCESS_TOKEN';const orgId = 'YOUR_ORGANIZATION_ID';const userId = 12345;const apiUrl = `https://go.tallyfy.com/api/organizations/${orgId}/users/${userId}`;
const updateData = { first_name: "Alicia", last_name: "Smith-Jones", timezone: "America/New_York", phone: "+1-555-123-4567", job_title: "Project Lead"};
const response = await fetch(apiUrl, { method: 'PUT', headers: { 'Authorization': `Bearer ${accessToken}`, 'Accept': 'application/json', 'X-Tallyfy-Client': 'APIClient', 'Content-Type': 'application/json' }, body: JSON.stringify(updateData)});
const data = await response.json();if (!response.ok) { console.error(`Failed to update member ${userId}:`, data);} else { console.log(`Updated member ${userId}:`, JSON.stringify(data, null, 2));}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')user_id = 12345api_url = f'https://go.tallyfy.com/api/organizations/{org_id}/users/{user_id}'
headers = { 'Authorization': f'Bearer {access_token}', 'Accept': 'application/json', 'X-Tallyfy-Client': 'APIClient', 'Content-Type': 'application/json'}
update_payload = { 'first_name': 'Robert', 'last_name': 'Paulson', 'timezone': 'UTC', 'job_title': 'Senior Developer', 'team': 'Engineering'}
response = requests.put(api_url, headers=headers, json=update_payload)
if response.ok: print(f'Updated member {user_id}:') print(json.dumps(response.json(), indent=4))else: print(f'Error updating member {user_id}: {response.status_code}') print(response.text)import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
public class UpdateMember { public static void main(String[] args) throws Exception { String accessToken = System.getenv().getOrDefault("TALLYFY_ACCESS_TOKEN", "YOUR_PERSONAL_ACCESS_TOKEN"); String orgId = System.getenv().getOrDefault("TALLYFY_ORG_ID", "YOUR_ORGANIZATION_ID"); int userId = 12345; String apiUrl = String.format( "https://go.tallyfy.com/api/organizations/%s/users/%d", orgId, userId);
String jsonPayload = """ { "first_name": "Alicia", "last_name": "Smith-Jones", "timezone": "America/New_York", "job_title": "Team Lead", "phone": "+442071234567" } """;
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") .header("Content-Type", "application/json") .PUT(HttpRequest.BodyPublishers.ofString(jsonPayload)) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) { System.out.println("Updated member " + userId + ": " + response.body()); } else { System.err.println("Error " + response.statusCode() + ": " + response.body()); } }}package main
import ( "bytes" "encoding/json" "fmt" "io" "net/http" "os" "strconv" "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" } userId := 12345 apiUrl := fmt.Sprintf("https://go.tallyfy.com/api/organizations/%s/users/%s", orgId, strconv.Itoa(userId))
updateData := map[string]interface{}{ "first_name": "Robert", "last_name": "Paulson", "timezone": "UTC", "team": "Operations", }
jsonData, _ := json.Marshal(updateData)
client := &http.Client{Timeout: 15 * time.Second} req, _ := http.NewRequest(http.MethodPut, apiUrl, bytes.NewBuffer(jsonData)) req.Header.Set("Authorization", "Bearer "+accessToken) req.Header.Set("Accept", "application/json") req.Header.Set("X-Tallyfy-Client", "APIClient") req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req) if err != nil { fmt.Printf("Request failed: %v\n", err) return } defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
if resp.StatusCode != http.StatusOK { fmt.Printf("Error %d: %s\n", resp.StatusCode, string(body)) return }
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> UpdateTallyfyMember(int userId, const value& updatePayload){ utility::string_t accessToken = U("YOUR_PERSONAL_ACCESS_TOKEN"); utility::string_t orgId = U("YOUR_ORGANIZATION_ID"); utility::string_t userIdStr = utility::conversions::to_string_t(std::to_string(userId)); utility::string_t apiUrl = U("https://go.tallyfy.com/api/organizations/") + orgId + U("/users/") + userIdStr;
http_client client(apiUrl); http_request request(methods::PUT); 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")); request.headers().set_content_type(U("application/json")); request.set_body(updatePayload);
return client.request(request).then([userId](http_response response) { return response.extract_json().then([response, userId](pplx::task<value> task) { value const & body = task.get(); if (response.status_code() == status_codes::OK) { std::wcout << L"Updated member " << userId << L":\n" << body.serialize() << std::endl; } else { std::wcerr << L"Error " << response.status_code() << L": " << body.serialize() << std::endl; } }); });}
int main() { value payload = value::object(); payload[U("first_name")] = value::string(U("Alicia")); payload[U("last_name")] = value::string(U("Jones")); payload[U("timezone")] = value::string(U("UTC")); payload[U("job_title")] = value::string(U("Lead Engineer")); payload[U("team")] = value::string(U("Core Platform"));
UpdateTallyfyMember(12345, payload).wait(); return 0;}// Requires C++ REST SDK (Casablanca)using System.Net.Http;using System.Net.Http.Headers;using System.Text;using System.Text.Json;
var accessToken = Environment.GetEnvironmentVariable("TALLYFY_ACCESS_TOKEN") ?? "YOUR_PERSONAL_ACCESS_TOKEN";var orgId = Environment.GetEnvironmentVariable("TALLYFY_ORG_ID") ?? "YOUR_ORGANIZATION_ID";int userId = 12345;var apiUrl = $"https://go.tallyfy.com/api/organizations/{orgId}/users/{userId}";
var payload = new { first_name = "Alicia", last_name = "Smith-Jones", timezone = "America/New_York", job_title = "Principal Engineer", team = "Platform"};
using var client = new HttpClient();using var request = new HttpRequestMessage(HttpMethod.Put, apiUrl);request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));request.Headers.Add("X-Tallyfy-Client", "APIClient");request.Content = new StringContent( JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);var body = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode) { Console.WriteLine($"Updated member {userId}:"); using var doc = JsonDocument.Parse(body); Console.WriteLine(JsonSerializer.Serialize(doc.RootElement, new JsonSerializerOptions { WriteIndented = true }));} else { Console.WriteLine($"Error {response.StatusCode}: {body}");}A successful request returns 200 OK with the member’s full profile after the update.
{ "data": { "id": 12345, "email": "user@example.com", "first_name": "Alicia", "last_name": "Smith-Jones", "full_name": "Alicia Smith-Jones", "profile_pic": "https://...", "job_title": "Project Lead", "phone": "+1-555-123-4567", "team": "Operations", "timezone": "America/New_York", "UTC_offset": "-05:00", "country_id": 1, "date_format": "mm/dd/yyyy", "role": "standard", "status": "active", "created_at": "2024-01-15T10:30:00Z", "updated_at": "2026-02-25T14:20:00Z" }}If the user ID isn’t found, you don’t have permission, or the request body fails validation, you’ll get 404, 403, 400, or 422 respectively.
Tallyfy’s PUT endpoint for groups lets you rename a group or change its description and fully replace its member and guest lists by sending updated user IDs or email arrays to
/organizations/[org_id]/groups/[group_id] with code samples in JavaScript and Python and Java and Go and C++ and C#. Tallyfy’s API lets admin users fetch a specific organization member’s profile by their numeric user ID through a GET request and optionally include related data like stats and groups and preferences in the response.
Tallyfy’s API lets you modify an existing tag’s title (up to 30 characters and unique within your organization) or hex color code by sending a PUT request to
/organizations/[org_id]/tags/[tag_id] with code examples provided in JavaScript and Python and Java and Go and C++ and C#. Was this helpful?
About Tallyfy
- 2025 Tallyfy, Inc.
- Privacy Policy
- Terms of Use
- Report Issue
- Trademarks