Create a batch of time sheets

Create or update up to 500 time sheets for a company in one request.

Set batch_action to create to create new time sheets, or to update to update existing time sheets. One action applies to the whole batch.

Gusto validates every time sheet when it receives the request. If one time sheet is invalid, Gusto rejects the whole batch with a 422 response and processes no time sheets.
Gusto also rejects the batch if two time sheets for the same employee or contractor have overlapping shifts.

Asynchronous processing

This endpoint triggers an asynchronous operation—the response will return immediately with a status of pending while the batch processes in the background.

To track completion:

Subscribe (via POST /v1/webhook_subscriptions) to TimeSheetsBatch webhook events

Use the returned batch UUID when calling Get a batch of time sheets.

scope: time_sheet:write

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Path Params
string
required

The UUID of the company

Body Params

Request body for creating a batch of time sheets.

string
required
length ≤ 255

A unique key for this batch, generated by the partner. It must be unique per company for your application. A request that reuses a key is rejected, so a batch is never processed twice.

string
enum
Defaults to create

The action to apply to every time sheet in the batch. One batch has only one action.

  • create: Create new time sheets. Each item takes the same fields as POST /v1/companies/{company_uuid}/time_tracking/time_sheets, plus external_id.
  • update: Update existing time sheets. Each item requires external_id, uuid and version. All other fields are optional, and only the fields you send are changed.
Allowed:
time_sheets
array of objects
required
length between 1 and 500

The time sheets to create or update. Each external_id must be unique in the batch. For each employee or contractor, the shifts in the batch must not overlap.

time_sheets*
string
required

Your identifier for this item. It must be unique in the batch. Use it to match each item to its result in results.

string

Unique identifier of the time sheet to update. Required when batch_action is update.

string

The current version of the time sheet to update. Required when batch_action is update. See the versioning guide for information on how to use this field.

string

Unique identifier of the employee or contractor associated with the time sheet. Required when batch_action is create. Ignored when batch_action is update.

string
enum

Type of entity associated with the time sheet. Required when batch_action is create. Ignored when batch_action is update.

Allowed:
string

Unique identifier of the job for which time is tracked. Required for employees. Must be omitted for contractors.

string

Time zone of where the time is tracked. Required when batch_action is create.

date-time

ISO 8601 timestamp of when the shift was started. Required when batch_action is create.

date-time

ISO 8601 timestamp of when the shift was ended. If the shift is still ongoing you can omit this field.

string
enum

Status of the time sheet. When batch_action is create, one of approved or pending. When batch_action is update, one of approved, pending or rejected.

Allowed:
metadata
object

Metadata associated with the time sheet. Key-value pairs of arbitrary data. Both keys and values must be strings.

entries
array of objects

Entries associated with the time sheet.

entries
breaks
array of objects

Breaks taken during the shift.

breaks
Headers
string
enum
Defaults to 2026-06-15

Determines the date-based API version associated with your API call. If none is provided, your application's minimum API version is used.

Allowed:
Responses

Language
Credentials
Bearer
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json