Update member
PUT /organizations/{org_id}/users/{user_id}
This endpoint updates the profile information for an existing member (user) within the organization.
Replace {org_id}
with your Organization ID and {user_id}
with the numeric ID of the member to update.
Authorization: Bearer {your_access_token}
Accept: application/json
X-Tallyfy-Client: APIClient
Content-Type: application/json
The request body requires a JSON object containing the member profile fields you wish to modify.
Refer to the #definitions/accountsInput
schema in Swagger for available fields. Common updatable fields include:
first_name
(string)last_name
(string)phone
(string)job_title
(string)job_description
(string)team
(string)timezone
(string, e.g.,Europe/London
)country_id
(integer): ID representing the user’s country.date_format
(string, e.g.,mm/dd/yyyy
,dd/mm/yyyy
).
Example Body:
{ "first_name": "Alicia", "job_title": "Senior Support Agent", "timezone": "America/New_York"}
const accessToken = 'YOUR_PERSONAL_ACCESS_TOKEN';const orgId = 'YOUR_ORGANIZATION_ID';const userId = 12345; // ID of the member to updateconst apiUrl = `https://go.tallyfy.com/api/organizations/${orgId}/users/${userId}`;
const updateData = { last_name: "Smith-Jones", phone: "+1-555-123-4567", job_title: "Project Lead"};
const headers = new Headers();headers.append('Authorization', `Bearer ${accessToken}`);headers.append('Accept', 'application/json');headers.append('X-Tallyfy-Client', 'APIClient');headers.append('Content-Type', 'application/json');
fetch(apiUrl, { method: 'PUT', headers: headers, body: JSON.stringify(updateData)}).then(response => { return response.json().then(data => { // Attempt to parse JSON regardless of status if (!response.ok) { console.error(`Failed to update member ${userId}:`, data); throw new Error(`HTTP error! status: ${response.status}`); } return data; // Pass successful data along });}).then(data => { console.log(`Successfully updated member ${userId}:`); console.log(JSON.stringify(data, null, 2));}).catch(error => { console.error(`Error updating member ${userId}:`, 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')user_id = 12345 # ID of the member to updateapi_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 = { 'job_title': 'Senior Developer', 'team': 'Engineering'}
response = Nonetry: response = requests.put(api_url, headers=headers, json=update_payload) response.raise_for_status() # Raises HTTPError for bad responses (4xx or 5xx)
updated_member = response.json() print(f'Successfully updated member {user_id}:') print(json.dumps(updated_member, indent=4))
except requests.exceptions.HTTPError as http_err: print(f"HTTP error occurred updating member {user_id}: {http_err}") if response is not None: print(f"Response Body: {response.text}")except requests.exceptions.RequestException as req_err: print(f"Request failed updating member {user_id}: {req_err}")except json.JSONDecodeError: print(f"Failed to decode JSON response for member update {user_id}") 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.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.io.IOException;// Requires a JSON library like Jackson or Gson// import com.fasterxml.jackson.databind.ObjectMapper;// import java.util.Map;// import java.util.HashMap;
public class UpdateMember { 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"); int userId = 12345; String apiUrl = String.format("https://go.tallyfy.com/api/organizations/%s/users/%d", orgId, userId);
// --- Payload Construction --- // Using Jackson/Gson recommended: /* ObjectMapper mapper = new ObjectMapper(); Map<String, Object> updateData = new HashMap<>(); updateData.put("job_title", "Team Lead"); updateData.put("phone", "+442071234567"); String jsonPayload; try { jsonPayload = mapper.writeValueAsString(updateData); } catch (Exception e) { System.err.println("Failed to serialize JSON: " + e.getMessage()); return; } */ // Simple manual JSON string: String jsonPayload = "{\"job_title\": \"Team Lead\", \"phone\": \"+442071234567\"}"; // --- End Payload ---
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();
try { HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) { System.out.println("Successfully updated member " + userId + ":"); System.out.println(response.body()); // TODO: Consider parsing JSON response } else { System.err.println("Failed to update member " + userId + ". 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/ioutil" "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", "team": "Operations", }
jsonData, err := json.Marshal(updateData) if err != nil { fmt.Printf("Error marshalling JSON: %v\n", err) return }
client := &http.Client{Timeout: 15 * time.Second} req, err := http.NewRequest(http.MethodPut, apiUrl, bytes.NewBuffer(jsonData)) if err != nil { fmt.Printf("Error creating update member request for ID %d: %v\n", userId, err) return }
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("Error executing update member request for ID %d: %v\n", userId, err) return } defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Printf("Error reading update member response body for ID %d: %v\n", userId, err) return }
if resp.StatusCode != http.StatusOK { fmt.Printf("Failed to update member %d. Status: %d\nBody: %s\n", userId, resp.StatusCode, string(body)) return }
fmt.Printf("Successfully updated member %d:\n", userId) // Pretty print JSON response var prettyJSON bytes.Buffer if err := json.Indent(&prettyJSON, body, "", " "); err == nil { fmt.Println(prettyJSON.String()) } else { fmt.Println(string(body)) } // TODO: Unmarshal JSON if needed}
#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) { try { value const & body = task.get(); if (response.status_code() == status_codes::OK) { std::wcout << L"Successfully updated member " << userId << L":\n" << body.serialize() << std::endl; } else { std::wcerr << L"Failed to update member " << userId << L". Status: " << response.status_code() << L"\nResponse: " << body.serialize() << std::endl; } } catch (const http_exception& e) { std::wcerr << L"HTTP exception during update member: " << e.what() << std::endl; } catch (const std::exception& e) { std::wcerr << L"Exception during update member response handling: " << e.what() << std::endl; } }); });}
int main() { try { value payload = value::object(); payload[U("job_title")] = value::string(U("Lead Engineer")); payload[U("team")] = value::string(U("Core Platform"));
UpdateTallyfyMember(12345, payload).wait(); // Replace user ID } 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.Text;using System.Text.Json;using System.Text.Json.Serialization; // For JsonIgnoreConditionusing System.Threading.Tasks;
public class TallyfyMemberUpdater{ private static readonly HttpClient client = new HttpClient();
public class MemberUpdatePayload { // Include properties for fields you might want to update // Use JsonIgnore to prevent sending nulls if only specific fields should be sent [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string FirstName { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string LastName { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string Phone { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string JobTitle { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string JobDescription { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string Team { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string Timezone { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public int? CountryId { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string DateFormat { get; set; } }
public static async Task UpdateMemberAsync(int userId, MemberUpdatePayload payload) { var accessToken = Environment.GetEnvironmentVariable("TALLYFY_ACCESS_TOKEN") ?? "YOUR_PERSONAL_ACCESS_TOKEN"; var orgId = Environment.GetEnvironmentVariable("TALLYFY_ORG_ID") ?? "YOUR_ORGANIZATION_ID"; var apiUrl = $"https://go.tallyfy.com/api/organizations/{orgId}/users/{userId}";
try { 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");
// Serialize payload, ignoring null properties var options = new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }; string jsonPayload = JsonSerializer.Serialize(payload, options); request.Content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.SendAsync(request); string responseBody = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode) // Expect 200 OK { Console.WriteLine($"Successfully updated member {userId}:"); 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 update member {userId}. Status: {response.StatusCode}"); Console.WriteLine($"Response: {responseBody}"); } } catch (HttpRequestException e) { Console.WriteLine($"Request Exception updating member {userId}: {e.Message}"); } catch (JsonException jsonEx) { Console.WriteLine($"JSON Serialization Error: {jsonEx.Message}"); } catch (Exception ex) { Console.WriteLine($"An unexpected error occurred: {ex.Message}"); } }
// Example Usage: // static async Task Main(string[] args) // { // var memberUpdate = new MemberUpdatePayload { // JobTitle = "Principal Engineer", // Team = "Platform" // }; // await UpdateMemberAsync(12345, memberUpdate); // Replace user ID // }}
A successful request returns a 200 OK
status code and a JSON object containing the full profile of the member after the update.
{ "data": { "id": 12345, "email": "specific.user@example.com", "first_name": "Alicia", // Updated value "last_name": "Smith-Jones", // Updated value "full_name": "Alicia Smith-Jones", "job_title": "Project Lead", // Updated value "phone": "+1-555-123-4567", // Updated value "timezone": "America/New_York", // Updated value // ... other user properties reflecting the current state ... "last_updated": "2024-05-21T12:00:00Z" // Timestamp reflects the update }}
If the user ID is not found, you lack permission, or the request body is invalid, an appropriate error status code (404
, 403
, 400
, 422
) will be returned.
A PUT endpoint that updates organization member roles with code examples in JavaScript Python Java and Go along with request headers body parameters and expected response format.
The PUT endpoint allows updating a group’s details including name description members and guests while returning the modified group data upon successful completion with appropriate status codes.
The GET endpoint retrieves detailed profile information of an organization member including their personal details roles permissions and optional related data like stats assets or groups based on the provided user ID.
The PUT endpoint allows modification of existing guest user details through their email address with updated information like name phone and company details while maintaining the original email address.
About Tallyfy
- 2025 Tallyfy, Inc.
- Privacy Policy
- Terms of Use
- Report Issue
- Trademarks