Agency time
Read the time recorded on a ticket
Requires an admin-tier user session whose user is a kept member of the agency, confirmed again on this request. Returns the ticket’s kept entries, newest day first, each with who worked, who entered it and whether the caller may change it, plus the total seconds. A running timer adds nothing to the total until it stops. Time is private to the agency: it appears in no customer read, history event or Mist tool, and root admin does not stand in for membership. A ticket no longer in the queue (withdrawn, deleted, Cowork-less or unknown) answers not-found.
GET
/
api
/
v202604
/
agencies
/
{agency}
/
tasks
/
{id}
/
time-entries
Read the time recorded on a ticket
curl --request GET \
--url https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries', 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://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"time_entries": [
{
"id": "0197d4e2-9b10-7a3d-8c21-5e6f7a8b9c01",
"user": {
"id": "4120",
"name": "Maya Okafor",
"kind": "user"
},
"logged_by": {
"id": "4120",
"name": "Maya Okafor",
"kind": "user"
},
"spent_on": "2026-10-15",
"duration_seconds": 5400,
"started_at": null,
"ended_at": null,
"running": false,
"note": "Cut the product video",
"editable": true,
"lock_version": 0
}
],
"total_seconds": 5400,
"status": 200,
"meta": {
"request_uuid": "0c5b1f0e-6d52-4e0a-9f6a-2d3a1e8f7b41",
"timestamp": "2026-10-15T21:10:05Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The agency key, as a root admin created it.
Maximum string length:
64Pattern:
^[a-z0-9_]+$The ticket UUID returned in an agency queue page.
⌘I
Read the time recorded on a ticket
curl --request GET \
--url https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries', 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://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/agencies/{agency}/tasks/{id}/time-entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"time_entries": [
{
"id": "0197d4e2-9b10-7a3d-8c21-5e6f7a8b9c01",
"user": {
"id": "4120",
"name": "Maya Okafor",
"kind": "user"
},
"logged_by": {
"id": "4120",
"name": "Maya Okafor",
"kind": "user"
},
"spent_on": "2026-10-15",
"duration_seconds": 5400,
"started_at": null,
"ended_at": null,
"running": false,
"note": "Cut the product video",
"editable": true,
"lock_version": 0
}
],
"total_seconds": 5400,
"status": 200,
"meta": {
"request_uuid": "0c5b1f0e-6d52-4e0a-9f6a-2d3a1e8f7b41",
"timestamp": "2026-10-15T21:10:05Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}