This is the Time Tracker App API Documentation
This documentation aims to provide all the information you need to work with our API.
This API is not authenticated.
Field to paginate. Defaults to true.
Field to paginate. Defaults to null.
Field to paginate. Defaults to null.
Field to filterBy. Defaults to null.
Field to filterValue. Defaults to null.
curl --request GET \
--get "https://time-tracker-backend.pinnguaq.com/api/user/activities?paginate=1&page=1&perPage=1&filterBy=name&filterValue=Car" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"success": true,
"status_code": 200,
"message": [
"Record fetched successfully."
],
"data": {
"list": [
{
"id": 3,
"name": "Doe",
"created_at": "2024-03-04T08:46:33.000000Z",
"updated_at": "2024-03-04T08:46:33.000000Z"
},
{
"id": 2,
"name": "Jane",
"created_at": "2024-03-04T08:46:33.000000Z",
"updated_at": "2024-03-04T08:46:33.000000Z"
},
{
"id": 1,
"name": "John",
"created_at": "2024-03-04T08:46:33.000000Z",
"updated_at": "2024-03-04T08:46:33.000000Z"
}
],
"pagination": {
"total": 3,
"per_page": 10,
"current": 1,
"first": 1,
"last": 1,
"previous": null,
"next": null,
"pages": [
1
],
"from": 1,
"to": 3
}
}
}
APIs for managing Auth
curl --request POST \
"https://time-tracker-backend.pinnguaq.com/api/user/login" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"firebase_token\": \"ea\"
}"
Exchanges an existing (possibly expired-but-within-refresh-window) JWT for a new one. Public — the endpoint reads the current token from the Authorization header so the access-token expiry middleware can't reject us first.
curl --request POST \
"https://time-tracker-backend.pinnguaq.com/api/user/refresh" \
--header "Content-Type: application/json" \
--header "Accept: application/json" curl --request POST \
"https://time-tracker-backend.pinnguaq.com/api/user/logout" \
--header "Content-Type: application/json" \
--header "Accept: application/json" curl --request GET \
--get "https://time-tracker-backend.pinnguaq.com/api/user/profile" \
--header "Content-Type: application/json" \
--header "Accept: application/json" curl --request PUT \
"https://time-tracker-backend.pinnguaq.com/api/user/profile/update" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"first_name\": \"wpqgmarfqjdjzpcxx\",
\"last_name\": \"cazghofuzxemhetebq\",
\"phone\": \"xlelcfzffleymee\",
\"password\": \"\\\\W2q_,cet\\/=,lp\",
\"picture\": \"http:\\/\\/www.tillman.com\\/assumenda-omnis-officiis-dolor-pariatur-tenetur-doloribus-vitae-perferendis.html\",
\"province\": \"NU\"
}"
curl --request DELETE \
"https://time-tracker-backend.pinnguaq.com/api/user/profile" \
--header "Content-Type: application/json" \
--header "Accept: application/json" Field to paginate. Defaults to true.
Field to paginate. Defaults to null.
Field to paginate. Defaults to null.
Field to filterBy. Defaults to null.
Field to filterValue. Defaults to null.
curl --request GET \
--get "https://time-tracker-backend.pinnguaq.com/api/user/capabilities?paginate=1&page=1&perPage=1&filterBy=name&filterValue=Car" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"success": true,
"status_code": 200,
"message": [
"Record fetched successfully."
],
"data": {
"list": [
{
"id": 3,
"name": "Doe",
"created_at": "2024-03-04T08:46:13.000000Z",
"updated_at": "2024-03-04T08:46:13.000000Z"
},
{
"id": 2,
"name": "Jane",
"created_at": "2024-03-04T08:46:13.000000Z",
"updated_at": "2024-03-04T08:46:13.000000Z"
},
{
"id": 1,
"name": "John",
"created_at": "2024-03-04T08:46:13.000000Z",
"updated_at": "2024-03-04T08:46:13.000000Z"
}
],
"pagination": {
"total": 3,
"per_page": 10,
"current": 1,
"first": 1,
"last": 1,
"previous": null,
"next": null,
"pages": [
1
],
"from": 1,
"to": 3
}
}
}
Field to paginate. Defaults to true.
Field to paginate. Defaults to null.
Field to paginate. Defaults to null.
Field to filterBy. Defaults to null.
Field to filterValue. Defaults to null.
curl --request GET \
--get "https://time-tracker-backend.pinnguaq.com/api/user/divisions?paginate=1&page=1&perPage=1&filterBy=name&filterValue=Car" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"success": true,
"status_code": 200,
"message": [
"Record fetched successfully."
],
"data": [
{
"id": 3,
"name": "Doe",
"created_at": "2024-02-28T15:43:48.000000Z",
"updated_at": "2024-02-28T15:43:48.000000Z"
},
{
"id": 2,
"name": "Jane",
"created_at": "2024-02-28T15:43:48.000000Z",
"updated_at": "2024-02-28T15:43:48.000000Z"
},
{
"id": 1,
"name": "John",
"created_at": "2024-02-28T15:43:48.000000Z",
"updated_at": "2024-02-28T15:43:48.000000Z"
}
]
}
Field to paginate. Defaults to true.
Field to paginate. Defaults to null.
Field to paginate. Defaults to null.
Field to filterBy. Defaults to null.
Field to filterValue. Defaults to null.
curl --request GET \
--get "https://time-tracker-backend.pinnguaq.com/api/user/projects?paginate=1&page=1&perPage=1&filterBy=name&filterValue=Car" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"success": true,
"status_code": 200,
"message": [
"Record fetched successfully."
],
"data": {
"list": [
{
"id": 3,
"project_no": "34545",
"name": "Doe",
"created_at": "2024-03-04T08:49:22.000000Z",
"updated_at": "2024-03-04T08:49:22.000000Z"
},
{
"id": 2,
"project_no": "23555",
"name": "Jane",
"created_at": "2024-03-04T08:49:22.000000Z",
"updated_at": "2024-03-04T08:49:22.000000Z"
},
{
"id": 1,
"project_no": "14345",
"name": "John",
"created_at": "2024-03-04T08:49:22.000000Z",
"updated_at": "2024-03-04T08:49:22.000000Z"
}
],
"pagination": {
"total": 3,
"per_page": 10,
"current": 1,
"first": 1,
"last": 1,
"previous": null,
"next": null,
"pages": [
1
],
"from": 1,
"to": 3
}
}
}
curl --request DELETE \
"https://time-tracker-backend.pinnguaq.com/api/user/time-card-templates/default" \
--header "Content-Type: application/json" \
--header "Accept: application/json" curl --request PUT \
"https://time-tracker-backend.pinnguaq.com/api/user/time-card-templates/dolores/default" \
--header "Content-Type: application/json" \
--header "Accept: application/json" Never paginated: MAX_PER_USER caps the list well below a page, and the app applies templates from a local cache of this exact payload.
curl --request GET \
--get "https://time-tracker-backend.pinnguaq.com/api/user/time-card-templates" \
--header "Content-Type: application/json" \
--header "Accept: application/json" cache-control
: no-cache, private
content-type
: application/json
vary
: Origin
{
"success": false,
"status": 401,
"message": [
"You are not authenticated. Please login."
],
"data": []
}
curl --request POST \
"https://time-tracker-backend.pinnguaq.com/api/user/time-card-templates" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"fesceooyy\",
\"division_id\": 16,
\"division_name\": \"tfxggzyleogofcmsizpspjz\",
\"is_default\": true,
\"repeat_days\": [
1
],
\"rows\": \"xw\"
}"
Rows are replaced rather than diffed: the client always sends the full card, and a positional diff would be more code for an identical result.
The ID of the time card template.
curl --request PUT \
"https://time-tracker-backend.pinnguaq.com/api/user/time-card-templates/1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"eqwzszuweirjgywkbcmwzqe\",
\"division_id\": 10,
\"division_name\": \"gqeextiupi\",
\"is_default\": false,
\"repeat_days\": [
1
],
\"rows\": \"ssegiqnjvsqkbx\"
}"
The pointer is cleared explicitly rather than left to the FK's nullOnDelete: SQLite only enforces referential actions when the foreign_keys pragma is on, so relying on it would mean the tests and production MySQL disagreed about whether the default survived a delete. The constraint stays in place as a backstop for any other delete path.
The ID of the time card template.
curl --request DELETE \
"https://time-tracker-backend.pinnguaq.com/api/user/time-card-templates/1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" Field to paginate. Defaults to true.
Field to paginate. Defaults to null.
Field to paginate. Defaults to null.
Field to filterBy. Defaults to null.
Field to filterValue. Defaults to null.
curl --request GET \
--get "https://time-tracker-backend.pinnguaq.com/api/user/time-records?paginate=1&page=1&perPage=1&filterBy=date&filterValue=2024-02-28" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"success": true,
"status_code": 200,
"message": [
"Record fetched successfully."
],
"data": {
"list": [
{
"id": 6,
"user_id": "9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"division_id": 1,
"capability_id": 1,
"activity_id": 1,
"project_id": 1,
"user": {
"id": "9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"username": "pinnguaq-9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"first_name": "Updated John2",
"last_name": "Updated Do2e",
"phone": "98765432120",
"email": "updated.j12ohn.doe@example.com",
"email_verified_at": null,
"role": "user",
"picture": "profile.png",
"created_at": "2024-03-04T08:47:58.000000Z",
"updated_at": "2024-03-04T08:47:58.000000Z",
"deleted_at": null
},
"capability": {
"id": 1,
"name": "John",
"created_at": "2024-03-04T08:46:13.000000Z",
"updated_at": "2024-03-04T08:46:13.000000Z"
},
"activity": {
"id": 1,
"name": "John",
"created_at": "2024-03-04T08:46:33.000000Z",
"updated_at": "2024-03-04T08:46:33.000000Z"
},
"project": {
"id": 1,
"project_no": "1",
"name": "John",
"created_at": "2024-03-04T08:49:22.000000Z",
"updated_at": "2024-03-04T08:49:22.000000Z"
},
"date": "2024-03-01",
"note": "This is a sample note",
"time_spent": "2 hours",
"created_at": "2024-03-04T08:50:46.000000Z",
"updated_at": "2024-03-04T08:50:46.000000Z"
},
{
"id": 5,
"user_id": "9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"division_id": 1,
"capability_id": 1,
"activity_id": 1,
"project_id": 1,
"user": {
"id": "9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"username": "pinnguaq-9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"first_name": "Updated John2",
"last_name": "Updated Do2e",
"phone": "98765432120",
"email": "updated.j12ohn.doe@example.com",
"email_verified_at": null,
"role": "user",
"picture": "profile.png",
"created_at": "2024-03-04T08:47:58.000000Z",
"updated_at": "2024-03-04T08:47:58.000000Z",
"deleted_at": null
},
"capability": {
"id": 1,
"name": "John",
"created_at": "2024-03-04T08:46:13.000000Z",
"updated_at": "2024-03-04T08:46:13.000000Z"
},
"activity": {
"id": 1,
"name": "John",
"created_at": "2024-03-04T08:46:33.000000Z",
"updated_at": "2024-03-04T08:46:33.000000Z"
},
"project": {
"id": 1,
"project_no": "1",
"name": "John",
"created_at": "2024-03-04T08:49:22.000000Z",
"updated_at": "2024-03-04T08:49:22.000000Z"
},
"date": "2024-03-01",
"note": "This is a sample note",
"time_spent": "2 hours",
"created_at": "2024-03-04T08:49:43.000000Z",
"updated_at": "2024-03-04T08:49:43.000000Z"
},
{
"id": 4,
"user_id": "9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"division_id": 1,
"capability_id": 1,
"activity_id": 1,
"project_id": 1,
"user": {
"id": "9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"username": "pinnguaq-9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"first_name": "Updated John2",
"last_name": "Updated Do2e",
"phone": "98765432120",
"email": "updated.j12ohn.doe@example.com",
"email_verified_at": null,
"role": "user",
"picture": "profile.png",
"created_at": "2024-03-04T08:47:58.000000Z",
"updated_at": "2024-03-04T08:47:58.000000Z",
"deleted_at": null
},
"capability": {
"id": 1,
"name": "John",
"created_at": "2024-03-04T08:46:13.000000Z",
"updated_at": "2024-03-04T08:46:13.000000Z"
},
"activity": {
"id": 1,
"name": "John",
"created_at": "2024-03-04T08:46:33.000000Z",
"updated_at": "2024-03-04T08:46:33.000000Z"
},
"project": {
"id": 1,
"project_no": "1",
"name": "John",
"created_at": "2024-03-04T08:49:22.000000Z",
"updated_at": "2024-03-04T08:49:22.000000Z"
},
"date": "2024-03-02",
"note": "This is a sample note",
"time_spent": "2 hours",
"created_at": "2024-03-04T08:49:38.000000Z",
"updated_at": "2024-03-04T08:49:38.000000Z"
}
],
"pagination": {
"total": 3,
"per_page": 10,
"current": 1,
"first": 1,
"last": 1,
"previous": null,
"next": null,
"pages": [
1
],
"from": 1,
"to": 3
}
}
}
Store new divsion
curl --request POST \
"https://time-tracker-backend.pinnguaq.com/api/user/time-records" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"division_id\": 14,
\"capability_id\": 14,
\"date\": \"2026-10-15T14:47:12\",
\"time_spent\": \"et\",
\"province\": \"NU\",
\"google_event_id\": \"omnis\",
\"version\": 2,
\"activity_id\": 11,
\"activity_info\": \"at\",
\"project_id\": 19,
\"note\": \"iusto\"
}"
{
"success": true,
"status_code": 201,
"message": [
"Record created successfully."
],
"data": {
"id": 6,
"user_id": "9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"division_id": 1,
"capability_id": 1,
"activity_id": 1,
"project_id": 1,
"date": "2024-03-01",
"note": "This is a sample note",
"time_spent": "2 hours",
"created_at": "2024-03-04T08:50:46.000000Z",
"updated_at": "2024-03-04T08:50:46.000000Z",
"deleted_at": null
}
}
Show existing by id
The ID of the time record.
curl --request GET \
--get "https://time-tracker-backend.pinnguaq.com/api/user/time-records/36" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"success": true,
"status_code": 200,
"message": [
"Record fetched successfully."
],
"data": {
"id": 4,
"user_id": "9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"division_id": 1,
"capability_id": 1,
"activity_id": 1,
"project_id": 1,
"user": {
"id": "9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"username": "pinnguaq-9b7b60d5-20bd-40cd-ac33-f8bf84749c02",
"first_name": "Updated John2",
"last_name": "Updated Do2e",
"phone": "98765432120",
"email": "updated.j12ohn.doe@example.com",
"email_verified_at": null,
"role": "user",
"picture": "profile.png",
"created_at": "2024-03-04T08:47:58.000000Z",
"updated_at": "2024-03-04T08:47:58.000000Z",
"deleted_at": null
},
"capability": {
"id": 1,
"name": "John",
"created_at": "2024-03-04T08:46:13.000000Z",
"updated_at": "2024-03-04T08:46:13.000000Z"
},
"activity": {
"id": 1,
"name": "John",
"created_at": "2024-03-04T08:46:33.000000Z",
"updated_at": "2024-03-04T08:46:33.000000Z"
},
"project": {
"id": 1,
"project_no": "1",
"name": "John",
"created_at": "2024-03-04T08:49:22.000000Z",
"updated_at": "2024-03-04T08:49:22.000000Z"
},
"date": "2024-03-02",
"note": "This is a sample note",
"time_spent": "2 hours",
"created_at": "2024-03-04T08:49:38.000000Z",
"updated_at": "2024-03-04T08:49:38.000000Z"
}
}
update by id
The ID of the time record.
curl --request PUT \
"https://time-tracker-backend.pinnguaq.com/api/user/time-records/36" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"division_id\": 12,
\"capability_id\": 4,
\"date\": \"2026-10-15T14:47:12\",
\"time_spent\": \"sed\",
\"province\": \"PE\",
\"google_event_id\": \"et\",
\"version\": 2,
\"activity_id\": 9,
\"activity_info\": \"sunt\",
\"project_id\": 19,
\"note\": \"magni\"
}"
{
"success": true,
"status_code": 200,
"message": [
"Record updated successfully."
],
"data": true
}
The ID of the time record.
curl --request DELETE \
"https://time-tracker-backend.pinnguaq.com/api/user/time-records/36" \
--header "Content-Type: application/json" \
--header "Accept: application/json" [Empty response]