EmployeesGet timesheet approval status for a range of ISO weeks

Get timesheet approval status for a range of ISO weeks

Returns one ISO week's approval status plus up to N weeks before and after it, one period per week.

Returns a list of ApprovalTimesheetPeriodRead: prevCount weeks before week (oldest first), week itself, then nextCount weeks after it. Without prevCount and nextCount the list holds only week. Weeks crossing a year end are counted on from week 1 of year (see get-status-by-week-of-year), so the range is continuous.

Use it to:

  • Timesheet navigator: show the status of the current week and the four weeks before it.

Not for:

  • A single week — GET /v1/approval/timesheets/get-status-by-week-of-year returns an object instead of a list.

Behaviour:

  • Idempotent.
  • Safe to retry.
  • Changes are visible to the next read immediately.

Call first: GET /v1/user

Next: POST /v1/approval/timesheets/submit-period

See also: GET /v1/approval/timesheets/get-status-by-week-of-year

Not yet documented: examples (success); request → query params.

curl -X GET "https://app3.timelog.com/your-account/api/v1/approval/timesheets/get-status-range-by-nearby-week-of-year?employeeUserId=123&year=42&week=42&prevCount=10&nextCount=10&$expand=RejectedRegistrations&$page=25&$pagesize=25" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
{
  "Entities": [
    {
      "Properties": {
        "WeekDays": [
          {
            "ApprovalStatus": "Empty",
            "Hours": 3.14,
            "Date": "2024-12-25T10:00:00Z",
            "LastRejectedComment": "null",
            "RecentRejectedComment": {
              "ManagerName": "null",
              "ManagerComment": "example_string"
            },
            "RejectedRegistrations": [
              {
                "CustomerID": "null",
                "CustomerName": "John Doe",
                "CustomerNo": "example_string",
                "ProjectID": "null",
                "ProjectName": "John Doe",
                "ProjectNo": "example_string",
                "TaskID": "null",
                "TaskName": "John Doe",
                "TaskFullName": "John Doe",
                "IsFixedPrice": "null",
                "TaskNo": "example_string",
                "TaskIsActive": "null",
                "AbsenceCodeID": "null",
                "AbsenceName": "John Doe",
                "AbsenceCode": "example_string",
                "AbsenceIsActive": "null",
                "AdditionalTextIsRequired": true,
                "DefaultBillable": true,
                "IsETCProject": true,
                "ShowBillable": true,
                "AllocatedHour": "null",
                "TimeRegistrationID": 123,
                "EntityID": 123,
                "EntityType": 42,
                "UserID": 123,
                "Created": "2024-12-25T10:00:00Z",
                "CreatedBy": 42,
                "LastModified": "2024-12-25T10:00:00Z",
                "LastModifiedBy": 42,
                "IsBillable": true,
                "Status": true,
                "Date": "2024-12-25T10:00:00Z",
                "MonthlyPeriod": "example_string",
                "Comment": "example_string",
                "Hours": 3.14,
                "AdditionalTextField": "example_string",
                "InvoiceStatus": true,
                "TimeRegistrationApprovalStatus": 42,
                "TimeTrackingFormat": 42,
                "Minutes": 42,
                "BillableHours": 3.14,
                "BillableMinutes": 42,
                "IsFavourite": true,
                "StartTime": "null",
                "EndTime": "null",
                "IsTimestampOverlapping": true
              }
            ],
            "HasResubmittedRejectedRegistration": true
          }
        ],
        "PeriodStatus": "Empty",
        "LastRejectedComment": "null",
        "RecentRejectedComment": {
          "ManagerName": "null",
          "ManagerComment": "example_string"
        }
      },
      "Links": [
        {
          "Href": "example_string",
          "Rel": "example_string"
        }
      ],
      "Actions": [
        {}
      ]
    }
  ],
  "Links": [
    {
      "Href": "example_string",
      "Rel": "example_string"
    }
  ]
}
GET
/v1/approval/timesheets/get-status-range-by-nearby-week-of-year
GET
Base URLstring

Target server for requests. Edit to use your own host.

Bearer Token
Bearer Tokenstring
Required

OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp). The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user. > Not yet documented: how to obtain a token. > Not yet documented: token lifetime.

OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp). The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user. > Not yet documented: how to obtain a token. > Not yet documented: token lifetime.
query
employeeUserIdinteger
Required

User ID of the employee. Omitted -> 404 action-not-matched. Refers to UserRead.UserID. Look up valid values with GET /v1/user.

Format: int32
query
yearinteger
Required

Year of the centre week.

Format: int32
query
weekinteger
Required

ISO week number of the centre week (not range-checked).

Format: int32
query
prevCountinteger

Number of weeks before the centre week. Negative -> 500 (Enumerable.Range).

Format: int32
query
nextCountinteger

Number of weeks after the centre week. Negative -> 500.

Format: int32
query
$expandstring

Expansion of the per-day rejected registrations. Allowed values: | Value | Name | Meaning | |---|---|---| | RejectedRegistrations | RejectedRegistrations | Fill RejectedRegistrations on each Rejected day (case-insensitive; other values ignored). |

Options: RejectedRegistrations
query
$pageinteger

Not a response pager: applied to each Rejected day's RejectedRegistrations list.

query
$pagesizeinteger

Page size of each Rejected day's RejectedRegistrations list.

Request Preview
Response

Response will appear here after sending the request

Authentication

header
Authorizationstring
Required

Bearer token. OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).

The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.

Not yet documented: how to obtain a token.

Not yet documented: token lifetime.

Query Parameters

employeeUserIdinteger
Required

User ID of the employee. Omitted -> 404 action-not-matched.

Refers to UserRead.UserID. Look up valid values with GET /v1/user.

yearinteger
Required

Year of the centre week.

weekinteger
Required

ISO week number of the centre week (not range-checked).

prevCountinteger

Number of weeks before the centre week. Negative -> 500 (Enumerable.Range).

nextCountinteger

Number of weeks after the centre week. Negative -> 500.

$expandstring

Expansion of the per-day rejected registrations.

Allowed values:

ValueNameMeaning
RejectedRegistrationsRejectedRegistrationsFill RejectedRegistrations on each Rejected day (case-insensitive; other values ignored).
Allowed values:RejectedRegistrations
$pageinteger

Not a response pager: applied to each Rejected day's RejectedRegistrations list.

$pagesizeinteger

Page size of each Rejected day's RejectedRegistrations list.

Responses

Entitiesarray

Omitted (not []) when the list is empty.

Linksarray