HubstaffDeveloper Portal

Manual time requests

List and approve/deny manual time entry requests

Recent changes (1)
  1. New endpoint

    Manual time requests API

    Manual time requests are now available in Public API v2 for listing, reading, and approving or denying requests.

    Use the organization-scoped list endpoint to filter requests by date, update time, status, member, project, task, or team. Status updates support approving and denying requests, including denial reasons and approval conflict options.

    See the Manual time requests guide for request/response examples and conflict handling.

Get manual time request

GET/v2/manual_time_requests/{manual_time_request_id}

Returns the manual time request with the given ID.

Parameters

NameInTypeDescription
manual_time_request_idrequired
pathinteger (int32)

Responses

200
object
  • manual_time_requestobject
    object

    ManualTimeRequest model

    • idinteger required

      Manual time request ID

    • member_idinteger required

      Member (user) ID who submitted the request

    • project_idinteger required

      Project ID

    • task_idinteger

      Task ID if associated with a task

    • start_timestring required

      Start time of the manual time entry

    • stop_timestring required

      Stop time of the manual time entry

    • submitted_atstring required

      When the request was submitted

    • approved_atstring

      When the request was approved

    • denied_atstring

      When the request was denied

    • duration_secondsinteger required

      Duration in seconds

    • notesstring

      Notes for the time entry

    • statusstring required

      Status: submitted, approved, or denied

    • reviewer_idinteger

      ID of user who approved or denied (approved_by when approved, denied_by when denied)

    • denial_reasonstring

      Reason for denial (only present when status is denied)

    • organization_idinteger required

      Organization ID

    • datestring required

      Calendar date (org tz) from start_time. The list date[] filter is overlap on starts/stops (in_range).

    • billableboolean required

      Whether the time is billable

    • reason_to_submitstring required

      Reason the manual time was submitted

    • submitted_by_idinteger required

      User ID who submitted the request

    • approved_by_idinteger

      User ID who approved the request

    • denied_by_idinteger

      User ID who denied the request

    • attachment_original_filenamestring

      Original filename of attachment if present

    • created_atstring required

      When the record was created

    • updated_atstring required

      When the record was last updated

Example response
json
{
  "manual_time_request": {
    "id": 0,
    "member_id": 0,
    "project_id": 0,
    "task_id": 0,
    "start_time": "2024-01-15T10:30:00Z",
    "stop_time": "2024-01-15T10:30:00Z",
    "submitted_at": "2024-01-15T10:30:00Z",
    "approved_at": "2024-01-15T10:30:00Z",
    "denied_at": "2024-01-15T10:30:00Z",
    "duration_seconds": 0,
    "notes": "string",
    "status": "string",
    "reviewer_id": 0,
    "denial_reason": "string",
    "organization_id": 0,
    "date": "2024-01-15",
    "billable": false,
    "reason_to_submit": "string",
    "submitted_by_id": 0,
    "approved_by_id": 0,
    "denied_by_id": 0,
    "attachment_original_filename": "string",
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
}
400Invalid parameters
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
401Unauthorized
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
403API access is only for organizations on an active plan
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
404Could not find record
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
429Rate limit exceeded
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}

Update manual time request status

PUT/v2/manual_time_requests/{manual_time_request_id}/status

Approves or denies a submitted manual time request.

Parameters

NameInTypeDescription
manual_time_request_idrequired
pathinteger (int32)

Request body

object

Update manual time request status

  • statusstring required

    New status for the request: approved or denied.

  • denial_reasonstring

    Required when status is denied. Reason recorded on the request.

  • accept_collisionsboolean

    Confirm approval when the request overlaps existing time the approver is authorized to override. Covers ordinary tracked-time collisions and associated data within role permissions: unprocessed paid time, client invoices, user invoices, timesheets, and integration-synced time. May remove time from unprocessed payments and leave invoices or integrations out of sync.

  • allow_above_project_budgetboolean

    Allow approval when the created activity would exceed the project budget only.

  • discard_exceeding_hoursboolean

    Approve only time within member limits. Cannot be combined with increase_limit.

  • increase_limitboolean

    Automatically increase exceeded daily and weekly member limits. Organization owners and managers only.

Responses

200
object
  • manual_time_requestobject
    object

    ManualTimeRequest model

    • idinteger required

      Manual time request ID

    • member_idinteger required

      Member (user) ID who submitted the request

    • project_idinteger required

      Project ID

    • task_idinteger

      Task ID if associated with a task

    • start_timestring required

      Start time of the manual time entry

    • stop_timestring required

      Stop time of the manual time entry

    • submitted_atstring required

      When the request was submitted

    • approved_atstring

      When the request was approved

    • denied_atstring

      When the request was denied

    • duration_secondsinteger required

      Duration in seconds

    • notesstring

      Notes for the time entry

    • statusstring required

      Status: submitted, approved, or denied

    • reviewer_idinteger

      ID of user who approved or denied (approved_by when approved, denied_by when denied)

    • denial_reasonstring

      Reason for denial (only present when status is denied)

    • organization_idinteger required

      Organization ID

    • datestring required

      Calendar date (org tz) from start_time. The list date[] filter is overlap on starts/stops (in_range).

    • billableboolean required

      Whether the time is billable

    • reason_to_submitstring required

      Reason the manual time was submitted

    • submitted_by_idinteger required

      User ID who submitted the request

    • approved_by_idinteger

      User ID who approved the request

    • denied_by_idinteger

      User ID who denied the request

    • attachment_original_filenamestring

      Original filename of attachment if present

    • created_atstring required

      When the record was created

    • updated_atstring required

      When the record was last updated

Example response
json
{
  "manual_time_request": {
    "id": 0,
    "member_id": 0,
    "project_id": 0,
    "task_id": 0,
    "start_time": "2024-01-15T10:30:00Z",
    "stop_time": "2024-01-15T10:30:00Z",
    "submitted_at": "2024-01-15T10:30:00Z",
    "approved_at": "2024-01-15T10:30:00Z",
    "denied_at": "2024-01-15T10:30:00Z",
    "duration_seconds": 0,
    "notes": "string",
    "status": "string",
    "reviewer_id": 0,
    "denial_reason": "string",
    "organization_id": 0,
    "date": "2024-01-15",
    "billable": false,
    "reason_to_submit": "string",
    "submitted_by_id": 0,
    "approved_by_id": 0,
    "denied_by_id": 0,
    "attachment_original_filename": "string",
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
}
400Invalid parameters
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
401Unauthorized
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
403API access is only for organizations on an active plan
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
404Could not find record
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
429Rate limit exceeded
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}

List manual time requests

GET/v2/organizations/{organization_id}/manual_time_requests

Date range filter (date[start]/date[stop]) returns requests whose time span overlaps the given organization-local dates: it converts the dates to the org’s day range and applies in_range (overlap on starts_at/stops_at). This is not an exact filter on the date response field (see entity docs). Overnight entries or tz shifts may cause an entry to overlap a date even if its date column differs. Both bounds are required (otherwise 400).

Parameters

NameInTypeDescription
organization_idrequired
pathinteger (int32)
page_start_id
queryinteger (int32)
The page start ID.
page_limit
queryinteger (int32)
The default page size
date[start]
querystring (date)
Start date (ISO 8601)
date[stop]
querystring (date)
Stop date (ISO 8601, Inclusive)
updated_at[start]
querystring (date-time)
updated_at[stop]
querystring (date-time)
status
querystring
Possible valuessubmittedapproveddenied
user_ids
queryarray integer[]
List of user IDs
project_ids
queryarray integer[]
List of project IDs
task_ids
queryarray integer[]
List of task IDs
team_ids
queryarray integer[]
List of team IDs
include
queryarray string[]
Specify related data to side load.
Possible valuesusersprojectstasks

Responses

200
object
  • manual_time_requestsarray
    array<object>
    items
    object

    ManualTimeRequest model

    • idinteger required

      Manual time request ID

    • member_idinteger required

      Member (user) ID who submitted the request

    • project_idinteger required

      Project ID

    • task_idinteger

      Task ID if associated with a task

    • start_timestring required

      Start time of the manual time entry

    • stop_timestring required

      Stop time of the manual time entry

    • submitted_atstring required

      When the request was submitted

    • approved_atstring

      When the request was approved

    • denied_atstring

      When the request was denied

    • duration_secondsinteger required

      Duration in seconds

    • notesstring

      Notes for the time entry

    • statusstring required

      Status: submitted, approved, or denied

    • reviewer_idinteger

      ID of user who approved or denied (approved_by when approved, denied_by when denied)

    • denial_reasonstring

      Reason for denial (only present when status is denied)

    • organization_idinteger required

      Organization ID

    • datestring required

      Calendar date (org tz) from start_time. The list date[] filter is overlap on starts/stops (in_range).

    • billableboolean required

      Whether the time is billable

    • reason_to_submitstring required

      Reason the manual time was submitted

    • submitted_by_idinteger required

      User ID who submitted the request

    • approved_by_idinteger

      User ID who approved the request

    • denied_by_idinteger

      User ID who denied the request

    • attachment_original_filenamestring

      Original filename of attachment if present

    • created_atstring required

      When the record was created

    • updated_atstring required

      When the record was last updated

Example response
json
{
  "manual_time_requests": [
    {
      "id": 0,
      "member_id": 0,
      "project_id": 0,
      "task_id": 0,
      "start_time": "2024-01-15T10:30:00Z",
      "stop_time": "2024-01-15T10:30:00Z",
      "submitted_at": "2024-01-15T10:30:00Z",
      "approved_at": "2024-01-15T10:30:00Z",
      "denied_at": "2024-01-15T10:30:00Z",
      "duration_seconds": 0,
      "notes": "string",
      "status": "string",
      "reviewer_id": 0,
      "denial_reason": "string",
      "organization_id": 0,
      "date": "2024-01-15",
      "billable": false,
      "reason_to_submit": "string",
      "submitted_by_id": 0,
      "approved_by_id": 0,
      "denied_by_id": 0,
      "attachment_original_filename": "string",
      "created_at": "2024-01-15T10:30:00Z",
      "updated_at": "2024-01-15T10:30:00Z"
    }
  ]
}
400Invalid parameters
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
401Unauthorized
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
403API access is only for organizations on an active plan
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
404Could not find record
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}
429Rate limit exceeded
object

Hubstaff_Public_V2_Entities_Error model

  • codestring required

    Legacy string error code for backward compatibility

  • error_codeinteger

    Numeric error code for i18n/programmatic handling. Ranges: 10000-10999 (Auth), 11000-11999 (Validation), 12000-12999 (Resource), 13000-13999 (Rate Limit), 14000-14999 (Time Entry/Activity), 15000-15999 (System). See GET /v2/error_codes for full reference.

  • errorstring required

    Human-readable error message

  • detailsarray

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    array<string>

    Per-attribute validation errors: [{attribute, error}]. Present on validation failures.

    items
    string
Example response
json
{
  "code": "string",
  "error_code": 0,
  "error": "string",
  "details": [
    "string"
  ]
}