Skip to main content

CrewSheetRow

One user you may keep sheets for, together with that user's sheet in each entry type for the period containing the requested sheet_date.

The collection is a list of users, not of sheets. A user appears once per page even when they have three sheets, and appears even when they have none yet, so long as they match the filters. When a user matches but no sheet block can be built for them, the row still carries id_user and the fullname and user_login properties, so that page counts stay correct.

Beyond the fields listed here, a row carries one additional property for each user custom field configured as a column on the Crew Entry screen. The property name is the literal prefix users_attribs: followed by the custom field's ID, and the value is that user's value for the field. For example, a row might include "users_attribs:users_dept": "Sales". The same name works as a $filter key, whether or not the field is configured as a column.

id_userstringrequired

The internal ID of the user this row describes.

Example: alice
id_user_properties objectrequired

Details of the user the row describes. These are properties of the user, not of any one sheet, so they are returned whether or not the user has sheets in the period.

The entry screen name fields (time_gui_pname and friends) and the approval plan name fields are only returned when a matching column is configured on the Crew Entry screen, because each one costs an extra lookup. Configure columns through the Screen settings endpoints.

fullnamestring

The user's full name.

Example: Alice Dev
user_loginstring

The user's sign-in name.

Example: alice
default_timezonestring

The user's preferred time zone as an IANA name, or an empty string when the user has not set one, in which case the server's zone applies. Use this when displaying punch times from the user's sheets.

Example: America/New_York
time_approvals_pnamestring

The name of the approval plan that governs the user's time sheets, or an empty string when none applies. Only returned when the id_user_properties.time_approvals_pname column is configured on the Crew Entry screen.

Example: Weekly Manager Approval
expense_approvals_pnamestring

The name of the approval plan that governs the user's expense sheets, or an empty string when none applies. Only returned when the id_user_properties.expense_approvals_pname column is configured on the Crew Entry screen.

Example: Expense Review
custom_approvals_pnamestring

The name of the approval plan that governs the user's custom entry sheets, or an empty string when none applies. Only returned when the id_user_properties.custom_approvals_pname column is configured on the Crew Entry screen.

Example: Mileage Review
time_gui_idstring

The ID of the time entry screen assigned to the user. Only returned when the id_user_properties.time_gui_pname column is configured on the Crew Entry screen.

Example: 4C1D9F0A78B94E1C8E5B2D6F3A70C915
time_gui_pnamestring

The name of the time entry screen assigned to the user. Only returned when this column is configured on the Crew Entry screen.

Example: Standard Weekly Time
expense_gui_idstring

The ID of the expense entry screen assigned to the user. Only returned when the id_user_properties.expense_gui_pname column is configured on the Crew Entry screen.

Example: 9E2F4B7C15D8402A93C6E1B84F70D3A2
expense_gui_pnamestring

The name of the expense entry screen assigned to the user. Only returned when this column is configured on the Crew Entry screen.

Example: Standard Expense
custom_gui_idstring

The ID of the custom entry screen assigned to the user. Only returned when the id_user_properties.custom_gui_pname column is configured on the Crew Entry screen.

Example: B7D3169E4A0C42F5810B9C2E7D45A836
custom_gui_pnamestring

The name of the custom entry screen assigned to the user. Only returned when this column is configured on the Crew Entry screen.

Example: Standard Mileage
time object

The state of one user's sheet of a single entry type, for the period that contains the requested sheet_date.

A block is present for an entry type only when all of the following are true: the type is enabled on the Crew Entry screen, you hold that type's keeper ability, you share a group with the user that carries the role granting it, and the type was not excluded by the sheet_types parameter.

A block describes a period, not necessarily a saved sheet. When the user has no sheet for the period, the block is still returned but the sheet-specific fields (id_sheet, status_int, status_str, pname, dates) are all absent. Test for id_sheet to tell the two apart. If the sheet_state filter is in use, a block is only returned when its own state is one of the requested states, so a user can appear with fewer blocks than you asked for.

Undocumented fields

A block also carries a few fields that exist to drive the Journyx web interface, such as display classes and a link into a server-rendered screen. They are deliberately left out of this reference, are not part of the supported interface, and may change or disappear in any release. Build against the fields documented below.

id_sheetstring

The internal ID of the user's sheet. Absent when the user has no sheet for this period yet. Pass this to the Submit crew sheets endpoint.

Example: 6C5469825DAE4ABF9654B7A567141CD8
sheettypestring

The entry type this block describes. Note that the third type is called custom here (it is the Custom Entry / mileage type); elsewhere in the API and in the product's history it is sometimes called mileage.

Possible values: [time, expense, custom]

Example: time
sheettype_labelstring

The administrator-configurable display label for this entry type, for example Time. Site labels are renameable, so do not test against this value; use sheettype instead.

Example: Time
status_intinteger

The sheet's state as a number: 0 open, 1 submitted, 2 approved, 3 rejected. Absent when no sheet exists for the period.

This is the field to test in code. The sheet_state filter uses the equivalent names (open, submitted, approved, rejected), plus no_sheet for a period with no sheet, which has no numeric form.

Possible values: [0, 1, 2, 3]

Example: 0
status_strstring

A human-readable label for the sheet's state, suitable for display. Absent when no sheet exists for the period. Do not test against this value; use status_int.

Example: Open for Entry
pnamestring

The sheet's name, which for a period sheet is normally its date range. Absent when no sheet exists for the period.

Example: 03/09/2025 - 03/15/2025
datesstring

The sheet's date range as displayed, in the signed-in user's date format. Absent when no sheet exists for the period.

Example: 03/09/2025 - 03/15/2025
reject_reasonstring

Why an approver rejected the sheet. Present only when status_int is 3 (rejected).

Example: Please split the Friday hours across the two tasks.
user_namestring

The full name of the user who owns the sheet. This repeats id_user_properties.fullname on the enclosing row, and exists so that a submit request echoed back from a block can be labeled in an error message.

Example: Alice Dev
expense object

The state of one user's sheet of a single entry type, for the period that contains the requested sheet_date.

A block is present for an entry type only when all of the following are true: the type is enabled on the Crew Entry screen, you hold that type's keeper ability, you share a group with the user that carries the role granting it, and the type was not excluded by the sheet_types parameter.

A block describes a period, not necessarily a saved sheet. When the user has no sheet for the period, the block is still returned but the sheet-specific fields (id_sheet, status_int, status_str, pname, dates) are all absent. Test for id_sheet to tell the two apart. If the sheet_state filter is in use, a block is only returned when its own state is one of the requested states, so a user can appear with fewer blocks than you asked for.

Undocumented fields

A block also carries a few fields that exist to drive the Journyx web interface, such as display classes and a link into a server-rendered screen. They are deliberately left out of this reference, are not part of the supported interface, and may change or disappear in any release. Build against the fields documented below.

id_sheetstring

The internal ID of the user's sheet. Absent when the user has no sheet for this period yet. Pass this to the Submit crew sheets endpoint.

Example: 6C5469825DAE4ABF9654B7A567141CD8
sheettypestring

The entry type this block describes. Note that the third type is called custom here (it is the Custom Entry / mileage type); elsewhere in the API and in the product's history it is sometimes called mileage.

Possible values: [time, expense, custom]

Example: time
sheettype_labelstring

The administrator-configurable display label for this entry type, for example Time. Site labels are renameable, so do not test against this value; use sheettype instead.

Example: Time
status_intinteger

The sheet's state as a number: 0 open, 1 submitted, 2 approved, 3 rejected. Absent when no sheet exists for the period.

This is the field to test in code. The sheet_state filter uses the equivalent names (open, submitted, approved, rejected), plus no_sheet for a period with no sheet, which has no numeric form.

Possible values: [0, 1, 2, 3]

Example: 0
status_strstring

A human-readable label for the sheet's state, suitable for display. Absent when no sheet exists for the period. Do not test against this value; use status_int.

Example: Open for Entry
pnamestring

The sheet's name, which for a period sheet is normally its date range. Absent when no sheet exists for the period.

Example: 03/09/2025 - 03/15/2025
datesstring

The sheet's date range as displayed, in the signed-in user's date format. Absent when no sheet exists for the period.

Example: 03/09/2025 - 03/15/2025
reject_reasonstring

Why an approver rejected the sheet. Present only when status_int is 3 (rejected).

Example: Please split the Friday hours across the two tasks.
user_namestring

The full name of the user who owns the sheet. This repeats id_user_properties.fullname on the enclosing row, and exists so that a submit request echoed back from a block can be labeled in an error message.

Example: Alice Dev
custom object

The state of one user's sheet of a single entry type, for the period that contains the requested sheet_date.

A block is present for an entry type only when all of the following are true: the type is enabled on the Crew Entry screen, you hold that type's keeper ability, you share a group with the user that carries the role granting it, and the type was not excluded by the sheet_types parameter.

A block describes a period, not necessarily a saved sheet. When the user has no sheet for the period, the block is still returned but the sheet-specific fields (id_sheet, status_int, status_str, pname, dates) are all absent. Test for id_sheet to tell the two apart. If the sheet_state filter is in use, a block is only returned when its own state is one of the requested states, so a user can appear with fewer blocks than you asked for.

Undocumented fields

A block also carries a few fields that exist to drive the Journyx web interface, such as display classes and a link into a server-rendered screen. They are deliberately left out of this reference, are not part of the supported interface, and may change or disappear in any release. Build against the fields documented below.

id_sheetstring

The internal ID of the user's sheet. Absent when the user has no sheet for this period yet. Pass this to the Submit crew sheets endpoint.

Example: 6C5469825DAE4ABF9654B7A567141CD8
sheettypestring

The entry type this block describes. Note that the third type is called custom here (it is the Custom Entry / mileage type); elsewhere in the API and in the product's history it is sometimes called mileage.

Possible values: [time, expense, custom]

Example: time
sheettype_labelstring

The administrator-configurable display label for this entry type, for example Time. Site labels are renameable, so do not test against this value; use sheettype instead.

Example: Time
status_intinteger

The sheet's state as a number: 0 open, 1 submitted, 2 approved, 3 rejected. Absent when no sheet exists for the period.

This is the field to test in code. The sheet_state filter uses the equivalent names (open, submitted, approved, rejected), plus no_sheet for a period with no sheet, which has no numeric form.

Possible values: [0, 1, 2, 3]

Example: 0
status_strstring

A human-readable label for the sheet's state, suitable for display. Absent when no sheet exists for the period. Do not test against this value; use status_int.

Example: Open for Entry
pnamestring

The sheet's name, which for a period sheet is normally its date range. Absent when no sheet exists for the period.

Example: 03/09/2025 - 03/15/2025
datesstring

The sheet's date range as displayed, in the signed-in user's date format. Absent when no sheet exists for the period.

Example: 03/09/2025 - 03/15/2025
reject_reasonstring

Why an approver rejected the sheet. Present only when status_int is 3 (rejected).

Example: Please split the Friday hours across the two tasks.
user_namestring

The full name of the user who owns the sheet. This repeats id_user_properties.fullname on the enclosing row, and exists so that a submit request echoed back from a block can be labeled in an error message.

Example: Alice Dev
CrewSheetRow
{
"id_user": "alice",
"id_user_properties": {
"fullname": "Alice Dev",
"user_login": "alice",
"default_timezone": "America/New_York",
"time_approvals_pname": "Weekly Manager Approval",
"expense_approvals_pname": "Expense Review",
"custom_approvals_pname": "Mileage Review",
"time_gui_id": "4C1D9F0A78B94E1C8E5B2D6F3A70C915",
"time_gui_pname": "Standard Weekly Time",
"expense_gui_id": "9E2F4B7C15D8402A93C6E1B84F70D3A2",
"expense_gui_pname": "Standard Expense",
"custom_gui_id": "B7D3169E4A0C42F5810B9C2E7D45A836",
"custom_gui_pname": "Standard Mileage"
},
"time": {
"id_sheet": "6C5469825DAE4ABF9654B7A567141CD8",
"sheettype": "time",
"sheettype_label": "Time",
"status_int": 0,
"status_str": "Open for Entry",
"pname": "03/09/2025 - 03/15/2025",
"dates": "03/09/2025 - 03/15/2025",
"reject_reason": "Please split the Friday hours across the two tasks.",
"user_name": "Alice Dev"
},
"expense": {
"id_sheet": "6C5469825DAE4ABF9654B7A567141CD8",
"sheettype": "time",
"sheettype_label": "Time",
"status_int": 0,
"status_str": "Open for Entry",
"pname": "03/09/2025 - 03/15/2025",
"dates": "03/09/2025 - 03/15/2025",
"reject_reason": "Please split the Friday hours across the two tasks.",
"user_name": "Alice Dev"
},
"custom": {
"id_sheet": "6C5469825DAE4ABF9654B7A567141CD8",
"sheettype": "time",
"sheettype_label": "Time",
"status_int": 0,
"status_str": "Open for Entry",
"pname": "03/09/2025 - 03/15/2025",
"dates": "03/09/2025 - 03/15/2025",
"reject_reason": "Please split the Friday hours across the two tasks.",
"user_name": "Alice Dev"
}
}