Update time entry
curl --request PUT \
--url https://cloud.kaneo.app/api/time-entry/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"startTime": "2026-01-31T09:00:00Z",
"endTime": "2026-01-31T09:00:00Z",
"description": "<string>"
}
'import requests
url = "https://cloud.kaneo.app/api/time-entry/{id}"
payload = {
"startTime": "2026-01-31T09:00:00Z",
"endTime": "2026-01-31T09:00:00Z",
"description": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
startTime: '2026-01-31T09:00:00Z',
endTime: '2026-01-31T09:00:00Z',
description: '<string>'
})
};
fetch('https://cloud.kaneo.app/api/time-entry/{id}', 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://cloud.kaneo.app/api/time-entry/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'startTime' => '2026-01-31T09:00:00Z',
'endTime' => '2026-01-31T09:00:00Z',
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cloud.kaneo.app/api/time-entry/{id}"
payload := strings.NewReader("{\n \"startTime\": \"2026-01-31T09:00:00Z\",\n \"endTime\": \"2026-01-31T09:00:00Z\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://cloud.kaneo.app/api/time-entry/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"startTime\": \"2026-01-31T09:00:00Z\",\n \"endTime\": \"2026-01-31T09:00:00Z\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.kaneo.app/api/time-entry/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"startTime\": \"2026-01-31T09:00:00Z\",\n \"endTime\": \"2026-01-31T09:00:00Z\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"taskId": "<string>",
"userId": "<string>",
"description": "<string>",
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z",
"duration": 123,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}"<string>""<string>"Time Entries
Update time entry
Replace a time entry’s start, end, and description. Setting endTime closes a running entry and fills in its duration.
PUT
/
time-entry
/
{id}
Update time entry
curl --request PUT \
--url https://cloud.kaneo.app/api/time-entry/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"startTime": "2026-01-31T09:00:00Z",
"endTime": "2026-01-31T09:00:00Z",
"description": "<string>"
}
'import requests
url = "https://cloud.kaneo.app/api/time-entry/{id}"
payload = {
"startTime": "2026-01-31T09:00:00Z",
"endTime": "2026-01-31T09:00:00Z",
"description": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
startTime: '2026-01-31T09:00:00Z',
endTime: '2026-01-31T09:00:00Z',
description: '<string>'
})
};
fetch('https://cloud.kaneo.app/api/time-entry/{id}', 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://cloud.kaneo.app/api/time-entry/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'startTime' => '2026-01-31T09:00:00Z',
'endTime' => '2026-01-31T09:00:00Z',
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cloud.kaneo.app/api/time-entry/{id}"
payload := strings.NewReader("{\n \"startTime\": \"2026-01-31T09:00:00Z\",\n \"endTime\": \"2026-01-31T09:00:00Z\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://cloud.kaneo.app/api/time-entry/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"startTime\": \"2026-01-31T09:00:00Z\",\n \"endTime\": \"2026-01-31T09:00:00Z\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.kaneo.app/api/time-entry/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"startTime\": \"2026-01-31T09:00:00Z\",\n \"endTime\": \"2026-01-31T09:00:00Z\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"taskId": "<string>",
"userId": "<string>",
"description": "<string>",
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z",
"duration": 123,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}"<string>""<string>"Authorizations
API key or session token (Bearer)
Path Parameters
Body
application/json
Response
The updated time entry
Null once the user who logged the time has been removed.
Null while the timer is still running.
Elapsed seconds, filled in once the entry has an endTime.
Was this page helpful?
⌘I