Tallyfy’s API lets you change any member’s role to admin, standard, or light. Send a PUT request…
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…
Tallyfy’s API lets admin users fetch a specific organization member’s profile by their numeric…
Modify an existing tag’s title (up to 30 characters, unique per organization) or hex color code…
Was this helpful?
About Tallyfy
- 2025 Tallyfy, Inc.
- Privacy Policy
- Terms of Use
- Report Issue
- Trademarks