openapi: 3.0.0
info:
  title: Journyx REST API
  description: |
    Welcome to the API Reference section of the Journyx JX / PX technical
    documentation.

    Before diving into the API Reference, make sure you have reviewed
    the [Introduction](/docs/intro) and [Core Concepts](/docs/rest-overview)
    sections as these contain essential background information.

    :::info[Review the Collections page]

    A key part of using the Journyx API is understanding the
    [Collections](/docs/collections) concept. Collections are groups of similar
    objects, such as users, projects, or time entries, and they have common
    endpoints and behaviors relating to selecting fields, filtering, sorting,
    and pagination. These features are explained in detail on the
    [Collections page](/docs/collections).

    :::

    This API Reference section documents the recommended API to access your
    Journyx server data. Please note that as discussed on the
    [Types of APIs page](/docs/intro#types-of-apis), there are other
    APIs and endpoints available in a Journyx server instance that are not
    covered in this section, such as the
    [Legacy SOAP API](/docs/legacy-api) also known as "jxAPI",
    as well as the Reportlink API.

    :::tip[Finding what you need]

    The sidebar on the left lists all the available endpoints, grouped by
    theme or category. Click on an endpoint to view its documentation.
    You can also use the Search bar in the upper right to locate a specific
    endpoint.

    :::

    The API Reference section primarily documents the Rest API and endpoints
    under the `/api/v1` prefix, whereas the other APIs, such as the legacy jxAPI
    and the Reportlink API, fall under different prefixes or URL paths.

    Most of the `GET` endpoints under the `/api/v1` prefix, other than
    ones designed to retrieve individual objects, follow
    the [Collection conventions](/docs/collections), though there are
    exceptions to this.
    These exceptions are generally marked as "non-RESTful" in this
    API Reference section either because they are not paginated, don't
    support filtering, or because they do not follow
    [REST conventions](/docs/about-rest)
    such as only using `POST` to create new objects.

    :::note[Using this reference]

    This reference section is generated from an OpenAPI specification file.
    You can download the raw OpenAPI specification file from the
    link on the [Introduction](/docs/intro) page.

    Each endpoint lists the following key elements:

    - The URL or server path to access the resource

    - The HTTP method required, e.g. `GET`, `POST` or `DELETE`

    - Required elements of the request, including headers, request body format
      (e.g. `application/json`), and required fields or keys in the body data,
      also known as the request schema.

    - Possible responses, including both success and error responses, and
      their HTTP response codes, and the schema (format) of any data returned.

    All the request and response schemas are listed in their own sidebar category
    in addition to being shown under each relevant endpoint.

    :::

    A quick word about internal IDs and example values used in the schema descriptions.
    Most user-created (non-built-in) objects have a generated universally unique
    identifier (UUID) as their primary key, which is a 36-character string of
    hexadecimal characters. However, many built-in objects have a fixed, hard-coded
    ID value. Both generated UUIDs and the hard-coded IDs may be used in different
    examples throughout the documentation, but this is not meant to imply that
    only one format or another is accepted. Most endpoints do not allow
    you to specify your own IDs when creating objects.
  version: 0.0.1
  license:
    name: Journyx licensing, terms of use, and legal information
    url: https://journyx.com/policies-and-legal/
servers:
  - url: https://example.apps.journyx.com
security:
  - wtsession: []
  - http-basic: []
paths:
  /api/v1/activity_monitor:
    get:
      summary: List system requests
      description: |
        Retrieve a list of recent requests in the system. This is used to provide
        the Activity Monitor listing in the UI.

        :::info

        Important: this endpoint is *not* paginated. It always returns up to 2600 events,
        if available.

        :::
      operationId: list-activity-monitor-requests
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_179
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: &ref_33
                      response_code:
                        type: integer
                        description: HTTP status code of the response for reference purposes.
                        example: 200
                        default: 200
                      success:
                        type: boolean
                        description: |
                          Indicates whether the request was successful (normally `true` if it's
                          not an error response).
                        default: true
                      uri:
                        type: string
                        description: URL of the current request / resource, for reference purposes.
                        example: https://example.apps.journyx.com/api/v1/users
                      $count:
                        type: integer
                        description: |
                          The total number of items matching the query; not the number of items in
                          the current response.
                        example: 100
                      $skip:
                        type: integer
                        description: |
                          The number of items skipped in the query; in other words, the offset of
                          the first item in the current response compared to the total set of
                          items in the collection. When used as a query parameter, this is the
                          number of items to skip over.
                        example: 0
                      $top:
                        type: integer
                        description: |
                          The number of items returned in the current response. When used as a
                          query parameter, this is the maximum number of items to return.
                        example: 10
                      '@nextLink':
                        type: string
                        description: The URL to fetch the next set (page) of results.
                        example: https://example.apps.journyx.com/api/v1/users?$top=10&$skip=10
                      results:
                        type: array
                        items:
                          type: object
                      screen:
                        type: object
                        description: |
                          Defines various user interface properties for the web UI screen that
                          this collection supports. This is an internal object that is read-only
                          on most object endpoints and is not guaranteed to be a stable interface.
                          This mainly defines the search filters available in the UI. This object
                          may not be present in all collections.

                          :::warning[Not available in every collection]

                          This key (object) may not be present in all collections that refer
                          to this schema.

                          :::
                        allOf: &ref_177
                          - type: object
                            description: |
                              These are fields that are common to most object types.
                            properties: &ref_0
                              id:
                                type: string
                                description: |
                                  The internal ID of the resource or object. This is a 32-character
                                  hexadecimal string (UUID without hyphens).

                                  In general, the `id` field is the primary key of the object and cannot
                                  be changed or updated.
                                example: 64BBA147B9AC41D9978062300826C89F
                                readOnly: true
                              uri:
                                type: string
                                format: uri-reference
                                description: |
                                  The URI associated with this resource. This is usually
                                  a relative URL that can be used to access the resource.
                                  Typically it incorporates the Unique ID of the resource.
                                example: /api/v1/objects/64BBA147B9AC41D9978062300826C89F
                                readOnly: true
                              tablename:
                                type: string
                                description: |
                                  The name of the internal database table associated with this
                                  resource.
                                example: users
                                readOnly: true
                              table_label:
                                type: string
                                description: |
                                  The user-visible label of the database table associated with this object.
                                readOnly: true
                                example: codes_pay_types
                          - type: object
                            description: |
                              Fields related to the creation of a resource, including the creation
                              timestamp, creator user ID, and creator user name.

                              Note that extended information about the creator user may be included
                              in the `creator_properties` field, depending on the `$keys` requested.
                              If present, this information will follow the schema of the
                              [User](/docs/reference/schemas/user) object.
                            allOf: &ref_1
                              - type: object
                                properties: &ref_69
                                  creator:
                                    type: string
                                    description: |
                                      The internal User ID of the user who created the object.
                                    example: 64BBA147B9AC41D9978062300826C89F
                                    readOnly: true
                            properties: &ref_2
                              creator_fullname:
                                type: string
                                description: |
                                  The full name of the user who created the object.
                                example: John Doe
                                readOnly: true
                              creator_properties:
                                type: object
                                readOnly: true
                                description: |
                                  Extended information about the [User](/docs/reference/schemas/user) who
                                  created the object.
                                  This field is only included if the `$keys` parameter requests it.
                                allOf:
                                  - type: object
                                    description: |
                                      A user account in the JX system.
                                    allOf: &ref_3
                                      - type: object
                                        description: |
                                          These are fields that are common to most object types.
                                        properties: *ref_0
                                      - type: object
                                        description: |
                                          These are fields in the User object that can be modified (not necessarily by the user in question)
                                          or given as input when creating a new User.

                                          :::tip

                                          Note that only `user_login` and `fullname` are required when creating a new User.

                                          :::

                                          **Note:** If using SSO (Single Sign-On), the `user_login` field usually
                                          needs to match the user's email address, UPN, or other primary identifier in
                                          the external authentication system.

                                          :::warning

                                          The `new_pw`, `new_pw2`, and `expire_new_pw` fields should only be used when
                                          intending to change the user's password.

                                          :::
                                        required: &ref_168
                                          - user_login
                                          - fullname
                                        allOf: &ref_169
                                          - type: object
                                            description: |
                                              Custom fields are used to store additional information about a resource.
                                              The fields are defined by the system administrators and can be of various
                                              data types.

                                              This page describes the schema for custom field values as shown in
                                              the response of a resource that has custom fields. There is an expanded
                                              schema for the custom field definitions at their own endpoint, as
                                              shown in the `id_attr_type_uri` field.

                                              :::tip

                                              The `custom_fields` object will only be included in the response if requested
                                              in `$keys`; see details below.

                                              :::

                                              ### Editing Custom Fields

                                              In general, to update Custom Field values for an object, when submitting
                                              a `PUT` request to update the object, you can include the `custom_fields`
                                              object in the request body. The `custom_fields` object should follow
                                              the basic schema shown here, but only needs to include the `value` field
                                              for each custom field you want to update. For example, this is enough
                                              to update two custom fields:

                                              ```json
                                              {
                                                "custom_fields": {
                                                  "C41B2DDA662F4EF6B730F9CB6DB04696": {
                                                    "value": "New Value"
                                                  },
                                                  "users_email": {
                                                    "value": "new_email@example.com"
                                                  }
                                              }
                                              ```

                                              Any custom fields not included in the `custom_fields` object will not be
                                              updated and will retain their current values. You can set the `null` value

                                              ### Viewability

                                              It's also important to note that Custom Fields are subject to
                                              viewability restrictions based on the "Reportability" property set by
                                              system administrators.

                                              :::tip

                                              Please note that access to view custom fields are automatically filtered by
                                              "Reportability", a property set by admins on the custom field definition that
                                              determines which User Roles are allowed to see the field. If you are not seeing
                                              a custom field that you expect to see, please check with your system administrator.

                                              :::

                                              ### Examples

                                              Here's an example value of `custom_fields` in a response:

                                              ```json
                                              "custom_fields": {
                                                "C41B2DDA662F4EF6B730F9CB6DB04696": {
                                                  "attr_type": "ENUM_STRING_252",
                                                  "description": "Employee pay group.",
                                                  "id_attr_type": "C41B2DDA662F4EF6B730F9CB6DB04696",
                                                  "id_attr_type_uri": "/api/v1/custom_fields/C41B2DDA662F4EF6B730F9CB6DB04696",
                                                  "pname": "Pay Group",
                                                  "value": "XYZ Pay Group"
                                                },
                                                "users_email": {
                                                  "attr_type": "STRING_252",
                                                  "description": "Email address",
                                                  "id_attr_type": "users_email",
                                                  "id_attr_type_uri": "/api/v1/custom_fields/users_email",
                                                  "pname": "Email Address",
                                                  "value": "username@example.com"
                                                }

                                              ```

                                              Note that there is an alternate representation available in most object types, where
                                              each custom field value is a separate key in the main object (not under `custom_fields`)
                                              in the following format, showing both a singular and multi-value example:

                                              ```json
                                              "users_attribs:C41B2DDA662F4EF6B730F9CB6DB04696": "XYZ Pay Group",
                                              "users_attribs:users_skills": [
                                                "CRM admin - advanced"
                                              ]
                                              ```

                                              This follows the pattern of `users_attribs:<field_id>`, where `users_attribs` is
                                              the internal table name for User custom fields. For other object types, the table
                                              name will be different, e.g. `projects_attribs`. This is a read-only representation
                                              for convenience and is not used for updating custom fields.

                                              This more compact representation is always provided (unless `$keys=$base` was set).
                                              However, the `custom_fields` object will only be available if `$keys=custom_fields`
                                              or `$keys=$extended` was set.
                                            properties: &ref_57
                                              custom_fields:
                                                type: object
                                                additionalProperties:
                                                  type: object
                                                  description: |
                                                    A specific instance (value) of a Custom field for a particular object.
                                                  allOf: &ref_12
                                                    - type: object
                                                      properties: &ref_54
                                                        id_attr_type:
                                                          type: string
                                                          description: |
                                                            The unique internal ID of this Custom Field definition (same as `id` field)
                                                          example: 2DDD372DC4D3422D9E73F6DE936C4265
                                                          readOnly: true
                                                        attr_type:
                                                          type: string
                                                          description: |
                                                            Datatype of the custom field. The basic types available are:

                                                            - `STRING` - a variable-length string.
                                                            - `CHAR` - a fixed-length string. (The value may be padded with spaces.)
                                                            - `NUMBER` - a floating-point number.
                                                            - `INTEGER` - an integer (whole number).
                                                            - `TIMESTAMP` - a date and time, stored in Unix epoch format.
                                                            - `DATE` - a YYYYMMDD (F8) date.

                                                            In addition, most types can be modified with a prefix to indicate
                                                            whether they are "select lists" (`ENUM` or enumerated) or "multi-select
                                                            lists" (`M_ENUM`) which can take on multiple values.

                                                            Strings and char may also have a maximum length specified, such as
                                                            `STRING_100`.
                                                          example: STRING_100
                                                        description:
                                                          type: string
                                                          description: Description of custom field
                                                        pname:
                                                          type: string
                                                          description: Name of custom field
                                                          example: Pay Group
                                                  properties: &ref_13
                                                    id_attr_type_uri:
                                                      type: string
                                                      description: |
                                                        URI of the custom field to get more information about the
                                                        custom field definition.
                                                      example: /api/v1/custom_fields/E07526A217164D1B94188279A8A0E4D9
                                                    value:
                                                      type: string
                                                      description: |
                                                        Value of the custom field for this object.
                                                        To update the value, see the note on the
                                                        [CustomFields](/docs/reference/schemas/customfields) schema page.

                                                        Note that when modifying Custom Fields of objects like
                                                        Users or Projects, only the `value` key will be checked;
                                                        other fields like the Custom Field `pname` will be ignored.
                                                      example: XYZ Pay Group
                                                description: |
                                                  An object with Custom Fields for this record. The key is the field
                                                  ID and the value a description of the field. Additional details
                                                  here: [CustomFields Schema](/docs/reference/schemas/customfields)

                                                  :::tip

                                                  <strong>Updating Custom Field values</strong>

                                                  When creating or updating an existing object that uses Custom Fields,
                                                  for example a User record, you can follow this `custom_field` key
                                                  structure to update the custom field values. The `value` field is the only
                                                  required field for updating a custom field value; other fields such as
                                                  `pname` will be ignored.

                                                  :::

                                                  :::info

                                                  Important: depending on the endpoint, this may only be included in the response
                                                  if `$keys=custom_fields` or `$keys=$extended` was set as a query parameter.

                                                  :::

                                                  There is also a more compact representation available in most object types, where
                                                  each custom field value is a separate key in the main object (not under `custom_fields`).

                                                  See the [CustomFields Schema](/docs/reference/schemas/customfields) page for
                                                  more detailed information on these topics.
                                                example:
                                                  C41B2DDA662F4EF6B730F9CB6DB04696:
                                                    attr_type: ENUM_STRING_252
                                                    description: Employee pay group.
                                                    id_attr_type: C41B2DDA662F4EF6B730F9CB6DB04696
                                                    id_attr_type_uri: /api/v1/custom_fields/C41B2DDA662F4EF6B730F9CB6DB04696
                                                    pname: Pay Group
                                                    value: XYZ Pay Group
                                                  users_email:
                                                    attr_type: STRING_252
                                                    description: Email address
                                                    id_attr_type: users_email
                                                    id_attr_type_uri: /api/v1/custom_fields/users_email
                                                    pname: Email Address
                                                    value: username@example.com
                                          - type: object
                                            description: |
                                              These are group-related fields that are common to most object types.

                                              Please note that these fields may not be present in the response unless
                                              the `$keys` query parameter includes the field name, e.g. `$keys=groups`.

                                              See [Collection#Selecting Fields](/docs/collections#selecting-fields)
                                              for more information about the `$keys` parameter.

                                              The `$keys=$extended` parameter will also include the `group_names` field.

                                              In general, Groups determine the visibility of objects to each user in the system.
                                              For example, a user can only see objects that belong to a Group that
                                              they are themselves a member of.

                                              When creating or modifying objects with `POST` or `PUT` requests, you can
                                              only use the `groups` field to specify the Group IDs that the object belongs to.
                                              The `group_names` field is read-only.

                                              If an object does not belong to any groups, it is considered to be "hidden"
                                              and the `is_hidden` field will be set to `true`. Hidden objects are normally
                                              only accessible to administrators, and then only if the `$filter` query parameter
                                              is used to include hidden status objects.

                                              For most object types, that would be done with a filter like this:

                                              ```
                                              $filter = status_code intersects ["lr","ro","h"]
                                              ```

                                              The [Users](/docs/reference/list-users) collection can be filtered
                                              like this to show hidden users:

                                              ```
                                              $filter = status intersects ["active","inactive","hidden"]
                                              ```

                                              You can read more about [Filtering](/docs/collections#filtering) in the
                                              section on Collections.

                                              If you **only** want hidden objects, just remove the other status codes from
                                              the filter.
                                            allOf: &ref_58
                                              - type: object
                                                description: |
                                                  This is the `group_names` field which is attached to many object types to provide
                                                  a convenient representation of the Groups that an object belongs to, including
                                                  both name and ID.
                                                properties: &ref_75
                                                  group_names:
                                                    type: array
                                                    description: |
                                                      A list of Groups (names and IDs) that the object belongs to.

                                                      This is a read-only list. To change the Groups that an object belongs to,
                                                      use the `groups` field.

                                                      See [GroupFields](/docs/reference/schemas/groupfields)
                                                      for additional information about Groups and this field.
                                                    readOnly: true
                                                    items:
                                                      type: object
                                                      properties:
                                                        id:
                                                          type: string
                                                          description: |
                                                            The Group ID (32-character hexadecimal string).
                                                        pname:
                                                          type: string
                                                          description: |
                                                            The Group name.
                                                        uri:
                                                          type: string
                                                          description: |
                                                            The URI of the Group.

                                                            WARNING: this field is planned in a future release but
                                                            is not yet available.
                                                    example:
                                                      - id: 5088C427E8B64EBEBE1C5B5961DB1902
                                                        pname: Sales
                                                      - id: 3553F715A6F54DAB95D0D25B08468195
                                                        pname: Accounting
                                            properties: &ref_59
                                              groups:
                                                type: array
                                                description: |
                                                  A list of Group IDs that the object belongs to.
                                                  See [GroupFields](/docs/reference/schemas/groupfields)
                                                  for additional information about Groups and this field.
                                                items:
                                                  type: string
                                                  description: |
                                                    A Group ID that the object belongs to (32-character hexadecimal string).
                                                example:
                                                  - 5088C427E8B64EBEBE1C5B5961DB1902
                                                  - 3553F715A6F54DAB95D0D25B08468195
                                        properties: &ref_170
                                          user_login:
                                            type: string
                                            description: |
                                              The login name of the user.
                                            example: john.smith@example.com
                                          fullname:
                                            type: string
                                            description: The full name of the user.
                                            example: John Smith
                                          u_comment:
                                            type: string
                                            description: The default comment on the user's time entry screen.
                                          status:
                                            type: string
                                            description: |
                                              The status of the user; either `active`, `inactive`, or `hidden`.

                                              This is a write-enabled field if you have the appropriate permissions.

                                              This field can also be used in a `$filter` expression, e.g.
                                              `$filter=status eq "active"` or
                                              `$filter=status intersects ["active","inactive"]`.

                                              Note: unlike most other objects, users do not use the generic
                                              visibility statuses (`Loggable and Reportable`, `Reportable Only`),
                                              and User records do not include a `status_code` field.
                                            enum:
                                              - active
                                              - inactive
                                              - hidden
                                            example: active
                                          default_memorized_sheet:
                                            type: string
                                            description: |
                                              The ID of the user's default memorized timesheet.
                                          default_timezone:
                                            type: string
                                            nullable: true
                                            description: |
                                              The user's default IANA timezone name (e.g. `America/Chicago`).
                                              Used as a fallback when the client does not supply a timezone with
                                              a save request. Set to `null` or empty string to clear.
                                              Must be a valid IANA timezone name or a Windows timezone name
                                              (which will be converted to the canonical IANA name). Invalid values
                                              will cause a `400 Bad Request` error.

                                              The [Timezones endpoint](/docs/reference/list-timezones) provides a
                                              searchable list of valid timezone values.
                                            example: America/Chicago
                                          dropdownthreshold:
                                            type: integer
                                            description: |
                                              The number of items in a selection list to trigger a forced search.
                                          hide:
                                            type: boolean
                                            description: |
                                              Indicates whether the user is hidden.

                                              Note: the User object is the only one that uses this field; other objects
                                              use `is_hidden`.
                                          expire_new_pw:
                                            type: boolean
                                            description: |
                                              Whether the user's new password should expire after the first login.

                                              This is a write-only field that does not appear in User object responses.
                                          new_pw:
                                            type: string
                                            description: |
                                              The new password for the user.

                                              The password must also be set in the `new_pw2` field to confirm the change.

                                              This is a write-only field that does not appear in User object responses.
                                          new_pw2:
                                            type: string
                                            description: |
                                              The new password for the user, repeated to confirm the change.

                                              The password must also be set in the `new_pw` field to confirm the change.

                                              This is a write-only field that does not appear in User object responses.
                                          roles:
                                            type: array
                                            description: |
                                              A list of role IDs belonging to this user.

                                              This list can be modified to change the user's roles.
                                            items:
                                              type: string
                                              description: The internal ID of a role.
                                          timerecs_in:
                                            type: integer
                                            description: The number of blank rows to show on the entry screen.
                                            example: 3
                                          time_period:
                                            type: string
                                            description: |
                                              The "Entry Screen period" (time-span) associated with the user's Time Entry screen.
                                            example: default_weekly
                                          expense_period:
                                            type: string
                                            description: |
                                              The "Entry Screen period" (time-span) associated with the user's Expense Entry screen.
                                            example: default_weekly
                                          custom_period:
                                            type: string
                                            description: |
                                              The "Entry Screen period" (time-span) associated with the user's Custom Entry screen.
                                            example: default_weekly
                                          expense_gui:
                                            type: string
                                            description: |
                                              The Entry Screen ID (aka GUI) of the user's Expense Entry screen.
                                          time_gui:
                                            type: string
                                            description: The Entry Screen ID (aka GUI) of the user's Time Entry screen.
                                          travel_gui:
                                            type: string
                                            description: The Entry Screen ID (aka GUI) of the user's Custom Entry screen.
                                      - type: object
                                        description: |
                                          Fields related to the creation of a resource, including the creation
                                          timestamp, creator user ID, and creator user name.

                                          Note that extended information about the creator user may be included
                                          in the `creator_properties` field, depending on the `$keys` requested.
                                          If present, this information will follow the schema of the
                                          [User](/docs/reference/schemas/user) object.
                                        allOf: *ref_1
                                        properties: *ref_2
                                      - type: object
                                        description: Object creation date/time fields common to many resources.
                                        allOf: &ref_5
                                          - type: object
                                            properties: &ref_70
                                              create_timestamp:
                                                type: number
                                                format: float
                                                description: The timestamp when the object was created, in Unix epoch format. This is the number of seconds since 1970-01-01T00:00:00Z.
                                                readOnly: true
                                                example: 1696021987.01375
                                        properties: &ref_6
                                          create_timestamp_date_long:
                                            type: string
                                            description: The object creation date in the "long date" format defined in the system settings.
                                            example: Wednesday, March 22, 2023
                                            readOnly: true
                                          create_timestamp_date_short:
                                            type: string
                                            description: The object creation date in the "short date" format defined in the system settings.
                                            example: 03/22/2023
                                            readOnly: true
                                          create_timestamp_datetime_long:
                                            type: string
                                            description: The object creation date and time in the "long date" format defined in the system settings.
                                            example: Wednesday, March 22, 2023 12:18:46 CDT
                                            readOnly: true
                                          create_timestamp_datetime_short:
                                            type: string
                                            description: The object creation date and time in the "short date" format defined in the system settings.
                                            example: 03/22/2023 12:18:46 CDT
                                            readOnly: true
                                          create_timestamp_iso:
                                            type: string
                                            format: date-time
                                            description: The creation timestamp in ISO 8601 format.
                                            example: '2023-03-22T12:18:46-05:00'
                                            readOnly: true
                                      - type: object
                                        description: |
                                          Fields related to the last modification of a resource, including the
                                          last modified timestamp in various formats, the modifier's user ID and
                                          full name. Please note that this only records the most recent
                                          modification. In addition, it may not reflect modifications to child
                                          resources or extended properties that are defined in other tables, such
                                          as "Custom Fields". These last modifier fields are always read-only.

                                          Note that extended information about the modifier user may be included
                                          in the `modifier_properties` field, depending on the `$keys` requested.
                                          If present, this information will follow the schema of the
                                          [User](/docs/reference/schemas/user) object.
                                        allOf: &ref_7
                                          - type: object
                                            properties: &ref_71
                                              modifier:
                                                type: string
                                                description: |
                                                  The internal User ID of the user who most recently
                                                  modified the object.
                                                example: 64BBA147B9AC41D9978062300826C89F
                                                readOnly: true
                                        properties: &ref_8
                                          modifier_fullname:
                                            type: string
                                            description: |
                                              The full name of the user who most recently modified the object.
                                            example: John Doe
                                            readOnly: true
                                          modifier_properties:
                                            type: object
                                            readOnly: true
                                            description: |
                                              Extended information about the [User](/docs/reference/schemas/user) who
                                              last modified the object.
                                              This field is only included if the `$keys` parameter requests it.
                                            allOf:
                                              - type: object
                                                description: |
                                                  A user account in the JX system.
                                                allOf: *ref_3
                                                properties: &ref_4
                                                  daysinlist:
                                                    type: integer
                                                    description: |
                                                      **UNUSED FIELD** This is a legacy field that is no longer used.
                                                    readOnly: true
                                                  email:
                                                    type: string
                                                    description: |
                                                      The email address of the user.

                                                      **Note:** This is a read-only field. To change the user's email address, you must modify the
                                                      `users_attribs:users_email` field, or `custom_fields.users_email.value`.
                                                    readOnly: true
                                                  first_name:
                                                    type: string
                                                    description: |
                                                      The first name of the user.

                                                      Note: read-only; set via the `fullname` field.
                                                    readOnly: true
                                                  id_user:
                                                    type: string
                                                    description: |
                                                      The unique internal ID of this user. (Same as `id`.)
                                                    readOnly: true
                                                    example: 5CD906A3941C463B9CC98F49DBCC25AA
                                                  is_hidden:
                                                    type: boolean
                                                    description: |
                                                      Indicates whether the user is hidden.

                                                      See also `status`. To hide or un-hide a user, write the `hide` or
                                                      `status` field instead.
                                                    readOnly: true
                                                  hidden:
                                                    type: boolean
                                                    description: |
                                                      Indicates whether the user is hidden.

                                                      Read-only alias for `is_hidden`; only included when requested via
                                                      `$keys` (e.g. `$keys=$extended`).
                                                    readOnly: true
                                                  last_name:
                                                    type: string
                                                    description: |
                                                      The last name of the user.

                                                      Note: read-only; set via the `fullname` field.
                                                    readOnly: true
                                                  memorized_sheet_choices:
                                                    type: array
                                                    description: |
                                                      A list of memorized timesheets associated with the user.

                                                      These are the choices available to set in the `default_memorized_sheet` field.
                                                    readOnly: true
                                                    items:
                                                      type: object
                                                      properties:
                                                        value:
                                                          type: string
                                                          description: The internal ID of the memorized timesheet.
                                                        text:
                                                          type: string
                                                          description: The name of the memorized timesheet.
                                                  reserved1:
                                                    type: string
                                                    description: |
                                                      **UNUSED FIELD** This is a legacy field that is no longer used.
                                                    readOnly: true
                                                  reserved2:
                                                    type: number
                                                    format: float
                                                    description: |
                                                      **UNUSED FIELD** This is a legacy field that is no longer used.
                                                    readOnly: true
                                                  reserved3:
                                                    type: number
                                                    format: float
                                                    description: |
                                                      **UNUSED FIELD** This is a legacy field that is no longer used.
                                                    readOnly: true
                                                  timerecs_out:
                                                    type: integer
                                                    description: |
                                                      **UNUSED FIELD** This is a legacy field that is no longer used.
                                                    readOnly: true
                                                  time_gui:
                                                    type: string
                                                    description: |
                                                      The ID of the user's assigned time entry screen configuration.
                                                  time_gui_properties:
                                                    type: object
                                                    description: |
                                                      Details about the user's assigned time entry screen configuration.
                                                    readOnly: true
                                                  travel_gui:
                                                    type: string
                                                    description: |
                                                      The ID of the user's assigned Custom Entry (a.k.a. Mileage or Travel)
                                                      entry screen configuration.
                                                  travel_gui_properties:
                                                    type: object
                                                    description: |
                                                      Details about the user's assigned Custom Entry (a.k.a. Mileage or Travel)
                                                      entry screen configuration.
                                                    readOnly: true
                                                  expense_gui:
                                                    type: string
                                                    description: |
                                                      The ID of the user's assigned Expense entry screen configuration.
                                                  expense_gui_properties:
                                                    type: object
                                                    description: |
                                                      Details about the user's assigned Expense entry screen configuration.
                                                    readOnly: true
                                      - type: object
                                        description: |
                                          The last modified date/time fields common to many resources. Please note
                                          that this only records the most recent modification. In addition, it may
                                          not record modifications to child resources or extended properties that
                                          are defined in other tables, such as "Custom Fields". These fields are
                                          read-only.
                                        allOf: &ref_9
                                          - type: object
                                            properties: &ref_72
                                              modify_timestamp:
                                                type: number
                                                format: float
                                                description: |
                                                  The timestamp when the object was most recently modified, in Unix
                                                  epoch format.
                                                  This is the number of seconds since 1970-01-01T00:00:00Z.
                                                readOnly: true
                                                example: 1696021987.01375
                                        properties: &ref_10
                                          modify_timestamp_date_long:
                                            type: string
                                            description: |
                                              The last modification date in the "long date" format defined in the
                                              system settings.
                                            example: Wednesday, March 22, 2023
                                            readOnly: true
                                          modify_timestamp_date_short:
                                            type: string
                                            description: |
                                              The last modification date in the "short date" format defined in the
                                              system settings.
                                            example: 03/22/2023
                                            readOnly: true
                                          modify_timestamp_datetime_long:
                                            type: string
                                            description: |
                                              The last modification date and time in the "long date" format
                                              defined in the system settings.
                                            example: Wednesday, March 22, 2023 12:18:46 CDT
                                            readOnly: true
                                          modify_timestamp_datetime_short:
                                            type: string
                                            description: |
                                              The last modification date and time in the "short date" format
                                              defined in the system settings.
                                            example: 03/22/2023 12:18:46 CDT
                                            readOnly: true
                                          modify_timestamp_iso:
                                            type: string
                                            format: date-time
                                            description: The last modification timestamp in ISO 8601 format.
                                            example: '2023-03-22T12:18:46-05:00'
                                            readOnly: true
                                      - type: object
                                        description: |
                                          These are fields related to the deprecated "Domain" object.
                                        properties: &ref_11
                                          id_domain:
                                            type: string
                                            description: |
                                              The internal Domain ID of the resource or object.
                                              In general, this field is deprecated and not in use and can be ignored.
                                            example: install_root_dom
                                            readOnly: true
                                    properties: *ref_4
                          - type: object
                            description: Object creation date/time fields common to many resources.
                            allOf: *ref_5
                            properties: *ref_6
                          - type: object
                            description: |
                              Fields related to the last modification of a resource, including the
                              last modified timestamp in various formats, the modifier's user ID and
                              full name. Please note that this only records the most recent
                              modification. In addition, it may not reflect modifications to child
                              resources or extended properties that are defined in other tables, such
                              as "Custom Fields". These last modifier fields are always read-only.

                              Note that extended information about the modifier user may be included
                              in the `modifier_properties` field, depending on the `$keys` requested.
                              If present, this information will follow the schema of the
                              [User](/docs/reference/schemas/user) object.
                            allOf: *ref_7
                            properties: *ref_8
                          - type: object
                            description: |
                              The last modified date/time fields common to many resources. Please note
                              that this only records the most recent modification. In addition, it may
                              not record modifications to child resources or extended properties that
                              are defined in other tables, such as "Custom Fields". These fields are
                              read-only.
                            allOf: *ref_9
                            properties: *ref_10
                          - type: object
                            description: |
                              These are fields related to the deprecated "Domain" object.
                            properties: *ref_11
                        properties: &ref_178
                          allow_customize:
                            type: boolean
                            description: |
                              Indicates whether the user can customize the columns displayed in the
                              screen.
                            example: true
                          cf_filters:
                            type: array
                            description: |
                              A list of custom field filters that are available for this screen.
                            items:
                              type: object
                              description: |
                                A specific instance (value) of a Custom field for a particular object.
                              allOf: *ref_12
                              properties: *ref_13
                          cf_filters_unused:
                            type: array
                            description: |
                              A list of custom field filters that are available for this screen, but
                              are not currently used.
                            items:
                              type: object
                              description: |
                                A specific instance (value) of a Custom field for a particular object.
                              allOf: *ref_12
                              properties: *ref_13
                          fields:
                            type: array
                            description: |
                              The list of fields to show in this management screen's search results.
                            items:
                              type: object
                              description: |
                                A configured field on a screen.
                              properties: &ref_30
                                default_tooltip:
                                  type: string
                                  description: |
                                    The default tooltip for the field shown when hovering over the
                                    field label.
                                  example: The name of the Accrual.
                                id:
                                  type: string
                                  description: |
                                    The database ID for the instance of the configured field within the screen.
                                    This is a generated value (not fixed).
                                  example: '34'
                                id_attr_type:
                                  type: string
                                  nullable: true
                                  description: |
                                    If this field represents a Custom Field, this is the ID of the
                                    Custom Field Type.
                                  example: null
                                id_field:
                                  type: string
                                  description: |
                                    The hardcoded identifier for the field within the screen.
                                    These are unique within the screen, but not across different screens.
                                  example: id_user_properties.fullname
                                id_field_global:
                                  type: string
                                  description: |
                                    The internal database ID for the configured field, if
                                    this is a global settings field.
                                  example: '34'
                                id_screen:
                                  type: string
                                  description: |
                                    The unique identifier for the screen that this field belongs to.
                                  example: accruals
                                is_boolean:
                                  type: boolean
                                  description: |
                                    Whether the field is a boolean field, which will be displayed as a
                                    "Yes" or "No" value in the column.
                                  example: false
                                is_custom_field:
                                  type: boolean
                                  description: |
                                    Whether the field is a Custom Field.
                                  example: false
                                is_datetime_float:
                                  type: boolean
                                  description: |
                                    Whether the field is a date-time field, which will be displayed as a
                                    formatted date-time value in the column.
                                  example: false
                                is_numeric:
                                  type: boolean
                                  description: |
                                    Whether the field is a numeric field, which will be displayed as a
                                    formatted number in the column.
                                  example: false
                                is_percent:
                                  type: boolean
                                  description: |
                                    Whether the field is a percentage field, which will be displayed as a
                                    formatted percentage value in the column.
                                  example: false
                                is_truncated:
                                  type: boolean
                                  description: |
                                    Whether the field is automatically truncated when displayed in the
                                    search results; the full value can be seen in the tooltip.
                                  example: false
                                is_url:
                                  type: boolean
                                  description: |
                                    Whether the field is a URL field, which will be displayed as a
                                    clickable link in the column.
                                  example: false
                                key:
                                  type: string
                                  description: |
                                    The key for the field, which is used to identify the field in the
                                    search results and in the API.
                                    Same as `id_field`.
                                  example: id_user_properties.fullname
                                label:
                                  type: string
                                  description: |
                                    The label to show for this field in the management screen
                                    search results.
                                  example: Owner Name
                                ordering:
                                  type: integer
                                  description: |
                                    The order in which this field should be displayed in the search results.
                                  example: 1
                                properties:
                                  type: object
                                  description: |
                                    Additional extended properties of the field.
                                  additionalProperties:
                                    type: string
                                searchable:
                                  type: boolean
                                  description: |
                                    Whether the field is searchable in the search panel area on the
                                    management screen.
                                  example: true
                                sortable:
                                  type: boolean
                                  description: |
                                    Whether the field is sortable in the search results.
                                  example: true
                                table_label:
                                  type: string
                                  description: |
                                    Label of the database table that stores field settings.
                                  example: Field Config (global)
                                tablename:
                                  type: string
                                  description: |
                                    The name of the database table that stores the field settings.
                                  example: fields_config_global
                                tooltip:
                                  type: string
                                  description: |
                                    The tooltip to show for this field in the management screen
                                    search results.
                                  example: The full name of the owner of this Accrual.
                          global_allows_customize:
                            type: boolean
                            description: |
                              Indicates whether the screen's global settings allow for per-user
                              customization of the columns displayed in the screen.
                            example: true
                          id_screen:
                            type: string
                            description: |
                              The unique internal ID of this screen. (Same as `id`.)
                              These are fixed values that are defined in the system.
                            readOnly: true
                            example: accruals
                          is_global:
                            type: boolean
                            description: |
                              Indicates whether this user is currently user global settings for
                              this screen. If false, the user is using their own settings.
                            example: false
                          other_search_filters:
                            type: array
                            description: |
                              A list of other search filters that are available for this screen.
                            items:
                              type: string
                            example:
                              - project
                              - group
                          other_search_filters_unused:
                            type: array
                            description: |
                              A list of other search filters that are available for this screen, but
                              are not currently used.
                            items:
                              type: string
                            example:
                              - px_teams
                          properties:
                            type: object
                            description: |
                              A list of additional properties for this screen. Currently unused.
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          Represents a 'Request' within the system.
                          Usually, but not always, represents an HTTP request,
                          but may also represent a Scheduled Task (cron job) or
                          other special event types.
                        items:
                          type: object
                          description: |
                            Represents a 'Request' within the system.
                            Usually, but not always, represents an HTTP request,
                            but may also represent a Scheduled Task (cron job) or
                            other special event types.
                          allOf: &ref_15
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                          properties: &ref_16
                            client_ip_addr:
                              readOnly: true
                              type: string
                              description: The IP address of the client that initiated the request.
                              example: 10.0.0.31
                            db_query_count:
                              readOnly: true
                              type: integer
                              description: The number of database queries executed during the request.
                              example: 5
                            db_records_read:
                              readOnly: true
                              type: integer
                              description: The number of database records read during the request.
                              example: 143
                            db_time_ms:
                              readOnly: true
                              type: integer
                              description: The total time in milliseconds spent executing database queries.
                              example: 114
                            event_ids:
                              readOnly: true
                              type: array
                              description: The list of event IDs associated with the request.
                              items:
                                type: integer
                              example:
                                - 97029
                                - 97030
                            had_error:
                              readOnly: true
                              type: boolean
                              description: Indicates if an error occurred during the request.
                            heartbeat_count:
                              readOnly: true
                              type: integer
                              description: The number of heartbeat messages received during the request.
                              example: 1
                            heartbeat_times:
                              readOnly: true
                              type: array
                              description: The list of times that heartbeat messages were received.
                              items:
                                type: string
                                format: date-time
                            host_ip_addr:
                              readOnly: true
                              type: string
                              description: The IP address of the host that processed the request.
                              example: 10.0.0.21
                            host_name:
                              readOnly: true
                              type: string
                              description: The name of the host that processed the request.
                              example: example.apps.journyx.com
                            id_request:
                              readOnly: true
                              type: string
                              description: The unique identifier of the request (same as `id`).
                            id_user:
                              readOnly: true
                              type: string
                              description: |
                                The unique identifier of the user that initiated the request,
                                if applicable.
                              example: jdoe
                            is_async_task:
                              readOnly: true
                              type: boolean
                              description: Indicates if the request is an asynchronous task.
                            is_completed:
                              readOnly: true
                              type: boolean
                              description: Indicates if the request has completed.
                            is_cron_action:
                              readOnly: true
                              type: boolean
                              description: Indicates if the request is a cron action (scheduled task).
                            is_this_request:
                              readOnly: true
                              type: boolean
                              description: Indicates if the request is the current request being processed.
                            killed:
                              readOnly: false
                              type: boolean
                              description: |
                                Indicates if the request was killed before completion.

                                Note: you can set this value to `true` in a POST to the `uri` of this
                                request to kill it, if you are an Administrator role.
                            memory_rss:
                              readOnly: true
                              type: integer
                              description: The Resident Set Size (RSS) memory usage in bytes.
                              example: 253190144
                            memory_vms:
                              readOnly: true
                              type: integer
                              description: The Virtual Memory Size (VMS) memory usage in bytes.
                              example: 1797857280
                            order:
                              readOnly: true
                              type: integer
                              description: The order of this request within the current response list.
                            process_id:
                              readOnly: true
                              type: string
                              description: The process ID of the request.
                              example: '45940'
                            properties:
                              readOnly: true
                              type: object
                              description: Additional properties associated with the request, if any.
                              additionalProperties:
                                type: string
                            request_body:
                              readOnly: true
                              type: string
                              description: The body of the request, if any. This value may be truncated.
                            request_description:
                              readOnly: true
                              type: string
                              description: The description of the request type, based on the request path.
                              example: Users Collection
                            request_form:
                              readOnly: true
                              type: object
                              description: The form data (or query parameters) of the request, if any.
                              additionalProperties:
                                type: array
                                items:
                                  type: string
                            request_length:
                              readOnly: true
                              type: integer
                              description: The length of the request body in bytes.
                            request_method:
                              readOnly: true
                              type: string
                              description: The HTTP method of the request.
                            request_path:
                              readOnly: true
                              type: string
                              description: The path of the request URI.
                            response_body:
                              readOnly: true
                              type: string
                              description: The body of the response, if any. This value may be truncated.
                            response_length:
                              readOnly: true
                              type: integer
                              description: The length of the response body in bytes.
                            response_status:
                              readOnly: true
                              type: string
                              description: The status code of the response, if any.
                              example: '200'
                            response_time_ms:
                              readOnly: true
                              type: integer
                              description: The total time in milliseconds spent generating the response.
                              example: 123
                            end_date_long:
                              readOnly: true
                              type: string
                              description: The long-formatted end date of the request.
                              example: Monday, September 30, 2024
                            end_date_short:
                              readOnly: true
                              type: string
                              description: The short-formatted end date of the request.
                              example: 09/30/2024
                            end_datetime_long:
                              readOnly: true
                              type: string
                              description: The long-formatted end date and time of the request.
                              example: Monday, September 30, 2024 14:25:43 CDT
                            end_datetime_short:
                              readOnly: true
                              type: string
                              description: The short-formatted end date and time of the request.
                              example: 09/30/2024 14:25:43 CDT
                            end_epoch:
                              readOnly: true
                              type: number
                              description: The end date and time of the request in Unix epoch format.
                              example: 1727724343.434125
                            end_iso:
                              readOnly: true
                              type: string
                              description: The end date and time of the request in ISO 8601 format.
                              example: '2024-09-30T14:25:43-05:00'
                            start_date_long:
                              readOnly: true
                              type: string
                              description: The long-formatted start date of the request.
                              example: Monday, September 30, 2024
                            start_date_short:
                              readOnly: true
                              type: string
                              description: The short-formatted start date of the request.
                              example: 09/30/2024
                            start_datetime_long:
                              readOnly: true
                              type: string
                              description: The long-formatted start date and time of the request.
                              example: Monday, September 30, 2024 14:25:43 CDT
                            start_datetime_short:
                              readOnly: true
                              type: string
                              description: The short-formatted start date and time of the request.
                              example: 09/30/2024 14:25:43 CDT
                            start_epoch:
                              readOnly: true
                              type: number
                              description: The start date and time of the request in Unix epoch format.
                              example: 1727724343.434125
                            start_iso:
                              readOnly: true
                              type: string
                              description: The start date and time of the request in ISO 8601 format.
                              example: '2024-09-30T14:25:43-05:00'
                            status:
                              readOnly: true
                              type: string
                              description: |
                                The status of the request. Possible values are:

                                - OK
                                - Running
                                - Incomplete
                                - Error
                                - Stopped
                              example: OK
                            status_long:
                              readOnly: true
                              type: string
                              description: The long-formatted status of the request.
                              example: The request completed normally.
                            status_numeric_order:
                              readOnly: true
                              type: integer
                              description: |
                                The numeric order of the status of the request, so that running
                                requests are always sorted first.
                              example: 100
                            user_fullname:
                              readOnly: true
                              type: string
                              description: The full name of the user that initiated the request, if applicable.
                              example: John Doe
                            user_login:
                              readOnly: true
                              type: string
                              description: The login name of the user that initiated the request, if applicable.
                              example: jdoe
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: &ref_17
            application/json:
              schema:
                description: |
                  A standard format for error responses that may be returned by the API when various
                  types of errors occur, including authentication (sign-in) failures, authorization
                  (permission) failures, "object not found" (404), internal server errors (500),
                  bad client requests (400) and other types of errors.
                type: object
                properties: &ref_14
                  error:
                    type: object
                    description: |
                      A detailed error object that includes a code and message for the error
                      that occurred. This is useful for client applications to display to
                      users or to log for debugging purposes.
                    properties:
                      code:
                        type: string
                        description: |
                          A short code that identifies the type of error that occurred.
                          This helps group related errors into categories for common
                          treatment in the user interface or client program.

                          Some of the common codes are listed on the
                          [Core Concepts#Fixed error codes](/docs/rest-overview#fixed-error-codes)
                          page.
                        example: NotFoundOrNotAuthorized
                      message:
                        type: string
                        description: |
                          A human-readable message that describes the error that occurred.
                        example: You must be signed in to access this resource. If you are making an API call, please check the section of the documentation on authentication.
                  errors:
                    type: array
                    description: |
                      An array of error messages that may be returned by the server. Usually
                      this has the same content as the `error` object's `message` field, but
                      this array may contain additional messages or details.
                    items:
                      type: string
                      example: You must be signed in to access this resource. If you are making an API call, please check the section of the documentation on authentication.
                  response_code:
                    type: integer
                    description: |
                      The HTTP status code of the response. This is useful for client
                      applications to determine the type of error that occurred.
                    example: 401
                  success:
                    type: boolean
                    description: |
                      Indicates whether the request was successful (normally false if it's an
                      error response)
                    default: false
                  traceback:
                    type: string
                    description: |
                      A full traceback of the error that occurred on the server. This is
                      useful for debugging and troubleshooting. Note that the traceback is
                      only available if the server is in development mode.
                    example: |
                      Traceback (most recent call last): ... (full traceback)
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: &ref_18
            application/json:
              schema:
                description: |
                  A standard format for error responses that may be returned by the API when various
                  types of errors occur, including authentication (sign-in) failures, authorization
                  (permission) failures, "object not found" (404), internal server errors (500),
                  bad client requests (400) and other types of errors.
                type: object
                properties: *ref_14
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: &ref_19
            application/json:
              schema:
                description: |
                  A standard format for error responses that may be returned by the API when various
                  types of errors occur, including authentication (sign-in) failures, authorization
                  (permission) failures, "object not found" (404), internal server errors (500),
                  bad client requests (400) and other types of errors.
                type: object
                properties: *ref_14
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: &ref_20
            application/json:
              schema:
                description: |
                  A standard format for error responses that may be returned by the API when various
                  types of errors occur, including authentication (sign-in) failures, authorization
                  (permission) failures, "object not found" (404), internal server errors (500),
                  bad client requests (400) and other types of errors.
                type: object
                properties: *ref_14
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: &ref_21
            application/json:
              schema:
                description: |
                  A standard format for error responses that may be returned by the API when various
                  types of errors occur, including authentication (sign-in) failures, authorization
                  (permission) failures, "object not found" (404), internal server errors (500),
                  bad client requests (400) and other types of errors.
                type: object
                properties: *ref_14
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: &ref_22
            application/json:
              schema:
                description: |
                  A standard format for error responses that may be returned by the API when various
                  types of errors occur, including authentication (sign-in) failures, authorization
                  (permission) failures, "object not found" (404), internal server errors (500),
                  bad client requests (400) and other types of errors.
                type: object
                properties: *ref_14
  /api/v1/activity_monitor/event/{id_event}:
    get:
      summary: Get info about a request event
      description: |
        Retrieve a specific event in the system. "Events" are specific occurrences
        within a request, such as the beginning or end of the request, or
        certain events that occur during the request such as the 'heartbeat'
        operation which updates the request's status and checks for a kill
        request.

        Note that Events follow the same schema as Requests, except the
        `event_ids` list will only contain the event itself.
      operationId: get-activity-monitor-event
      parameters:
        - name: id_event
          in: path
          description: The ID of the event to retrieve
          required: true
          schema: &ref_290
            type: string
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_23
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: &ref_50
                      response_code:
                        type: integer
                        description: HTTP status code of the response for reference purposes.
                        example: 200
                        default: 200
                      results:
                        type: object
                      success:
                        type: boolean
                        description: |
                          Indicates whether the request was successful (normally true if it's not
                          an error response)
                        default: true
                      uri:
                        type: string
                        format: uri-reference
                        description: URL of the current request / resource, for reference purposes.
                        example: https://example.apps.journyx.com/api/v1/users
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          Represents a 'Request' within the system.
                          Usually, but not always, represents an HTTP request,
                          but may also represent a Scheduled Task (cron job) or
                          other special event types.
                        allOf: *ref_15
                        properties: *ref_16
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/activity_monitor/request/{id_request}:
    get:
      summary: Get info about a system request
      description: |
        Retrieve information about a specific request in the system.
      operationId: get-activity-monitor-request
      parameters:
        - name: id_request
          in: path
          description: The ID of the request to retrieve
          required: true
          schema: &ref_24
            type: string
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: *ref_23
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Terminate a system request
      description: |
        Kill an in-progress request. This is used to stop a request that is
        taking too long or is otherwise causing problems.

        To kill a request, send a `PUT` a request with the `killed` field set to
        `true`. No other fields are required. Note that this may not immediately
        stop the request, but it will indicate to the request that it should stop
        as soon as possible.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability.

        :::
      operationId: update-activity-monitor-request
      x-required-abilities:
        - Authority - Administrator
      parameters:
        - name: id_request
          in: path
          description: The ID of the request to retrieve
          required: true
          schema: *ref_24
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                killed:
                  type: boolean
                  description: |
                    If true, the request will be killed as soon as possible.
      responses:
        '204':
          description: |
            The action to kill the specified request was successfully processed.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/api_keys/delete_api_keys:
    post:
      summary: Delete API Keys
      description: |
        Delete one or more API keys by their internal ID.

        # START_RAW
        import NotRestful from '@site/content/partials/\_not-restful.mdx'

        <NotRestful />
        # END_RAW
      operationId: delete-api-keys
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: &ref_25
            type: string
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: &ref_26
            type: string
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: &ref_27
            type: string
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                id_api_key:
                  type: array
                  items:
                    type: string
                  description: |
                    The API key IDs to delete.
      responses:
        '200':
          description: |
            The API keys were successfully deleted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  deleted_id_api_keys:
                    type: array
                    items:
                      type: string
                    description: |
                      The API keys that were successfully deleted.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/api_keys/generate_api_key:
    post:
      summary: Create API Key
      description: |
        Generate (create) a new API key.

        :::info[Required abilities]

        In order to create an API key for yourself, you must have the
        `API Key - Generate` ability. To create an API key for another user,
        you must have the `API Keys - Manage` ability.

        This is true even if you have the `Authority - Administrator` ability.

        :::

        Important: there is a system setting that controls whether API Keys
        can be used at all; this can be found in the
        System Settings > Security section.

        The use of API Keys is described in more detail in the
        [Authentication#API Keys](/docs/authentication#api-keys) section.
      operationId: create-api-key
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                id_user:
                  type: string
                  description: |
                    The user ID to associate with the new API key. If not given,
                    defaults to the current user.
                  example: 1F9E41337EA341219D9D1D023F1D8C24
                read_only:
                  type: boolean
                  description: |
                    If true, the API key will only have read-only access.
                    Any attempts to modify data will be rejected.
                  example: false
                expires_days:
                  type: integer
                  description: |
                    The number of days until the API key expires.
                    If not provided, it defaults to the system setting.
                    The number provided can not exceed the system setting,
                    which by default is 180.
                  example: 180
                pname:
                  type: string
                  description: |
                    A name for the API key. This is used to identify the key
                    in the system and is not required to be unique.
                  example: My API Key for Reporting
      responses:
        '200':
          description: |
            The API key was successfully created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  key_metadata:
                    type: object
                    description: |
                      Information about the API key that was created.
                      Important: many of these fields will only be shown
                      if the key in question belongs to the current user.
                    properties: &ref_28
                      id_api_key:
                        type: string
                        description: |
                          The internal ID of the API key.
                      id_user:
                        type: string
                        description: |
                          The internal ID of the user associated with the API key.
                      id_user_fullname:
                        type: string
                        description: |
                          The full name of the user associated with the API key.
                      pname:
                        type: string
                        description: |
                          The display name (label) of the API key.
                      display_key:
                        type: string
                        description: |
                          This is the actual API Key to be used as a password
                          to [authenticate](/docs/authentication) with the system.
                          This will only be returned to the user who owns the key.
                      version:
                        type: string
                        description: |
                          The format version of the API key; normally `2`.
                      read_only:
                        type: boolean
                        description: |
                          If true, the API key is for read-only access.
                      expired:
                        type: boolean
                        description: |
                          If true, the API key has already expired.
                      expires_days:
                        type: integer
                        description: |
                          The number of days until the API key expires.
                      expires_timestamp:
                        type: number
                        description: |
                          The Unix timestamp when the API key expires.
                      creator:
                        type: string
                        description: |
                          The internal ID of the user who created the API key;
                          not necessarily the owner (the user associated with the key).
                      creator_fullname:
                        type: string
                        description: |
                          The full name of the user who created the API key.
                      create_timestamp:
                        type: number
                        description: |
                          The Unix timestamp when the API key was created.
                      modifier:
                        type: string
                        description: |
                          The internal ID of the user who last modified the API key.
                      modifier_fullname:
                        type: string
                        description: |
                          The full name of the user who last modified the API key.
                      modify_timestamp:
                        type: number
                        description: |
                          The Unix timestamp when the API key was last modified.
                      properties:
                        type: object
                        description: |
                          Any custom properties associated with the API key.
                      scope:
                        type: array
                        items:
                          type: string
                        description: |
                          The list of abilities associated with the API key.
                          If empty, the API key has full access.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/api_keys/list_api_keys:
    post:
      summary: List API Keys
      description: |
        Retrieve a list of API keys associated with the given user.

        :::info[Required abilities]

        In order to list API keys for yourself, you must have the
        `API Key - Sign In` ability. To list API keys for another user,
        you must have the `API Keys - Manage` ability.

        This is true even if you have the `Authority - Administrator` ability.

        :::

         # START_RAW
        import NotRestful from '@site/content/partials/\_not-restful.mdx'

        <NotRestful />
        # END_RAW

        The use of API Keys is described in more detail in the
        [Authentication#API Keys](/docs/authentication#api-keys) section.
      operationId: list-api-keys
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                id_user:
                  type: array
                  items:
                    type: string
                  description: |
                    The user ID(s) to list API keys for. If not given, defaults to the
                    current user.
                  example:
                    - 1F9E41337EA341219D9D1D023F1D8C24
                include_expired:
                  type: boolean
                  description: |
                    If true, include expired API keys in the list.
                  default: false
                  example: false
      responses:
        '200':
          description: |
            The API keys were successfully retrieved.
          content:
            application/json:
              schema:
                allOf: &ref_180
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response as an array in the `results` field.
                    type: object
                    allOf: &ref_29
                      - description: |
                          A success response that may be returned by certain API endpoints
                          that do not support pagination; the entire result set is returned in a single
                          response.
                        type: object
                        properties: &ref_31
                          response_code:
                            type: integer
                            description: HTTP status code of the response for reference purposes.
                            example: 200
                            default: 200
                          success:
                            type: boolean
                            description: |
                              Indicates whether the request was successful (normally `true` if it's
                              not an error response).
                            default: true
                          uri:
                            type: string
                            description: URL of the current request / resource, for reference purposes.
                            example: https://example.apps.journyx.com/api/v1/users
                          status:
                            type: array
                            items:
                              type: string
                            description: |
                              An array of status (confirmation) messages that occurred during
                              the request. This field may be empty.

                              In the UI, these are sometimes displayed with a green icon.
                          errors:
                            type: array
                            items:
                              type: string
                            description: |
                              An array of error messages that occurred during
                              the request. This field may be empty.

                              In the UI, these are sometimes displayed with a red error icon.
                          warnings:
                            type: array
                            items:
                              type: string
                            description: |
                              An array of warning messages that occurred during
                              the request. This field may be empty.

                              In the UI, these are sometimes displayed with a yellow
                              warning icon.
                          info:
                            type: array
                            items:
                              type: string
                            description: |
                              An array of informational messages that occurred during
                              the request. This field may be empty.

                              In the UI, these are sometimes displayed with a blue info icon.
                      - type: object
                        properties:
                          results:
                            type: array
                            items:
                              type: object
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          An API Key metadata (description) object.

                          Important: many of these fields will only be shown
                          if the key in question belongs to the current user.
                        items:
                          type: object
                          description: |
                            An API Key metadata (description) object.

                            Important: many of these fields will only be shown
                            if the key in question belongs to the current user.
                          properties: *ref_28
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/api_keys/search_api_keys:
    post:
      summary: Search API Keys
      description: |
        Search for API keys based on various criteria, mainly by user ID
        or expiration date.

        :::info[Required abilities]

        You must have the `API Keys - Manage` ability to search for API keys.

        :::

        # START_RAW
        import NotRestful from '@site/content/partials/\_not-restful.mdx'

        <NotRestful />
        # END_RAW

        The use of API Keys is described in more detail in the
        [Authentication#API Keys](/docs/authentication#api-keys) section.
      operationId: search-api-keys
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                users:
                  type: array
                  items:
                    type: string
                  description: |
                    The user ID(s) to search for. If not given, defaults to all users
                    that the current user has access to.
                  example:
                    - 1F9E41337A341219D9D1D023F1D8C24
                include_expired:
                  type: boolean
                  description: |
                    If true, include expired API keys in the search results.
                  default: false
                  example: false
                expires_before:
                  type: string
                  description: |
                    Include API keys that expire before this date (YYYYMMDD format)
                  example: '20241231'
                expires_after:
                  type: string
                  description: |
                    Include API keys that expire after this date (YYYYMMDD format)
                  example: '20210101'
      responses:
        '200':
          description: |
            The API keys were successfully retrieved.
          content:
            application/json:
              schema:
                type: object
                description: |
                  A single result from a search for API keys.
                properties: &ref_181
                  expiration_choices:
                    type: array
                    items:
                      type: array
                      items:
                        type: string
                    description: |
                      The possible expiration choices for the API key.
                      These are in a [id, label] format for a SELECT element.
                    example:
                      - - '90'
                        - '90'
                      - - '180'
                        - '180'
                  max_expiration_days:
                    type: integer
                    description: |
                      The maximum number of days that an API key can be valid for.
                    example: 180
                  keys:
                    type: array
                    items:
                      type: object
                      description: |
                        An API Key metadata (description) object.

                        Important: many of these fields will only be shown
                        if the key in question belongs to the current user.
                      properties: *ref_28
                    description: |
                      The API keys that match the search criteria.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/approvals/approve:
    post:
      summary: Approve an Entry Sheet
      description: |
        Approve one or more submitted Entry Sheets under the Approvals system. This
        includes both Period and Project Approvals.

        # START_RAW
        import ApprovalsAbilities from '@site/content/partials/\_approvals-abilities.mdx'

        <ApprovalsAbilities />
        # END_RAW
      operationId: approve-entry-sheet
      requestBody:
        required: true
        description: |
          The request body for the "Approve Sheet" endpoint.
          Note that the request body must be a JSON list, not an object,
          with one entry (object) in the array per sheet to approve.
        content:
          application/json:
            schema:
              type: array
              items: &ref_184
                type: object
                required: &ref_182
                  - id_sheet
                  - sheettype
                properties: &ref_183
                  id_sheet:
                    type: string
                    description: |
                      The ID of the sheet to approve. This is required.
                    example: D964DF9968B8424AB1E939BEDB44C68D
                  sheettype:
                    type: string
                    description: |
                      The internal Entry Type code of the sheet. Note that `mileage` is used
                      for what is now called "Custom Entry". This is required.
                    example: time
                    enum:
                      - time
                      - expense
                      - mileage
                  id_project:
                    type: string
                    description: |
                      The ID of the project to approve. If this value is given, we perform
                      a Project Approval of the given project, instead of a Period Approval.
                      This only approves the use of the Project within the sheet, not the
                      overall sheet itself.
                    example: 80A4EE9CB3E94FC4A3758621174DD736
              description: |
                The request body for the "Approve Sheet" endpoint.
                Note that the request body must be a JSON list, not an object,
                with one entry (object) in the array per sheet to approve.
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            The response to an Approve, Reject, or Reopen action on an Entry Sheet.
            The `results` array will be empty, but the `status` array will contain
            any status (confirmation) messages generated by the action.
          content:
            application/json:
              schema:
                description: |
                  The response to an Approve, Reject, or Reopen action on an Entry Sheet.
                  The `results` array will be empty, but the `status` array will contain
                  any status (confirmation) messages generated by the action.
                allOf: &ref_32
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response as an array in the `results` field.
                    type: object
                    allOf: *ref_29
                  - type: object
                    properties:
                      status:
                        type: array
                        items:
                          type: string
                        description: |
                          Any status (confirmation) messages generated by the
                          Approve, Reject, or Reopen action.
                        example:
                          - The sheet status was changed to approved.
                          - The sheet status was changed to open.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/approvals/myApprovalQueue:
    post:
      summary: My Approval Queue
      description: |
        Retrieve a list of Entry Sheets that are pending your approval. This
        endpoint covers both Period and Project Approvals, depending on the
        queueType provided.

        # START_RAW
        import NotRestful from '@site/content/partials/\_not-restful.mdx'

        <NotRestful />
        # END_RAW

        :::info

        Note: this endpoint requires an `application/x-www-form-urlencoded`
        form, not a JSON body.

        :::
      operationId: my-approval-queue
      requestBody:
        required: true
        description: |
          The request body for the My Approval Queue endpoint.
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - sheettype
                - viewWhat
                - queueType
              properties:
                sheettype:
                  type: string
                  enum:
                    - sheet_submitted
                    - sheet_rejected
                    - sheet_approved
                  description: |
                    The type of Entry Sheet to retrieve.
                viewWhat:
                  type: string
                  enum:
                    - ViewMine
                    - ViewAll
                    - backuponly
                    - sheet_submitted
                    - sheet_rejected
                    - sheet_approved
                  description: |
                    The view to use when retrieving Entry Sheets.
                queueType:
                  type: string
                  enum:
                    - sheet_approvals
                    - project_approvals
                  description: |
                    The type of approval queue to retrieve.
                sheet_user:
                  type: string
                  description: |
                    The user ID to retrieve approval queues for, if any.
                  example: D964DF9968B8424AB1E939BEDB44C68D
                searchType:
                  type: string
                  enum:
                    - contains
                    - startswith
                    - endswith
                  description: |
                    The type of text search to perform. Only applies
                    when `gen_searchTerm` is provided and queueType is `project_approvals`.
                sheet_end_date:
                  type: string
                  description: The Sheet End Date to use when searching for Entry Sheets. Uses the date format defined in the "Short Date Format" system setting.
                  example: 12-31-2022
                sheet_end_type:
                  type: string
                  enum:
                    - after
                    - before
                    - 'on'
                    - all
                    - 'null'
                  description: |
                    The type of Sheet End Date search to perform.
                    - `after` returns all sheets on or after the given date.
                    - `before` returns all sheets on or before the given date.
                    - `on` returns all sheets on the given date only.
                    - `all` returns all sheets regardless of date.
                    - `null` - no date search is performed.
                sheet_start_date:
                  type: string
                  description: The Sheet Start Date to use when searching for Entry Sheets. Uses the date format defined in the "Short Date Format" system setting.
                  example: 12-31-2022
                sheet_start_type:
                  type: string
                  enum:
                    - after
                    - before
                    - 'on'
                    - all
                    - 'null'
                  description: |
                    The type of Sheet Start Date search to perform.
                    - `after` returns all sheets on or after the given date.
                    - `before` returns all sheets on or before the given date.
                    - `on` returns all sheets on the given date only.
                    - `all` returns all sheets regardless of date.
                    - `null` - no date search is performed.
                gen_searchTerm:
                  type: string
                  description: The search term to use when searching for Entry Sheets. Only applies when `queueType` is `project_approvals`.
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            The response to a request for the current user's approval queue.
          content:
            application/json:
              schema:
                description: |
                  The response to a request for the current user's approval queue.
                allOf: &ref_187
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response as an array in the `results` field.
                    type: object
                    allOf: *ref_29
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          The response to a request for the current user's approval queue.
                        items:
                          type: object
                          description: |
                            The response to a request for the current user's approval queue.
                          properties: &ref_186
                            requireViewing:
                              type: boolean
                              description: |
                                Indicates whether the user must view the Entry Sheet before
                                taking approval action on it.
                            canReopenSheets:
                              type: boolean
                              description: |
                                Indicates whether the user can reopen Entry Sheets.
                            canShowFullSheetLink:
                              type: boolean
                              description: |
                                Indicates whether to display a link to open the full sheet
                                in a separate window.
                            canShowSheetHistory:
                              type: boolean
                              description: |
                                Indicates whether to display a link to view the history of
                                the Entry Sheet.
                            screen:
                              type: object
                              description: |
                                The current UI settings for the Approvals screen.
                              allOf: &ref_158
                                - type: object
                                  description: |
                                    These are fields that are common to most object types.
                                  properties: *ref_0
                                - type: object
                                  description: |
                                    These are the fields that can be modified on the UI Screen endpoint.
                                  properties: &ref_162
                                    allow_customize:
                                      type: boolean
                                      readOnly: true
                                      description: |
                                        Whether the user is allowed to customize the settings for this screen.
                                      example: true
                                    fields:
                                      type: array
                                      description: |
                                        The fields that are available on this screen.
                                      items:
                                        type: object
                                        description: |
                                          A configured field on a screen.
                                        properties: *ref_30
                                - type: object
                                  description: |
                                    Fields related to the creation of a resource, including the creation
                                    timestamp, creator user ID, and creator user name.

                                    Note that extended information about the creator user may be included
                                    in the `creator_properties` field, depending on the `$keys` requested.
                                    If present, this information will follow the schema of the
                                    [User](/docs/reference/schemas/user) object.
                                  allOf: *ref_1
                                  properties: *ref_2
                                - type: object
                                  description: Object creation date/time fields common to many resources.
                                  allOf: *ref_5
                                  properties: *ref_6
                                - type: object
                                  description: |
                                    Fields related to the last modification of a resource, including the
                                    last modified timestamp in various formats, the modifier's user ID and
                                    full name. Please note that this only records the most recent
                                    modification. In addition, it may not reflect modifications to child
                                    resources or extended properties that are defined in other tables, such
                                    as "Custom Fields". These last modifier fields are always read-only.

                                    Note that extended information about the modifier user may be included
                                    in the `modifier_properties` field, depending on the `$keys` requested.
                                    If present, this information will follow the schema of the
                                    [User](/docs/reference/schemas/user) object.
                                  allOf: *ref_7
                                  properties: *ref_8
                                - type: object
                                  description: |
                                    The last modified date/time fields common to many resources. Please note
                                    that this only records the most recent modification. In addition, it may
                                    not record modifications to child resources or extended properties that
                                    are defined in other tables, such as "Custom Fields". These fields are
                                    read-only.
                                  allOf: *ref_9
                                  properties: *ref_10
                                - type: object
                                  description: |
                                    These are fields related to the deprecated "Domain" object.
                                  properties: *ref_11
                              properties: &ref_159
                                id_screen:
                                  type: string
                                  description: |
                                    The unique internal ID of this screen. (Same as `id`.)
                                    These are fixed values that are defined in the system.
                                  readOnly: true
                                  example: accruals
                                properties:
                                  type: object
                                  readOnly: true
                                  description: |
                                    Additional properties of the screen. Currently this is not used.
                            queue:
                              type: array
                              description: |
                                The current user's approval queue. These are sheets
                                (or Project Approval track within sheets)
                                that require the user's approval.
                              items:
                                type: object
                                description: |
                                  This represents an individual sheet waiting in the approval queue.
                                properties: &ref_185
                                  amount:
                                    type: number
                                    description: The total amount (hours or currency) of the sheet.
                                    example: 40
                                  attachments_count:
                                    type: integer
                                    description: The number of attachments on the sheet.
                                    example: 2
                                  create_timestamp:
                                    type: number
                                    format: float
                                    description: The timestamp when the object was created, in Unix epoch format.
                                    readOnly: true
                                    example: 1696021987.01375
                                  creator:
                                    type: string
                                    description: |
                                      The user ID who created the sheet. This is not necessarily the
                                      nominal owner of the sheet.
                                    example: 75B23EADB8BC4171AA052B37A297D29B
                                  end_date:
                                    type: string
                                    description: |
                                      The end date of the sheet in YYYYMMDD format.
                                    example: '20231231'
                                  end_date_epoch:
                                    type: number
                                    format: float
                                    description: |
                                      The end date of the sheet in Unix epoch format.
                                    example: 1696032000
                                  end_date_iso:
                                    type: string
                                    description: |
                                      The end date of the sheet in ISO 8601 format.
                                    example: '2023-12-31'
                                  end_date_long:
                                    type: string
                                    description: |
                                      The long-formatted end date of the sheet. The format
                                      is determined by the "Long Date" system setting.
                                    example: Saturday, September 30, 2023
                                  end_date_short:
                                    type: string
                                    description: |
                                      The short-formatted end date of the sheet. The format
                                      is determined by the "Short Date" system setting.
                                    example: 09/30/2023
                                  history_note_count:
                                    type: integer
                                    description: |
                                      The number of history notes on the sheet.
                                    example: 3
                                  history_url:
                                    type: string
                                    description: |
                                      The URL to view the history of the sheet.
                                    example: /jtcgi/approveprojects.pyc?history=F554B5C8A0AC4982BFF6EBBF47E0FC86&nav_key=sheet_history
                                  i_am_group_approver:
                                    type: boolean
                                    description: |
                                      Indicates whether the user is a group approver for the sheet.
                                    example: true
                                  id_approver:
                                    type: string
                                    description: |
                                      The user ID of the designated or next approver for the sheet.
                                    example: 75B23EADB8BC4171AA052B37A297D29B
                                  id_approver_properties:
                                    type: object
                                    description: |
                                      The [User properties](/docs/reference/schemas/user)
                                      of the designated or next approver for the sheet.
                                  id_domain:
                                    type: string
                                    description: |
                                      The domain ID of the sheet.
                                    example: install_root_dom
                                  id_sheet:
                                    type: string
                                    description: |
                                      The Entry Sheet ID. You will need to submit this ID to
                                      [approve](/docs/reference/approve-entry-sheet) or
                                      [reject](/docs/reference/reject-entry-sheet) the sheet.
                                    example: F554B5C8A0AC4982BFF6EBBF47E0FC86
                                  id_timesheet:
                                    type: string
                                    description: |
                                      The Time Period ID of the Entry Sheet. This points
                                      to the definition of how many days the user's sheets
                                      should span.
                                  id_user:
                                    type: string
                                    description: |
                                      The user ID of the sheet owner.
                                    example: F0C5C7F8DE3D48A2824AEE584F077E58
                                  id_user_properties:
                                    type: object
                                    description: |
                                      The [User properties](/docs/reference/schemas/user)
                                      of the sheet owner
                                  is_approved:
                                    type: boolean
                                    description: |
                                      Indicates whether the sheet has been approved at any
                                      level. This doesn't necessarily indicate full approval
                                      at all approval levels.
                                    example: false
                                  is_fully_approved:
                                    type: boolean
                                    description: |
                                      Indicates whether the sheet has been fully approved
                                      at all approval levels.
                                    example: false
                                  is_fully_open:
                                    type: boolean
                                    description: |
                                      Indicates whether the sheet has never been approved or rejected.
                                      A sheet is "fully open" if it's in the "Open" state and not
                                      the "Rejected". In both states, the sheet is editable by the user.
                                    example: true
                                  is_open:
                                    type: boolean
                                    description: |
                                      Indicates whether the sheet is open for editing. This includes
                                      both the "Open" and "Rejected" states.
                                    example: true
                                  is_rejected:
                                    type: boolean
                                    description: |
                                      Indicates whether the sheet is currently in the rejected state.
                                      Note that if a sheet was once rejected, but then re-submitted for
                                      approval, it will not be considered in the "rejected" state.
                                    example: false
                                  is_submitted:
                                    type: boolean
                                    description: |
                                      Indicates whether the sheet is currently being submitted for approval.
                                      When it is in this state, no approvals or rejections have occurred.
                                    example: true
                                  is_virtual:
                                    type: boolean
                                    description: |
                                      Indicates whether the sheet is a virtual sheet. A virtual sheet is
                                      the submission of only a portion of a sheet for approval rather
                                      than the full sheet.
                                    example: false
                                  level:
                                    type: integer
                                    description: |
                                      The current approval level of the sheet. This is the level at which the
                                      sheet is currently being approved. A sheet at level 1 has been
                                      submitted to the first level of approvers.
                                  modifier:
                                    type: string
                                    description: |
                                      The user ID who last modified the sheet.
                                    example: 75B23EADB8BC4171AA052B37A297D29B
                                  modify_timestamp:
                                    type: number
                                    format: float
                                    description: |
                                      The timestamp when the object was most recently modified, in Unix
                                      epoch format.
                                    readOnly: true
                                    example: 1696021987.01375
                                  pname:
                                    type: string
                                    description: |
                                      An auto-generated string which identifies the sheet's time period.
                                    example: 09/24/2023 - 09/30/2023
                                  sheettype:
                                    type: string
                                    description: |
                                      The Sheet Type code. The value `mileage` is used for what the
                                      system calls "Custom Entry" sheets.
                                    enum:
                                      - time
                                      - expense
                                      - mileage
                                  sheettype_label:
                                    type: string
                                    description: |
                                      The human-readable label for the sheet type.
                                    example: Time
                                  start_date:
                                    type: string
                                    description: |
                                      The start date of the sheet in YYYYMMDD format.
                                    example: '20231231'
                                  start_date_epoch:
                                    type: number
                                    format: float
                                    description: |
                                      The start date of the sheet in Unix epoch format.
                                    example: 1696032000
                                  start_date_iso:
                                    type: string
                                    description: |
                                      The start date of the sheet in ISO 8601 format.
                                    example: '2023-12-31'
                                  start_date_long:
                                    type: string
                                    description: |
                                      The long-formatted start date of the sheet. The format
                                      is determined by the "Long Date" system setting.
                                    example: Saturday, September 30, 2023
                                  start_date_short:
                                    type: string
                                    description: |
                                      The short-formatted start date of the sheet. The format
                                      is determined by the "Short Date" system setting.
                                    example: 09/30/2023
                                  state:
                                    type: integer
                                    description: |
                                      The current state of the sheet using internal state codes.

                                      - 0 - `OPEN` - "fully open" for entry
                                      - 1 - `SUBMITTED` - submitted for approval
                                      - 2 - `APPROVED` - approved
                                      - 3 - `REJECTED` - rejected (but open for entry)
                                    enum:
                                      - 0
                                      - 1
                                      - 2
                                      - 3
                                  state_short:
                                    type: string
                                    description: |
                                      The human-readable short-format label for the sheet state.
                                    example: Open
                                  state_str:
                                    type: string
                                    description: |
                                      The human-readable label for the sheet state.
                                    example: Submitted to Jayne Smith for Approval
                                  submitted_date:
                                    type: string
                                    description: |
                                      The submitted date of the sheet in YYYYMMDD format.
                                    example: '20231231'
                                  submitted_date_epoch:
                                    type: number
                                    format: float
                                    description: |
                                      The submitted date of the sheet in Unix epoch format.
                                    example: 1696032000
                                  submitted_date_iso:
                                    type: string
                                    description: |
                                      The submitted date of the sheet in ISO 8601 format.
                                    example: '2023-12-31'
                                  submitted_date_long:
                                    type: string
                                    description: |
                                      The long-formatted submitted date of the sheet. The format
                                      is determined by the "Long Date" system setting.
                                    example: Saturday, September 30, 2023
                                  submitted_date_short:
                                    type: string
                                    description: |
                                      The short-formatted submitted date of the sheet. The format
                                      is determined by the "Short Date" system setting.
                                    example: 09/30/2023
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/approvals/myApprovalTypes:
    get:
      summary: Available approval types
      description: |
        Retrieve the available approval sheet types for the current user,
        for Time, Expense, and Custom Entry, as well as Project Approvals.
      operationId: my-approval-types
      responses:
        '200':
          description: |
            The response to a request for the current user's approval sheet types.
            Check the `results` object for the types of sheets that the user can approve.
          content:
            application/json:
              schema:
                description: |
                  The response to a request for the current user's approval sheet types.
                  Check the `results` object for the types of sheets that the user can approve.
                allOf: &ref_188
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response as an object in the `results` field.
                    type: object
                    allOf: &ref_165
                      - description: |
                          A success response that may be returned by certain API endpoints
                          that do not support pagination; the entire result set is returned in a single
                          response.
                        type: object
                        properties: *ref_31
                      - type: object
                        properties:
                          results:
                            type: object
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          The list of sheet types that the user can approve.
                        properties:
                          time:
                            type: boolean
                            description: |
                              Indicates whether the user can approve Time Entry Sheets.
                          expense:
                            type: boolean
                            description: |
                              Indicates whether the user can approve Expense Entry Sheets.
                          custom:
                            type: boolean
                            description: |
                              Indicates whether the user can approve Custom Entry (type: `mileage`) Sheets.
                          project:
                            type: boolean
                            description: |
                              Indicates whether the user can approve Project Approval tracks.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/approvals/reject:
    post:
      summary: Reject an Entry Sheet
      description: |
        Reject one or more submitted Entry Sheets under the Approvals system. This
        includes both Period and Project Approvals.

        # START_RAW
        import ApprovalsAbilities from '@site/content/partials/\_approvals-abilities.mdx'

        <ApprovalsAbilities />
        # END_RAW
      operationId: reject-entry-sheet
      requestBody:
        required: true
        description: |
          The request body for the "Reject Sheet" endpoint of Approvals.
          Note that the request body must be a JSON list, not an object,
          with one entry (object) in the array per sheet to reject.
        content:
          application/json:
            schema:
              type: array
              items: &ref_191
                type: object
                required: &ref_189
                  - id_sheet
                  - sheettype
                  - reason
                properties: &ref_190
                  id_sheet:
                    type: string
                    description: |
                      The ID of the sheet to reject. This is required.
                    example: D964DF9968B8424AB1E939BEDB44C68D
                  sheettype:
                    type: string
                    description: |
                      The internal Entry Type code of the sheet. Note that `mileage` is used
                      for what is now called "Custom Entry". This is required.
                    example: time
                    enum:
                      - time
                      - expense
                      - mileage
                  reason:
                    type: string
                    description: |
                      The reason for rejecting the sheet. This is required.
                    example: Too many hours on project XYZ.
                  id_project:
                    type: string
                    description: |
                      The ID of the project to reject. If this value is given, we reject the
                      Project Approval track of the given project, instead of rejecting the
                      entire sheet for Period Approvals.
                      This only rejects the use of the Project within the sheet, not the
                      overall sheet itself.
                    example: 80A4EE9CB3E94FC4A3758621174DD736
              description: |
                The request body for the "Reject Sheet" endpoint of Approvals.
                Note that the request body must be a JSON list, not an object,
                with one entry (object) in the array per sheet to reject.
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            The response to an Approve, Reject, or Reopen action on an Entry Sheet.
            The `results` array will be empty, but the `status` array will contain
            any status (confirmation) messages generated by the action.
          content:
            application/json:
              schema:
                description: |
                  The response to an Approve, Reject, or Reopen action on an Entry Sheet.
                  The `results` array will be empty, but the `status` array will contain
                  any status (confirmation) messages generated by the action.
                allOf: *ref_32
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/approvals/reopen:
    post:
      summary: Reopen an Entry Sheet
      description: |
        Reopen a previously approved or rejected Entry Sheet under the Approvals system.
        This includes both Period and Project Approvals.
        This fully resets approvals status and reopens the sheet for editing.

        # START_RAW
        import ApprovalsAbilities from '@site/content/partials/\_approvals-abilities.mdx'

        <ApprovalsAbilities />
        # END_RAW
      operationId: reopen-entry-sheet
      requestBody:
        required: true
        description: |
          The request body for the "Reopen Sheet" endpoint.
          Note that the request body must be a JSON list, not an object,
          with one entry (object) in the array per sheet to reopen.
        content:
          application/json:
            schema:
              type: array
              items: &ref_194
                type: object
                required: &ref_192
                  - id_sheet
                  - sheettype
                properties: &ref_193
                  id_sheet:
                    type: string
                    description: |
                      The ID of the sheet to reopen. This is required.
                    example: D964DF9968B8424AB1E939BEDB44C68D
                  sheettype:
                    type: string
                    description: |
                      The internal Entry Type code of the sheet. Note that `mileage` is used
                      for what is now called "Custom Entry". This is required.
                    example: time
                    enum:
                      - time
                      - expense
                      - mileage
              description: |
                The request body for the "Reopen Sheet" endpoint.
                Note that the request body must be a JSON list, not an object,
                with one entry (object) in the array per sheet to reopen.
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            The response to an Approve, Reject, or Reopen action on an Entry Sheet.
            The `results` array will be empty, but the `status` array will contain
            any status (confirmation) messages generated by the action.
          content:
            application/json:
              schema:
                description: |
                  The response to an Approve, Reject, or Reopen action on an Entry Sheet.
                  The `results` array will be empty, but the `status` array will contain
                  any status (confirmation) messages generated by the action.
                allOf: *ref_32
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/asp/jobs:
    get:
      summary: List ASP Jobs
      description: |
        Retrieve a list of Auto Sheet Processing jobs.
      operationId: list-auto-sheet-processing-jobs
      parameters:
        - name: $top
          in: query
          required: false
          schema: &ref_38
            type: integer
            maximum: 1000
            minimum: 1
            default: 100
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: &ref_39
            type: integer
            minimum: 0
            default: 0
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: &ref_40
            type: string
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: &ref_41
            type: string
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: &ref_42
            type: string
            default: pname asc
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_195
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          An Auto Sheet Processing job.
                        items:
                          type: object
                          description: |
                            An Auto Sheet Processing job.
                          allOf: &ref_35
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              description: |
                                The fields that can be modified when creating or updating
                                an Auto Sheet Processing job.
                              properties: &ref_34
                                pname:
                                  type: string
                                  description: |
                                    The name of the Auto Sheet Processing job.
                                  example: Approve Non-exempt Time
                                description:
                                  type: string
                                  description: |
                                    A description of the Auto Sheet Processing job.
                                  example: Approve non-exempt late approval
                                id_notification_set:
                                  type: string
                                  description: |
                                    The internal ID of the notification set to use for this job.
                                  example: 231785CAA7B542CDAA53709A0DCB2089
                                id_user_sheet_set:
                                  type: string
                                  description: |
                                    The internal ID of the User Sheet Set to use for this job.
                                  example: E0807B3FFB744F99A528DD70718D03B5
                                workflow_list:
                                  type: array
                                  description: |
                                    A list of ASP Settings Group IDs associated with this job.
                                    Setting this list is how you configure the settings to
                                    use in the Auto Sheet Processing job.
                                  items:
                                    type: string
                                    description: The internal ID of an ASP Settings Group.
                                  example:
                                    - 64EAE4689F514F0A9363386CC72736DD
                                    - 253AC9C902014D9CB8F68B689582184E
                            - type: object
                              description: |
                                Fields related to the creation of a resource, including the creation
                                timestamp, creator user ID, and creator user name.

                                Note that extended information about the creator user may be included
                                in the `creator_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_1
                              properties: *ref_2
                            - type: object
                              description: Object creation date/time fields common to many resources.
                              allOf: *ref_5
                              properties: *ref_6
                            - type: object
                              description: |
                                Fields related to the last modification of a resource, including the
                                last modified timestamp in various formats, the modifier's user ID and
                                full name. Please note that this only records the most recent
                                modification. In addition, it may not reflect modifications to child
                                resources or extended properties that are defined in other tables, such
                                as "Custom Fields". These last modifier fields are always read-only.

                                Note that extended information about the modifier user may be included
                                in the `modifier_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_7
                              properties: *ref_8
                            - type: object
                              description: |
                                The last modified date/time fields common to many resources. Please note
                                that this only records the most recent modification. In addition, it may
                                not record modifications to child resources or extended properties that
                                are defined in other tables, such as "Custom Fields". These fields are
                                read-only.
                              allOf: *ref_9
                              properties: *ref_10
                          properties: &ref_36
                            id_asp_job:
                              type: string
                              readOnly: true
                              description: |
                                The unique internal ID of the Auto Sheet Processing job. (Same as `id` field.)
                            last_run:
                              type: string
                              readOnly: true
                              description: |
                                The timestamp of the last time the job was run in Unix epoch format.
                            id_owner:
                              type: string
                              readOnly: true
                              description: |
                                Internal; reserved for future use.
                            is_scheduled:
                              type: boolean
                              readOnly: true
                              example: false
                              description: |
                                Whether the job is currently scheduled to run.
                            workflow_list_properties:
                              type: array
                              readOnly: true
                              description: |
                                A list of ASP Settings data associated with this job.

                                This is a read-only field; the settings to use for this
                                job can be adjusted by setting the `workflow_list` array.
                              items:
                                type: object
                                description: |
                                  Auto Sheet Processing (ASP) Settings Group.

                                  This represents a single configuration settings group for the ASP
                                  feature that can be applied as a rule-set to selected users.
                                allOf: &ref_43
                                  - type: object
                                    description: |
                                      These are fields that are common to most object types.
                                    properties: *ref_0
                                  - type: object
                                    description: |
                                      Auto Sheet Processing (ASP) Settings Group modifiable fields.

                                      These are the fields that can be modified or given as input when creating
                                      or modifying an Auto Sheet Processing settings group.
                                    properties: &ref_45
                                      category:
                                        type: integer
                                        example: 1
                                        description: |
                                          The category of the Auto Sheet Processing (ASP) settings group.

                                          - 1 - a User Set
                                          - 2 - a Workflow set
                                          - 3 - a notification set
                                          - 4 - global settings

                                          The category 4 (global) settings are pre-made and cannot be created
                                          with the `POST` method. And once set, the category cannot be changed.
                                        enum:
                                          - 1
                                          - 2
                                          - 3
                                          - 4
                                      pname:
                                        type: string
                                        description: |
                                          The name of the Auto Sheet Processing settings group.
                                        example: Contractor Settings
                                      member_settings:
                                        type: object
                                        description: |
                                          These are the actual settings of the Settings Group.

                                          Keys are various settings names that pertain to the
                                          `category` type; the keys present depend on
                                          the category type.
                                  - type: object
                                    description: |
                                      Fields related to the creation of a resource, including the creation
                                      timestamp, creator user ID, and creator user name.

                                      Note that extended information about the creator user may be included
                                      in the `creator_properties` field, depending on the `$keys` requested.
                                      If present, this information will follow the schema of the
                                      [User](/docs/reference/schemas/user) object.
                                    allOf: *ref_1
                                    properties: *ref_2
                                  - type: object
                                    description: Object creation date/time fields common to many resources.
                                    allOf: *ref_5
                                    properties: *ref_6
                                  - type: object
                                    description: |
                                      Fields related to the last modification of a resource, including the
                                      last modified timestamp in various formats, the modifier's user ID and
                                      full name. Please note that this only records the most recent
                                      modification. In addition, it may not reflect modifications to child
                                      resources or extended properties that are defined in other tables, such
                                      as "Custom Fields". These last modifier fields are always read-only.

                                      Note that extended information about the modifier user may be included
                                      in the `modifier_properties` field, depending on the `$keys` requested.
                                      If present, this information will follow the schema of the
                                      [User](/docs/reference/schemas/user) object.
                                    allOf: *ref_7
                                    properties: *ref_8
                                  - type: object
                                    description: |
                                      The last modified date/time fields common to many resources. Please note
                                      that this only records the most recent modification. In addition, it may
                                      not record modifications to child resources or extended properties that
                                      are defined in other tables, such as "Custom Fields". These fields are
                                      read-only.
                                    allOf: *ref_9
                                    properties: *ref_10
                                properties: &ref_44
                                  category_text:
                                    example: Workflow
                                    type: string
                                    readOnly: true
                                    description: |
                                      The text representation of the `category` field.
                                  description:
                                    type: string
                                    readOnly: true
                                    description: |
                                      A description of the Auto Sheet Processing (ASP) settings group.
                                      This is a read-only generated field.
                                    example: 'Workflow: Get open sheets. Apply action submit.'
                                  id_asp_set:
                                    example: global
                                    type: string
                                    readOnly: true
                                    description: |
                                      The unique internal ID of the Auto Sheet Processing (ASP) settings group.
                                      Same as the `id` field.
                                  select_options:
                                    type: object
                                    readOnly: true
                                    description: |
                                      Keys are various fields in the Auto Sheet Processing (ASP)
                                      settings page that needs selection list choices;
                                      the exact keys depend on the `category` type.
                                  id_owner:
                                    type: string
                                    readOnly: true
                                    description: |
                                      Unused; reserved for future use.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create ASP Job
      description: |
        Create a new Auto Sheet Processing job.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability.

        :::
      operationId: create-auto-sheet-processing-job
      x-required-abilities:
        - Authority - Administrator
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          The fields that can be modified when creating or updating
          an Auto Sheet Processing job.
        content:
          application/json:
            schema:
              type: object
              description: |
                The fields that can be modified when creating or updating
                an Auto Sheet Processing job.
              properties: *ref_34
      responses:
        '201':
          description: |
            The item was successfully created.

            This is a minimal response that indicates whether the request was successful and provides the
            URI of the created item. To retrieve additional details or the full item, you may need to make
            additional requests.

            :::info

            See the `Location` header for the URL of the new item,
            as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
            table name of the new item.

            :::
          content:
            application/json:
              schema:
                description: |
                  The item was successfully created.

                  This is a minimal response that indicates whether the request was successful and provides the
                  URI of the created item. To retrieve additional details or the full item, you may need to make
                  additional requests.

                  :::info

                  See the `Location` header for the URL of the new item,
                  as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
                  table name of the new item.

                  :::
                type: object
                properties: &ref_46
                  response_code:
                    type: integer
                    description: The response code.
                    example: 201
                  success:
                    type: boolean
                    description: Indicates whether the request was successful.
                    example: true
                  uri:
                    type: string
                    format: uri
                    description: The URI of the created item.
                    example: https://example.apps.journyx.com/api/v1/users/123
          headers:
            Location: &ref_47
              description: |
                The URL of the newly created object.
              schema:
                type: string
                format: uri
            X-Item-Id: &ref_48
              description: |
                The ID of the newly created object.
              schema:
                type: string
            X-Item-Table: &ref_49
              description: |
                The name of the table where the object was created.
              schema:
                type: string
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/asp/jobs/{id_item}:
    get:
      summary: Get ASP Job status
      description: |
        Retrieve the status of an Auto Sheet Processing job
        by its ID.
      operationId: get-auto-sheet-processing-job
      parameters:
        - name: id_item
          in: path
          required: true
          schema: &ref_37
            type: string
          description: The ID of the ASP Settings Job to retrieve.
          example: 56D334B005D84A1188661901299D87DA
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                type: object
                description: |
                  An Auto Sheet Processing job.
                allOf: *ref_35
                properties: *ref_36
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete ASP Job
      description: |
        Delete an Auto Sheet Processing job.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability.

        :::

        # START_RAW
        import DeleteWarning from '@site/content/partials/\_delete-warning.mdx'

        <DeleteWarning itemName='accrual' />
        # END_RAW
      x-required-abilities:
        - Authority - Administrator
      operationId: delete-auto-sheet-processing-job
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_37
          description: The ID of the ASP Settings Job to retrieve.
          example: 56D334B005D84A1188661901299D87DA
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            The object was successfully deleted. The response body is empty.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update ASP Job
      description: |
        Update an Auto Sheet Processing job.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability.

        :::
      x-required-abilities:
        - Authority - Administrator
      operationId: update-auto-sheet-processing-job
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_37
          description: The ID of the ASP Settings Job to retrieve.
          example: 56D334B005D84A1188661901299D87DA
        - name: If-Match
          in: header
          required: true
          schema: &ref_52
            type: string
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          The fields that can be modified when creating or updating
          an Auto Sheet Processing job.
        content:
          application/json:
            schema:
              type: object
              description: |
                The fields that can be modified when creating or updating
                an Auto Sheet Processing job.
              properties: *ref_34
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: &ref_53
              description: |
                The URL of the updated or modified object.
              schema:
                type: string
                format: uri
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/asp/settings:
    get:
      summary: List ASP Settings Groups
      description: |
        Retrieve a list of Auto Sheet Processing settings groups.
      operationId: list-auto-sheet-processing-settings
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_196
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          Auto Sheet Processing (ASP) Settings Group.

                          This represents a single configuration settings group for the ASP
                          feature that can be applied as a rule-set to selected users.
                        items:
                          type: object
                          description: |
                            Auto Sheet Processing (ASP) Settings Group.

                            This represents a single configuration settings group for the ASP
                            feature that can be applied as a rule-set to selected users.
                          allOf: *ref_43
                          properties: *ref_44
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create ASP Settings Group
      description: |
        Create a new Auto Sheet Processing settings group.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability.

        :::
      x-required-abilities:
        - Authority - Administrator
      operationId: create-auto-sheet-processing-settings
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          Auto Sheet Processing (ASP) Settings Group modifiable fields.

          These are the fields that can be modified or given as input when creating
          or modifying an Auto Sheet Processing settings group.
        content:
          application/json:
            schema:
              type: object
              description: |
                Auto Sheet Processing (ASP) Settings Group modifiable fields.

                These are the fields that can be modified or given as input when creating
                or modifying an Auto Sheet Processing settings group.
              properties: *ref_45
      responses:
        '201':
          description: |
            The item was successfully created.

            This is a minimal response that indicates whether the request was successful and provides the
            URI of the created item. To retrieve additional details or the full item, you may need to make
            additional requests.

            :::info

            See the `Location` header for the URL of the new item,
            as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
            table name of the new item.

            :::
          content:
            application/json:
              schema:
                description: |
                  The item was successfully created.

                  This is a minimal response that indicates whether the request was successful and provides the
                  URI of the created item. To retrieve additional details or the full item, you may need to make
                  additional requests.

                  :::info

                  See the `Location` header for the URL of the new item,
                  as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
                  table name of the new item.

                  :::
                type: object
                properties: *ref_46
          headers:
            Location: *ref_47
            X-Item-Id: *ref_48
            X-Item-Table: *ref_49
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/asp/settings/{id_item}:
    get:
      summary: Retrieve ASP Settings Group
      description: |
        Retrieve a single Auto Sheet Processing settings group.
      operationId: get-auto-sheet-processing-settings
      parameters:
        - name: id_item
          in: path
          required: true
          schema: &ref_51
            type: string
          description: The ID of the ASP Settings Group to retrieve.
          example: 56D334B005D84A1188661901299D87DA
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_197
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          Auto Sheet Processing (ASP) Settings Group.

                          This represents a single configuration settings group for the ASP
                          feature that can be applied as a rule-set to selected users.
                        allOf: *ref_43
                        properties: *ref_44
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete ASP Settings Group
      description: |
        Delete an Auto Sheet Processing settings group.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability.

        :::

        # START_RAW
        import DeleteWarning from '@site/content/partials/\_delete-warning.mdx'

        <DeleteWarning itemName='accrual' />
        # END_RAW

        :::info[Global settings can't be deleted]

        The global settings group can't be deleted. This is `id == global` or
        `category == 4`.

        :::
      x-required-abilities:
        - Authority - Administrator
      operationId: delete-auto-sheet-processing-settings
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_51
          description: The ID of the ASP Settings Group to retrieve.
          example: 56D334B005D84A1188661901299D87DA
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            The object was successfully deleted. The response body is empty.
          content: {}
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update ASP Settings Group
      description: |
        Update an Auto Sheet Processing settings group.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability.

        :::
      x-required-abilities:
        - Authority - Administrator
      operationId: update-auto-sheet-processing-settings
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_51
          description: The ID of the ASP Settings Group to retrieve.
          example: 56D334B005D84A1188661901299D87DA
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          Auto Sheet Processing (ASP) Settings Group modifiable fields.

          These are the fields that can be modified or given as input when creating
          or modifying an Auto Sheet Processing settings group.
        content:
          application/json:
            schema:
              type: object
              description: |
                Auto Sheet Processing (ASP) Settings Group modifiable fields.

                These are the fields that can be modified or given as input when creating
                or modifying an Auto Sheet Processing settings group.
              properties: *ref_45
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/batch:
    post:
      summary: Batch Operations
      description: |
        Perform multiple operations in a single request.

        This endpoint allows you to perform multiple API operations in a single request.
        The requests can be to different resources (endpoints or URLs) or to
        the same resource. The operations can be of different types, namely
        `GET`, `POST`, `PUT`, and `DELETE`. The batch request itself should
        always be a `POST` request.

        In general, this is mostly intended for creating, modifying, or deleting
        multiple resources at once, as opposed to reading multiple collections or
        objects (using `GET`). It's important to note that when modifying objects
        through a batch request, you still need to include the `If-Match` header
        with the current ETag value in each modification request as
        [documented here](/docs/rest-overview#modifying-objects-with-put).
        There is no way to automatically fetch the current ETag and apply it to a
        modification within the same batch request.

        :::warning[Maximum batch size]

        Note: the maximum length of a batch request is 100 requests. If the batch
        array is longer than 100, the server will return an error.

        :::

        Note that you cannot make a nested batch request within a batch request.

        :::tip[Authentication]

        The batch request itself should be authenticated using the normal
        [authentication methods](/docs/authentication). The server will ignore
        any authentication headers within each request.
        The same user account (identity) will be used for all requests in the batch.

        :::

        The request body should be a JSON object with the following structure:
      operationId: batch-endpoint
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                stop_on_error:
                  type: boolean
                  description: |
                    If true, the batch operation will stop processing
                    when an error is encountered. If false, the batch operation
                    will continue processing all operations, even if an error is
                    encountered.
                  default: true
                  example: true
                include_screen_in_collections:
                  type: boolean
                  description: |
                    If true, any calls to collections will include the `screen` key
                    in each response. This is information used by the UI to display
                    the collection and may not be needed by all clients, especially
                    in batch mode, so the default is false.
                  default: false
                  example: false
                requests:
                  description: |
                    An array of requests to process. Each request should be an object
                    with the following keys.

                    :::warning[Maximum batch size]

                    Note: the maximum length of a batch request is 100 requests. If the batch
                    array is longer than 100, the server will return an error.

                    :::
                  type: array
                  items:
                    type: object
                    description: |
                      A single request within a batch request.
                    properties: &ref_198
                      method:
                        type: string
                        description: |
                          The HTTP method to use for this request.
                        enum:
                          - GET
                          - POST
                          - PUT
                          - DELETE
                        example: GET
                      url:
                        type: string
                        description: |
                          The URL to send the request to, normally starting with `/api/v1/`.

                          Important: the URL *must* be relative to the server base URL.
                          No absolute URLs are allowed (those starting with `http://` or `https://`).
                        example: /api/v1/users/123
                      headers:
                        type: object
                        description: |
                          A dictionary of headers to include in the request.

                          If `Accept` is not specified, the server will default to `application/json`.

                          Please note that the server will ignore any authentication headers
                          within each request. The batch request itself should be authenticated
                          using the normal authentication methods.
                        example:
                          Accept: application/json
                      body:
                        type: object
                        description: |
                          The body of the request, if any. This is only used for POST and PUT requests.

                          The body should be a JSON object; either embedded in the larger batch request JSON,
                          or as a string that is the JSON-encoded body.
                        example:
                          username: john_doe@example.com
                          fullname: John Doe
                          email: john_doe@example.com
                      params:
                        type: object
                        description: |
                          A dictionary (object) of query parameters to include in the request. These are
                          normally only used for GET requests, especially for collections.
                        example:
                          $top: 10
                          $next: 20
                          $filter: status eq "active"
      responses:
        '200':
          description: |
            The batch operation was successful. The response body contains the
            results of each individual operation.

            :::info[About response codes]

            The response code for each operation is included in the response body.
            The response code for the batch operation itself is always 200, even
            if individual operations failed. However, the batch operation itself
            can return a non-200 error code if the batch request is malformed or
            if the server is unable to process the request for another reason.

            :::

            Note that the index of each response in the array corresponds to the
            index of the request in the original batch request.  If
            `stop_on_error` is `true`, the response array will stop at the first
            error encountered.
          content:
            application/json:
              schema:
                type: object
                description: |
                  The response to a batch request, containing the results of each individual request.

                  Note that the index of each response in the array corresponds to the index of the request
                  in the original batch request.  If `stop_on_error` is `true`, the response array will
                  stop at the first error encountered.
                properties: &ref_199
                  success:
                    type: boolean
                    description: |
                      Indicates whether the batch operation was successful.
                      This will be `false` if any of the individual requests failed and `true`
                      if all requests were successful.
                    example: true
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        response_code:
                          type: integer
                          description: |
                            The HTTP status code of the response.
                          example: 200
                        headers:
                          type: object
                          description: |
                            A dictionary of headers returned by the server.
                          example:
                            Content-Type: application/json
                        body:
                          type: object
                          description: |
                            The body of the response, if any. This is only used for successful responses.
                          example:
                            id: 123
                            username: john_doe@example.com
                            fullname: John Doe
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/custom_fields:
    get:
      summary: List Custom Fields
      description: |
        Retrieve a list of available Custom Fields.

        :::warning[Read-only endpoint]

        Currently, this endpoint is read-only. Support for creating, modifying, and
        deleting Custom Fields is not yet supported in the REST API, but will
        be added in a future release.
        However, Custom Fields can be modified in the
        [Legacy SOAP API](/docs/legacy-api/custom_fields).

        :::
      operationId: list-custom-fields
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_200
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          The definition record of a Custom Field.
                        items:
                          type: object
                          description: |
                            The definition record of a Custom Field.
                          allOf: &ref_55
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              properties: *ref_54
                            - type: object
                              description: |
                                Fields related to the creation of a resource, including the creation
                                timestamp, creator user ID, and creator user name.

                                Note that extended information about the creator user may be included
                                in the `creator_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_1
                              properties: *ref_2
                            - type: object
                              description: Object creation date/time fields common to many resources.
                              allOf: *ref_5
                              properties: *ref_6
                            - type: object
                              description: |
                                Fields related to the last modification of a resource, including the
                                last modified timestamp in various formats, the modifier's user ID and
                                full name. Please note that this only records the most recent
                                modification. In addition, it may not reflect modifications to child
                                resources or extended properties that are defined in other tables, such
                                as "Custom Fields". These last modifier fields are always read-only.

                                Note that extended information about the modifier user may be included
                                in the `modifier_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_7
                              properties: *ref_8
                            - type: object
                              description: |
                                The last modified date/time fields common to many resources. Please note
                                that this only records the most recent modification. In addition, it may
                                not record modifications to child resources or extended properties that
                                are defined in other tables, such as "Custom Fields". These fields are
                                read-only.
                              allOf: *ref_9
                              properties: *ref_10
                            - type: object
                              description: |
                                These are fields related to the deprecated "Domain" object.
                              properties: *ref_11
                          properties: &ref_56
                            base_type:
                              type: string
                              description: |
                                The basic type of the custom field. This is the same as the `attr_type`
                                field, but with any prefix removed.
                              example: STRING
                              readOnly: true
                            cf_table:
                              type: string
                              description: |
                                The name of the table that stores the Custom Field values for
                                this object type. For the `users` table, this is `users_attribs`.
                              example: users_attribs
                              readOnly: true
                            datatype_description:
                              type: string
                              description: |
                                A description of the datatype of the custom field.
                              example: String (Up To 100)
                              readOnly: true
                            hidden_name:
                              type: string
                              description: |
                                An unchanging internal name for a built-in Custom Field.
                                This allows the system to recognize certain required Custom Fields
                                even if they have been renamed.
                              example: QuickBooks File ID
                              readOnly: true
                            is_date:
                              type: boolean
                              description: |
                                Indicates whether the custom field is a date field.
                              example: false
                              readOnly: true
                            is_enum:
                              type: boolean
                              description: |
                                Indicates whether the custom field is an enumerated (selection list) field,
                                where users can only select from a list of predefined values.
                              example: false
                              readOnly: true
                            is_hidden:
                              type: boolean
                              description: |
                                Indicates whether the custom field is hidden from the user interface.
                              example: false
                              readOnly: true
                            is_integer:
                              type: boolean
                              description: |
                                Indicates whether the custom field is an integer field.
                              example: false
                              readOnly: true
                            is_multi_enum:
                              type: boolean
                              description: |
                                Indicates whether the custom field is a multi-select enumerated field,
                                where users can select multiple values from a list of predefined values.
                              example: false
                              readOnly: true
                            is_numeric:
                              type: boolean
                              description: |
                                Indicates whether the custom field is a numeric field.
                              example: false
                              readOnly: true
                            is_read_only:
                              type: boolean
                              description: |
                                Indicates whether the custom field is read-only.
                              example: false
                              readOnly: true
                            is_string:
                              type: boolean
                              description: |
                                Indicates whether the custom field is a string field.
                              example: true
                              readOnly: true
                            max_length_of_type:
                              type: integer
                              description: |
                                The maximum length of the custom field value.
                              example: 100
                              readOnly: true
                            numeric_default:
                              type: number
                              description: |
                                The default value for a numeric custom field.
                              example: 0
                              readOnly: true
                            object_table:
                              type: string
                              description: |
                                The name of the table that the custom field is associated with.
                              example: users
                              readOnly: true
                            string_default:
                              type: string
                              description: |
                                The default value for a string custom field.
                              example: Default Pay Group
                              readOnly: true
                            table_name:
                              type: string
                              description: |
                                This is the same as `object_table`; not to be confused with `tablename`
                                which will be `attribute_types` for all Custom Fields.
                              example: users
                              readOnly: true
                            visibility:
                              type: integer
                              description: |
                                The visibility code number of the custom field; see `visibility_code`
                                for the human-readable value.

                                - 0 - hidden
                                - 1 - normal (editable values)
                                - 2 - read-only values
                              enum:
                                - 0
                                - 1
                                - 2
                            visibility_code:
                              type: string
                              description: |
                                The human-readable visibility code of the custom field; see `visibility`
                                for the numeric value.
                              example: normal
                              enum:
                                - hidden
                                - normal
                                - read-only
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/custom_fields/{id_item}:
    get:
      summary: Get Custom Field
      description: |
        Retrieve information about a specific Custom Field in the system.

        :::warning[Read-only endpoint]

        Currently, this endpoint is read-only. Support for creating, modifying, and
        deleting Custom Fields is not yet supported in the REST API, but will
        be added in a future release.
        However, Custom Fields can be modified in the
        [Legacy SOAP API](/docs/legacy-api/custom_fields).

        :::
      parameters:
        - name: id_item
          in: path
          required: true
          schema: &ref_291
            type: string
          description: The unique identifier of the Custom Field.
          example: C41B2DDA662F4EF6B730F9CB6DB04696
      operationId: get-custom-field
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_201
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          The definition record of a Custom Field.
                        allOf: *ref_55
                        properties: *ref_56
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_codes:
    get:
      summary: List Entry Codes (all types)
      description: |
        Retrieve a list of all Entry Codes values across all tables
        (all Entry Column types).
      operationId: list-entry-codes
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_60
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          An Entry Code is a unique selection value in an Entry Screen column.
                        items:
                          type: object
                          description: |
                            An Entry Code is a unique selection value in an Entry Screen column.
                          allOf: &ref_65
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              description: |
                                These are fields in the Entry Code object that can be modified
                                or given as input when creating a new Entry Code.
                              required: &ref_62
                                - pname
                                - autoadd
                              allOf: &ref_63
                                - type: object
                                  description: |
                                    These are common fields used throughout the system to indicate the status
                                    of an object, whether "hidden", "loggable", "reportable-only".

                                    Note that "hidden" status is defined as not belonging to any
                                    [Groups](/docs/reference/schemas/groupfields). See that link
                                    for more information about finding hidden items.

                                    Loggable and Reportable status means that the object is both visible
                                    to at least some users, and can be used in current (new) time entries.

                                    Reportable Only means that the object is visible to at least some users,
                                    but cannot be used in newly created time entries.
                                  properties: &ref_133
                                    is_hidden:
                                      type: boolean
                                      description: |
                                        Indicates whether the object is hidden.

                                        See also `status`
                                      readOnly: true
                                    hidden:
                                      type: boolean
                                      description: |
                                        Indicates whether the user is hidden.

                                        Read-only alias for `is_hidden`.
                                      readOnly: true
                                    status:
                                      type: string
                                      description: |
                                        The general visibility status of the object;
                                        either `Hidden`, `Loggable and Reportable`, or `Reportable Only`.

                                        This is a write-enabled field if you have the appropriate permissions.
                                        See also `status_code` which can be changed in the same way.
                                      enum:
                                        - Hidden
                                        - Loggable and Reportable
                                        - Reportable Only
                                      example: Loggable and Reportable
                                    status_code:
                                      type: string
                                      description: |
                                        The internal code for the status of the object; either:

                                        - `lr` for `Loggable and Reportable`
                                        - `ro` for `Reportable Only`
                                        - `h` for `Hidden`
                                      enum:
                                        - lr
                                        - ro
                                        - h
                                      example: lr
                                - type: object
                                  description: |
                                    Custom fields are used to store additional information about a resource.
                                    The fields are defined by the system administrators and can be of various
                                    data types.

                                    This page describes the schema for custom field values as shown in
                                    the response of a resource that has custom fields. There is an expanded
                                    schema for the custom field definitions at their own endpoint, as
                                    shown in the `id_attr_type_uri` field.

                                    :::tip

                                    The `custom_fields` object will only be included in the response if requested
                                    in `$keys`; see details below.

                                    :::

                                    ### Editing Custom Fields

                                    In general, to update Custom Field values for an object, when submitting
                                    a `PUT` request to update the object, you can include the `custom_fields`
                                    object in the request body. The `custom_fields` object should follow
                                    the basic schema shown here, but only needs to include the `value` field
                                    for each custom field you want to update. For example, this is enough
                                    to update two custom fields:

                                    ```json
                                    {
                                      "custom_fields": {
                                        "C41B2DDA662F4EF6B730F9CB6DB04696": {
                                          "value": "New Value"
                                        },
                                        "users_email": {
                                          "value": "new_email@example.com"
                                        }
                                    }
                                    ```

                                    Any custom fields not included in the `custom_fields` object will not be
                                    updated and will retain their current values. You can set the `null` value

                                    ### Viewability

                                    It's also important to note that Custom Fields are subject to
                                    viewability restrictions based on the "Reportability" property set by
                                    system administrators.

                                    :::tip

                                    Please note that access to view custom fields are automatically filtered by
                                    "Reportability", a property set by admins on the custom field definition that
                                    determines which User Roles are allowed to see the field. If you are not seeing
                                    a custom field that you expect to see, please check with your system administrator.

                                    :::

                                    ### Examples

                                    Here's an example value of `custom_fields` in a response:

                                    ```json
                                    "custom_fields": {
                                      "C41B2DDA662F4EF6B730F9CB6DB04696": {
                                        "attr_type": "ENUM_STRING_252",
                                        "description": "Employee pay group.",
                                        "id_attr_type": "C41B2DDA662F4EF6B730F9CB6DB04696",
                                        "id_attr_type_uri": "/api/v1/custom_fields/C41B2DDA662F4EF6B730F9CB6DB04696",
                                        "pname": "Pay Group",
                                        "value": "XYZ Pay Group"
                                      },
                                      "users_email": {
                                        "attr_type": "STRING_252",
                                        "description": "Email address",
                                        "id_attr_type": "users_email",
                                        "id_attr_type_uri": "/api/v1/custom_fields/users_email",
                                        "pname": "Email Address",
                                        "value": "username@example.com"
                                      }

                                    ```

                                    Note that there is an alternate representation available in most object types, where
                                    each custom field value is a separate key in the main object (not under `custom_fields`)
                                    in the following format, showing both a singular and multi-value example:

                                    ```json
                                    "users_attribs:C41B2DDA662F4EF6B730F9CB6DB04696": "XYZ Pay Group",
                                    "users_attribs:users_skills": [
                                      "CRM admin - advanced"
                                    ]
                                    ```

                                    This follows the pattern of `users_attribs:<field_id>`, where `users_attribs` is
                                    the internal table name for User custom fields. For other object types, the table
                                    name will be different, e.g. `projects_attribs`. This is a read-only representation
                                    for convenience and is not used for updating custom fields.

                                    This more compact representation is always provided (unless `$keys=$base` was set).
                                    However, the `custom_fields` object will only be available if `$keys=custom_fields`
                                    or `$keys=$extended` was set.
                                  properties: *ref_57
                                - type: object
                                  description: |
                                    These are group-related fields that are common to most object types.

                                    Please note that these fields may not be present in the response unless
                                    the `$keys` query parameter includes the field name, e.g. `$keys=groups`.

                                    See [Collection#Selecting Fields](/docs/collections#selecting-fields)
                                    for more information about the `$keys` parameter.

                                    The `$keys=$extended` parameter will also include the `group_names` field.

                                    In general, Groups determine the visibility of objects to each user in the system.
                                    For example, a user can only see objects that belong to a Group that
                                    they are themselves a member of.

                                    When creating or modifying objects with `POST` or `PUT` requests, you can
                                    only use the `groups` field to specify the Group IDs that the object belongs to.
                                    The `group_names` field is read-only.

                                    If an object does not belong to any groups, it is considered to be "hidden"
                                    and the `is_hidden` field will be set to `true`. Hidden objects are normally
                                    only accessible to administrators, and then only if the `$filter` query parameter
                                    is used to include hidden status objects.

                                    For most object types, that would be done with a filter like this:

                                    ```
                                    $filter = status_code intersects ["lr","ro","h"]
                                    ```

                                    The [Users](/docs/reference/list-users) collection can be filtered
                                    like this to show hidden users:

                                    ```
                                    $filter = status intersects ["active","inactive","hidden"]
                                    ```

                                    You can read more about [Filtering](/docs/collections#filtering) in the
                                    section on Collections.

                                    If you **only** want hidden objects, just remove the other status codes from
                                    the filter.
                                  allOf: *ref_58
                                  properties: *ref_59
                              properties: &ref_64
                                autoadd:
                                  type: boolean
                                  description: |
                                    If true, this Entry Code is automatically added to new Groups as they
                                    are created.
                                  example: false
                                description:
                                  type: string
                                  description: |
                                    A description of the Entry Code.
                                  example: This is a description of the Entry Code.
                                loggable:
                                  type: boolean
                                  description: |
                                    If true, this Entry Code is currently loggable (usable) on Entry Screens.
                                  example: true
                                pname:
                                  type: string
                                  description: |
                                    The name of the Entry Code.
                                  example: Billable
                            - type: object
                              description: |
                                Fields related to the creation of a resource, including the creation
                                timestamp, creator user ID, and creator user name.

                                Note that extended information about the creator user may be included
                                in the `creator_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_1
                              properties: *ref_2
                            - type: object
                              description: Object creation date/time fields common to many resources.
                              allOf: *ref_5
                              properties: *ref_6
                            - type: object
                              description: |
                                Fields related to the last modification of a resource, including the
                                last modified timestamp in various formats, the modifier's user ID and
                                full name. Please note that this only records the most recent
                                modification. In addition, it may not reflect modifications to child
                                resources or extended properties that are defined in other tables, such
                                as "Custom Fields". These last modifier fields are always read-only.

                                Note that extended information about the modifier user may be included
                                in the `modifier_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_7
                              properties: *ref_8
                            - type: object
                              description: |
                                The last modified date/time fields common to many resources. Please note
                                that this only records the most recent modification. In addition, it may
                                not record modifications to child resources or extended properties that
                                are defined in other tables, such as "Custom Fields". These fields are
                                read-only.
                              allOf: *ref_9
                              properties: *ref_10
                            - type: object
                              description: |
                                These are fields related to the deprecated "Domain" object.
                              properties: *ref_11
                          properties: &ref_66
                            entry_columns_uri:
                              type: string
                              description: |
                                The URI of the Entry Column associated with this Entry Code.
                              example: /api/v1/entry_columns/time_recs.id_code_bill_type
                              readOnly: true
                            entry_type:
                              type: string
                              description: |
                                The Entry Screen type of this Entry Column value.
                                Values can be: `time`, `expense`, `mileage`.
                              example: time
                              readOnly: true
                            favorite_uri:
                              type: string
                              description: |
                                The URI to control the Favorite status of this Entry Code for this user.
                              example: /api/v1/favorites/user/my_user_id/codes_bill_types/20945205C94E4576B5FB798DA09B44DE
                              readOnly: true
                            id_code:
                              type: string
                              description: |
                                The unique internal ID of this Entry Code. (Same as `id` field.)
                              example: 20945205C94E4576B5FB798DA09B44DE
                              readOnly: true
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_codes/{tablename}:
    get:
      summary: List Entry Codes (by type)
      description: |
        Retrieve a list of Entry Codes values for a specific table
        (a specific Entry Column type).
      operationId: list-entry-codes-by-tablename
      parameters:
        - name: tablename
          in: path
          required: true
          schema: &ref_61
            description: |
              This is a list of the valid table names used for different Entry Codes that can be
              managed in the system.

              Note that not all of these tables may be available in your specific
              Journyx configuration.
            type: string
            enum: &ref_202
              - codes_tasks
              - codes_pay_types
              - codes_bill_types
              - codes_time_4
              - codes_time_5
              - codes_time_6
              - codes_time_7
              - codes_expenses
              - codes_expense_sources
              - codes_currencies
              - codes_expense_4
              - codes_expense_5
              - codes_expense_6
              - codes_expense_7
              - codes_travel_reasons
              - codes_travel_vehicles
              - codes_travel_measurements
              - codes_custom_4
              - codes_custom_5
              - codes_custom_6
              - codes_custom_7
          description: |
            This is a list of the valid table names used for different Entry Codes that can be
            managed in the system.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: codes_pay_types
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: A list of Entry Codes values for the given table
          content:
            application/json:
              schema:
                allOf: *ref_60
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create an Entry Code
      description: |
        Create a new Entry Codes value for the given table.

        :::info[Required abilities]

        This operation requires the `Entry Column - Create` ability, or
        `Authority - Administrator`.

        :::
      x-required-abilities:
        - Entry Column - Create
      operationId: create-entry-code
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_61
          description: |
            This is a list of the valid table names used for different Entry Codes that can be
            managed in the system.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: codes_pay_types
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          These are fields in the Entry Code object that can be modified
          or given as input when creating a new Entry Code.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Entry Code object that can be modified
                or given as input when creating a new Entry Code.
              required: *ref_62
              allOf: *ref_63
              properties: *ref_64
      responses:
        '201':
          description: |
            The item was successfully created.

            This is a minimal response that indicates whether the request was successful and provides the
            URI of the created item. To retrieve additional details or the full item, you may need to make
            additional requests.

            :::info

            See the `Location` header for the URL of the new item,
            as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
            table name of the new item.

            :::
          content:
            application/json:
              schema:
                description: |
                  The item was successfully created.

                  This is a minimal response that indicates whether the request was successful and provides the
                  URI of the created item. To retrieve additional details or the full item, you may need to make
                  additional requests.

                  :::info

                  See the `Location` header for the URL of the new item,
                  as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
                  table name of the new item.

                  :::
                type: object
                properties: *ref_46
          headers:
            Location: *ref_47
            X-Item-Id: *ref_48
            X-Item-Table: *ref_49
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_codes/{tablename}/{id_item}:
    get:
      summary: Get Entry Code by ID
      description: |
        Retrieve information about a specific Entry Code value by its ID.
      operationId: get-entry-code
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_61
          description: |
            This is a list of the valid table names used for different Entry Codes that can be
            managed in the system.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: codes_pay_types
        - name: id_item
          in: path
          required: true
          schema: &ref_67
            type: string
          description: The ID of the Entry Codes value to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_203
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          An Entry Code is a unique selection value in an Entry Screen column.
                        allOf: *ref_65
                        properties: *ref_66
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete Entry Code by ID
      description: |
        Remove an Entry Code value from the system by its ID.

        # START_RAW
        import DeleteWarning from '@site/content/partials/\_delete-warning.mdx'

        <DeleteWarning itemName='accrual' />
        # END_RAW

        :::info[Required abilities]

        This operation requires the `Entry Column - Delete` ability, or
        `Authority - Administrator`.

        :::
      x-required-abilities:
        - Entry Column - Delete
      operationId: delete-entry-code
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_61
          description: |
            This is a list of the valid table names used for different Entry Codes that can be
            managed in the system.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: codes_pay_types
        - name: id_item
          in: path
          required: true
          schema: *ref_67
          description: The ID of the Entry Codes value to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            The object was successfully deleted. The response body is empty.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update an Entry Code
      description: |
        Update (modify) an existing Entry Code value in the system.

        # START_RAW
        import PutHeaders from '@site/content/partials/_put-headers.mdx'

        <PutHeaders />
        # END_RAW

        :::info[Required abilities]

        This operation requires the `Entry Column - Modify` ability, or
        `Authority - Administrator`.

        :::
      x-required-abilities:
        - Entry Column - Modify
      operationId: update-entry-code
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_61
          description: |
            This is a list of the valid table names used for different Entry Codes that can be
            managed in the system.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: codes_pay_types
        - name: id_item
          in: path
          required: true
          schema: *ref_67
          description: The ID of the Entry Codes value to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          These are fields in the Entry Code object that can be modified
          or given as input when creating a new Entry Code.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Entry Code object that can be modified
                or given as input when creating a new Entry Code.
              required: *ref_62
              allOf: *ref_63
              properties: *ref_64
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_columns:
    get:
      summary: List Entry Columns
      description: |
        Retrieve a list of available Entry Columns. These are the
        available columns (selections) that can be added to Entry
        Screens.

        :::note

        In general, Entry Column definitions are fixed and not directly modifiable,
        so this endpoint is read-only.

        :::
      operationId: list-entry-columns
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_204
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          Represents an Entry Column definition. That is an available
                          selection (dropdown) or text entry column on an Entry Screen.
                        items:
                          type: object
                          description: |
                            Represents an Entry Column definition. That is an available
                            selection (dropdown) or text entry column on an Entry Screen.
                          properties: &ref_68
                            activated:
                              type: boolean
                              example: true
                              description: |
                                Indicates whether the Entry Column is activated.
                                A non-activated column will not appear anywhere in the system,
                                e.g. in Entry Screen Configuration.
                            activation_gdef:
                              type: string
                              description: |
                                The system setting name (gdef) that controls whether this Entry Column
                                is activated. This is used to set the `activated` property.
                              example: ACTIVATE_E_C_4
                            base_label:
                              type: string
                              description: |
                                The base label of the Entry Column. This is the label without any
                                suffixes or prefixes.
                              example: Currency
                            base_label_plural:
                              type: string
                              description: |
                                The plural form of the label of the Entry Column.
                              example: Currencies
                            column_full:
                              type: string
                              description: |
                                The full name of the column in the database table.
                              example: expense_recs.id_code_currency
                            current_priority:
                              type: integer
                              description: |
                                The current priority of the Entry Column. This is used to determine
                                the order of columns in the Entry Screen. (Lower numbers appear to the left.)
                            entry_obj_index:
                              type: integer
                              description: |
                                The index of this Entry Column in the core entry database table record.
                              example: 6
                            entry_table:
                              type: string
                              description: |
                                The name of the database table that stores main entry values, where
                                this Entry Column is a field in that record.
                              example: expense_recs
                            entry_table_column:
                              type: string
                              description: |
                                The name of the column in the main entry table that stores this Entry Column value.
                              example: id_code_currency
                            entry_type:
                              type: string
                              description: |
                                The Entry Screen type of this Entry Column.
                                Values can be: `time`, `expense`, `mileage`.
                                The value `mileage` is used for what the system calls "Custom Entry" sheets.
                              enum:
                                - time
                                - expense
                                - mileage
                            entryguilib_key:
                              type: string
                              description: |
                                An internal system identifier for this Entry Column used in some areas.
                              example: subsubcode
                            field_type:
                              type: string
                              description: |
                                The type of the field in the entry database table.

                                - `code` - an [Entry Code](/docs/reference/list-entry-codes) type
                                - `text` - a text entry (comment) field
                                - `project` - the special Project field
                                - `group` - the special Group field, not used in most configurations
                              enum:
                                - code
                                - text
                                - project
                                - group
                            fixed_order:
                              type: integer
                              description: |
                                The default ordering of this Entry Column when added to new Entry Screens.
                              example: 1
                            gui_default_db_key:
                              type: string
                              description: |
                                The GUI (Entry Screen Configuration) setting that controls the
                                default value for this Entry Column.
                              example: currency_default
                            gui_default_index:
                              type: integer
                              description: |
                                The index of the default value for this Entry Column in the GUI configuration
                                record.
                              example: 20
                            gui_id:
                              type: string
                              description: |
                                The internal ID of the GUI (Entry Screen Configuration) record for this Entry Column,
                                if this record is associated with a specific Entry Screen config.
                            gui_priority_db_key:
                              type: string
                              description: |
                                The GUI (Entry Screen Configuration) setting that controls the
                                on-screen ordering (priority) for this Entry Column.
                              example: currency_priority
                            gui_priority_index:
                              type: integer
                              description: |
                                The index in the GUI configuration record that stores the priority
                                (ordering) of this Entry Column.
                              example: 22
                            gui_table:
                              type: string
                              description: |
                                The name of the database table that stores the Entry Screen configuration
                                (GUI) for this Entry Column.
                              example: expense_guis
                            id:
                              type: string
                              description: |
                                The unique internal ID of this Entry Column.
                              example: expense_recs.id_code_currency
                            jtgui_key:
                              type: string
                              example: dd2
                              description: |
                                An internal system identifier for this Entry Column used in some areas.
                            jxapi_key:
                              type: string
                              example: code2
                              description: |
                                An internal system identifier for this Entry Column used in some areas,
                                notably in the [Legacy SOAP API](/docs/legacy-api/).
                            label:
                              type: string
                              description: |
                                The label of the Entry Column. This is the human-readable name of the column.
                              example: Currency
                            label_gdef:
                              type: string
                              description: |
                                The system setting name (gdef) that controls the label of this Entry Column.
                              example: COLUMN_E_C_4
                            label_plural:
                              type: string
                              description: |
                                The plural form of the label of the Entry Column.
                              example: Currencies
                            object_key_full:
                              type: string
                              description: |
                                The full primary key name (table and column name) of the Entry Column values table.
                              example: codes_currencies.id_code
                            object_table_key:
                              type: string
                              description: |
                                The primary key name of the Entry Column values table.
                              example: id_code
                            object_tablename:
                              type: string
                              description: |
                                The table name of the Entry Column values table.
                              example: codes_currencies
                            request_recs_index:
                              type: integer
                              description: |
                                The index of this Entry Column in the
                                [Leave Requests](/docs/reference/list-leave-requests)
                                database table record.
                              example: 6
                            uri:
                              type: string
                              description: |
                                The URI of this Entry Column.
                              example: /api/v1/entry_columns/expense_recs.id_code_currency
                            value_collection_uri:
                              type: string
                              description: |
                                The URI to get a collection of values for this Entry Column.
                              example: /api/v1/entry_codes/codes_currencies
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_columns/{id_item}:
    get:
      summary: Get Entry Column
      description: |
        Retrieve information about a specific Entry Column in the system.

        :::note

        In general, Entry Column definitions are fixed and not directly modifiable,
        so this endpoint is read-only.

        :::
      operationId: get-entry-column
      parameters:
        - name: id_item
          in: path
          required: true
          schema: &ref_292
            type: string
          description: |
            The internal ID of the Entry Column.
          example: 64BBA147B9AC41D9978062300826C89F
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_205
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          Represents an Entry Column definition. That is an available
                          selection (dropdown) or text entry column on an Entry Screen.
                        properties: *ref_68
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_periods:
    get:
      summary: List Entry Periods
      description: |
        Retrieve a list of available Entry Periods.

        An Entry Period is the definition of the time-span to use in individual
        Entry Sheets, such as weekly, bi-weekly, or monthly. Entry Periods are
        assigned via the Entry Screen configuration.

        # START_RAW
        import ReadOnlyEndpoint from '@site/content/partials/_read-only-endpoint.mdx'

        <ReadOnlyEndpoint itemName="Entry Periods" />
        # END_RAW

        :::info[Database table name]

        Note: internally, Entry Periods are stored in the `time_sheets`
        database table.

        :::
      operationId: list-entry-periods
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_206
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          An Entry Period is the definition of the time-span to use in individual
                          Entry Sheets, such as weekly, bi-weekly, or monthly. Entry Periods are
                          assigned via the Entry Screen configuration.
                        items:
                          type: object
                          description: |
                            An Entry Period is the definition of the time-span to use in individual
                            Entry Sheets, such as weekly, bi-weekly, or monthly. Entry Periods are
                            assigned via the Entry Screen configuration.
                          allOf: &ref_73
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              properties: *ref_69
                            - type: object
                              properties: *ref_70
                            - type: object
                              properties: *ref_71
                            - type: object
                              properties: *ref_72
                            - type: object
                              description: |
                                These are fields related to the deprecated "Domain" object.
                              properties: *ref_11
                          properties: &ref_74
                            anchor:
                              type: string
                              description: |
                                The anchor date for the Entry Period in YYYYMMDD format. This is the
                                date that the Entry Period starts on, at least for period calculation
                                purposes. This does not affect any actual time entry data.
                              example: '20230301'
                            bidate_day:
                              type: string
                              nullable: true
                              description: |
                                Only used in "Custom Semi-Monthly" period types and null otherwise. This
                                defines the division date between the first and second half of the
                                month.
                              example: null
                            id_timesheet:
                              type: string
                              description: |
                                The internal ID of the Entry Period. Same as the `id` field.
                                This is what is attached to the Entry Screen configuration
                                as the way to define the screen's entry period.
                              example: 759F5CF8F68349DCB0A5BF93323445A6
                            period:
                              type: string
                              description: |
                                The "Period Type" of the entry period. These are the options:

                                - `week` - a weekly period
                                - `biweek` - a bi-weekly period (every two weeks)
                                - `semimonth` - a semi-monthly period (twice a month)
                                - `month` - a monthly period
                                - `day` - a daily period
                                - `bidate` - a custom semi-monthly period; twice a month, but
                                   with a custom division date.
                              enum:
                                - week
                                - biweek
                                - semimonth
                                - month
                                - day
                                - bidate
                              example: week
                            pname:
                              type: string
                              description: |
                                The name of the Entry Period. This is what is displayed to the user
                                in the Entry Screen configuration.
                              example: Weekly
                            reserved1:
                              type: string
                              nullable: true
                              description: Reserved for future use.
                              example: null
                            reserved2:
                              type: string
                              nullable: true
                              description: Reserved for future use.
                              example: null
                            reserved3:
                              type: string
                              nullable: true
                              description: Reserved for future use.
                              example: null
                            table_label:
                              example: time_sheets
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_periods/{id_item}:
    get:
      summary: Get Entry Period
      description: |
        Retrieve information about a specific Entry Period in the system.
      parameters:
        - name: id_item
          in: path
          required: true
          schema: &ref_293
            type: string
          description: |
            The internal ID of the Entry Period.
          example: 64BBA147B9AC41D9978062300826C89F
      operationId: get-entry-period
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_207
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          An Entry Period is the definition of the time-span to use in individual
                          Entry Sheets, such as weekly, bi-weekly, or monthly. Entry Periods are
                          assigned via the Entry Screen configuration.
                        allOf: *ref_73
                        properties: *ref_74
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_screens/custom:
    get:
      summary: List Custom Entry Screens
      description: |
        Retrieve a list of available Custom Entry Screens.
        This is the entry type that was formerly known as "Mileage" or "Travel".
        We now recommend using the Expense entry type for travel-related
        expenses. The label of "Custom" can be changed.

        An Entry Screen is the configuration of the Entry Sheet, including the
        fields and layout of the sheet, as well as the Entry Periods assigned to
        the sheet, which defines the time period such as weekly, bi-weekly, etc.

        The Entry Screen config determines which
        [Entry Columns](/docs/reference/list-entry-columns)
        appear on a user's entry sheet, and in what order, along with
        many other entry screen configuration options.

        # START_RAW
        import ReadOnlyEndpoint from '@site/content/partials/_read-only-endpoint.mdx'

        <ReadOnlyEndpoint itemName="Custom Entry Screens" />
        # END_RAW

        :::info[Database table name]

        Note: internally, Custom Entry Screens are stored in the `travel_entry_guis`
        database table, and the "Entry Screen Config" concept is
        sometimes referred to as a "GUI" (graphical user interface) in the
        legacy codebase.

        :::
      operationId: list-custom-entry-screens
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_208
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          An Entry Screen is the configuration of the Entry Sheet, including the
                          fields and layout of the sheet, as well as the Entry Periods assigned to
                          the sheet, which defines the time period such as weekly, bi-weekly, etc.
                          The Entry Screen config determines which
                          [Entry Columns](/docs/reference/list-entry-columns)
                          appear on a user's entry sheet, and in what order, along with
                          many other entry screen configuration options.
                        items:
                          type: object
                          description: |
                            An Entry Screen is the configuration of the Entry Sheet, including the
                            fields and layout of the sheet, as well as the Entry Periods assigned to
                            the sheet, which defines the time period such as weekly, bi-weekly, etc.
                            The Entry Screen config determines which
                            [Entry Columns](/docs/reference/list-entry-columns)
                            appear on a user's entry sheet, and in what order, along with
                            many other entry screen configuration options.
                          allOf: &ref_76
                            - type: object
                              description: |
                                An Entry Screen is the configuration of the Entry Sheet, including the
                                fields and layout of the sheet, as well as the Entry Periods assigned to
                                the sheet, which defines the time period such as weekly, bi-weekly, etc.
                                The Entry Screen config determines which
                                [Entry Columns](/docs/reference/list-entry-columns)
                                appear on a user's entry sheet, and in what order, along with
                                many other entry screen configuration options.
                              allOf: &ref_78
                                - type: object
                                  description: |
                                    These are fields that are common to most object types.
                                  properties: *ref_0
                                - type: object
                                  description: |
                                    Fields related to the creation of a resource, including the creation
                                    timestamp, creator user ID, and creator user name.

                                    Note that extended information about the creator user may be included
                                    in the `creator_properties` field, depending on the `$keys` requested.
                                    If present, this information will follow the schema of the
                                    [User](/docs/reference/schemas/user) object.
                                  allOf: *ref_1
                                  properties: *ref_2
                                - type: object
                                  description: Object creation date/time fields common to many resources.
                                  allOf: *ref_5
                                  properties: *ref_6
                                - type: object
                                  description: |
                                    Fields related to the last modification of a resource, including the
                                    last modified timestamp in various formats, the modifier's user ID and
                                    full name. Please note that this only records the most recent
                                    modification. In addition, it may not reflect modifications to child
                                    resources or extended properties that are defined in other tables, such
                                    as "Custom Fields". These last modifier fields are always read-only.

                                    Note that extended information about the modifier user may be included
                                    in the `modifier_properties` field, depending on the `$keys` requested.
                                    If present, this information will follow the schema of the
                                    [User](/docs/reference/schemas/user) object.
                                  allOf: *ref_7
                                  properties: *ref_8
                                - type: object
                                  description: |
                                    The last modified date/time fields common to many resources. Please note
                                    that this only records the most recent modification. In addition, it may
                                    not record modifications to child resources or extended properties that
                                    are defined in other tables, such as "Custom Fields". These fields are
                                    read-only.
                                  allOf: *ref_9
                                  properties: *ref_10
                                - type: object
                                  description: |
                                    This is the `group_names` field which is attached to many object types to provide
                                    a convenient representation of the Groups that an object belongs to, including
                                    both name and ID.
                                  properties: *ref_75
                                - type: object
                                  description: |
                                    These are fields related to the deprecated "Domain" object.
                                  properties: *ref_11
                              properties: &ref_79
                                id_gui:
                                  type: string
                                  description: |
                                    The internal ID of the Entry Screen config. Same as the `id` field.
                                  example: 81740F5FC7334279B91B6B8E1421F5BA
                                allocated_must_match_punches:
                                  type: boolean
                                  description: |
                                    If `true`, the total time allocated for a day (among project time)
                                    must be equal to the total time punched in for that day. If `false`,
                                    the two values can be different.
                                  example: true
                                anchor:
                                  type: string
                                  description: |
                                    This field controls the display of the Project Tree on entry
                                    screens.

                                    - `yes` - show inline tree
                                    - `popup` - show popup tree
                                    - `no` - don't show tree
                                  enum:
                                    - 'yes'
                                    - popup
                                    - 'no'
                                  example: 'yes'
                                arrows:
                                  type: boolean
                                  description: |
                                    If `true`, the Entry Screen will display arrows to navigate between
                                    periods. Otherwise, the arrows will not be shown.
                                  example: true
                                attachment_rule:
                                  type: integer
                                  description: |
                                    The attachment rule for this Entry Screen which determines
                                    which **types of files** can be attached.

                                    - 0 - any file type
                                    - 1 - images and PDFs only
                                    - 2 - PDFs only
                                    - 3 - images only
                                  example: 0
                                  enum:
                                    - 0
                                    - 1
                                    - 2
                                    - 3
                                auto_add:
                                  type: number
                                  description: |
                                    If 1, automatically add this Entry Screen to new Groups.
                                  example: 1
                                  enum:
                                    - 0
                                    - 1
                                backwards:
                                  type: number
                                  description: |
                                    If 1, the period navigation arrows (backwards/forwards) will be
                                    reversed, such that the left arrow moves forward in time.
                                  example: 1
                                  enum:
                                    - 0
                                    - 1
                                blankrows:
                                  type: string
                                  description: |
                                    The number of blank rows to show (given as a string).
                                    If value is `u` then it's the user preference.
                                  example: '2'
                                comment_default:
                                  type: string
                                  nullable: true
                                  description: |
                                    The default value for the Comment field.
                                  example: null
                                comment_max_chars:
                                  type: integer
                                  description: |
                                    The maximum number of characters allowed in the Comment field.
                                  example: 255
                                comment_priority:
                                  type: integer
                                  description: |
                                    The priority (ordering) of the Comment field. Higher numbers
                                    appear to the left. 0 is disabled.
                                  example: 12
                                days_back:
                                  type: string
                                  description: |
                                    Unused legacy field.
                                  example: u
                                default_vue_screen:
                                  type: string
                                  description: |
                                    The default viewing mode for "modern" (Vue) Entry Screens,
                                    either `day` or `period`.
                                  enum:
                                    - day
                                    - period
                                  example: day
                                diary_notes:
                                  type: number
                                  description: |
                                    If 1, use "Entry Field Notes", which allow comments to be attached
                                    to individual days for each entry row.
                                  example: 1
                                grid:
                                  type: number
                                  description: |
                                    This defines the basic type of Entry Screen.
                                    For Expense Entry and Custom Entry, only type 1 is available.
                                    The rest are Time Entry only.

                                    - 0 - a "Line Item Entry" screen
                                    - 1 - a normal "Grid" entry screen (most common)
                                    - 2 - Allocation entry with manual in/out times
                                      - Also known as "Display in/out times at the top of the entry screen"
                                        with "Manually enter the in/out times"
                                    - 3 - Allocation Entry with Punch In/Out times
                                      - "Display in/out times at the top of the entry screen" with
                                        "Press a button to populate the in/out times"
                                    - 4 - Allocation entry with button to punch in/out with
                                          automatic Time Entry creation from Punches.
                                      - "Display in/out times at the top of the entry screen" with
                                        "Press a button to populate the in/out times and create default time entry "
                                    - 5 - "Summary Entry Screen" (Vue based)
                                    - 6 - Job Start/Stop Entry Screen (Vue based)
                                  enum:
                                    - 0
                                    - 1
                                    - 2
                                    - 3
                                    - 4
                                    - 5
                                    - 6
                                  example: 1
                                group_default:
                                  type: string
                                  nullable: true
                                  description: |
                                    The default value for the Group field. The Group field (as an Entry Column)
                                    is normally disabled in most configurations.
                                  example: null
                                group_priority:
                                  type: integer
                                  description: |
                                    The priority (ordering) of the Group field. Higher numbers
                                    appear to the left. 0 is disabled.
                                  example: 0
                                hidden:
                                  type: boolean
                                  description: |
                                    If `true`, the Entry Screen is hidden; it is not a member of
                                    any groups and is not visible to or usable by anyone other
                                    than administrators.
                                  example: false
                                id_timesheet:
                                  type: string
                                  description: |
                                    The "Entry Period" associated with this Entry Screen, which
                                    defines the date range / time period of the entry screen.
                                    See [List Entry Periods](/docs/reference/list-entry-periods).
                                  example: default_weekly
                                javascript:
                                  type: boolean
                                  description: |
                                    This is a legacy setting and is no longer used.
                                  example: true
                                last_modified:
                                  type: string
                                  description: |
                                    Legacy setting; see `modify_timestamp` and related fields instead.
                                  example: '1695752609.754111'
                                max_attachments:
                                  type: integer
                                  description: |
                                    The maximum number of file attachments (e.g. receipt images) allowed
                                    across the entire entry screen (the full entry period).
                                  example: 20
                                minute_increment:
                                  type: number
                                  description: |
                                    The time increment for time entry in minutes.
                                  example: 5
                                pname:
                                  type: string
                                  description: |
                                    The name of the Entry Screen.
                                  example: Weekly Time Entry
                                post_html:
                                  type: string
                                  description: |
                                    Additional raw HTML to display at the bottom of the Entry Screen.
                                  example: <h3>Please submit your sheets weekly</h3>
                                pre_html:
                                  type: string
                                  description: |
                                    Additional raw HTML to display at the top of the Entry Screen.
                                  example: <h2>ExampleCo Timesheets</h2>
                                project_default:
                                  type: string
                                  description: |
                                    The default value for the Project field.
                                  example: root
                                project_priority:
                                  type: integer
                                  description: |
                                    The priority (ordering) of the Project field. Higher numbers
                                    appear to the left. 0 is disabled.
                                  example: 12
                                row_order:
                                  type: number
                                  example: 0
                                  description: |
                                    Unused legacy field.
                                show_interim_submit:
                                  type: boolean
                                  description: |
                                    If `true`, enable "Interim Submit" button. This allows a user to submit
                                    their time for approval before the end of the period and a final submission.
                                  example: true
                                show_mileage_entry:
                                  type: string
                                  nullable: true
                                  description: |
                                    Unused legacy field.
                                  example: null
                                show_project_desc:
                                  type: boolean
                                  description: |
                                    If `true`, show the Project Description in addition to the Project Name.
                                  example: true
                                sideways:
                                  type: number
                                  description: |
                                    Unused legacy field.
                                startstop:
                                  type: number
                                  example: 0
                                  description: |
                                    Unused legacy field.
                                submit_message:
                                  type: string
                                  description: |
                                    A custom message to display to users in a confirmation dialog when they
                                    submit their time.
                                  example: Have you reviewed your time for the week?
                                submit_warnings_message:
                                  type: string
                                  description: |
                                    A custom message to display to users in a confirmation dialog when they
                                    submit their entry sheet when there are warnings present, e.g.,
                                    validation rule problems.
                                  example: You have warnings on your sheet. Are you sure you want to submit?
                                text2_default:
                                  type: string
                                  nullable: true
                                  description: |
                                    The default value for the Text2 field.
                                  example: null
                                text2_max_chars:
                                  type: integer
                                  description: |
                                    The maximum number of characters allowed in the Text2 field.
                                  example: 255
                                text2_priority:
                                  type: integer
                                  description: |
                                    The priority (ordering) of the Text2 field. Higher numbers
                                    appear to the left. 0 is disabled.
                                  example: 0
                                text3_default:
                                  type: string
                                  nullable: true
                                  description: |
                                    The default value for the Text3 field.
                                  example: null
                                text3_max_chars:
                                  type: integer
                                  description: |
                                    The maximum number of characters allowed in the Text3 field.
                                  example: 255
                                text3_priority:
                                  type: integer
                                  description: |
                                    The priority (ordering) of the Text3 field. Higher numbers
                                    appear to the left. 0 is disabled.
                                  example: 0
                                totals:
                                  type: string
                                  description: |
                                    How totals are shown for rows and columns:

                                    - n - none - don't show totals
                                    - r - rows - show totals for rows only
                                    - c - columns - show totals for columns only
                                    - b - both - show totals for rows and columns
                                  enum:
                                    - 'n'
                                    - r
                                    - c
                                    - b
                                  example: b
                                use_24_hour:
                                  type: boolean
                                  description: |
                                    If `true`, use 24-hour time format. If `false`, use 12-hour format.
                                  example: false
                                use_deps_for_hidden:
                                  type: boolean
                                  description: |
                                    If `true`, apply Project and Column Dependencies to hidden columns
                                  example: true
                                use_suggestions:
                                  type: boolean
                                  description: |
                                    If `true`, allow use of "Suggestions" (e.g. from Outlook calendar)
                                    on this Entry Screen.
                          properties: &ref_77
                            reason_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Travel Reason field.

                                This is the `codes_travel_reasons`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            reason_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Travel Reason field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            vehicle_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Travel Vehicle field.

                                This is the `codes_travel_vehicles`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            vehicle_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Travel Vehicle field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            measurement_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Travel Measurement field.

                                This is the `codes_travel_measurements`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            measurement_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Travel Measurement field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            code_custom_4_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Custom Code 4 field.

                                This is the `codes_custom_4`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            code_custom_4_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Custom Code 4 field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            code_custom_5_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Custom Code 5 field.

                                This is the `codes_custom_5`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename
                              example: null
                            code_custom_5_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Custom Code 5 field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            code_custom_6_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Custom Code 6 field.

                                This is the `codes_custom_6`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            code_custom_6_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Custom Code 6 field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            code_custom_7_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Custom Code 7 field.

                                This is the `codes_custom_7`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            code_custom_7_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Custom Code 7 field. Higher numbers
                                appear to the left. 0 is disabled
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_screens/custom/{id_item}:
    get:
      summary: Get Custom Entry Screen
      description: |
        Retrieve information about a specific Custom Entry Screen in the system.
      operationId: get-custom-entry-screen
      parameters:
        - name: id_item
          in: path
          required: true
          schema: &ref_80
            type: string
          description: |
            The internal ID of the Entry Screen config.
          example: 64BBA147B9AC41D9978062300826C89F
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_209
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          An Entry Screen is the configuration of the Entry Sheet, including the
                          fields and layout of the sheet, as well as the Entry Periods assigned to
                          the sheet, which defines the time period such as weekly, bi-weekly, etc.
                          The Entry Screen config determines which
                          [Entry Columns](/docs/reference/list-entry-columns)
                          appear on a user's entry sheet, and in what order, along with
                          many other entry screen configuration options.
                        allOf: *ref_76
                        properties: *ref_77
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_screens/expense:
    get:
      summary: List Expense Entry Screens
      description: |
        Retrieve a list of available Expense Entry Screens.

        An Entry Screen is the configuration of the Entry Sheet, including the
        fields and layout of the sheet, as well as the Entry Periods assigned to
        the sheet, which defines the time period such as weekly, bi-weekly, etc.

        The Entry Screen config determines which
        [Entry Columns](/docs/reference/list-entry-columns)
        appear on a user's entry sheet, and in what order, along with
        many other entry screen configuration options.

        # START_RAW
        import ReadOnlyEndpoint from '@site/content/partials/_read-only-endpoint.mdx'

        <ReadOnlyEndpoint itemName="Expense Entry Screens" />
        # END_RAW

        :::info[Database table name]

        Note: internally, Expense Entry Screens are stored in the `expense_guis`
        database table, and the "Entry Screen Config" concept is
        sometimes referred to as a "GUI" (graphical user interface) in the
        legacy codebase.

        :::
      operationId: list-expense-entry-screens
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_210
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          An Entry Screen is the configuration of the Entry Sheet, including the
                          fields and layout of the sheet, as well as the Entry Periods assigned to
                          the sheet, which defines the time period such as weekly, bi-weekly, etc.
                          The Entry Screen config determines which
                          [Entry Columns](/docs/reference/list-entry-columns)
                          appear on a user's entry sheet, and in what order, along with
                          many other entry screen configuration options.
                        items:
                          type: object
                          description: |
                            An Entry Screen is the configuration of the Entry Sheet, including the
                            fields and layout of the sheet, as well as the Entry Periods assigned to
                            the sheet, which defines the time period such as weekly, bi-weekly, etc.
                            The Entry Screen config determines which
                            [Entry Columns](/docs/reference/list-entry-columns)
                            appear on a user's entry sheet, and in what order, along with
                            many other entry screen configuration options.
                          allOf: &ref_81
                            - type: object
                              description: |
                                An Entry Screen is the configuration of the Entry Sheet, including the
                                fields and layout of the sheet, as well as the Entry Periods assigned to
                                the sheet, which defines the time period such as weekly, bi-weekly, etc.
                                The Entry Screen config determines which
                                [Entry Columns](/docs/reference/list-entry-columns)
                                appear on a user's entry sheet, and in what order, along with
                                many other entry screen configuration options.
                              allOf: *ref_78
                              properties: *ref_79
                          properties: &ref_82
                            code_expense_4_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Expense Code 4 field.

                                This is the `codes_expense_4`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            code_expense_4_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Expense Code 4 field.
                                Higher numbers appear to the left. 0 is disabled.
                              example: 0
                            code_expense_5_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Expense Code 5 field.

                                This is the `codes_expense_5`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            code_expense_5_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Expense Code 5 field.
                                Higher numbers appear to the left. 0 is disabled.
                              example: 0
                            code_expense_6_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Expense Code 6 field.

                                This is the `codes_expense_6`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            code_expense_6_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Expense Code 6 field.
                                Higher numbers appear to the left. 0 is disabled.
                              example: 0
                            code_expense_7_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Expense Code 7 field.

                                This is the `codes_expense_7`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            code_expense_7_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Expense Code 7 field.
                                Higher numbers appear to the left. 0 is disabled.
                              example: 0
                            expense_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the "Expense Code" field.

                                This is the `codes_expenses`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            expense_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Expense Code field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            source_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Expense Source field.

                                This is the `codes_expense_sources`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            source_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Expense Source field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            currency_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Expense Currency field.

                                This is the `codes_currencies`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            currency_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Currency field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_screens/expense/{id_item}:
    get:
      summary: Get Expense Entry Screen
      description: |
        Retrieve information about a specific Expense Entry Screen in the system.
      operationId: get-expense-entry-screen
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_80
          description: |
            The internal ID of the Entry Screen config.
          example: 64BBA147B9AC41D9978062300826C89F
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_211
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          An Entry Screen is the configuration of the Entry Sheet, including the
                          fields and layout of the sheet, as well as the Entry Periods assigned to
                          the sheet, which defines the time period such as weekly, bi-weekly, etc.
                          The Entry Screen config determines which
                          [Entry Columns](/docs/reference/list-entry-columns)
                          appear on a user's entry sheet, and in what order, along with
                          many other entry screen configuration options.
                        allOf: *ref_81
                        properties: *ref_82
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_screens/time:
    get:
      summary: List Time Entry Screens
      description: |
        Retrieve a list of available Time Entry Screens.

        An Entry Screen is the configuration of the Entry Sheet, including the
        fields and layout of the sheet, as well as the Entry Periods assigned to
        the sheet, which defines the time period such as weekly, bi-weekly, etc.

        The Entry Screen config determines which
        [Entry Columns](/docs/reference/list-entry-columns)
        appear on a user's entry sheet, and in what order, along with
        many other entry screen configuration options.

        # START_RAW
        import ReadOnlyEndpoint from '@site/content/partials/_read-only-endpoint.mdx'

        <ReadOnlyEndpoint itemName="Time Entry Screens" />
        # END_RAW

        :::info[Database table name]

        Note: internally, Time Entry Screens are stored in the `time_guis`
        database table, and the "Entry Screen Config" concept is
        sometimes referred to as a "GUI" (graphical user interface) in the
        legacy codebase.

        :::
      operationId: list-time-entry-screens
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_212
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          An Entry Screen is the configuration of the Entry Sheet, including the
                          fields and layout of the sheet, as well as the Entry Periods assigned to
                          the sheet, which defines the time period such as weekly, bi-weekly, etc.
                          The Entry Screen config determines which
                          [Entry Columns](/docs/reference/list-entry-columns)
                          appear on a user's entry sheet, and in what order, along with
                          many other entry screen configuration options.
                        items:
                          type: object
                          description: |
                            An Entry Screen is the configuration of the Entry Sheet, including the
                            fields and layout of the sheet, as well as the Entry Periods assigned to
                            the sheet, which defines the time period such as weekly, bi-weekly, etc.
                            The Entry Screen config determines which
                            [Entry Columns](/docs/reference/list-entry-columns)
                            appear on a user's entry sheet, and in what order, along with
                            many other entry screen configuration options.
                          allOf: &ref_83
                            - type: object
                              description: |
                                An Entry Screen is the configuration of the Entry Sheet, including the
                                fields and layout of the sheet, as well as the Entry Periods assigned to
                                the sheet, which defines the time period such as weekly, bi-weekly, etc.
                                The Entry Screen config determines which
                                [Entry Columns](/docs/reference/list-entry-columns)
                                appear on a user's entry sheet, and in what order, along with
                                many other entry screen configuration options.
                              allOf: *ref_78
                              properties: *ref_79
                          properties: &ref_84
                            code_time_4_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Time Code 4 field.
                              example: null
                            code_time_4_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Time Code 4 field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            code_time_5_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Time Code 5 field.
                              example: null
                            code_time_5_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Time Code 5 field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            code_time_6_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Time Code 6 field.
                              example: null
                            code_time_6_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Time Code 6 field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            code_time_7_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Time Code 7 field.
                              example: null
                            code_time_7_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Time Code 7 field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            task_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Task field.

                                This is the `codes_tasks`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            task_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Task field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            pay_type_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Pay Type field.

                                This is the `codes_pay_types`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            pay_type_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Pay Type field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            bill_type_default:
                              type: string
                              nullable: true
                              description: |
                                The default value for the Bill Type field.

                                This is the `codes_bill_types`
                                [Entry Code](/docs/reference/list-entry-codes-by-tablename).
                              example: null
                            bill_type_priority:
                              type: integer
                              description: |
                                The priority (ordering) of the Bill Type field. Higher numbers
                                appear to the left. 0 is disabled.
                              example: 0
                            entry_input_type:
                              type: number
                              description: |
                                If 0, users will enter Time as dropdowns (SELECT inputs) with pre-defined
                                time increments. If 1, users will enter time as a text input box.
                            time_format:
                              type: number
                              description: |
                                The time format for the Entry Screen.

                                - 0 - HH:MM format
                                - 1 - decimal hours format
                                - 2-  either HH:MM or decimal hours
                              enum:
                                - 0
                                - 1
                                - 2
                              example: 2
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_screens/time/{id_item}:
    get:
      summary: Get Time Entry Screen
      description: |
        Retrieve information about a specific Time Entry Screen in the system.
      operationId: get-time-entry-screen
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_80
          description: |
            The internal ID of the Entry Screen config.
          example: 64BBA147B9AC41D9978062300826C89F
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_213
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          An Entry Screen is the configuration of the Entry Sheet, including the
                          fields and layout of the sheet, as well as the Entry Periods assigned to
                          the sheet, which defines the time period such as weekly, bi-weekly, etc.
                          The Entry Screen config determines which
                          [Entry Columns](/docs/reference/list-entry-columns)
                          appear on a user's entry sheet, and in what order, along with
                          many other entry screen configuration options.
                        allOf: *ref_83
                        properties: *ref_84
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_sheets/time:
    get:
      operationId: list-entry-sheets-time
      summary: List time sheets
      description: |
        Retrieves a paginated list of time entry sheets with optional filtering, sorting, and field selection.

        **Permissions**: Users see their own sheets. Managers, approvers, and timekeeping assistants
        see sheets they have permission to view based on group-scoped roles.

        **Performance**: By default, returns basic fields only. Use `$keys=rows` to include full entry
        data (cells, notes, attachments), but this limits results to 10 sheets per request.

        **Filtering**: Supports rich filtering on dates, states, totals, users, and related data.
        See the `$filter` parameter documentation for details.

        :::warning[Version 13.5.0 (25H2) or higher required]

        The Entry Sheet REST API was introduced in Journyx version 13.5.0 (25H2).
        Please ensure your Journyx instance is running this version or later to access
        these endpoints.

        :::

        :::danger[No DELETE endpoint]

        Entry Sheets do not respond to the `DELETE` HTTP method. You can zero-out
        the entries in a sheet to effectively clear its contents, but the sheet
        object itself remains for auditing and compliance reasons.

        :::
      tags:
        - Entry Sheets - Time
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
        - name: $screenInclude
          in: query
          required: false
          schema: &ref_94
            type: string
          description: |
            Specifies whether to include the `screen` key in the response; defaults to
            false / 0. The `screen` field contains information needed to construct
            the related user interface (UI) page and is not needed for typical
            API usage.

            See the [Collections#ScreenInclude](/docs/collections#the-screen-key)
            page for more information.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                description: Paginated collection of time sheets
                allOf: &ref_231
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          description: |
                            Time entry sheet.

                            See the
                            [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
                            for a discussion of the structure of the sheet, especially the `rows` key
                            which contains the actual time entries.
                          allOf: &ref_90
                            - description: |
                                Extended entry sheet with all optional fields included.

                                These fields are returned when:
                                - Getting a single sheet (not a collection)
                                - Using `$keys=$extended` or specifying keys explicitly
                                - Requesting specific keys like `rows`, `columns`, etc.
                              allOf: &ref_95
                                - type: object
                                  description: |
                                    Base entry sheet fields common to all entry types (time, expense, custom).
                                    An entry sheet represents a user's entries for a specific period.
                                  allOf: &ref_214
                                    - type: object
                                      description: |
                                        These are fields that are common to most object types.
                                      properties: *ref_0
                                    - type: object
                                      description: |
                                        Fields related to the creation of a resource, including the creation
                                        timestamp, creator user ID, and creator user name.

                                        Note that extended information about the creator user may be included
                                        in the `creator_properties` field, depending on the `$keys` requested.
                                        If present, this information will follow the schema of the
                                        [User](/docs/reference/schemas/user) object.
                                      allOf: *ref_1
                                      properties: *ref_2
                                    - type: object
                                      description: Object creation date/time fields common to many resources.
                                      allOf: *ref_5
                                      properties: *ref_6
                                    - type: object
                                      description: |
                                        Fields related to the last modification of a resource, including the
                                        last modified timestamp in various formats, the modifier's user ID and
                                        full name. Please note that this only records the most recent
                                        modification. In addition, it may not reflect modifications to child
                                        resources or extended properties that are defined in other tables, such
                                        as "Custom Fields". These last modifier fields are always read-only.

                                        Note that extended information about the modifier user may be included
                                        in the `modifier_properties` field, depending on the `$keys` requested.
                                        If present, this information will follow the schema of the
                                        [User](/docs/reference/schemas/user) object.
                                      allOf: *ref_7
                                      properties: *ref_8
                                    - type: object
                                      description: |
                                        The last modified date/time fields common to many resources. Please note
                                        that this only records the most recent modification. In addition, it may
                                        not record modifications to child resources or extended properties that
                                        are defined in other tables, such as "Custom Fields". These fields are
                                        read-only.
                                      allOf: *ref_9
                                      properties: *ref_10
                                    - type: object
                                      properties:
                                        id_sheet:
                                          type: string
                                          description: Unique identifier for the entry sheet (same as `id`)
                                          example: 0B04998DCD0E45DF9D0EC97EC926D281
                                          readOnly: true
                                        id_user:
                                          type: string
                                          description: User ID of the sheet owner
                                          example: alice
                                        user:
                                          type: string
                                          description: User login/ID (same as id_user)
                                          example: alice
                                          readOnly: true
                                        user_login:
                                          type: string
                                          description: User login name
                                          example: alice@company.com
                                          readOnly: true
                                        user_name:
                                          type: string
                                          description: Full display name of the user
                                          example: Alice Dev
                                          readOnly: true
                                        id_timesheet:
                                          type: string
                                          description: |
                                            ID of the timesheet period configuration (e.g., "default_weekly").
                                            Determines the period frequency and start day.

                                            **Note**: not to be confused with `id_sheet`, which is the unique sheet
                                            instance ID. The `id_timesheet` field refers to the TIME PERIOD definition
                                            of the sheet, i.e., weekly vs. monthly.
                                          example: default_weekly
                                        type:
                                          type: string
                                          enum:
                                            - time
                                            - expense
                                            - mileage
                                          description: |
                                            Type of entry sheet:
                                            - `time` - Time tracking entries
                                            - `expense` - Expense entries
                                            - `mileage` - Custom/mileage/travel entries
                                          example: time
                                        state:
                                          type: string
                                          enum:
                                            - open
                                            - submitted
                                            - approved
                                            - rejected
                                          description: |
                                            Current approval state of the sheet:
                                            - `open` - Editable by user
                                            - `submitted` - Awaiting approval
                                            - `approved` - Approved by all required levels
                                            - `rejected` - Rejected and returned to user
                                          example: open
                                          readOnly: true
                                        state_flag:
                                          type: number
                                          format: float
                                          description: |
                                            Numeric representation of state:
                                            - `0.0` - open
                                            - `1.0` - submitted
                                            - `2.0` - approved
                                            - `3.0` - rejected
                                          example: 0
                                          readOnly: true
                                        start_date:
                                          type: string
                                          pattern: ^\d{8}$
                                          description: Period start date in F8 format (YYYYMMDD)
                                          example: '20251102'
                                        end_date:
                                          type: string
                                          pattern: ^\d{8}$
                                          description: Period end date in F8 format (YYYYMMDD)
                                          example: '20251108'
                                        dates:
                                          type: array
                                          items:
                                            type: string
                                            pattern: ^\d{8}$
                                          description: Array of all dates in the period (F8 / YYYYMMDD format)
                                          example:
                                            - '20251102'
                                            - '20251103'
                                            - '20251104'
                                            - '20251105'
                                            - '20251106'
                                            - '20251107'
                                            - '20251108'
                                        rod:
                                          type: string
                                          description: |
                                            Concatenated representation of all dates (Record Of Dates).
                                            Mainly an internal use field that can be ignored.
                                          example: '20251102202511032025110420251105202511062025110720251108'
                                          readOnly: true
                                        total:
                                          type: number
                                          format: float
                                          description: |
                                            Sum of all entry amounts in the sheet.
                                            Computed field - calculated from underlying entry records.
                                          example: 40
                                          readOnly: true
                                        entry_count:
                                          type: integer
                                          description: |
                                            Count of entry records in the sheet.
                                            Computed field - calculated from underlying entry records.
                                          example: 5
                                          readOnly: true
                                        level:
                                          type: integer
                                          description: |
                                            Current approval level (0 = not submitted, 1+ = approval level).
                                          example: 0
                                          readOnly: true
                                        interim_sheet:
                                          type: boolean
                                          description: |
                                            Whether this is a interim-submitted ("virtual") sheet.
                                            Interim sheets allow partial submission while keeping the main sheet open.
                                          example: false
                                          readOnly: true
                                        sheet_table:
                                          type: string
                                          description: |
                                            Database table name for this sheet type:
                                            - `user_time_sheets` or `virtual_time_sheets`
                                            - `user_expense_sheets` or `virtual_expense_sheets`
                                            - `user_travel_sheets` or `virtual_custom_sheets`
                                          example: user_time_sheets
                                          readOnly: true
                                        sheet_status:
                                          type: string
                                          description: Human-readable status message
                                          example: Open for Entry
                                          readOnly: true
                                        pname:
                                          type: string
                                          description: Display name for the sheet (formatted date range)
                                          example: 11/02/2025 - 11/08/2025
                                          readOnly: true
                                        modified_at:
                                          type: string
                                          format: date-time
                                          description: |
                                            ISO 8601 timestamp of the most recent modification across all related data.
                                            May differ from modify_timestamp if related records were changed.
                                          example: '2025-11-03T12:56:20-06:00'
                                          readOnly: true
                                        reserved1:
                                          type: string
                                          nullable: true
                                          description: Legacy field, can be ignored
                                          readOnly: true
                                        reserved2:
                                          type: number
                                          nullable: true
                                          description: Legacy field, can be ignored
                                          readOnly: true
                                        reserved3:
                                          type: number
                                          nullable: true
                                          description: Legacy field, can be ignored
                                          readOnly: true
                                      required:
                                        - id_sheet
                                        - id_user
                                        - type
                                        - start_date
                                        - end_date
                                        - dates
                                - type: object
                                  properties:
                                    rows:
                                      type: array
                                      items:
                                        type: object
                                        description: |
                                          A row represents a unique combination of entry column values (project, codes, comment).
                                          Each row aggregates entries across all dates in the period.

                                          Note that the exact keys present here (e.g., code3+) may depend on other system settings,
                                          including whether additional entry columns are activated system-wide.
                                        properties: &ref_223
                                          project:
                                            type: string
                                            nullable: true
                                            description: Project ID for this row
                                            example: p_d_1_1
                                          project_name:
                                            type: string
                                            description: Project display name
                                            example: D.01.01 Delta Maine Portland
                                          code0:
                                            type: string
                                            nullable: true
                                            description: Activity/Task code
                                            example: Meetings
                                          code0_name:
                                            type: string
                                            description: Activity/Task display name
                                            example: Meetings
                                          code1:
                                            type: string
                                            nullable: true
                                            description: Pay type code (time) or expense type code
                                            example: Regular
                                          code1_name:
                                            type: string
                                            description: Pay/expense type display name
                                            example: Regular
                                          code2:
                                            type: string
                                            nullable: true
                                            description: Bill type code (time) or currency code (expense)
                                            example: Standard
                                          code2_name:
                                            type: string
                                            description: Bill/currency type display name
                                            example: Standard
                                          code3:
                                            type: string
                                            nullable: true
                                            description: Additional code column (if configured)
                                          code3_name:
                                            type: string
                                            description: Additional code display name
                                          code4:
                                            type: string
                                            nullable: true
                                            description: Additional code column (if configured)
                                          code4_name:
                                            type: string
                                            description: Additional code display name
                                          code5:
                                            type: string
                                            nullable: true
                                            description: Additional code column (if configured)
                                          code5_name:
                                            type: string
                                            description: Additional code display name
                                          code6:
                                            type: string
                                            nullable: true
                                            description: Additional code column (if configured)
                                          code6_name:
                                            type: string
                                            description: Additional code display name
                                          comment:
                                            type: string
                                            description: Text comment for this row
                                            example: Team standup meeting
                                          total:
                                            type: number
                                            format: float
                                            description: Sum of amounts across all cells in this row
                                            example: 40
                                          read_only:
                                            type: boolean
                                            description: Whether this row is read-only (e.g., submitted/approved entries)
                                            example: false
                                          interim_submitted:
                                            type: boolean
                                            description: Whether this row has been interim submitted
                                            example: false
                                          interim_approved:
                                            type: boolean
                                            description: Whether this row has been interim approved
                                            example: false
                                          id_suggestion:
                                            type: string
                                            nullable: true
                                            description: ID of the suggestion that generated this row (if any)
                                            example: null
                                          suggestion:
                                            type: object
                                            nullable: true
                                            description: Details about the suggestion that generated this row
                                          cells:
                                            type: array
                                            items:
                                              type: object
                                              description: |
                                                A cell represents the intersection of a row and a date, containing the actual
                                                entry data (hours/amount) and associated metadata for that specific combination.
                                              properties: &ref_219
                                                date:
                                                  type: string
                                                  pattern: ^\d{8}$
                                                  description: Date in F8 format (YYYYMMDD)
                                                  example: '20251103'
                                                amount:
                                                  type: number
                                                  format: float
                                                  description: |
                                                    The entry amount for this cell:
                                                    - For time: hours (e.g., 8.0)
                                                    - For expense: monetary amount or mileage
                                                    - For custom: distance
                                                  example: 8
                                                ids:
                                                  type: array
                                                  items:
                                                    type: string
                                                  description: |
                                                    Array of entry record IDs that contribute to this cell's total.
                                                    Multiple IDs indicate multiple entries for the same row/date combination.
                                                  example:
                                                    - time_rec_12345
                                                    - time_rec_67890
                                                attachments:
                                                  type: array
                                                  items:
                                                    type: object
                                                    description: |
                                                      A file attachment associated with an entry cell (e.g., receipt, document).
                                                    properties: &ref_215
                                                      uniqueid:
                                                        type: string
                                                        description: |
                                                          Encoded unique identifier for the attachment.
                                                          Used to retrieve or delete the attachment.

                                                          This can be provided to the
                                                          [`getAttachmentByEncodedId`](/docs/legacy-api/jxapi_methods#getattachmentbyencodedid)
                                                          legacy API method to retrieve the file.
                                                        example: dGltZV9hdHRhY2htZW50czoxMjM0NQ==
                                                      creator:
                                                        type: string
                                                        description: User ID of the person who uploaded the attachment
                                                        example: alice
                                                      create_timestamp:
                                                        type: number
                                                        format: double
                                                        description: Unix timestamp when the attachment was uploaded
                                                        example: 1762196180
                                                      note:
                                                        type: string
                                                        description: Optional description or note about the attachment
                                                        example: Receipt for client lunch meeting
                                                      filename:
                                                        type: string
                                                        description: Original filename of the uploaded file
                                                        example: receipt_2025-11-03.pdf
                                                      mimetype:
                                                        type: string
                                                        description: MIME type of the file
                                                        example: application/pdf
                                                      size:
                                                        type: integer
                                                        description: File size in bytes
                                                        example: 524288
                                                    required: &ref_216
                                                      - uniqueid
                                                      - creator
                                                      - create_timestamp
                                                      - filename
                                                  description: File attachments associated with this cell
                                                notes:
                                                  type: array
                                                  items:
                                                    type: object
                                                    description: |
                                                      A diary note attached to an entry cell.
                                                    properties: &ref_217
                                                      id:
                                                        type: string
                                                        description: Unique identifier for the note
                                                        example: note_12345
                                                      text:
                                                        type: string
                                                        description: The note text content
                                                        example: Worked on bug fixes for the login module
                                                      modified:
                                                        type: boolean
                                                        description: Whether the note has been modified since creation
                                                        example: false
                                                    required: &ref_218
                                                      - id
                                                      - text
                                                  description: Diary notes associated with this cell
                                                locations:
                                                  type: array
                                                  items:
                                                    type: object
                                                    description: |
                                                      GPS location coordinates and associated metadata for an entry record or punch time.
                                                      Captured when location tracking is enabled.
                                                    properties: &ref_85
                                                      coords:
                                                        type: object
                                                        description: Geographic coordinates
                                                        properties:
                                                          latitude:
                                                            type: number
                                                            format: double
                                                            description: Latitude in decimal degrees
                                                            example: 30.0613632
                                                          longitude:
                                                            type: number
                                                            format: double
                                                            description: Longitude in decimal degrees
                                                            example: -99.1363072
                                                          altitude:
                                                            type: number
                                                            format: double
                                                            nullable: true
                                                            description: Altitude in meters above sea level (when available).
                                                            example: null
                                                          accuracy:
                                                            type: number
                                                            format: float
                                                            description: Horizontal accuracy in meters. A geofence can have a minimum required accuracy, but different devices may have different capabilities.
                                                            example: 963.78847
                                                        required:
                                                          - latitude
                                                          - longitude
                                                      notes:
                                                        type: string
                                                        description: Additional notes or description for this location. This is only rarely provided / available.
                                                        example: ''
                                                      timestamp:
                                                        type: number
                                                        format: double
                                                        description: Unix timestamp (milliseconds) when the location was captured
                                                        example: 1762542072875
                                                    required: &ref_86
                                                      - coords
                                                      - timestamp
                                                  description: GPS locations recorded for entries in this cell
                                              required: &ref_220
                                                - date
                                                - amount
                                            description: Array of cells (one per date in the period)
                                          punchlists:
                                            type: array
                                            items:
                                              type: object
                                              description: Collection of punch pairs for a specific date or row
                                              properties: &ref_89
                                                punches:
                                                  type: array
                                                  items:
                                                    type: object
                                                    description: |
                                                      A punch-in/punch-out time pair representing a work period.
                                                      Only applicable to time entry sheets with punch time tracking enabled.
                                                    properties: &ref_221
                                                      time_in:
                                                        type: string
                                                        description: Punch-in time in HH:MM format (24-hour)
                                                        example: '08:00'
                                                      time_in_unix_epoch:
                                                        type: number
                                                        format: double
                                                        description: Punch-in time as Unix timestamp
                                                        example: 1730894400
                                                      time_in_ISO_8601:
                                                        type: string
                                                        format: date-time
                                                        description: Punch-in time in ISO 8601 format
                                                        example: '2025-11-04T08:00:00-06:00'
                                                      time_in_timezone:
                                                        type: string
                                                        nullable: true
                                                        description: |
                                                          IANA timezone name (e.g. `America/Chicago`) where the punch-in occurred.
                                                          Null for records created before timezone tracking was enabled.
                                                        example: America/Chicago
                                                      time_in_location:
                                                        allOf:
                                                          - type: object
                                                            description: |
                                                              GPS location coordinates and associated metadata for an entry record or punch time.
                                                              Captured when location tracking is enabled.
                                                            properties: *ref_85
                                                            required: *ref_86
                                                        description: Location captured at punch-in time (optional)
                                                      time_out:
                                                        type: string
                                                        nullable: true
                                                        description: |
                                                          Punch-out time in HH:MM format (24-hour).
                                                          Null for open punches (not yet punched out).
                                                        example: '12:00'
                                                      time_out_unix_epoch:
                                                        type: number
                                                        format: double
                                                        nullable: true
                                                        description: Punch-out time as Unix timestamp
                                                        example: 1762279200
                                                      time_out_ISO_8601:
                                                        type: string
                                                        format: date-time
                                                        nullable: true
                                                        description: Punch-out time in ISO 8601 format
                                                        example: '2025-11-04T12:00:00-06:00'
                                                      time_out_timezone:
                                                        type: string
                                                        nullable: true
                                                        description: |
                                                          IANA timezone name (e.g. `America/Chicago`) where the punch-out occurred.
                                                          May differ from `time_in_timezone` if the user traveled between zones.
                                                          Null for records created before timezone tracking was enabled.
                                                        example: America/Chicago
                                                      time_out_location:
                                                        allOf:
                                                          - type: object
                                                            description: |
                                                              GPS location coordinates and associated metadata for an entry record or punch time.
                                                              Captured when location tracking is enabled.
                                                            properties: *ref_85
                                                            required: *ref_86
                                                        description: Location captured at punch-out time (optional)
                                                    required: &ref_222
                                                      - time_in
                                                      - time_in_unix_epoch
                                                      - time_in_ISO_8601
                                                  description: |
                                                    List of punch-in/punch-out pairs. (Each pair is a single object here.)
                                            description: |
                                              Punch-in/punch-out times for this row (time entries only with job start/stop).
                                              Job-based punches are attached to rows rather than individual dates.
                                        required: &ref_224
                                          - total
                                          - cells
                                      description: |
                                        Array of entry rows with cells, notes, attachments, and locations.

                                        This is the main data structure that contains the actual entries
                                        of the sheet. The entries are organized into rows of "combos" (unique
                                        combinations of project/code/etc.), with each row containing
                                        individual cells for each date in the period.

                                        **Performance Note**: Including this field in a collection response is
                                        expensive and limited to 10 sheets per request. When using collections, you
                                        can explicitly request this with `$keys=rows`.

                                        See also the [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
                                    columns:
                                      type: array
                                      items:
                                        type: object
                                        description: |
                                          Metadata describing a configurable entry column (dimension) for the sheet.
                                          Columns define what fields are available for entry (project, task, pay type, etc.).
                                        properties: &ref_87
                                          column_id:
                                            type: string
                                            description: |
                                              Standard column identifier, also known as the "API name" for the column:
                                              - `project` - Project column
                                              - `code0` through `code6` - Code columns (task, pay type, bill type, etc.)
                                              - `comment` - Primary text comment
                                              - `text2`, `text3` - Additional text fields
                                              - `group` - Group column - rarely used as an entry column.
                                              - `user` - User (for crew entry)
                                            example: project
                                          column_alt_id:
                                            type: string
                                            description: |
                                              Alternative/legacy column identifier, also known as the internal "jtgui name" for
                                              the column:
                                              - `h1` - Project
                                              - `dd1` through `dd7` - Dropdown codes
                                              - `tb1` through `tb3` - Text boxes
                                              - `grp1` - Group
                                              - `u1` - User
                                            example: h1
                                          name:
                                            type: string
                                            description: The configurable display name (label) for the column.
                                            example: Project
                                          table:
                                            type: string
                                            description: |
                                              Database table name for this column type. This table stores the primary
                                              selection values for this column.
                                              - `projects` - Projects
                                              - `codes_tasks` - Activity codes
                                              - `codes_pay_types` - Pay type codes
                                              - `codes_bill_types` - Bill type codes
                                              - Empty string for text columns
                                            example: projects
                                          default:
                                            type: string
                                            description: Default value ID for this column
                                            example: p_d_1_1
                                          default_name:
                                            type: string
                                            description: Display name of the default value
                                            example: 'Customer XYZ: Implementation Phase'
                                          priority:
                                            type: integer
                                            description: Display priority/order (higher = more important/displayed first)
                                            example: 12
                                          hidden:
                                            type: boolean
                                            description: Whether this column is hidden from the user
                                            example: false
                                          is_project_column:
                                            type: boolean
                                            description: True if this is the project column
                                            example: true
                                          is_code_column:
                                            type: boolean
                                            description: True if this is a code/dropdown column (code0 through code6)
                                            example: false
                                          is_text_column:
                                            type: boolean
                                            description: True if this is an open text entry column
                                            example: false
                                        required: &ref_88
                                          - column_id
                                          - name
                                          - priority
                                      description: |
                                        Metadata describing the available entry columns for this sheet.
                                        Defines what fields can be used (project, codes, comments, etc.).
                                        The columns are listed in the order (left-to-right) they appear on the
                                        entry screen.
                                    columns_dict:
                                      type: object
                                      additionalProperties:
                                        type: object
                                        description: |
                                          Metadata describing a configurable entry column (dimension) for the sheet.
                                          Columns define what fields are available for entry (project, task, pay type, etc.).
                                        properties: *ref_87
                                        required: *ref_88
                                      description: |
                                        Dictionary version of columns array, keyed by column_id for easy lookup.
                                    gui_options:
                                      type: object
                                      description: |
                                        UI configuration options for the entry screen.
                                        **Note**: This is an internal-use field. Detailed documentation will be provided in a future release.
                                        Contains settings like time format, default values, display preferences, etc.
                                      example:
                                        entryType: time
                                        timeformat: 2
                                        arrows: 1
                                        pname: Multi Project Time Entry Grid
                                    approval_plan_info:
                                      type: object
                                      description: |
                                        Information about the approval workflow configuration for the sheet.
                                      properties: &ref_225
                                        approval_plan_active:
                                          type: boolean
                                          description: Whether an approval plan is active for this sheet
                                          example: true
                                        approval_levels:
                                          type: integer
                                          description: Number of approval levels required
                                          example: 2
                                        approver_id:
                                          type: string
                                          nullable: true
                                          description: User ID of the next approver in the workflow
                                          example: marino
                                        approver_name:
                                          type: string
                                          nullable: true
                                          description: Full name of the next approver
                                          example: Stephanie Marino
                                      required: &ref_226
                                        - approval_plan_active
                                    audit_settings:
                                      type: object
                                      description: |
                                        Audit configuration controlling how corrections to submitted entries are handled.
                                      properties: &ref_227
                                        audit_level_setting:
                                          type: string
                                          enum:
                                            - auditlevel1
                                            - auditlevel2
                                            - auditlevel3
                                            - auditlevel4
                                            - auditlevel5
                                          description: |
                                            The audit level for this sheet, which primarily concerns whether
                                            correction records are generated, or the original records are simply
                                            modified in place.
                                            - `auditlevel1`: "Do not track changes" - never generate correction records.
                                            - `auditlevel2`: "Track changes after sheet submission" - generate correction records
                                               only after the sheet has been submitted for approval.
                                            - `auditlevel3`: "Require correction notes after sheet submission" - correction
                                               records must include a correction note.
                                            - `auditlevel4`: "Always track changes" - always generate correction records,
                                               even before sheet submission.
                                            - `auditlevel5`: "Always require correction notes" - correction records
                                               must include a correction note, even before sheet submission.
                                          example: auditlevel2
                                        has_ever_been_submitted:
                                          type: integer
                                          description: Whether this sheet has ever been submitted (0 or 1)
                                          example: 0
                                        requires_correction_recs:
                                          type: integer
                                          description: Whether correction records are required for changes (0 or 1)
                                          example: 0
                                        requires_new_entries:
                                          type: boolean
                                          description: Whether new entries require special handling
                                          example: false
                                      required: &ref_228
                                        - audit_level_setting
                                    id_approver:
                                      type: string
                                      nullable: true
                                      description: If the sheet has been approved, this is the User ID of the approving user. (Same as 'approver')
                                      example: null
                                    approver:
                                      type: string
                                      nullable: true
                                      description: If the sheet has been approved, this is the User ID of the approving user. (Same as 'id_approver')
                                      example: null
                                    approverView:
                                      type: boolean
                                      description: Whether the current user is viewing this as an approver
                                      example: false
                                    reason:
                                      type: string
                                      nullable: true
                                      description: Reason for rejection (if state is rejected)
                                      example: null
                                    can_be_submitted:
                                      type: boolean
                                      description: Whether the sheet can currently be submitted for approval
                                      example: false
                                    can_be_interim_submitted:
                                      type: boolean
                                      description: Whether partial (interim) submission is allowed
                                      example: true
                                    can_go_past:
                                      type: boolean
                                      description: Whether the user can navigate to past periods
                                      example: true
                                    can_go_future:
                                      type: boolean
                                      description: Whether the user can navigate to future periods
                                      example: false
                                    min_date:
                                      type: string
                                      pattern: ^\d{8}$
                                      nullable: true
                                      description: Earliest allowed date for entries (F8 format). This mainly relates to the UI setting about allowing viewing past or future periods.
                                      example: null
                                    max_date:
                                      type: string
                                      pattern: ^\d{8}$
                                      nullable: true
                                      description: Latest allowed date for entries (F8 format). This mainly relates to the UI setting about allowing viewing past or future periods.
                                      example: '20251108'
                                    confirm_submit:
                                      type: boolean
                                      description: Whether to show confirmation dialog on submit
                                      example: true
                                    confirmation_text:
                                      type: string
                                      description: Text to display in submission confirmation dialog
                                      example: Are you sure you want to submit this sheet for approval?
                                    confirmation_warnings_text:
                                      type: string
                                      description: Text to display when submitting with warnings
                                      example: Your time may violate entry rules specified by your organization, but can still be submitted for approval. Submit sheet with warnings?
                                    warnings:
                                      type: boolean
                                      description: Whether the sheet currently has validation warnings
                                      example: false
                                    location_enabled:
                                      type: boolean
                                      description: Whether location tracking is enabled for this sheet type. This does not necessarily **require** location collection, but the system will record the user's location if provided. Note that geofences will always be enforced whenever location is provided, but you must separately enable the "Require Location" setting if you want to mandate that geofences are always checked.
                                      example: false
                                    require_location_web:
                                      type: boolean
                                      description: Whether location is required for web-based entries. If the user does not provide location, they will be unable to save changes to the sheet. Note that the "Submit for Approval" action does NOT check for location.
                                      example: false
                                    require_location_mobile:
                                      type: boolean
                                      description: Whether location is required using the mobile app. If the user does not provide location, they will be unable to save changes to the sheet. Note that the "Submit for Approval" action does NOT check for location.
                                      example: false
                                    entry_notes_enabled:
                                      type: boolean
                                      description: Whether entry notes (diary notes) are enabled. These are notes that can be attached to individual cells (row + date combinations).
                                      example: true
                                    attachments_enabled:
                                      type: boolean
                                      description: Whether file attachments are enabled for this sheet
                                      example: true
                                    attachments_uploads_allowed:
                                      type: boolean
                                      description: Whether the user is currently allowed to upload attachments. This can be false when either attachments are not enabled, or the maximum number of attachments has been reached.
                                      example: false
                                    extended_fields_enabled:
                                      type: boolean
                                      description: Whether the "Extended Fields" feature is enabled.
                                      example: false
                                    id_user_properties:
                                      type: object
                                      description: |
                                        Full user record for the sheet owner, including custom fields.
                                        Contains all user attributes, roles, abilities, etc.
                                      readOnly: true
                                      allOf:
                                        - type: object
                                          description: |
                                            A user account in the JX system.
                                          allOf: *ref_3
                                          properties: *ref_4
                                    creator_properties:
                                      type: object
                                      description: Full user record for the creator. This may not be included unless requested in `$keys`.
                                      readOnly: true
                                      allOf:
                                        - type: object
                                          description: |
                                            A user account in the JX system.
                                          allOf: *ref_3
                                          properties: *ref_4
                                    modifier_properties:
                                      type: object
                                      description: Full user record for the last modifier. This may not be included unless requested in `$keys`.
                                      readOnly: true
                                      allOf:
                                        - type: object
                                          description: |
                                            A user account in the JX system.
                                          allOf: *ref_3
                                          properties: *ref_4
                                    history_url:
                                      type: string
                                      description: A URL to view sheet history. Note that this returns an HTML view, not a JSON API endpoint.
                                      example: /jtcgi/approveprojects.pyc?showsystemstick=1&nav_key=sheet_history&history=0B04998DCD0E45DF9D0EC97EC926D281
                                    report_url:
                                      type: string
                                      description: URL to view/print sheet report
                                      example: /#/reports/output/sheet/BA72DE7FFB854DF2B815A22C2BAEBC32/0B04998DCD0E45DF9D0EC97EC926D281
                            - type: object
                              properties:
                                accruals:
                                  type: array
                                  items:
                                    type: object
                                    description: |
                                      A time bank (accrual) showing available leave balance for a specific pay type.
                                      Only applicable to time entry sheets. The schema for accruals as shown in
                                      time sheets is slightly different than the separate
                                      [accrual definition](/docs/reference/schemas/accrual) schema.
                                    properties: &ref_229
                                      id_timebank:
                                        type: string
                                        description: Unique identifier for the time bank
                                        example: 6D88483CFE774250B29CC61266392DBA
                                      pname:
                                        type: string
                                        description: Display name of the time bank
                                        example: Vacation
                                      hours_left:
                                        type: number
                                        format: float
                                        description: Remaining balance in hours
                                        example: 16
                                      id_code_pay_type:
                                        type: array
                                        items:
                                          type: string
                                        description: Pay type codes associated with this accrual
                                        example:
                                          - Vacation
                                      pay_types:
                                        type: array
                                        items:
                                          type: object
                                          properties:
                                            id_code_pay_type:
                                              type: string
                                            name:
                                              type: string
                                        description: Detailed information about associated pay types
                                      use_hard_threshold:
                                        type: boolean
                                        description: Whether a hard minimum balance threshold is enforced
                                        example: true
                                      hard_threshold:
                                        type: number
                                        format: float
                                        description: Minimum balance that cannot be exceeded
                                        example: 0
                                      hard_threshold_message:
                                        type: string
                                        description: Message displayed when hard threshold applies
                                        example: Minimum balance of 0.00 hours is enforced.
                                      use_warning:
                                        type: boolean
                                        description: Whether a warning threshold is configured
                                        example: true
                                      warning_threshold:
                                        type: number
                                        format: float
                                        description: Balance level that triggers a warning
                                        example: 8
                                      warning_threshold_message:
                                        type: string
                                        description: Message displayed when warning threshold is reached
                                        example: A warning is given when the balance is less than or equal to 8.00 hours.
                                      warning_type:
                                        type: string
                                        description: Type of warning configuration
                                        example: v2
                                      errors:
                                        type: array
                                        items:
                                          type: string
                                        description: Any errors related to this accrual
                                        example: []
                                      warnings:
                                        type: array
                                        items:
                                          type: string
                                        description: Any warnings related to this accrual
                                        example: []
                                      creator:
                                        type: string
                                        description: User who created this time bank
                                      modifier:
                                        type: string
                                        description: User who last modified this time bank
                                      create_timestamp:
                                        type: number
                                        format: double
                                        description: Unix timestamp of creation
                                      modify_timestamp:
                                        type: number
                                        format: double
                                        description: Unix timestamp of last modification
                                    required: &ref_230
                                      - id_timebank
                                      - pname
                                      - hours_left
                                  description: |
                                    Time banks (accruals) showing available leave balances.
                                    Only present for time entry sheets.
                                allocation_exempt_subcodes:
                                  type: array
                                  items:
                                    type: string
                                  description: |
                                    List of pay type codes that are exempt from allocation requirements.
                                    For example, a Paid Time Off code.
                                    Used when time allocation/distribution is enforced.
                                  example: []
                                punchlists:
                                  type: array
                                  items:
                                    type: object
                                    description: Collection of punch pairs for a specific date or row
                                    properties: *ref_89
                                  description: |
                                    Allocation-mode punch times organized by date.
                                    One punch list per date in the period.
                                    Only populated when allocation punch tracking is enabled.

                                    **Performance Note**: Including this field is expensive and limited to 10 sheets per request.
                                    Request explicitly with `$keys=rows`.
              examples:
                basic_list:
                  summary: Basic sheet list
                  value:
                    response_code: 200
                    success: true
                    '@count': 25
                    '@nextLink': /api/v1/entry_sheets/time?$skip=10&$top=10
                    value:
                      - id_sheet: 0B04998DCD0E45DF9D0EC97EC926D281
                        type: time
                        id_user: alice
                        state: open
                        start_date: '20251102'
                        end_date: '20251108'
                        dates:
                          - '20251102'
                          - '20251103'
                          - '20251104'
                          - '20251105'
                          - '20251106'
                          - '20251107'
                          - '20251108'
                        total: 40
                        entry_count: 5
                        pname: 11/02/2025 - 11/08/2025
                filtered:
                  summary: Filtered by state
                  value:
                    response_code: 200
                    success: true
                    '@count': 5
                    value:
                      - id_sheet: ABC123
                        type: time
                        id_user: alice
                        state: submitted
                        start_date: '20251026'
                        end_date: '20251101'
                        dates:
                          - '20251026'
                          - '20251027'
                          - '20251028'
                          - '20251029'
                          - '20251030'
                          - '20251031'
                          - '20251101'
                        total: 40
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      operationId: create-entry-sheet-time
      summary: Create time sheet
      description: |
        Creates a new time entry sheet for the authenticated user.

        **Required Fields**:
        - `dates`: Array of F8 dates (YYYYMMDD format) defining the period
        - `id_user`: User ID of the sheet owner

        **Optional**:
        - `submit`: Set to `true` to immediately submit the sheet after creation
        - `rows`: Entry data to save/update.
          See the [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
          for details on the structure of the `rows` field.

        **Validation**: All business logic validation (DVT, geofences, rate rules) is performed
        during creation. Check the `errors`, `warnings`, and `info` arrays in the response.

        **Response**: Returns HTTP 200 (not 201) with the full sheet object plus validation messages.
      tags:
        - Entry Sheets - Time
      parameters:
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: |
                Request body schema for creating a Time Entry Sheet.
              allOf: &ref_232
                - type: object
                  description: |
                    See the
                    [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
                  required: &ref_96
                    - dates
                    - id_user
                  properties: &ref_97
                    id_user:
                      type: string
                      description: Sheet owner user ID
                      example: alice
                    dates:
                      type: array
                      items:
                        type: string
                        pattern: ^\d{8}$
                      description: Array of dates for the sheet period (YYYYMMDD format)
                      example:
                        - '20251109'
                        - '20251110'
                        - '20251111'
                        - '20251112'
                        - '20251113'
                        - '20251114'
                        - '20251115'
                    submit:
                      type: boolean
                      description: Whether to immediately submit the sheet after creation
                      default: false
                    timezone:
                      type: string
                      description: |
                        IANA timezone name (e.g. `America/Chicago`) representing the client's
                        current timezone at the time of the save request. Used to set the
                        `record_timezone` on newly created time records. If omitted, the server
                        falls back to the user's `default_timezone` setting, then to the
                        server's local timezone. Invalid timezone strings will cause a
                        `400 Bad Request` error. Windows timezone names (e.g. "Central Standard
                        Time") are also accepted and will be converted to the canonical IANA name.
                      example: America/Chicago
                    rows:
                      type: array
                      description: |
                        Optional entry data to populate the sheet.

                        See the complete [Time Sheet schema](/docs/reference/schemas/timesheet)
                        for all of the available fields, including discussion of the important
                        `rows` field.

                        See also the [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
                      items:
                        type: object
            examples:
              empty_sheet:
                summary: Create empty sheet
                value:
                  id_user: alice
                  dates:
                    - '20251109'
                    - '20251110'
                    - '20251111'
                    - '20251112'
                    - '20251113'
                    - '20251114'
                    - '20251115'
              with_entries:
                summary: Create sheet with entries
                value:
                  id_user: alice
                  dates:
                    - '20251109'
                    - '20251110'
                    - '20251111'
                    - '20251112'
                    - '20251113'
                  rows:
                    - project: p_d_1_1
                      code0: Meetings
                      code1: Regular
                      code2: Standard
                      comment: Team meetings
                      cells:
                        - date: '20251109'
                          amount: 8
      responses:
        '200':
          description: Sheet created successfully
          headers:
            Location:
              schema: &ref_92
                type: string
              description: URI of the sheet
            ETag:
              schema: &ref_91
                type: string
              description: |-
                The current ETag value for the sheet, needed to perform a PUT modification.
                See the [modifying objects](/docs/rest-overview#modifying-objects-with-put) guide and the related [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          content:
            application/json:
              schema:
                description: Response schema for creating or updating (modifying) a Time Entry sheet.
                allOf: &ref_93
                  - description: |
                      Response from creating or updating an entry sheet.
                      Returns the full sheet plus validation messages.
                    type: object
                    properties: &ref_98
                      response_code:
                        type: integer
                        description: HTTP status code of the response for reference purposes.
                        example: 200
                        default: 200
                      success:
                        type: boolean
                        description: |
                          Indicates whether the request was successful (normally true if it's not
                          an error response)
                        default: true
                        example: true
                      uri:
                        type: string
                        format: uri-reference
                        example: /api/v1/entry_sheets/time/0B04998DCD0E45DF9D0EC97EC926D281
                      id:
                        type: string
                        description: ID of the created or updated sheet
                        example: 0B04998DCD0E45DF9D0EC97EC926D281
                      errors:
                        type: array
                        items:
                          type: string
                        description: Validation errors that prevented the operation
                        example: []
                      warnings:
                        type: array
                        items:
                          type: string
                        description: Warnings about the operation (does not prevent success)
                        example: []
                      info:
                        type: array
                        items:
                          type: string
                        description: Informational messages
                        example:
                          - Sheet saved successfully
                      status:
                        type: array
                        items:
                          type: string
                        description: Status messages from the save operation
                        example: []
                      extra_data:
                        type: object
                        description: |
                          Additional metadata about validation and also provides the submit
                          action for sheets.
                        properties:
                          action:
                            type: string
                            description: use `submit` to submit for approval, otherwise the default `save` is used. Also available is `interim_submit`.
                          submit_with_warnings:
                            type: boolean
                            description: use `true` to request to submit the sheet for approval despite the presence of validation warnings.
                          has_dvt:
                            type: boolean
                            description: Whether Data Validation Tool is installed (usually true).
                            example: true
                            readOnly: true
                          has_dvt_warnings:
                            type: boolean
                            description: Whether DVT generated warnings for the sheet.
                            readOnly: true
                    required: &ref_99
                      - response_code
                      - success
                      - uri
                  - type: object
                    properties:
                      results:
                        description: |
                          The full Time sheet after the create or update operation.
                        allOf: *ref_90
              example:
                response_code: 200
                success: true
                uri: /api/v1/entry_sheets/time/NEW_SHEET_ID
                id: NEW_SHEET_ID
                value:
                  id_sheet: NEW_SHEET_ID
                  type: time
                  id_user: alice
                  state: open
                  dates:
                    - '20251109'
                    - '20251110'
                    - '20251111'
                    - '20251112'
                    - '20251113'
                    - '20251114'
                    - '20251115'
                  total: 0
                  entry_count: 0
                errors: []
                warnings: []
                info:
                  - Sheet created successfully
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_sheets/time/{sheetId}:
    get:
      operationId: get-entry-sheet-time
      summary: Get time sheet
      description: |
        Retrieves a single time entry sheet by ID with full details.

        **Default Behavior**: Automatically includes all extended fields (rows, columns, accruals,
        approval info, etc.) unless `$keys=$base` is specified.

        **Permissions**: User must be the sheet owner, a manager, approver, or timekeeping assistant
        with appropriate permissions.
      tags:
        - Entry Sheets - Time
      parameters:
        - name: sheetId
          in: path
          required: true
          schema: &ref_101
            type: string
          description: |
            The internal ID of the Entry Sheet to retrieve or modify.
          example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
      responses:
        '200':
          description: Successful response
          headers:
            ETag:
              schema: *ref_91
              description: |-
                The current ETag value for the sheet, needed to perform a PUT modification.
                See the [modifying objects](/docs/rest-overview#modifying-objects-with-put) guide and the related [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          content:
            application/json:
              schema:
                description: Single time sheet response
                allOf: &ref_233
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        description: |
                          Time entry sheet.

                          See the
                          [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
                          for a discussion of the structure of the sheet, especially the `rows` key
                          which contains the actual time entries.
                        allOf: *ref_90
              example:
                response_code: 200
                success: true
                uri: /api/v1/entry_sheets/time/0B04998DCD0E45DF9D0EC97EC926D281
                results:
                  id_sheet: 0B04998DCD0E45DF9D0EC97EC926D281
                  type: time
                  id_user: alice
                  state: open
                  start_date: '20251102'
                  end_date: '20251108'
                  dates:
                    - '20251102'
                    - '20251103'
                    - '20251104'
                    - '20251105'
                    - '20251106'
                    - '20251107'
                    - '20251108'
                  total: 40
                  entry_count: 5
                  pname: 11/02/2025 - 11/08/2025
                  can_be_submitted: true
                  rows: []
                  columns: []
                  accruals: []
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      operationId: update-entry-sheet-time
      summary: Update time sheet
      description: |
        Updates an existing time entry sheet.

        **Required Headers**:
        - `If-Match`: ETag from previous GET request (optimistic concurrency control)

        **Required Fields**:
        - `id_user`: Sheet owner ID
        - `dates`: Array of F8 dates

        **Optional**:
        - `submit`: Set to `true` to submit the sheet after saving
        - `rows`: Entry data to save/update.
          See the [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
          for details on the structure of the `rows` field.

        **Validation**: All business logic validation (DVT, geofences, corrections audit) is
        performed. Check response for errors/warnings.

        **Response**: Returns HTTP 200 (not 204) with the updated sheet plus validation messages.
      tags:
        - Entry Sheets - Time
      parameters:
        - name: sheetId
          in: path
          required: true
          schema:
            type: string
          description: Unique identifier of the time sheet
          example: 0B04998DCD0E45DF9D0EC97EC926D281
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf: &ref_234
                - type: object
                  description: |
                    These are the updatable fields for an entry sheet. In general, you
                    do not need to send most of the fields available in a sheet back to
                    the server when creating or modifying it - just `id_user` and `dates`
                    fields, plus the `rows` field if you wish to update the entry data.
                    The `rows` field should contain the complete set of entry data for the sheet,
                    not just the changes.

                    See the
                    [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
                  required: &ref_102
                    - id_user
                    - dates
                  properties: &ref_103
                    id_sheet:
                      type: string
                      description: Sheet ID (must match path parameter if provided)
                      example: 0B04998DCD0E45DF9D0EC97EC926D281
                    id_user:
                      type: string
                      description: Sheet owner user ID
                      example: alice
                    dates:
                      type: array
                      items:
                        type: string
                        pattern: ^\d{8}$
                      description: Array of dates in the period (YYYYMMDD format)
                      example:
                        - '20251102'
                        - '20251103'
                        - '20251104'
                        - '20251105'
                        - '20251106'
                        - '20251107'
                        - '20251108'
                    submit:
                      type: boolean
                      description: Whether to submit after saving
                      default: false
                    timezone:
                      type: string
                      description: |
                        IANA timezone name (e.g. `America/Chicago`) representing the client's
                        current timezone. Applied only to **newly created** records in this
                        save; existing records retain their previously stored timezone.
                        If omitted, falls back to the user's `default_timezone`, then the
                        server's local timezone.
                      example: America/Chicago
                    rows:
                      type: array
                      description: |
                        Current entry data to update/save the sheet.

                        See the complete [Time Sheet schema](/docs/reference/schemas/timesheet)
                        for all of the available fields, including discussion of the important
                        `rows` field.

                        See also the [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
                      items:
                        type: object
                - type: object
                  properties:
                    type:
                      type: string
                      enum:
                        - time
                      description: |
                        Optional. The sheet type is inferred from the endpoint path.
                        If provided, must be "time".
            examples:
              update_entries:
                summary: Update with new entries
                value:
                  id_sheet: 0B04998DCD0E45DF9D0EC97EC926D281
                  id_user: alice
                  type: time
                  dates:
                    - '20251102'
                    - '20251103'
                    - '20251104'
                    - '20251105'
                    - '20251106'
                    - '20251107'
                    - '20251108'
                  rows:
                    - project: p_d_1_1
                      code0: Meetings
                      code1: Regular
                      code2: Standard
                      comment: Team standup
                      cells:
                        - date: '20251103'
                          amount: 8
              submit_sheet:
                summary: Submit for approval
                value:
                  id_sheet: 0B04998DCD0E45DF9D0EC97EC926D281
                  id_user: alice
                  type: time
                  dates:
                    - '20251102'
                    - '20251103'
                    - '20251104'
                    - '20251105'
                    - '20251106'
                    - '20251107'
                    - '20251108'
                  submit: true
                  rows: []
      responses:
        '200':
          description: Sheet updated successfully
          headers:
            Location:
              schema: *ref_92
              description: URI of the sheet
            ETag:
              schema: *ref_91
              description: |-
                The current ETag value for the sheet, needed to perform a PUT modification.
                See the [modifying objects](/docs/rest-overview#modifying-objects-with-put) guide and the related [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          content:
            application/json:
              schema:
                description: Response schema for creating or updating (modifying) a Time Entry sheet.
                allOf: *ref_93
              example:
                response_code: 200
                success: true
                uri: /api/v1/entry_sheets/time/0B04998DCD0E45DF9D0EC97EC926D281
                id: 0B04998DCD0E45DF9D0EC97EC926D281
                value:
                  id: 0B04998DCD0E45DF9D0EC97EC926D281
                  type: time
                  total: 8
                  entry_count: 1
                  state: open
                errors: []
                warnings: []
                info:
                  - Sheet saved successfully
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_sheets/expense:
    get:
      operationId: list-entry-sheets-expense
      summary: List expense sheets
      description: |
        Retrieves a paginated list of expense entry sheets with optional filtering, sorting, and field selection.

        Same capabilities as time sheets. See
        [time sheets documentation](/docs/reference/list-entry-sheets-time)
        for details on filtering, permissions, and performance.

        :::warning[Version 13.5.0 (25H2) or higher required]

        The Entry Sheet REST API was introduced in Journyx version 13.5.0 (25H2).
        Please ensure your Journyx instance is running this version or later to access
        these endpoints.

        :::
      tags:
        - Entry Sheets - Expense
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
        - name: $screenInclude
          in: query
          required: false
          schema: *ref_94
          description: |
            Specifies whether to include the `screen` key in the response; defaults to
            false / 0. The `screen` field contains information needed to construct
            the related user interface (UI) page and is not needed for typical
            API usage.

            See the [Collections#ScreenInclude](/docs/collections#the-screen-key)
            page for more information.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                description: Paginated collection of expense sheets
                allOf: &ref_235
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          description: |
                            Expense entry sheet.

                            Expense sheets use the same base structure as time sheets but track
                            monetary expenses (and in some legacy configurations, mileage) instead of hours.

                            See the
                            [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
                            for a discussion of the structure of the sheet, especially the `rows` key
                            which contains the actual expense entries.
                          allOf: &ref_100
                            - description: |
                                Extended entry sheet with all optional fields included.

                                These fields are returned when:
                                - Getting a single sheet (not a collection)
                                - Using `$keys=$extended` or specifying keys explicitly
                                - Requesting specific keys like `rows`, `columns`, etc.
                              allOf: *ref_95
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      operationId: create-entry-sheet-expense
      summary: Create expense sheet
      description: |
        Creates a new expense entry sheet for the authenticated user.

        Same structure as time sheets. See
        [time sheets documentation](/docs/reference/create-entry-sheet-time)
        for details.
      tags:
        - Entry Sheets - Expense
      parameters:
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: |
                Request body schema for creating an Expense Entry Sheet.
              allOf: &ref_236
                - type: object
                  description: |
                    See the
                    [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
                  required: *ref_96
                  properties: *ref_97
      responses:
        '200':
          description: Sheet created successfully
          headers:
            Location:
              schema: *ref_92
              description: URI of the sheet
            ETag:
              schema: *ref_91
              description: |-
                The current ETag value for the sheet, needed to perform a PUT modification.
                See the [modifying objects](/docs/rest-overview#modifying-objects-with-put) guide and the related [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          content:
            application/json:
              schema:
                description: Response schema for creating or updating (modifying) an Expense Entry sheet.
                allOf: &ref_104
                  - description: |
                      Response from creating or updating an entry sheet.
                      Returns the full sheet plus validation messages.
                    type: object
                    properties: *ref_98
                    required: *ref_99
                  - type: object
                    properties:
                      results:
                        description: |
                          The full Expense sheet after the create or update operation.
                        allOf: *ref_100
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_sheets/expense/{sheetId}:
    get:
      operationId: get-entry-sheet-expense
      summary: Get expense sheet
      description: |
        Retrieves a single expense entry sheet by ID with full details.

        Same capabilities as time sheets. See
        [time sheet documentation](/docs/reference/get-entry-sheet-time)
        for details on filtering, permissions, and performance.
      tags:
        - Entry Sheets - Expense
      parameters:
        - name: sheetId
          in: path
          required: true
          schema: *ref_101
          description: |
            The internal ID of the Entry Sheet to retrieve or modify.
          example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
      responses:
        '200':
          description: Successful response
          headers:
            ETag:
              schema: *ref_91
              description: |-
                The current ETag value for the sheet, needed to perform a PUT modification.
                See the [modifying objects](/docs/rest-overview#modifying-objects-with-put) guide and the related [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          content:
            application/json:
              schema:
                description: Single expense sheet response
                allOf: &ref_237
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        description: |
                          Expense entry sheet.

                          Expense sheets use the same base structure as time sheets but track
                          monetary expenses (and in some legacy configurations, mileage) instead of hours.

                          See the
                          [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
                          for a discussion of the structure of the sheet, especially the `rows` key
                          which contains the actual expense entries.
                        allOf: *ref_100
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      operationId: update-entry-sheet-expense
      summary: Update expense sheet
      description: |
        Updates an existing expense entry sheet.

        Same structure and requirements as updating time sheets. See
        [time sheets documentation](/docs/reference/update-entry-sheet-time)
        for details.
      tags:
        - Entry Sheets - Expense
      parameters:
        - name: sheetId
          in: path
          required: true
          schema:
            type: string
          description: Unique identifier of the expense sheet
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf: &ref_238
                - type: object
                  description: |
                    These are the updatable fields for an entry sheet. In general, you
                    do not need to send most of the fields available in a sheet back to
                    the server when creating or modifying it - just `id_user` and `dates`
                    fields, plus the `rows` field if you wish to update the entry data.
                    The `rows` field should contain the complete set of entry data for the sheet,
                    not just the changes.

                    See the
                    [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
                  required: *ref_102
                  properties: *ref_103
                - type: object
                  properties:
                    type:
                      type: string
                      enum:
                        - expense
                      description: |
                        Optional. The sheet type is inferred from the endpoint path.
                        If provided, must be "expense".
      responses:
        '200':
          description: Sheet updated successfully
          headers:
            Location:
              schema: *ref_92
              description: URI of the sheet
            ETag:
              schema: *ref_91
              description: |-
                The current ETag value for the sheet, needed to perform a PUT modification.
                See the [modifying objects](/docs/rest-overview#modifying-objects-with-put) guide and the related [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          content:
            application/json:
              schema:
                description: Response schema for creating or updating (modifying) an Expense Entry sheet.
                allOf: *ref_104
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_sheets/custom:
    get:
      operationId: list-entry-sheets-custom
      summary: List custom sheets
      description: |
        Retrieves a paginated list of custom/mileage entry sheets with optional filtering, sorting, and field selection.

        Same capabilities as time sheets. See
        [time sheets documentation](/docs/reference/list-entry-sheets-time)
        for details on filtering, permissions, and performance.

        :::warning[Version 13.5.0 (25H2) or higher required]

        The Entry Sheet REST API was introduced in Journyx version 13.5.0 (25H2).
        Please ensure your Journyx instance is running this version or later to access
        these endpoints.

        :::
      tags:
        - Entry Sheets - Custom
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
        - name: $screenInclude
          in: query
          required: false
          schema: *ref_94
          description: |
            Specifies whether to include the `screen` key in the response; defaults to
            false / 0. The `screen` field contains information needed to construct
            the related user interface (UI) page and is not needed for typical
            API usage.

            See the [Collections#ScreenInclude](/docs/collections#the-screen-key)
            page for more information.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                description: Paginated collection of custom sheets
                allOf: &ref_239
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          description: |
                            Custom/mileage entry sheet.

                            Custom sheets use the same base structure as time sheets but track
                            mileage/distance, equipment, or other custom metrics.

                            See the
                            [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
                            for a discussion of the structure of the sheet, especially the `rows` key
                            which contains the actual Custom Entry records.
                          allOf: &ref_105
                            - description: |
                                Extended entry sheet with all optional fields included.

                                These fields are returned when:
                                - Getting a single sheet (not a collection)
                                - Using `$keys=$extended` or specifying keys explicitly
                                - Requesting specific keys like `rows`, `columns`, etc.
                              allOf: *ref_95
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      operationId: create-entry-sheet-custom
      summary: Create custom sheet
      description: |
        Creates a new custom/mileage entry sheet for the authenticated user.

        Same structure as time sheets. See
        [time sheets documentation](/docs/reference/create-entry-sheet-time)
        for details.
      tags:
        - Entry Sheets - Custom
      parameters:
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: |
                Request body schema for creating a Custom Entry Sheet.
              allOf: &ref_240
                - type: object
                  description: |
                    See the
                    [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
                  required: *ref_96
                  properties: *ref_97
      responses:
        '200':
          description: Sheet created successfully
          headers:
            Location:
              schema: *ref_92
              description: URI of the sheet
            ETag:
              schema: *ref_91
              description: |-
                The current ETag value for the sheet, needed to perform a PUT modification.
                See the [modifying objects](/docs/rest-overview#modifying-objects-with-put) guide and the related [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          content:
            application/json:
              schema:
                description: Response schema for creating or updating (modifying) a Custom Entry sheet.
                allOf: &ref_106
                  - description: |
                      Response from creating or updating an entry sheet.
                      Returns the full sheet plus validation messages.
                    type: object
                    properties: *ref_98
                    required: *ref_99
                  - type: object
                    properties:
                      results:
                        description: |
                          The full Custom Entry sheet after the create or update operation.
                        allOf: *ref_105
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_sheets/custom/{sheetId}:
    get:
      operationId: get-entry-sheet-custom
      summary: Get custom sheet
      description: |
        Retrieves a single custom/mileage entry sheet by ID with full details.

        Same capabilities as time sheets. See
        [time sheet documentation](/docs/reference/get-entry-sheet-time)
        for details on filtering, permissions, and performance.
      tags:
        - Entry Sheets - Custom
      parameters:
        - name: sheetId
          in: path
          required: true
          schema: *ref_101
          description: |
            The internal ID of the Entry Sheet to retrieve or modify.
          example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
      responses:
        '200':
          description: Successful response
          headers:
            ETag:
              schema: *ref_91
              description: |-
                The current ETag value for the sheet, needed to perform a PUT modification.
                See the [modifying objects](/docs/rest-overview#modifying-objects-with-put) guide and the related [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          content:
            application/json:
              schema:
                description: Single custom sheet response
                allOf: &ref_241
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        description: |
                          Custom/mileage entry sheet.

                          Custom sheets use the same base structure as time sheets but track
                          mileage/distance, equipment, or other custom metrics.

                          See the
                          [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
                          for a discussion of the structure of the sheet, especially the `rows` key
                          which contains the actual Custom Entry records.
                        allOf: *ref_105
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      operationId: update-entry-sheet-custom
      summary: Update custom sheet
      description: |
        Updates an existing custom/mileage entry sheet.

        Same structure and requirements as updating time sheets. See
        [time sheets documentation](/docs/reference/update-entry-sheet-time)
        for details.
      tags:
        - Entry Sheets - Custom
      parameters:
        - name: sheetId
          in: path
          required: true
          schema:
            type: string
          description: Unique identifier of the custom sheet
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf: &ref_242
                - type: object
                  description: |
                    These are the updatable fields for an entry sheet. In general, you
                    do not need to send most of the fields available in a sheet back to
                    the server when creating or modifying it - just `id_user` and `dates`
                    fields, plus the `rows` field if you wish to update the entry data.
                    The `rows` field should contain the complete set of entry data for the sheet,
                    not just the changes.

                    See the
                    [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
                  required: *ref_102
                  properties: *ref_103
                - type: object
                  properties:
                    type:
                      type: string
                      enum:
                        - mileage
                      description: |
                        Optional. The sheet type is inferred from the endpoint path.
                        If provided, must be "mileage".
      responses:
        '200':
          description: Sheet updated successfully
          headers:
            Location:
              schema: *ref_92
              description: URI of the sheet
            ETag:
              schema: *ref_91
              description: |-
                The current ETag value for the sheet, needed to perform a PUT modification.
                See the [modifying objects](/docs/rest-overview#modifying-objects-with-put) guide and the related [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          content:
            application/json:
              schema:
                description: Response schema for creating or updating (modifying) a Custom Entry sheet.
                allOf: *ref_106
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_recs/time:
    get:
      operationId: list-entry-records-time
      summary: List time records
      description: |
        Retrieves a paginated list of time entry records (individual hours entries) with optional filtering, sorting, and field selection.

        **Read-Only**: This API provides read access to the underlying entry records.
        To create or modify entries, use the Entry Sheets API.

        **Permissions**: Users see their own records. Managers, approvers, and timekeeping assistants
        see records they have permission to view based on group-scoped roles.

        **Use Cases**:
        - Reporting and analytics
        - Auditing entry history
        - Querying entries across multiple sheets
        - Integration with external systems

        **Filtering**: Filter by date ranges, projects, users, codes, amounts, and commit state.
        See the `$filter` parameter documentation for details.

        :::warning[Version 13.5.0 (25H2) or higher required]

        The Entry Sheet REST API was introduced in Journyx version 13.5.0 (25H2).
        Please ensure your Journyx instance is running this version or later to access
        these endpoints.

        :::
      tags:
        - Entry Records - Time
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
        - name: $screenInclude
          in: query
          required: false
          schema: *ref_94
          description: |
            Specifies whether to include the `screen` key in the response; defaults to
            false / 0. The `screen` field contains information needed to construct
            the related user interface (UI) page and is not needed for typical
            API usage.

            See the [Collections#ScreenInclude](/docs/collections#the-screen-key)
            page for more information.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                description: Paginated collection of time records
                allOf: &ref_243
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          description: |
                            A time entry record representing hours worked on a specific project/task combination.
                          allOf: &ref_107
                            - type: object
                              description: |
                                Base entry record fields common to all entry types.
                                Entry records are the individual line items of time, expense, or custom data.

                                **Note**: The Entry Records API is read-only. To create or modify entry records,
                                use the Entry Sheets API.
                              allOf: &ref_108
                                - type: object
                                  description: |
                                    These are fields that are common to most object types.
                                  properties: *ref_0
                                - type: object
                                  description: |
                                    Fields related to the creation of a resource, including the creation
                                    timestamp, creator user ID, and creator user name.

                                    Note that extended information about the creator user may be included
                                    in the `creator_properties` field, depending on the `$keys` requested.
                                    If present, this information will follow the schema of the
                                    [User](/docs/reference/schemas/user) object.
                                  allOf: *ref_1
                                  properties: *ref_2
                                - type: object
                                  description: Object creation date/time fields common to many resources.
                                  allOf: *ref_5
                                  properties: *ref_6
                                - type: object
                                  description: |
                                    Fields related to the last modification of a resource, including the
                                    last modified timestamp in various formats, the modifier's user ID and
                                    full name. Please note that this only records the most recent
                                    modification. In addition, it may not reflect modifications to child
                                    resources or extended properties that are defined in other tables, such
                                    as "Custom Fields". These last modifier fields are always read-only.

                                    Note that extended information about the modifier user may be included
                                    in the `modifier_properties` field, depending on the `$keys` requested.
                                    If present, this information will follow the schema of the
                                    [User](/docs/reference/schemas/user) object.
                                  allOf: *ref_7
                                  properties: *ref_8
                                - type: object
                                  description: |
                                    The last modified date/time fields common to many resources. Please note
                                    that this only records the most recent modification. In addition, it may
                                    not record modifications to child resources or extended properties that
                                    are defined in other tables, such as "Custom Fields". These fields are
                                    read-only.
                                  allOf: *ref_9
                                  properties: *ref_10
                                - type: object
                                  properties:
                                    id_user:
                                      type: string
                                      description: User ID who owns this entry
                                      example: alice
                                    id_project:
                                      type: string
                                      nullable: true
                                      description: Project associated with this entry
                                      example: p_d_1_1
                                    record_date:
                                      type: string
                                      pattern: ^\d{8}$
                                      description: Date of the entry in F8 format (YYYYMMDD)
                                      example: '20251103'
                                    comment:
                                      type: string
                                      nullable: true
                                      description: Text comment for this entry
                                      example: Team standup meeting
                                    commit_state:
                                      type: integer
                                      description: |
                                        Bit flags representing the entry's approval state. This is an internal
                                        field and cannot be modified.
                                      example: 0
                                    id_suggestion:
                                      type: string
                                      nullable: true
                                      description: ID of the suggestion that created this entry (if any)
                                      example: null
                                    id_assignment:
                                      type: string
                                      nullable: true
                                      description: ID of the project assignment associated with this entry
                                      example: null
                                    entry_type:
                                      type: string
                                      description: |
                                        Type of entry record. Note that "mileage" entries are for "Custom Entry".
                                      enum:
                                        - time
                                        - expense
                                        - mileage
                                      example: time
                                      readOnly: true
                                    id_group:
                                      type: string
                                      description: Group ID associated with this entry
                                      example: All_grp
                                      readOnly: true
                                    id_domain:
                                      type: string
                                      description: Domain identifier (legacy field)
                                      example: install_root_dom
                                      readOnly: true
                                    id_user_properties:
                                      type: object
                                      description: |
                                        User details for the entry owner. This is a nested object containing
                                        comprehensive user information. Structure may vary by system configuration.
                                      readOnly: true
                                    text2:
                                      type: string
                                      nullable: true
                                      description: Additional text field (if configured)
                                      example: null
                                    text3:
                                      type: string
                                      nullable: true
                                      description: Additional text field (if configured)
                                      example: null
                                  required:
                                    - id_user
                                    - record_date
                                    - entry_type
                            - type: object
                              properties:
                                id_time_rec:
                                  type: string
                                  description: Unique identifier for this time record (same as `id`)
                                  example: '1076'
                                  readOnly: true
                                time_amount:
                                  type: number
                                  format: float
                                  description: |
                                    Hours worked.
                                    Can be negative for correction records.
                                  example: 8
                                id_code_task:
                                  type: string
                                  nullable: true
                                  description: Activity/task code (code0)
                                  example: Meetings
                                id_code_pay_type:
                                  type: string
                                  nullable: true
                                  description: Pay type code (code1)
                                  example: Regular
                                id_code_bill_type:
                                  type: string
                                  nullable: true
                                  description: Bill type code (code2)
                                  example: Standard
                                id_code_time_4:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code3, if configured)
                                  example: null
                                id_code_time_5:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code4, if configured)
                                  example: null
                                id_code_time_6:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code5, if configured)
                                  example: null
                                id_code_time_7:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code6, if configured)
                                  example: null
                                record_timezone:
                                  type: string
                                  nullable: true
                                  description: |
                                    IANA timezone name (e.g. `America/Chicago`) associated with this
                                    time record. Set automatically when the record is created via the
                                    Entry Sheets API. Null for records created before timezone tracking
                                    was enabled.
                                  example: America/Chicago
                              required:
                                - id_time_rec
                                - time_amount
              examples:
                basic_list:
                  summary: Recent time records
                  value:
                    response_code: 200
                    success: true
                    '@count': 150
                    '@nextLink': /api/v1/entry_recs/time?$skip=50&$top=50
                    value:
                      - id_time_rec: '1076'
                        id_user: alice
                        id_project: p_d_1_1
                        id_code_task: Meetings
                        id_code_pay_type: Regular
                        id_code_bill_type: Standard
                        comment: Team standup
                        record_date: '20251103'
                        time_amount: 8
                        commit_state: 0
                filtered_by_date:
                  summary: Filtered by date range
                  value:
                    response_code: 200
                    success: true
                    '@count': 45
                    value:
                      - id_time_rec: '1076'
                        id_user: alice
                        record_date: '20251103'
                        time_amount: 8
                        id_project: p_d_1_1
                        id_code_task: Meetings
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_recs/time/{recordId}:
    get:
      operationId: get-entry-record-time
      summary: Get time record
      description: |
        Retrieves a single time entry record by ID.

        **Read-Only**: To modify this record, retrieve and update its parent sheet via the Entry Sheets API.

        **Permissions**: User must have permission to view this record based on ownership or management roles.
      tags:
        - Entry Records - Time
      parameters:
        - name: recordId
          in: path
          required: true
          schema: &ref_109
            type: string
          description: |
            The internal ID of the Entry Sheet Record (e.g. Time Rec) to retrieve or modify.
          example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                description: Single time record response
                allOf: &ref_244
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        description: |
                          A time entry record representing hours worked on a specific project/task combination.
                        allOf: *ref_107
              example:
                response_code: 200
                success: true
                uri: /api/v1/entry_recs/time/1076
                results:
                  id: '1076'
                  id_time_rec: '1076'
                  entry_type: time
                  id_user: alice
                  id_project: p_d_1_1
                  id_code_task: Meetings
                  id_code_pay_type: Regular
                  id_code_bill_type: Standard
                  comment: Team standup meeting
                  record_date: '20251103'
                  time_amount: 8
                  commit_state: 0
                  creator: alice
                  modifier: alice
                  create_timestamp: 1762196180
                  modify_timestamp: 1762196180
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_recs/expense:
    get:
      operationId: list-entry-records-expense
      summary: List expense records
      description: |
        Retrieves a paginated list of expense entry records with optional filtering, sorting, and field selection.

        **Read-Only**: This API provides read access only. Use the Entry Sheets API to create or modify expense records.

        Same capabilities as time records. See time records documentation for details on filtering, permissions, and use cases.

        :::warning[Version 13.5.0 (25H2) or higher required]

        The Entry Sheet REST API was introduced in Journyx version 13.5.0 (25H2).
        Please ensure your Journyx instance is running this version or later to access
        these endpoints.

        :::
      tags:
        - Entry Records - Expense
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
        - name: $screenInclude
          in: query
          required: false
          schema: *ref_94
          description: |
            Specifies whether to include the `screen` key in the response; defaults to
            false / 0. The `screen` field contains information needed to construct
            the related user interface (UI) page and is not needed for typical
            API usage.

            See the [Collections#ScreenInclude](/docs/collections#the-screen-key)
            page for more information.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                description: Paginated collection of expense records
                allOf: &ref_245
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          description: |
                            An expense entry record representing a monetary expense or mileage.
                          allOf: &ref_110
                            - type: object
                              description: |
                                Base entry record fields common to all entry types.
                                Entry records are the individual line items of time, expense, or custom data.

                                **Note**: The Entry Records API is read-only. To create or modify entry records,
                                use the Entry Sheets API.
                              allOf: *ref_108
                            - type: object
                              properties:
                                id_expense_rec:
                                  type: string
                                  description: Unique identifier for this expense record (same as `id`)
                                  example: '5678'
                                  readOnly: true
                                amount:
                                  type: number
                                  format: float
                                  description: |
                                    Monetary amount of the expense.
                                    Can be negative for corrections or refunds.
                                  example: 45.5
                                mileage:
                                  type: number
                                  format: float
                                  nullable: true
                                  description: |
                                    Mileage amount (if this expense includes mileage).
                                    Separate from the main amount field.
                                  example: 25.5
                                id_code_expense:
                                  type: string
                                  nullable: true
                                  description: Expense type code (code0)
                                  example: Meals
                                id_code_currency:
                                  type: string
                                  nullable: true
                                  description: Currency code (code1)
                                  example: USD
                                id_code_expense_source:
                                  type: string
                                  nullable: true
                                  description: Expense source code (code2, e.g., personal vs company card)
                                  example: Personal
                                id_code_expense_4:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code3, if configured)
                                  example: null
                                id_code_expense_5:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code4, if configured)
                                  example: null
                                id_code_expense_6:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code5, if configured)
                                  example: null
                                id_code_expense_7:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code6, if configured)
                                  example: null
                              required:
                                - id_expense_rec
                                - amount
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_recs/expense/{recordId}:
    get:
      operationId: get-entry-record-expense
      summary: Get expense record
      description: |
        Retrieves a single expense entry record by ID.

        **Read-Only**: To modify this record, use the Entry Sheets API.

        Same capabilities as time records. See time records documentation for details.
      tags:
        - Entry Records - Expense
      parameters:
        - name: recordId
          in: path
          required: true
          schema: *ref_109
          description: |
            The internal ID of the Entry Sheet Record (e.g. Time Rec) to retrieve or modify.
          example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                description: Single expense record response
                allOf: &ref_246
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        description: |
                          An expense entry record representing a monetary expense or mileage.
                        allOf: *ref_110
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_recs/custom:
    get:
      operationId: list-entry-records-custom
      summary: List custom records
      description: |
        Retrieves a paginated list of custom/mileage entry records with optional filtering, sorting, and field selection.

        **Read-Only**: This API provides read access only. Use the Entry Sheets API to create or modify custom records.

        **Note**: In the API, the amount field represents distance. The database field is named `distance` but
        is exposed as `amount` for consistency with other entry types.

        Same capabilities as time records. See time records documentation for details on filtering, permissions, and use cases.

        :::warning[Version 13.5.0 (25H2) or higher required]

        The Entry Sheet REST API was introduced in Journyx version 13.5.0 (25H2).
        Please ensure your Journyx instance is running this version or later to access
        these endpoints.

        :::
      tags:
        - Entry Records - Custom
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
        - name: $screenInclude
          in: query
          required: false
          schema: *ref_94
          description: |
            Specifies whether to include the `screen` key in the response; defaults to
            false / 0. The `screen` field contains information needed to construct
            the related user interface (UI) page and is not needed for typical
            API usage.

            See the [Collections#ScreenInclude](/docs/collections#the-screen-key)
            page for more information.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                description: Paginated collection of custom records
                allOf: &ref_247
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          description: |
                            A custom/mileage entry record representing distance traveled or other custom metrics.
                            Also referred to as "travel record" in the database.
                          allOf: &ref_111
                            - type: object
                              description: |
                                Base entry record fields common to all entry types.
                                Entry records are the individual line items of time, expense, or custom data.

                                **Note**: The Entry Records API is read-only. To create or modify entry records,
                                use the Entry Sheets API.
                              allOf: *ref_108
                            - type: object
                              properties:
                                id_travel_rec:
                                  type: string
                                  description: Unique identifier for this custom record (same as `id`)
                                  example: '9012'
                                  readOnly: true
                                amount:
                                  type: number
                                  format: float
                                  description: |
                                    Distance traveled or custom metric value.
                                    In the database, this field is stored as `distance`.
                                    Can be negative for corrections.
                                  example: 15.5
                                id_travel_vehicle:
                                  type: string
                                  nullable: true
                                  description: Vehicle used for this trip
                                  example: vehicle_honda_civic
                                id_travel_reason:
                                  type: string
                                  nullable: true
                                  description: Reason/purpose for the trip
                                  example: Client meeting
                                id_travel_measurement:
                                  type: string
                                  nullable: true
                                  description: |
                                    Unit of measurement (miles, kilometers, etc.).
                                    Configurable per installation.
                                  example: miles
                                id_code_travel_4:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code3, if configured)
                                  example: null
                                id_code_travel_5:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code4, if configured)
                                  example: null
                                id_code_travel_6:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code5, if configured)
                                  example: null
                                id_code_travel_7:
                                  type: string
                                  nullable: true
                                  description: Additional code field (code6, if configured)
                                  example: null
                              required:
                                - id_travel_rec
                                - amount
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/entry_recs/custom/{recordId}:
    get:
      operationId: get-entry-record-custom
      summary: Get custom record
      description: |
        Retrieves a single custom/mileage entry record by ID.

        **Read-Only**: To modify this record, use the Entry Sheets API.

        Same capabilities as time records. See time records documentation for details.
      tags:
        - Entry Records - Custom
      parameters:
        - name: recordId
          in: path
          required: true
          schema: *ref_109
          description: |
            The internal ID of the Entry Sheet Record (e.g. Time Rec) to retrieve or modify.
          example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                description: Single custom record response
                allOf: &ref_248
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        description: |
                          A custom/mileage entry record representing distance traveled or other custom metrics.
                          Also referred to as "travel record" in the database.
                        allOf: *ref_111
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/favorites/{tablename}:
    get:
      summary: List my favorites
      description: |
        Retrieve a list of "My Favorites" for a specific Entry Column table. This
        is used to provide the Favorites (star icon) feature in the UI, where a
        user can mark specific Entry Screen column values as favorites, so they
        appear at the top of selection lists.

        Note that this endpoint always returns the favorites for the currently
        authenticated user. You can manage the favorites of another user (if so
        authorized) using the `favorites-collection-by-user` endpoint.
      operationId: list-favorites
      parameters:
        - name: tablename
          in: path
          required: true
          schema: &ref_113
            description: |
              This is a list of the valid table names that can be used with the
              Favorites (star icon) feature of Entry Columns.

              Note that not all of these tables may be available in your specific
              Journyx configuration.
            type: string
            enum: &ref_112
              - projects
              - groups
              - codes_tasks
              - codes_pay_types
              - codes_bill_types
              - codes_time_4
              - codes_time_5
              - codes_time_6
              - codes_time_7
              - codes_expenses
              - codes_expense_sources
              - codes_currencies
              - codes_expense_4
              - codes_expense_5
              - codes_expense_6
              - codes_expense_7
              - codes_travel_reasons
              - codes_travel_vehicles
              - codes_travel_measurements
              - codes_custom_4
              - codes_custom_5
              - codes_custom_6
              - codes_custom_7
          description: |
            This is a list of the valid table names that can be used with the
            Favorites (star icon) feature of Entry Columns.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: projects
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_116
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          Represents a 'Favorite' within the system.

                          This marks an Entry Screen column value as a favorite so it appears
                          at the top of selection lists.

                          Accessible in the UI from the Profile menu (upper right) > My Favorites.
                        items:
                          type: object
                          description: |
                            Represents a 'Favorite' within the system.

                            This marks an Entry Screen column value as a favorite so it appears
                            at the top of selection lists.

                            Accessible in the UI from the Profile menu (upper right) > My Favorites.
                          properties: &ref_114
                            base_table:
                              type: string
                              description: |
                                The name of the base Entry Column value table that this favorite is associated with.
                              example: projects
                              readOnly: true
                              allOf:
                                - description: |
                                    This is a list of the valid table names that can be used with the
                                    Favorites (star icon) feature of Entry Columns.

                                    Note that not all of these tables may be available in your specific
                                    Journyx configuration.
                                  type: string
                                  enum: *ref_112
                            id_code:
                              type: string
                              description: |
                                The ID of the Entry Column value from `tablename` being favorited.
                              example: 1F9E41337EA341219D9D1D023F1D8C24
                              readOnly: true
                            id_user:
                              type: string
                              description: The ID of the user who owns this favorite.
                              example: 64BBA147B9AC41D9978062300826C89F
                              readOnly: true
                            tablename:
                              type: string
                              description: |
                                The name of the **favorites** table this favorite is saved in.
                              example: projects_favorites
                              readOnly: true
                            uri:
                              type: string
                              description: The URI of the favorite.
                              example: /api/v1/favorites/user/64BBA147B9AC41D9978062300826C89F/projects/1F9E41337EA341219D9D1D023F1D8C24
                              readOnly: true
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/favorites/{tablename}/{id_item}:
    get:
      summary: Get info about a favorite
      description: |
        Retrieve a specific favorite item in the system (for myself). "Favorites" are specific
        Entry Screen column values that a user has marked as favorites so they
        appear at the top of selection lists.

        To get or change the status of one of your favorite item, you must provide the `tablename`
        and `id_item` of the underlying Entry Column value.

        :::tip

        This endpoint is for getting information about a favorite item for yourself only.

        :::
      operationId: get-favorite
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_113
          description: |
            This is a list of the valid table names that can be used with the
            Favorites (star icon) feature of Entry Columns.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: projects
        - name: id_item
          in: path
          description: The Entry Column value ID of the item to retrieve
          required: true
          schema: &ref_115
            type: string
          example: 1F9E41337EA341219D9D1D023F1D8C24
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_118
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          Represents a 'Favorite' within the system.

                          This marks an Entry Screen column value as a favorite so it appears
                          at the top of selection lists.

                          Accessible in the UI from the Profile menu (upper right) > My Favorites.
                        properties: *ref_114
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
    delete:
      summary: Delete a favorite
      description: |
        Remove one of your favorite Entry Column items from the system by its
        `tablename` and `id_item`.

        This will remove the favorite item from your list of favorites. (It does not delete
        the underlying Entry Column value.)

        :::info[Required abilities]

        Any user can add or remove favorites for themselves.
        In order to add or remove favorites for another user, you need
        the `User - Modify` ability on that user, and to use
        the `add-favorite-for-user` and `delete-favorite-for-user` endpoints.

        :::
      operationId: delete-favorite
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_113
          description: |
            This is a list of the valid table names that can be used with the
            Favorites (star icon) feature of Entry Columns.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: projects
        - name: id_item
          in: path
          description: The Entry Column value ID of the item to retrieve
          required: true
          schema: *ref_115
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            Successful response; the favorite item has been removed from the user's
            list of favorites.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Add a favorite
      description: |
        Add an Entry Column favorite item (for yourself) by its `tablename` and `id_item`.

        This will add the favorite item to the user's list of favorites.
        You can `POST` an empty body to this endpoint to add a favorite item.

        :::info[Required abilities]

        Any user can add or remove favorites for themselves.
        In order to add or remove favorites for another user, you need
        the `User - Modify` ability on that user, and to use
        the `add-favorite-for-user` and `delete-favorite-for-user` endpoints.

        :::
      operationId: add-favorite
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_113
          description: |
            This is a list of the valid table names that can be used with the
            Favorites (star icon) feature of Entry Columns.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: projects
        - name: id_item
          in: path
          description: The Entry Column value ID of the item to retrieve
          required: true
          schema: *ref_115
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        description: |
          You do not need to provide a request body for this operation.
        content:
          application/json:
            schema:
              type: object
              nullable: true
              description: |
                You do not need to provide a request body for this operation.
              properties: &ref_119 {}
      responses:
        '201':
          description: |
            Successful response; the favorite item has been added to the user's
            list of favorites.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/favorites/user/{id_user}/{tablename}:
    get:
      summary: List favorites for a user
      description: |
        Retrieve a list of "My Favorites" for a specific table for a specific
        user. This is used to provide the Favorites (star icon) feature in the UI,
        where a user can mark specific Entry Screen column values as favorites, so
        they appear at the top of selection lists.

        You can only retrieve the favorites of another user if you have the
        manage ability on that user. You can put your own `id_user` in the request
        to retrieve your own favorites.
      operationId: list-favorites-for-user
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_113
          description: |
            This is a list of the valid table names that can be used with the
            Favorites (star icon) feature of Entry Columns.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: projects
        - name: id_user
          in: path
          description: The ID of the user to set/retrieve favorites for.
          required: true
          schema: &ref_117
            type: string
          example: 64BBA147B9AC41D9978062300826C89F
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: A list of My Favorite items for the given table and user.
          content:
            application/json:
              schema:
                allOf: *ref_116
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/favorites/user/{id_user}/{tablename}/{id_item}:
    get:
      summary: Get info about a user's favorite
      description: |
        Retrieve info about a specific favorite item in the system for a specific user.
        "Favorites" are specific Entry Screen column values that a user has marked
        as favorites so they appear at the top of selection lists.

        To get or change the status of a favorite item, you must provide the `tablename`
        and `id_item` of the underlying Entry Column value, as well as the `id_user`
        of the user who has marked it as a favorite.
      operationId: get-favorite-for-user
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_113
          description: |
            This is a list of the valid table names that can be used with the
            Favorites (star icon) feature of Entry Columns.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: projects
        - name: id_item
          in: path
          description: The Entry Column value ID of the item to retrieve
          required: true
          schema: *ref_115
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: id_user
          in: path
          description: The ID of the user to set/retrieve favorites for.
          required: true
          schema: *ref_117
          example: 64BBA147B9AC41D9978062300826C89F
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: *ref_118
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete a user's favorite
      description: |
        Remove a favorite star from the system by its `tablename`,
        `id_item`, and `id_user`.

        This will remove (un-star) the favorite item from the user's list of favorites.
        It does not delete the underlying Entry Column value.

        :::info[Required abilities]

        Any user can remove favorites for themselves by setting
        your own `id_user` in the request.

        In order to remove favorites for another user, you need
        the `User - Modify` ability on that user.

        :::
      operationId: delete-favorite-for-user
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_113
          description: |
            This is a list of the valid table names that can be used with the
            Favorites (star icon) feature of Entry Columns.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: projects
        - name: id_item
          in: path
          description: The Entry Column value ID of the item to retrieve
          required: true
          schema: *ref_115
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: id_user
          in: path
          description: The ID of the user to set/retrieve favorites for.
          required: true
          schema: *ref_117
          example: 64BBA147B9AC41D9978062300826C89F
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            Successful response; the favorite item has been removed from the user's
            list of favorites.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Add favorite for a user
      description: |
        Add an Entry Column favorite item to the system by its `tablename`,
        `id_item`, and `id_user`.

        This will add the favorite item to the user's list of favorites.
        You can `POST` an empty body to this endpoint to add a favorite item.

        :::info[Required abilities]

        Any user can add favorites for themselves by setting
        your own `id_user` in the request.

        In order to add favorites for another user, you need
        the `User - Modify` ability on that user.

        :::
      operationId: add-favorite-for-user
      parameters:
        - name: tablename
          in: path
          required: true
          schema: *ref_113
          description: |
            This is a list of the valid table names that can be used with the
            Favorites (star icon) feature of Entry Columns.

            Note that not all of these tables may be available in your specific
            Journyx configuration.
          example: projects
        - name: id_item
          in: path
          description: The Entry Column value ID of the item to retrieve
          required: true
          schema: *ref_115
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: id_user
          in: path
          description: The ID of the user to set/retrieve favorites for.
          required: true
          schema: *ref_117
          example: 64BBA147B9AC41D9978062300826C89F
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        description: |
          You do not need to provide a request body for this operation.
        content:
          application/json:
            schema:
              type: object
              nullable: true
              description: |
                You do not need to provide a request body for this operation.
              properties: *ref_119
      responses:
        '201':
          description: |
            Successful response; the favorite item has been added to the user's
            list of favorites.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/geofences:
    get:
      summary: List geofences
      description: |
        Retrieve a list of geofences in the system.

        Geofences define geographic boundaries for location-based access control. This endpoint
        supports filtering, sorting, and pagination to help you find and manage geofences.

        :::warning[Version 13.5.0 (25H2) or higher required]

        The Geofences REST API was introduced in Journyx version 13.5.0 (25H2).
        Please ensure your Journyx instance is running this version or later to access
        these endpoints.

        :::

        ### Special Filtering Capabilities

        In addition to standard field filtering, this endpoint supports advanced filtering on assignments:

        **Filter by assignment target table:**
        ```
        $filter=assignments.target_table eq "users"
        ```

        **Filter by specific assignment target ID:**
        ```
        $filter=assignments.target_id eq "alice"
        ```

        **Filter for geofences with no assignments:**
        ```
        $filter=assignments eq []
        ```

        **Filter for geofences with at least one assignment:**
        ```
        $filter=assignments ne []
        ```

        **Filter by assignment count:**
        ```
        $filter=assignments_count gt 0
        ```

        :::info[Required abilities]

        This operation requires authentication. Results are filtered based on the user's
        `Geofence - Manage` ability or `Authority - Administrator` role.

        :::
      operationId: list-geofences
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_249
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          A geofence definition that specifies a geographic boundary for location-based access control.

                          Geofences are used to ensure users are physically present at approved locations when submitting
                          time entries, expense entries, or custom entries. When a geofence is assigned to users, groups,
                          projects, or entry screens, the system validates that the user's location falls within at least
                          one applicable geofence boundary before allowing entry submission.
                        items:
                          type: object
                          description: |
                            A geofence definition that specifies a geographic boundary for location-based access control.

                            Geofences are used to ensure users are physically present at approved locations when submitting
                            time entries, expense entries, or custom entries. When a geofence is assigned to users, groups,
                            projects, or entry screens, the system validates that the user's location falls within at least
                            one applicable geofence boundary before allowing entry submission.
                          allOf: &ref_124
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              description: |
                                These are fields in the Geofence object that can be modified or provided as input
                                when creating a new Geofence.

                                **Required Fields**

                                Only `pname`, `latitude`, `longitude`, and `radius` are required when creating a new Geofence.


                                **Geofence Types**

                                Currently, only circular geofences are supported. The `type` field must be set to `"circle"` (the default).
                                Future versions may support other geofence shapes like polygons.


                                **Coordinate Validation**

                                Both `latitude` and `longitude` cannot be exactly 0.0 simultaneously, as this represents a location
                                in the Atlantic Ocean off the coast of Africa and is likely an error.
                              required: &ref_122
                                - pname
                                - latitude
                                - longitude
                                - radius
                              properties: &ref_123
                                pname:
                                  type: string
                                  minLength: 1
                                  maxLength: 100
                                  description: |
                                    The display name of the geofence. Must be unique across all geofences.
                                  example: Downtown Office
                                description:
                                  type: string
                                  maxLength: 500
                                  description: |
                                    Optional description providing additional context about this geofence.
                                  example: Main office building and parking garage
                                  default: ''
                                type:
                                  type: string
                                  enum:
                                    - circle
                                  description: |
                                    The shape type of the geofence. Currently, only `"circle"` is supported.

                                    **Database Representation:** The API accepts and returns string values, but the database stores
                                    this as an integer (1 = circle).
                                  example: circle
                                  default: circle
                                latitude:
                                  type: number
                                  format: float
                                  minimum: -90
                                  maximum: 90
                                  description: |
                                    The latitude of the geofence center point in decimal degrees.

                                    Must be between -90 (South Pole) and 90 (North Pole). Cannot be 0.0 if `longitude` is also 0.0.

                                    **Field Aliases:** The API also accepts `center_lat` as an alternative field name.
                                  example: 30.2672
                                longitude:
                                  type: number
                                  format: float
                                  minimum: -180
                                  maximum: 180
                                  description: |
                                    The longitude of the geofence center point in decimal degrees.

                                    Must be between -180 and 180. Cannot be 0.0 if `latitude` is also 0.0.

                                    **Field Aliases:** The API also accepts `center_lon` as an alternative field name.
                                  example: -97.7431
                                radius:
                                  type: number
                                  format: float
                                  minimum: 0.001
                                  maximum: 100000
                                  description: |
                                    The radius of the geofence in meters.

                                    Must be greater than 0 and less than or equal to 100,000 meters (100 km / 62 miles).

                                    **Field Aliases:** The API also accepts `radius_meters` as an alternative field name.
                                  example: 100
                                min_accuracy:
                                  type: number
                                  format: float
                                  minimum: 0
                                  description: |
                                    The minimum required GPS accuracy in meters for location validation.

                                    When a user submits an entry with location data, if the GPS accuracy is worse (larger value)
                                    than this threshold, the validation will fail. Set to 0 to accept any accuracy level.

                                    **Field Aliases:** The API also accepts `min_accuracy_meters` as an alternative field name.
                                  example: 10
                                  default: 10
                                active:
                                  type: boolean
                                  description: |
                                    Whether this geofence is currently active.

                                    Inactive geofences are not enforced but remain in the system for historical or future use.

                                    **Database Representation:** The API accepts and returns boolean values, but the database stores
                                    this as an integer (0 = false, 1 = true).
                                  example: true
                                  default: true
                                is_priority:
                                  type: boolean
                                  description: |
                                    Whether this is a priority geofence.

                                    When a user/project combination has multiple applicable geofences, if ANY of them are marked
                                    as priority, ONLY the priority geofences are checked. This allows you to create more restrictive
                                    boundaries that override general geofences.

                                    For example, a general office geofence might cover a large area, but a priority geofence could
                                    restrict certain projects to a specific floor or section.

                                    **Database Representation:** The API accepts and returns boolean values, but the database stores
                                    this as an integer (0 = false, 1 = true).

                                    **Field Aliases:** The API also accepts `priority` as an alternative field name.
                                  example: false
                                  default: false
                                color:
                                  type: string
                                  pattern: ^#[0-9A-Fa-f]{6}$
                                  description: |
                                    Optional hex color code for displaying this geofence on a map.

                                    Must be in the format `#RRGGBB` (e.g., `#FF0000` for red, `#3366CC` for blue).
                                  example: '#3366CC'
                                  nullable: true
                                assignments:
                                  type: array
                                  description: |
                                    List of entity assignments for this geofence.

                                    When creating or updating a geofence, you can include an `assignments` array to specify
                                    which users, groups, projects, or entry screens this geofence applies to.

                                    **Assignment Logic:**
                                    - A geofence can be assigned to multiple entities simultaneously
                                    - Assignments use OR logic: a user only needs to match ONE assignment to have the geofence apply
                                    - Group assignments apply to all users in that group
                                    - Project assignments apply when any user logs time to that project
                                    - Entry screen assignments apply when using that specific entry screen

                                    **Updating Assignments:**
                                    - Including an `assignments` array in a PUT request replaces ALL existing assignments
                                    - To add/remove individual assignments, you must send the complete desired list
                                    - To clear all assignments, send an empty array: `"assignments": []`
                                  items:
                                    type: object
                                    description: |
                                      A geofence assignment links a geofence to a specific entity (user, group, project, or entry screen).

                                      When an entry is submitted, the system determines which geofences apply by checking if the user
                                      or project matches any assignment for active geofences.

                                      **Assignment Target Tables:**
                                      - `users` - Direct assignment to individual users
                                      - `groups` - Assignment to all users in a group (via ACL membership)
                                      - `projects` - Assignment to a specific project (including PX tasks)
                                      - `time_guis` - Assignment to a time entry screen configuration
                                      - `expense_guis` - Assignment to an expense entry screen configuration
                                      - `travel_entry_guis` - Assignment to a custom entry screen configuration
                                    required: &ref_120
                                      - target_table
                                      - target_id
                                    properties: &ref_121
                                      target_table:
                                        type: string
                                        enum:
                                          - users
                                          - groups
                                          - projects
                                          - time_guis
                                          - expense_guis
                                          - travel_entry_guis
                                        description: |
                                          The database table name of the entity type being assigned.

                                          Valid target tables:
                                          - `users` - Individual user assignments
                                          - `groups` - User group assignments (applies to all group members)
                                          - `projects` - Project assignments (including PX tasks, which are projects)
                                          - `time_guis` - Time entry screen assignments
                                          - `expense_guis` - Expense entry screen assignments
                                          - `travel_entry_guis` - Custom entry screen assignments (formerly "Mileage Entry")
                                        example: users
                                      target_id:
                                        type: string
                                        description: |
                                          The ID of the entity being assigned. This must be a valid ID from the specified `target_table`.

                                          When creating or updating assignments, the API validates that all referenced entities exist.
                                          If any target entity does not exist, the request will fail with a 400 Bad Request error.
                                        example: 5CD906A3941C463B9CC98F49DBCC25AA
                                  default: []
                            - type: object
                              description: |
                                Fields related to the creation of a resource, including the creation
                                timestamp, creator user ID, and creator user name.

                                Note that extended information about the creator user may be included
                                in the `creator_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_1
                              properties: *ref_2
                            - type: object
                              description: Object creation date/time fields common to many resources.
                              allOf: *ref_5
                              properties: *ref_6
                            - type: object
                              description: |
                                Fields related to the last modification of a resource, including the
                                last modified timestamp in various formats, the modifier's user ID and
                                full name. Please note that this only records the most recent
                                modification. In addition, it may not reflect modifications to child
                                resources or extended properties that are defined in other tables, such
                                as "Custom Fields". These last modifier fields are always read-only.

                                Note that extended information about the modifier user may be included
                                in the `modifier_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_7
                              properties: *ref_8
                            - type: object
                              description: |
                                The last modified date/time fields common to many resources. Please note
                                that this only records the most recent modification. In addition, it may
                                not record modifications to child resources or extended properties that
                                are defined in other tables, such as "Custom Fields". These fields are
                                read-only.
                              allOf: *ref_9
                              properties: *ref_10
                          properties: &ref_125
                            assignments:
                              type: array
                              description: |
                                List of entity assignments for this geofence. A geofence can be assigned to users, groups,
                                projects, or entry screens. When determining if a geofence applies to a particular entry,
                                the system checks if the user or project matches any of these assignments.

                                The geofence enforcement uses OR logic: a user only needs to be within ONE applicable
                                geofence to pass validation.

                                **Note:** This field is computed from the `geofence_assignments` table and is read-only
                                in GET responses. To modify assignments, include an `assignments` array in POST/PUT requests.
                              readOnly: true
                              items:
                                type: object
                                description: |
                                  A geofence assignment links a geofence to a specific entity (user, group, project, or entry screen).

                                  When an entry is submitted, the system determines which geofences apply by checking if the user
                                  or project matches any assignment for active geofences.

                                  **Assignment Target Tables:**
                                  - `users` - Direct assignment to individual users
                                  - `groups` - Assignment to all users in a group (via ACL membership)
                                  - `projects` - Assignment to a specific project (including PX tasks)
                                  - `time_guis` - Assignment to a time entry screen configuration
                                  - `expense_guis` - Assignment to an expense entry screen configuration
                                  - `travel_entry_guis` - Assignment to a custom entry screen configuration
                                required: *ref_120
                                properties: *ref_121
                            assignments_count:
                              type: integer
                              description: |
                                The total number of assignments for this geofence. This is a computed field that counts
                                the number of records in the `geofence_assignments` table for this geofence.

                                This field can be used for filtering, e.g., `$filter=assignments_count gt 0` to find
                                geofences with at least one assignment.
                              readOnly: true
                              example: 5
              examples:
                basic:
                  summary: Basic collection response
                  value:
                    success: true
                    results:
                      - id: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
                        pname: Downtown Office
                        description: Main office location
                        type: circle
                        latitude: 30.2672
                        longitude: -97.7431
                        radius: 100
                        min_accuracy: 10
                        active: true
                        is_priority: false
                        color: '#3366CC'
                        creator: admin
                        create_timestamp: 1704067200
                        modifier: admin
                        modify_timestamp: 1704067200
                        uri: /api/v1/geofences/8A2F4B3D5E6C7891A2B3C4D5E6F78901
                        assignments:
                          - target_table: users
                            target_id: alice
                          - target_table: groups
                            target_id: dev_group
                        assignments_count: 2
                    '@nextLink': /api/v1/geofences?$skip=10&$top=10
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create a geofence
      description: |
        Add a new geofence to the system.

        A geofence defines a geographic boundary (currently only circular boundaries are supported)
        that can be used to enforce location-based access control for time entries, expense entries,
        or custom entries.

        ### Assignment Logic

        You can optionally include an `assignments` array when creating a geofence to specify
        which users, groups, projects, or entry screens it applies to:

        - **User assignments**: Direct assignment to individual users
        - **Group assignments**: Applies to all users in the specified group
        - **Project assignments**: Applies when logging time to that project
        - **Entry screen assignments**: Applies when using that specific entry screen

        When multiple geofences apply to a user/project combination, the system uses OR logic:
        the user only needs to be within ONE applicable geofence to pass validation.

        ### Priority Geofences

        If you set `is_priority: true`, this geofence will override non-priority geofences.
        When ANY applicable geofence is marked as priority, ONLY priority geofences are checked.

        :::info[Required abilities]

        This operation requires the `Geofence - Manage` ability, or
        `Authority - Administrator`.

        :::

        :::warning[Unique Names]

        The `pname` field must be unique across all geofences. Attempting to create
        a geofence with a duplicate name will result in a 409 Conflict error.

        :::
      operationId: create-geofence
      x-required-abilities:
        - Geofence - Manage
      requestBody:
        required: true
        description: |
          These are fields in the Geofence object that can be modified or provided as input
          when creating a new Geofence.

          **Required Fields**

          Only `pname`, `latitude`, `longitude`, and `radius` are required when creating a new Geofence.


          **Geofence Types**

          Currently, only circular geofences are supported. The `type` field must be set to `"circle"` (the default).
          Future versions may support other geofence shapes like polygons.


          **Coordinate Validation**

          Both `latitude` and `longitude` cannot be exactly 0.0 simultaneously, as this represents a location
          in the Atlantic Ocean off the coast of Africa and is likely an error.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Geofence object that can be modified or provided as input
                when creating a new Geofence.

                **Required Fields**

                Only `pname`, `latitude`, `longitude`, and `radius` are required when creating a new Geofence.


                **Geofence Types**

                Currently, only circular geofences are supported. The `type` field must be set to `"circle"` (the default).
                Future versions may support other geofence shapes like polygons.


                **Coordinate Validation**

                Both `latitude` and `longitude` cannot be exactly 0.0 simultaneously, as this represents a location
                in the Atlantic Ocean off the coast of Africa and is likely an error.
              required: *ref_122
              properties: *ref_123
            examples:
              basic:
                summary: Basic geofence without assignments
                value:
                  pname: Downtown Office
                  description: Main office building
                  latitude: 30.2672
                  longitude: -97.7431
                  radius: 100
                  min_accuracy: 10
                  active: true
                  is_priority: false
                  color: '#3366CC'
              with_assignments:
                summary: Geofence with assignments
                value:
                  pname: Construction Site Alpha
                  description: Active construction site - requires on-site time entry
                  latitude: 30.3
                  longitude: -97.8
                  radius: 50
                  min_accuracy: 15
                  active: true
                  is_priority: true
                  color: '#FF5733'
                  assignments:
                    - target_table: projects
                      target_id: project_construction_alpha
                    - target_table: users
                      target_id: foreman_user_id
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            Successfully created the geofence. The response includes the full geofence object
            including the generated ID, timestamps, and URI.

            **Note:** Unlike many REST APIs that return `201 Created` for POST operations,
            this endpoint returns `200 OK` with the complete geofence object in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_126
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      result:
                        type: object
                        description: |
                          A geofence definition that specifies a geographic boundary for location-based access control.

                          Geofences are used to ensure users are physically present at approved locations when submitting
                          time entries, expense entries, or custom entries. When a geofence is assigned to users, groups,
                          projects, or entry screens, the system validates that the user's location falls within at least
                          one applicable geofence boundary before allowing entry submission.
                        allOf: *ref_124
                        properties: *ref_125
              example:
                success: true
                result:
                  id: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
                  pname: Downtown Office
                  description: Main office building
                  type: circle
                  latitude: 30.2672
                  longitude: -97.7431
                  radius: 100
                  min_accuracy: 10
                  active: true
                  is_priority: false
                  color: '#3366CC'
                  creator: admin
                  create_timestamp: 1704067200
                  modifier: admin
                  modify_timestamp: 1704067200
                  uri: /api/v1/geofences/8A2F4B3D5E6C7891A2B3C4D5E6F78901
                  assignments: []
                  assignments_count: 0
          headers:
            Location: *ref_47
            X-Item-Id: *ref_48
            X-Item-Table: *ref_49
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '409':
          description: |
            Conflict - A geofence with the specified name already exists.
            The `pname` field must be unique across all geofences.
          content:
            application/json:
              schema:
                description: |
                  A standard format for error responses that may be returned by the API when various
                  types of errors occur, including authentication (sign-in) failures, authorization
                  (permission) failures, "object not found" (404), internal server errors (500),
                  bad client requests (400) and other types of errors.
                type: object
                properties: *ref_14
              example:
                success: false
                errors:
                  - A geofence with the name 'Downtown Office' already exists
                response_code: 409
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/geofences/{geofenceId}:
    get:
      summary: Get geofence by ID
      description: |
        Retrieve a geofence by its internal ID.

        The response includes all geofence properties plus the list of current assignments.

        :::info[Required abilities]

        This operation requires authentication. Users can only view geofences if they have
        the `Geofence - Manage` ability or `Authority - Administrator` role.

        :::
      operationId: get-geofence-item
      parameters:
        - name: geofenceId
          in: path
          required: true
          schema: &ref_127
            type: string
          description: |
            The internal ID of the geofence to retrieve or modify.
          example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: *ref_126
              example:
                success: true
                result:
                  id: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
                  pname: Downtown Office
                  description: Main office building
                  type: circle
                  latitude: 30.2672
                  longitude: -97.7431
                  radius: 100
                  min_accuracy: 10
                  active: true
                  is_priority: false
                  color: '#3366CC'
                  creator: admin
                  create_timestamp: 1704067200
                  modifier: admin
                  modify_timestamp: 1704067200
                  uri: /api/v1/geofences/8A2F4B3D5E6C7891A2B3C4D5E6F78901
                  assignments:
                    - target_table: users
                      target_id: alice
                    - target_table: groups
                      target_id: dev_group
                  assignments_count: 2
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete geofence by ID
      description: |
        Remove a geofence from the system by its internal ID.

        Deleting a geofence will also remove all of its assignments. If location tracking is
        enabled for entry screens that previously referenced this geofence, those entries will
        no longer be subject to geofence validation.

        # START_RAW
        import DeleteWarning from '@site/content/partials/_delete-warning.mdx'

        <DeleteWarning itemName='geofence' />
        # END_RAW

        :::info[Required abilities]

        This operation requires the `Geofence - Manage` ability, or
        `Authority - Administrator`.

        :::

        :::warning[Cascading Deletes]

        All assignments associated with this geofence will be automatically deleted.
        This action cannot be undone.

        :::
      x-required-abilities:
        - Geofence - Manage
      operationId: delete-geofence-item
      parameters:
        - name: geofenceId
          in: path
          required: true
          schema: *ref_127
          description: |
            The internal ID of the geofence to retrieve or modify.
          example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            The object was successfully deleted. The response body is empty.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update a geofence
      description: |
        Update (modify) a geofence by its internal ID. This will update the geofence
        with the new data provided in the request body.

        ### ETag Requirement

        This endpoint requires the `If-Match` header with a valid ETag value to prevent
        lost updates due to concurrent modifications. Get the current ETag by retrieving
        the geofence with a GET request first.

        # START_RAW
        import PutHeaders from '@site/content/partials/_put-headers.mdx'

        <PutHeaders />
        # END_RAW

        ### Updating Geofence Assignments

        To modify geofence assignments, include a complete `assignments` array in the request
        body. The provided assignments will **replace** all existing assignments:

        - To add new assignments: Include existing assignments plus new ones
        - To remove assignments: Omit them from the assignments array
        - To clear all assignments: Send an empty array: `"assignments": []`
        - To leave assignments unchanged: Omit the `assignments` field entirely

        :::info[Required abilities]

        This operation requires the `Geofence - Manage` ability, or
        `Authority - Administrator`.

        :::

        :::warning[Name Uniqueness]

        The `pname` field must remain unique across all geofences. Attempting to change
        a geofence name to match another existing geofence will result in a 409 Conflict error.

        :::
      operationId: update-geofence-item
      x-required-abilities:
        - Geofence - Manage
      parameters:
        - name: geofenceId
          in: path
          required: true
          schema: *ref_127
          description: |
            The internal ID of the geofence to retrieve or modify.
          example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          These are fields in the Geofence object that can be modified or provided as input
          when creating a new Geofence.

          **Required Fields**

          Only `pname`, `latitude`, `longitude`, and `radius` are required when creating a new Geofence.


          **Geofence Types**

          Currently, only circular geofences are supported. The `type` field must be set to `"circle"` (the default).
          Future versions may support other geofence shapes like polygons.


          **Coordinate Validation**

          Both `latitude` and `longitude` cannot be exactly 0.0 simultaneously, as this represents a location
          in the Atlantic Ocean off the coast of Africa and is likely an error.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Geofence object that can be modified or provided as input
                when creating a new Geofence.

                **Required Fields**

                Only `pname`, `latitude`, `longitude`, and `radius` are required when creating a new Geofence.


                **Geofence Types**

                Currently, only circular geofences are supported. The `type` field must be set to `"circle"` (the default).
                Future versions may support other geofence shapes like polygons.


                **Coordinate Validation**

                Both `latitude` and `longitude` cannot be exactly 0.0 simultaneously, as this represents a location
                in the Atlantic Ocean off the coast of Africa and is likely an error.
              required: *ref_122
              properties: *ref_123
            examples:
              update_basic_fields:
                summary: Update basic properties
                value:
                  pname: Downtown Office - Updated
                  description: Main office building with parking garage
                  latitude: 30.2672
                  longitude: -97.7431
                  radius: 150
                  active: true
              update_assignments:
                summary: Update assignments
                value:
                  pname: Construction Site Alpha
                  latitude: 30.3
                  longitude: -97.8
                  radius: 50
                  assignments:
                    - target_table: projects
                      target_id: project_construction_alpha
                    - target_table: users
                      target_id: foreman_user_id
                    - target_table: groups
                      target_id: construction_team
      responses:
        '200':
          description: |
            Successfully updated the geofence. The response includes the complete updated
            geofence object.

            **Note:** Unlike many REST APIs that return `204 No Content` for PUT operations,
            this endpoint returns `200 OK` with the complete updated geofence object in the response body.
          content:
            application/json:
              schema:
                allOf: *ref_126
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '409':
          description: |
            Conflict - A geofence with the specified name already exists.
            The `pname` field must be unique across all geofences.
          content:
            application/json:
              schema:
                description: |
                  A standard format for error responses that may be returned by the API when various
                  types of errors occur, including authentication (sign-in) failures, authorization
                  (permission) failures, "object not found" (404), internal server errors (500),
                  bad client requests (400) and other types of errors.
                type: object
                properties: *ref_14
        '412':
          description: |
            Precondition Failed - The ETag provided in the `If-Match` header does not match
            the current ETag of the geofence. This indicates the geofence was modified by
            another request since you last retrieved it. Fetch the current version and try again.
          content:
            application/json:
              schema:
                description: |
                  A standard format for error responses that may be returned by the API when various
                  types of errors occur, including authentication (sign-in) failures, authorization
                  (permission) failures, "object not found" (404), internal server errors (500),
                  bad client requests (400) and other types of errors.
                type: object
                properties: *ref_14
        '428':
          description: |
            Precondition Required - The `If-Match` header is missing. This header is required
            for update operations to prevent lost updates due to concurrent modifications.
          content:
            application/json:
              schema:
                description: |
                  A standard format for error responses that may be returned by the API when various
                  types of errors occur, including authentication (sign-in) failures, authorization
                  (permission) failures, "object not found" (404), internal server errors (500),
                  bad client requests (400) and other types of errors.
                type: object
                properties: *ref_14
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/leave_requests:
    get:
      summary: List leave requests
      description: |
        Retrieve a list of leave requests.

        If you need to see leave requests for a specific user, you can filter the list
        with a [`$filter`](/docs/collections#filtering) parameter like this:

        ```plaintext
        $filter=id_user eq "64BBA147B9AC41D9978062300826C89F"
        ```

        You will be limited to viewing only the leave requests for which you have the
        necessary permissions as a leave approver.
      operationId: list-leave-requests
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_250
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          A leave request.  Depending on the system configuration, this will not be
                          converted to a Time Entry until it is approved and the user has loaded and saved
                          their Time Entry screen.
                        items:
                          type: object
                          description: |
                            A leave request.  Depending on the system configuration, this will not be
                            converted to a Time Entry until it is approved and the user has loaded and saved
                            their Time Entry screen.
                          allOf: &ref_130
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              description: |
                                These are fields in the Leave Request object that can be modified
                                or given as input when creating a new Leave Request.
                              required: &ref_128
                                - record_date
                                - time_amount
                                - id_code_pay_type
                                - id_project
                                - id_code_task
                                - id_code_bill_type
                                - comment
                              properties: &ref_129
                                record_date:
                                  type: string
                                  description: |
                                    The date of the Leave Request in YYYYMMDD format.
                                  example: '20210101'
                                time_amount:
                                  type: number
                                  format: float
                                  description: |
                                    The amount of time requested off in hours.
                                  example: 8
                                id_code_pay_type:
                                  type: string
                                  description: |
                                    The unique identifier of the Pay Type for the Leave Request.
                                  example: 64BBA147B9AC41D9978062300826C89F
                                id_project:
                                  type: string
                                  description: |
                                    The unique identifier of the Project for the Leave Request.
                                  example: 1A40D7570AF94AFDB286D0697DEA5CF3
                                id_code_task:
                                  type: string
                                  description: |
                                    The unique identifier of the Task for the Leave Request.
                                  example: 11B6C411BC414E9C9442C0606B4C4AD4
                                id_code_bill_type:
                                  type: string
                                  description: |
                                    The unique identifier of the Bill Type for the Leave Request.
                                  example: 1F9E41337EA341219D9D1D023F1D8C24
                                id_code_time_4:
                                  type: string
                                  description: |
                                    The unique identifier of the "Time Entry Code 4" field for the Leave Request.
                                    Note that this field may not be available in your specific Journyx configuration.
                                  example: B23991FEE6464610B0B8896F5FBB9777
                                id_code_time_5:
                                  type: string
                                  description: |
                                    The unique identifier of the "Time Entry Code 5" field for the Leave Request.
                                    Note that this field may not be available in your specific Journyx configuration.
                                  example: B23991FEE6464610B0B8896F5FBB9777
                                id_code_time_6:
                                  type: string
                                  description: |
                                    The unique identifier of the "Time Entry Code 6" field for the Leave Request.
                                    Note that this field may not be available in your specific Journyx configuration.
                                  example: B23991FEE6464610B0B8896F5FBB9777
                                id_code_time_7:
                                  type: string
                                  description: |
                                    The unique identifier of the "Time Entry Code 7" field for the Leave Request.
                                    Note that this field may not be available in your specific Journyx configuration.
                                  example: B23991FEE6464610B0B8896F5FBB9777
                                id_group:
                                  type: string
                                  description: |
                                    The unique identifier of the "Group" Entry Column field for the Leave Request.
                                    Note that this field may not be available in your specific Journyx configuration.
                                  example: B23991FEE6464610B0B8896F5FBB9777
                                comment:
                                  type: string
                                  description: |
                                    A comment or description of the Leave Request.
                                  example: Vacation to Belize
                                enforce_accruals:
                                  type: boolean
                                  description: |
                                    If true, any Accruals (Time Bank) limitations will be enforced
                                    when the Leave Request is created or modified. If false, the
                                    enforcement will only happen when the Leave Request is converted
                                    to a Time Entry and submitted for approval.
                                  example: true
                                id_holiday_type:
                                  type: string
                                  description: |
                                    The unique identifier of the Holiday Type for the Leave Request.
                                  example: 1F9E41337EA341219D9D1D023F1D8C24
                                note:
                                  type: string
                                  description: |
                                    A note or additional information about the Leave Request that
                                    can be seen by the approver. This does not appear on the Time Entry.
                                  example: This is a note about why I'm requesting leave.
                                text2:
                                  type: string
                                  description: |
                                    A second comment-style Entry Column text field that can be used for
                                    additional information about the Leave Request.

                                    This field may not be available in your specific Journyx configuration.
                                  example: This is a second text field.
                                text3:
                                  type: string
                                  description: |
                                    A third comment-style Entry Column text field that can be used for
                                    additional information about the Leave Request.

                                    This field may not be available in your specific Journyx configuration.
                                  example: This is the third text field.
                            - type: object
                              description: |
                                Fields related to the creation of a resource, including the creation
                                timestamp, creator user ID, and creator user name.

                                Note that extended information about the creator user may be included
                                in the `creator_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_1
                              properties: *ref_2
                            - type: object
                              description: Object creation date/time fields common to many resources.
                              allOf: *ref_5
                              properties: *ref_6
                            - type: object
                              description: |
                                Fields related to the last modification of a resource, including the
                                last modified timestamp in various formats, the modifier's user ID and
                                full name. Please note that this only records the most recent
                                modification. In addition, it may not reflect modifications to child
                                resources or extended properties that are defined in other tables, such
                                as "Custom Fields". These last modifier fields are always read-only.

                                Note that extended information about the modifier user may be included
                                in the `modifier_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_7
                              properties: *ref_8
                            - type: object
                              description: |
                                The last modified date/time fields common to many resources. Please note
                                that this only records the most recent modification. In addition, it may
                                not record modifications to child resources or extended properties that
                                are defined in other tables, such as "Custom Fields". These fields are
                                read-only.
                              allOf: *ref_9
                              properties: *ref_10
                            - type: object
                              description: |
                                These are fields related to the deprecated "Domain" object.
                              properties: *ref_11
                          properties: &ref_131
                            commit_state:
                              type: integer
                              description: |
                                Internal field; do not use.
                              example: 0
                              readOnly: true
                            decline_date:
                              type: string
                              description: |
                                The date the leave request was declined **or** approved in YYYYMMDD format.
                                Note: despite the name, this field is used for both declined and approved requests.
                              example: '20241031'
                              readOnly: true
                            extrabig:
                              type: string
                              nullable: true
                              description: |
                                **This field is not in use.**
                              example: null
                            extraint:
                              type: integer
                              nullable: true
                              description: |
                                **This field is not in use.**
                              example: null
                            extramid:
                              type: string
                              nullable: true
                              description: |
                                **This field is not in use.**
                              example: null
                            extrasms:
                              type: string
                              nullable: true
                              description: |
                                **This field is not in use.**
                              example: null
                            id_rejector:
                              type: string
                              description: |
                                The internal ID of the user who rejected **or** approved the leave request.
                                Note: despite the name, this field is used for both declined and approved requests.
                              example: 64BBA147B9AC41D9978062300826C89F
                              readOnly: true
                            id_request_rec:
                              type: string
                              description: |
                                The internal ID of the leave request record; the same as the `id` field.
                                Cannot be changed.
                              example: 1A40D7570AF94AFDB286D0697DEA5CF3
                              readOnly: true
                            id_user:
                              type: string
                              description: |
                                The internal ID of the user who "owns" the leave request.

                                This cannot be changed once the leave request is created.
                              example: 64BBA147B9AC41D9978062300826C89F
                              readOnly: true
                            id_user_properties:
                              type: object
                              description: |
                                Additional properties of the user who owns the leave request.

                                Note that this key may not be present unless requested in the `$keys` parameter.
                              allOf:
                                - type: object
                                  description: |
                                    A user account in the JX system.
                                  allOf: *ref_3
                                  properties: *ref_4
                            reason:
                              type: string
                              description: |
                                The decline reason given by the approver, if any.
                              example: Declined because XYZ
                              readOnly: true
                            reject_flag:
                              type: integer
                              description: |
                                The flag indicating the current approval status of the Leave Request.
                                The same information can be found in text form in the `status` field.
                                Values are:

                                - 0 == Pending
                                - 1 == Declined
                                - 2 == Approved

                                Note: this field is read-only. You can
                                [Approve](/docs/reference/approve-leave-request) or
                                [Decline](/docs/reference/decline-leave-request) at another endpoint.
                              example: 0
                              readOnly: true
                              enum:
                                - 0
                                - 1
                                - 2
                            status:
                              type: string
                              description: |
                                The status of the leave request.
                                Values can be: `Pending`, `Approved`, `Declined`.

                                Note: this field is read-only. You can
                                [Approve](/docs/reference/approve-leave-request) or
                                [Decline](/docs/reference/decline-leave-request) at another endpoint.
                              readOnly: true
                            submit_date:
                              type: string
                              description: |
                                The date the leave request was submitted in YYYYMMDD format.
                              example: '20241031'
                              readOnly: true
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create leave request
      description: |
        Create a new leave request.

        :::info[Required abilities]

        Users can create their own leave requests.

        You can only create a leave request for another user if you are a "leave approver"
        for them.
        Generally, that means being in their designated Time Approver list.

        :::
      operationId: create-leave-request
      requestBody:
        required: true
        description: |
          These are fields in the Leave Request object that can be modified
          or given as input when creating a new Leave Request.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Leave Request object that can be modified
                or given as input when creating a new Leave Request.
              required: *ref_128
              properties: *ref_129
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '201':
          description: |
            The item was successfully created.

            This is a minimal response that indicates whether the request was successful and provides the
            URI of the created item. To retrieve additional details or the full item, you may need to make
            additional requests.

            :::info

            See the `Location` header for the URL of the new item,
            as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
            table name of the new item.

            :::
          content:
            application/json:
              schema:
                description: |
                  The item was successfully created.

                  This is a minimal response that indicates whether the request was successful and provides the
                  URI of the created item. To retrieve additional details or the full item, you may need to make
                  additional requests.

                  :::info

                  See the `Location` header for the URL of the new item,
                  as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
                  table name of the new item.

                  :::
                type: object
                properties: *ref_46
          headers:
            Location: *ref_47
            X-Item-Id: *ref_48
            X-Item-Table: *ref_49
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/leave_requests/{id_item}:
    get:
      summary: Get a leave request
      description: |
        Retrieve a leave request by its internal ID
      operationId: get-leave-request
      parameters:
        - name: id_item
          in: path
          description: The unique identifier of the Leave Request to retrieve.
          required: true
          schema: &ref_132
            type: string
          example: 1F9E41337EA341219D9D1D023F1D8C24
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_251
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          A leave request.  Depending on the system configuration, this will not be
                          converted to a Time Entry until it is approved and the user has loaded and saved
                          their Time Entry screen.
                        allOf: *ref_130
                        properties: *ref_131
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete a leave request
      description: |
        Delete a leave request by its internal ID.

        :::info[Required abilities]

        Users can delete their own leave requests.

        You can only delete another user's leave request if you are a "leave approver"
        for them.
        Generally, that means being in their designated Time Approver list.

        :::
      operationId: delete-leave-request
      parameters:
        - name: id_item
          in: path
          description: The unique identifier of the Leave Request to retrieve.
          required: true
          schema: *ref_132
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            The object was successfully deleted. The response body is empty.
          content: {}
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update a leave request
      description: |
        Update a leave request by its internal ID.

        :::info[Required abilities]

        Users can update their own leave requests.

        You can only modify another user's leave request if you are a "leave approver"
        for them.
        Generally, that means being in their designated Time Approver list.

        :::

        # START_RAW
        import PutHeaders from '@site/content/partials/_put-headers.mdx'

        <PutHeaders />
        # END_RAW

        Note that you cannot use this endpoint to approve or decline a leave request.
        Instead, you can change the approval status of a Leave Request by POSTing to the
        [`/api/v1/leave_requests/approve/{id}`](/docs/reference/approve-leave-request) or
        [`/api/v1/leave_requests/decline/{id}`](/docs/reference/decline-leave-request)
        endpoints.
      operationId: update-leave-request
      parameters:
        - name: id_item
          in: path
          description: The unique identifier of the Leave Request to retrieve.
          required: true
          schema: *ref_132
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          These are fields in the Leave Request object that can be modified
          or given as input when creating a new Leave Request.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Leave Request object that can be modified
                or given as input when creating a new Leave Request.
              required: *ref_128
              properties: *ref_129
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/leave_requests/approve/{id_item}:
    post:
      summary: Approve a leave request
      description: |
        Approve a leave request by its internal ID.

        You do not need to provide a request body for this operation.

        :::info[Required abilities]

        In order to approve a leave request, you must have "leave approver" permissions
        for the user who requested the leave. This generally means being in their
        designated Time Approver list.

        :::
      operationId: approve-leave-request
      parameters:
        - name: id_item
          in: path
          description: The unique identifier of the Leave Request to retrieve.
          required: true
          schema: *ref_132
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        description: |
          You do not need to provide a request body for this operation.
        content:
          application/json:
            schema:
              type: object
              nullable: true
              description: |
                You do not need to provide a request body for this operation.
              properties: *ref_119
      responses:
        '201':
          description: |
            The leave request was successfully approved.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/leave_requests/decline/{id_item}:
    post:
      summary: Decline a leave request
      description: |
        Decline a leave request by its internal ID.

        You must provide a request body with a `reason` field that explains why the
        leave request was declined.

        :::info[Required abilities]

        In order to decline a leave request, you must have "leave approver" permissions
        for the user who requested the leave. This generally means being in their
        designated Time Approver list.

        :::
      operationId: decline-leave-request
      parameters:
        - name: id_item
          in: path
          description: The unique identifier of the Leave Request to retrieve.
          required: true
          schema: *ref_132
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                reason:
                  type: string
                  description: |
                    The reason the leave request was declined.

                    This field may be required depending on the system setting:

                    "Require managers to give a reason when leave requests are declined or edited".
                  example: Declined because XYZ
      responses:
        '201':
          description: |
            The leave request was successfully declined.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/login:
    post:
      summary: Sign in
      description: |
        Sign in (login) to the system. This will return a `wtsession` token that you can use
        to authenticate future API requests via the `Cookie` header.

        How to authenticate to the Journyx API is described in the
        [Authentication](/docs/authentication) section.
      operationId: login
      requestBody:
        required: true
        content:
          application/json:
            schema:
              description: |
                The request body for the `login` operation.
              type: object
              required: &ref_252
                - username
                - password
              properties: &ref_253
                username:
                  type: string
                  description: The username (also known as the login ID).
                  example: john_doe@example.com
                password:
                  type: string
                  format: password
                  description: |
                    The password or API Key.
                  example: YOUR_PASSWORD_HERE
      security: []
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            Successful login; see the `results` object in the response body.

            :::tip

            Important: The `wtsession` token is set in the response headers. You can send
            this token in the `Cookie` header of future API requests to authenticate.
            The token is *not* in the response body.

            :::
          content:
            application/json:
              schema:
                type: object
                description: |
                  The response body for the `login` operation.

                  :::warning[Important]

                  Note that the actual session token is returned in the `wtsession` cookie
                  in the response headers (`Set-Cookie`). It is also available in the
                  header `X-Session-Id`. The token is **not** returned in the response body.

                  :::
                properties: &ref_254
                  auth:
                    type: object
                    description: |
                      Properties about the authentication request.
                    properties:
                      abilities:
                        type: array
                        readOnly: true
                        description: |
                          An array of abilities that the user has.
                        items:
                          type: string
                        example:
                          - userdel
                          - accruals_del
                          - admin
                      expires:
                        type: number
                        readOnly: true
                        description: |
                          The expiration time of the token as a Unix timestamp.
                          Note that using the token again at any time before the expiration
                          occurs will automatically extend the expiration time.
                        example: 1728605420.527636
                      expiresSeconds:
                        type: integer
                        readOnly: true
                        description: |
                          The number of seconds until the token expires.
                        example: 102000
                      userId:
                        type: string
                        readOnly: true
                        description: |
                          The unique identifier of the user.
                        example: 1A40D7570AF94AFDB286D0697DEA5CF3
                      username:
                        type: string
                        readOnly: true
                        description: |
                          The username (also known as the login ID).
                        example: john_doe@example.com
                  success:
                    type: boolean
                    description: |
                      Indicates whether the request was successful.
                    example: true
          headers:
            Set-Cookie:
              description: |
                The `wtsession` cookie is set in the response headers. You can send
                this cookie in the `Cookie` header of future API requests to authenticate.
              schema:
                type: string
                example: wtsession=Cpnc2kZZrCZRTLG34l82ifpjbKwiJgdOt_p161tq6_BZtE4W6DgAIqEuYTE4jkH0rE0nq5MU7A0tYT5EXd3_1Q; Path=/; HttpOnly; SameSite=Strict
            X-Session-Id:
              description: |
                The `X-Session-Id` header is set in the response headers. You can
                send this in the `Cookie` header of future API requests to authenticate.
              schema:
                type: string
                example: Cpnc2kZZrCZRTLG34l82ifpjbKwiJgdOt_p161tq6_BZtE4W6DgAIqEuYTE4jkH0rE0nq5MU7A0tYT5EXd3_1Q
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/logout:
    post:
      summary: Sign out
      description: |
        Sign out (logout) of the system. This will invalidate the `wtsession` token
        and you will need to sign in again to authenticate future API requests.

        You do not need to provide a request body for this operation. This will
        return a `403 Forbidden` error if you are not currently signed in.

        How to authenticate to the Journyx API is described in the
        [Authentication](/docs/authentication) section.
      operationId: logout
      parameters:
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        description: |
          You do not need to provide a request body for this operation.
        content:
          application/json:
            schema:
              type: object
              nullable: true
              description: |
                You do not need to provide a request body for this operation.
              properties: *ref_119
      responses:
        '200':
          description: |
            Successful logout; see the `results` object in the response body.
          content:
            application/json:
              schema:
                properties:
                  success:
                    type: boolean
                    description: |
                      If true, the logout was successful.
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/nav:
    get:
      summary: Get menus
      description: |
        Get the navigation menu and related data for the current user,
        such as current abilities list and general site UI settings.
      operationId: get-navigation
      parameters:
        - name: Accept
          in: header
          required: true
          schema: &ref_294
            type: string
          description: |
            The Accept header is required for all `GET` requests that expect a
            response body. The value should normally be `application/json` assuming
            you are expecting JSON data.
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                type: object
                description: |
                  The response body for the `nav` operation containing the menu
                  structure and related info for the current user.
                properties: &ref_255
                  auth:
                    type: object
                    description: |
                      The authentication status of the current user.
                    properties:
                      abilities:
                        type: array
                        description: |
                          The list of abilities of the current user. These are internal IDs
                          of abilities. Abilities are granted to users via roles.
                        items:
                          type: string
                        example:
                          - userdel
                          - accruals_del
                          - admin
                      expires:
                        type: number
                        description: |
                          The expiration time of the current user's session token
                          as a Unix timestamp.
                        example: 1728605420.527636
                      expiresSeconds:
                        type: integer
                        description: |
                          The number of seconds until the current user's session token expires.
                        example: 102000
                      groups:
                        type: array
                        description: |
                          The list of group IDs of the current user.
                        items:
                          type: string
                        example:
                          - 5088C427E8B64EBEBE1C5B5961DB1902
                          - 3553F715A6F54DAB95D0D25B08468195
                      roles:
                        type: array
                        description: |
                          The list of roles of the current user.
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                              example: 1A40D7570AF94AFDB286D0697DEA5CF3
                            name:
                              type: string
                              example: Administrator
                            description:
                              type: string
                              example: Access to the entire system.
                      userId:
                        type: string
                        description: |
                          The unique identifier for the current user.
                  classicHelpURL:
                    type: string
                    description: |
                      The URL for the classic help system.
                  labels:
                    type: object
                    description: |
                      The UI Feature Labels for the current user, e.g.,
                      customized labels for things like Projects and Pay Types.
                  menu:
                    type: array
                    description: |
                      The navigation menu structure for the current user.
                    items:
                      type: object
                      properties:
                        children:
                          type: array
                          description: |
                            The child menu items for the current menu item.
                          items:
                            type: object
                        label:
                          type: string
                          description: |
                            The label for the current menu item.
                        name:
                          type: string
                          description: |
                            The internal menu item ID of the current menu item.
                        spa:
                          type: boolean
                          description: |
                            Whether the menu item is part of the single-page application.
                            If False, the menu item is a link to a "classic" CGI page.
                        url:
                          type: string
                          format: uri
                          description: |
                            The URL for the current menu item.
                        openInNewWindow:
                          type: object
                          description: |
                            If this is present, the menu link should open in a new window.
                          properties:
                            features:
                              type: string
                              description: |
                                The window features string for the new window.
                            target:
                              type: string
                              description: |
                                The target for the new window.
                  site:
                    type: object
                    description: |
                      General site settings.
                  ssoEnabled:
                    type: boolean
                    description: |
                      Whether single sign-on is enabled.
                  ssoType:
                    type: string
                    description: |
                      The type of single sign-on in use.
                  telemetry_config:
                    type: object
                    description: |
                      The telemetry configuration for the current user.
                  uiPrefs:
                    type: object
                    description: |
                      The UI preferences for the current user.
                  user:
                    type: object
                    description: |
                      Information about the current user.
                    properties:
                      email:
                        type: string
                        description: |
                          The email address of the current user.
                        example: john_doe@example.com
                      firstName:
                        type: string
                        description: |
                          The first name of the current user.
                        example: John
                      lastName:
                        type: string
                        description: |
                          The last name of the current user.
                        example: Doe
                      fullName:
                        type: string
                        description: |
                          The full name (first and last) of the current user.
                        example: John Doe
                      userId:
                        type: string
                        description: |
                          The unique identifier for the current user.
                        example: 1A40D7570AF94AFDB286D0697DEA5CF3
                      username:
                        type: string
                        description: |
                          The username (login ID) of the current user.
                        example: john_doe@example.com
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/projects:
    get:
      summary: List projects
      description: |
        Retrieve a list of Projects (or PX Tasks).

        This is the primary Entry Column for all user entry sheets,
        although it is possible to disable it in the system settings.

        :::info[About labels and feature names]

        It's important to understand that names (labels) of many things can be
        customized in Journyx, but this documentation will use the default names for
        consistency and clarity. This object is called
        **"Project"** by default, but in your company's deployment it may be
        called "Job", or "Cost Center", or some other term.

        The labels are set in System Settings > Entry Sheets.

        :::

        If you are using the Journyx PX product, work assignments
        are made under "Tasks" and PX Tasks
        are also stored in the Projects table and retrieved through this endpoint.
        PX Tasks are those where `project_type != 1`.
      operationId: list-projects
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_256
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          A Project or PX Scheduled Task in the JX system.
                        items:
                          type: object
                          description: |
                            A Project or PX Scheduled Task in the JX system.
                          allOf: &ref_137
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              description: |
                                These are fields in the Project object that can be modified or given as input
                                when creating a new Project.
                              required: &ref_134
                                - pname
                                - id_parent
                              allOf: &ref_135
                                - type: object
                                  description: |
                                    These are common fields used throughout the system to indicate the status
                                    of an object, whether "hidden", "loggable", "reportable-only".

                                    Note that "hidden" status is defined as not belonging to any
                                    [Groups](/docs/reference/schemas/groupfields). See that link
                                    for more information about finding hidden items.

                                    Loggable and Reportable status means that the object is both visible
                                    to at least some users, and can be used in current (new) time entries.

                                    Reportable Only means that the object is visible to at least some users,
                                    but cannot be used in newly created time entries.
                                  properties: *ref_133
                                - type: object
                                  description: |
                                    Custom fields are used to store additional information about a resource.
                                    The fields are defined by the system administrators and can be of various
                                    data types.

                                    This page describes the schema for custom field values as shown in
                                    the response of a resource that has custom fields. There is an expanded
                                    schema for the custom field definitions at their own endpoint, as
                                    shown in the `id_attr_type_uri` field.

                                    :::tip

                                    The `custom_fields` object will only be included in the response if requested
                                    in `$keys`; see details below.

                                    :::

                                    ### Editing Custom Fields

                                    In general, to update Custom Field values for an object, when submitting
                                    a `PUT` request to update the object, you can include the `custom_fields`
                                    object in the request body. The `custom_fields` object should follow
                                    the basic schema shown here, but only needs to include the `value` field
                                    for each custom field you want to update. For example, this is enough
                                    to update two custom fields:

                                    ```json
                                    {
                                      "custom_fields": {
                                        "C41B2DDA662F4EF6B730F9CB6DB04696": {
                                          "value": "New Value"
                                        },
                                        "users_email": {
                                          "value": "new_email@example.com"
                                        }
                                    }
                                    ```

                                    Any custom fields not included in the `custom_fields` object will not be
                                    updated and will retain their current values. You can set the `null` value

                                    ### Viewability

                                    It's also important to note that Custom Fields are subject to
                                    viewability restrictions based on the "Reportability" property set by
                                    system administrators.

                                    :::tip

                                    Please note that access to view custom fields are automatically filtered by
                                    "Reportability", a property set by admins on the custom field definition that
                                    determines which User Roles are allowed to see the field. If you are not seeing
                                    a custom field that you expect to see, please check with your system administrator.

                                    :::

                                    ### Examples

                                    Here's an example value of `custom_fields` in a response:

                                    ```json
                                    "custom_fields": {
                                      "C41B2DDA662F4EF6B730F9CB6DB04696": {
                                        "attr_type": "ENUM_STRING_252",
                                        "description": "Employee pay group.",
                                        "id_attr_type": "C41B2DDA662F4EF6B730F9CB6DB04696",
                                        "id_attr_type_uri": "/api/v1/custom_fields/C41B2DDA662F4EF6B730F9CB6DB04696",
                                        "pname": "Pay Group",
                                        "value": "XYZ Pay Group"
                                      },
                                      "users_email": {
                                        "attr_type": "STRING_252",
                                        "description": "Email address",
                                        "id_attr_type": "users_email",
                                        "id_attr_type_uri": "/api/v1/custom_fields/users_email",
                                        "pname": "Email Address",
                                        "value": "username@example.com"
                                      }

                                    ```

                                    Note that there is an alternate representation available in most object types, where
                                    each custom field value is a separate key in the main object (not under `custom_fields`)
                                    in the following format, showing both a singular and multi-value example:

                                    ```json
                                    "users_attribs:C41B2DDA662F4EF6B730F9CB6DB04696": "XYZ Pay Group",
                                    "users_attribs:users_skills": [
                                      "CRM admin - advanced"
                                    ]
                                    ```

                                    This follows the pattern of `users_attribs:<field_id>`, where `users_attribs` is
                                    the internal table name for User custom fields. For other object types, the table
                                    name will be different, e.g. `projects_attribs`. This is a read-only representation
                                    for convenience and is not used for updating custom fields.

                                    This more compact representation is always provided (unless `$keys=$base` was set).
                                    However, the `custom_fields` object will only be available if `$keys=custom_fields`
                                    or `$keys=$extended` was set.
                                  properties: *ref_57
                                - type: object
                                  description: |
                                    These are group-related fields that are common to most object types.

                                    Please note that these fields may not be present in the response unless
                                    the `$keys` query parameter includes the field name, e.g. `$keys=groups`.

                                    See [Collection#Selecting Fields](/docs/collections#selecting-fields)
                                    for more information about the `$keys` parameter.

                                    The `$keys=$extended` parameter will also include the `group_names` field.

                                    In general, Groups determine the visibility of objects to each user in the system.
                                    For example, a user can only see objects that belong to a Group that
                                    they are themselves a member of.

                                    When creating or modifying objects with `POST` or `PUT` requests, you can
                                    only use the `groups` field to specify the Group IDs that the object belongs to.
                                    The `group_names` field is read-only.

                                    If an object does not belong to any groups, it is considered to be "hidden"
                                    and the `is_hidden` field will be set to `true`. Hidden objects are normally
                                    only accessible to administrators, and then only if the `$filter` query parameter
                                    is used to include hidden status objects.

                                    For most object types, that would be done with a filter like this:

                                    ```
                                    $filter = status_code intersects ["lr","ro","h"]
                                    ```

                                    The [Users](/docs/reference/list-users) collection can be filtered
                                    like this to show hidden users:

                                    ```
                                    $filter = status intersects ["active","inactive","hidden"]
                                    ```

                                    You can read more about [Filtering](/docs/collections#filtering) in the
                                    section on Collections.

                                    If you **only** want hidden objects, just remove the other status codes from
                                    the filter.
                                  allOf: *ref_58
                                  properties: *ref_59
                              properties: &ref_136
                                id_parent:
                                  type: string
                                  description: |
                                    The internal ID of the parent Project. This can only be set when creating a new Project.
                                    The parent of an existing Project cannot be changed, except for "PX Task" type projects.
                                  example: 64BBA147B9AC41D9978062300826C89F
                                pname:
                                  type: string
                                  description: |
                                    The name of the Project.
                                  example: XYZ Project
                                description:
                                  type: string
                                  description: |
                                    A description of the Project.
                                  example: This is a description of the XYZ Project.
                                hours_estimate:
                                  type: number
                                  description: |
                                    The estimated number of hours for the Project.
                                  example: 100
                                percent_complete:
                                  type: number
                                  description: |
                                    The percentage of the Project that is complete.
                                  example: 50
                                project_type:
                                  type: number
                                  description: |
                                    The Project Type code of the Project. Should be `1` for a normal Project.
                                    Types 4-12 are used for PX Scheduled Projects.
                                  example: 1
                                wbs:
                                  type: string
                                  nullable: true
                                  description: |
                                    **UNUSED FIELD**; normally `null`
                                  example: null
                                id_owner:
                                  type: string
                                  description: |
                                    The internal ID of the User who is the owner of the Project.
                                    Note: changes to owners are automatically propagated to all descendants.
                                  example: 64BBA147B9AC41D9978062300826C89F
                                id_backup:
                                  type: string
                                  description: |
                                    The internal ID of the User who is the Backup Owner for the Project.
                                    Note: changes to owners are automatically propagated to all descendants.
                                  example: 64BBA147B9AC41D9978062300826C89F
                                rm_type:
                                  type: number
                                  description: |
                                    **UNUSED FIELD**; normally `0`
                                  example: 0
                                state:
                                  type: number
                                  description: |
                                    **UNUSED FIELD**; normally `0`
                                  example: 0
                                work_variance:
                                  type: number
                                  description: |
                                    PX Scheduled Projects only: TODO: explain
                                  example: 0
                                start_variance:
                                  type: number
                                  description: |
                                    PX Scheduled Projects only: TODO: explain
                                  example: 0
                                end_variance:
                                  type: number
                                  description: |
                                    PX Scheduled Projects only: TODO: explain
                                  example: 0
                                duration_variance:
                                  type: number
                                  description: |
                                    PX Scheduled Projects only: TODO: explain
                                    Integer number of days.
                                  example: 0
                                scheduled_work:
                                  type: number
                                  description: |
                                    PX Scheduled Projects only: TODO: explain
                                    Number of hours.
                                  example: 0
                                scheduled_start:
                                  type: number
                                  description: |
                                    PX Scheduled Projects only: The scheduled start date of the Project as an epoch timestamp.
                                  example: 1727724343
                                scheduled_end:
                                  type: number
                                  description: |
                                    PX Scheduled Projects only: The scheduled end date of the Project as an epoch timestamp.
                                  example: 1727724343
                                scheduled_duration:
                                  type: number
                                  description: |
                                    PX Scheduled Projects only: The scheduled duration of the Project in days.
                                  example: 10
                                projected_cost:
                                  type: number
                                  description: |
                                    The projected cost of the Project.
                                  example: 1000
                                projected_return:
                                  type: number
                                  description: |
                                    The projected return of the Project.
                                  example: 2000
                                projected_profit:
                                  type: number
                                  description: |
                                    The projected profit of the Project.
                                  example: 1000
                                projected_roi:
                                  type: number
                                  description: |
                                    The projected return on investment of the Project.
                                  example: 2
                                awaiting_export:
                                  type: integer
                                  description: |
                                    If `1`, the Project is awaiting export in Projectlink.
                                    Does not apply to other integrations.
                                  example: 0
                                allow_time:
                                  type: boolean
                                  description: |
                                    If `true`, time can be logged against this Project.
                                  example: true
                                allow_expense:
                                  type: boolean
                                  description: |
                                    If `true`, expenses can be logged against this Project.
                                  example: true
                                allow_custom:
                                  type: boolean
                                  description: |
                                    If `true`, Custom Entry (a.k.a Mileage) entries can be logged against this Project.
                                  example: true
                                allow_leave:
                                  type: boolean
                                  description: |
                                    If `true`, Leave Request entries can be logged against this Project.
                                  example: true
                                allow_holiday:
                                  type: boolean
                                  description: |
                                    If `true`, Holiday entries can be created using this Project.
                                  example: true
                                propagate_pa_rates:
                                  type: boolean
                                  description: |
                                    If `true`, the Project will propagate the "Project Activity" rates assigned
                                    to this Project to any new Projects created under this Project.
                                  example: true
                                multiple_assns:
                                  type: boolean
                                  description: |
                                    If `true`, Assignments can be made in "Multiple Assignment" mode using this Project.
                                  example: true
                                agile_team_assns:
                                  type: boolean
                                  description: |
                                    If `true`, Assignments can be made to a "Team" instead of an individual using this Project.
                                  example: true
                                dependencies_new_children_inherit:
                                  type: boolean
                                  description: |
                                    If `true`, new child Projects will inherit the dependencies of this Project.
                                  example: true
                                dependencies_copy_to_descendents:
                                  type: boolean
                                  description: |
                                    If `true`, the dependencies of this Project will be copied to all descendants.
                                    Note: this field is spelled as `descendents` instead of `descendants`.
                                  example: true
                                dependencies:
                                  type: object
                                  description: |
                                    A map of Project dependencies; when this Project is selected, only the listed choices
                                    in the dependent Entry Columns are available to the user.

                                    The keys in this object should be the table name of the dependent Entry Code,
                                    e.g. `codes_pay_types`. The values should be arrays of Entry Code IDs that belong to that table.
                                    These will be the allowed choices when this Project is selected.

                                    The list of available Entry Column tables is here: (TODO: provide link)
                                  additionalProperties:
                                    type: array
                                    description: |
                                      A list of Entry Code IDs that belong to the table specified by the key, e.g. `codes_bill_types`.
                                    items:
                                      type: string
                                  example:
                                    codes_pay_types:
                                      - PayTypeID1
                                      - PayTypeID2
                                    codes_bill_types:
                                      - BillTypeID1
                                      - BillTypeID2
                                change_requests:
                                  type: array
                                  description: |
                                    A list of Change Requests associated with this Project. These are requests from team
                                    members to change the estimated hours left for the Project / Task.
                                autoadd:
                                  type: boolean
                                  description: |
                                    If `true`, this Project is automatically added to new Groups as they are created.
                                  example: false
                            - type: object
                              description: |
                                Fields related to the creation of a resource, including the creation
                                timestamp, creator user ID, and creator user name.

                                Note that extended information about the creator user may be included
                                in the `creator_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_1
                              properties: *ref_2
                            - type: object
                              description: Object creation date/time fields common to many resources.
                              allOf: *ref_5
                              properties: *ref_6
                            - type: object
                              description: |
                                Fields related to the last modification of a resource, including the
                                last modified timestamp in various formats, the modifier's user ID and
                                full name. Please note that this only records the most recent
                                modification. In addition, it may not reflect modifications to child
                                resources or extended properties that are defined in other tables, such
                                as "Custom Fields". These last modifier fields are always read-only.

                                Note that extended information about the modifier user may be included
                                in the `modifier_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_7
                              properties: *ref_8
                            - type: object
                              description: |
                                The last modified date/time fields common to many resources. Please note
                                that this only records the most recent modification. In addition, it may
                                not record modifications to child resources or extended properties that
                                are defined in other tables, such as "Custom Fields". These fields are
                                read-only.
                              allOf: *ref_9
                              properties: *ref_10
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create a Project
      description: |
        Add a new Project (or PX Task) to the system.

        :::info[Required abilities]

        This operation requires the `Project - Add` ability, or
        `Authority - Administrator`.

        :::
      x-required-abilities:
        - Project - Add
      operationId: create-project
      requestBody:
        required: true
        description: |
          These are fields in the Project object that can be modified or given as input
          when creating a new Project.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Project object that can be modified or given as input
                when creating a new Project.
              required: *ref_134
              allOf: *ref_135
              properties: *ref_136
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '201':
          description: |
            The item was successfully created.

            This is a minimal response that indicates whether the request was successful and provides the
            URI of the created item. To retrieve additional details or the full item, you may need to make
            additional requests.

            :::info

            See the `Location` header for the URL of the new item,
            as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
            table name of the new item.

            :::
          content:
            application/json:
              schema:
                description: |
                  The item was successfully created.

                  This is a minimal response that indicates whether the request was successful and provides the
                  URI of the created item. To retrieve additional details or the full item, you may need to make
                  additional requests.

                  :::info

                  See the `Location` header for the URL of the new item,
                  as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
                  table name of the new item.

                  :::
                type: object
                properties: *ref_46
          headers:
            Location: *ref_47
            X-Item-Id: *ref_48
            X-Item-Table: *ref_49
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/projects/{projectId}:
    get:
      summary: Get a Project by ID
      description: Retrieve a Project by its internal ID
      operationId: get-project
      parameters:
        - name: projectId
          in: path
          required: true
          schema: &ref_138
            type: string
          description: |
            The internal ID of the Project to retrieve or modify.
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                description: |
                  A successful response with a single item object;
                  see the `results` key in the response body.
                allOf: &ref_257
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          A Project or PX Scheduled Task in the JX system.
                        allOf: *ref_137
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete a Project by ID
      description: |
        Remove a Project (or PX Task) from the system by its internal ID.

        Note that the response body is empty on a successful 204 response.

        # START_RAW
        import DeleteWarning from '@site/content/partials/\_delete-warning.mdx'

        <DeleteWarning itemName='project' />
        # END_RAW

        :::info[Required abilities]

        This operation requires the `Project - Delete` ability, or
        `Authority - Administrator`.

        :::
      x-required-abilities:
        - Project - Delete
      operationId: delete-project
      parameters:
        - name: projectId
          in: path
          required: true
          schema: *ref_138
          description: |
            The internal ID of the Project to retrieve or modify.
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            The object was successfully deleted. The response body is empty.
          content: {}
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update a Project record
      description: |
        Update a Project record by its internal ID. This will update the
        Project record with the new data provided in the request body.

        # START_RAW
        import PutHeaders from '@site/content/partials/_put-headers.mdx'

        <PutHeaders />
        # END_RAW

        :::info[Required abilities]

        This operation requires the `Project - Modify` ability, or
        `Authority - Administrator`.

        :::
      x-required-abilities:
        - Project - Modify
      operationId: update-project
      parameters:
        - name: projectId
          in: path
          required: true
          schema: *ref_138
          description: |
            The internal ID of the Project to retrieve or modify.
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          These are fields in the Project object that can be modified or given as input
          when creating a new Project.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Project object that can be modified or given as input
                when creating a new Project.
              required: *ref_134
              allOf: *ref_135
              properties: *ref_136
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/px/assignments:
    get:
      summary: List Assignments
      description: |
        Retrieve a list of Assignments in the system.

        Assignments are an artifact of a work assignment between
        a user (or team) and a [PX Task](/docs/reference/list-projects),
        which are stored in the "Projects" collection.
      operationId: list-assignments
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_258
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          An Assignment is an artifact of a work assignment to a PX Task
                          given to either a User or a Team.
                        items:
                          type: object
                          description: |
                            An Assignment is an artifact of a work assignment to a PX Task
                            given to either a User or a Team.
                          allOf: &ref_141
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              description: |
                                Fields that can be modified on an Assignment.
                              allOf: &ref_139
                                - type: object
                                  description: |
                                    Custom fields are used to store additional information about a resource.
                                    The fields are defined by the system administrators and can be of various
                                    data types.

                                    This page describes the schema for custom field values as shown in
                                    the response of a resource that has custom fields. There is an expanded
                                    schema for the custom field definitions at their own endpoint, as
                                    shown in the `id_attr_type_uri` field.

                                    :::tip

                                    The `custom_fields` object will only be included in the response if requested
                                    in `$keys`; see details below.

                                    :::

                                    ### Editing Custom Fields

                                    In general, to update Custom Field values for an object, when submitting
                                    a `PUT` request to update the object, you can include the `custom_fields`
                                    object in the request body. The `custom_fields` object should follow
                                    the basic schema shown here, but only needs to include the `value` field
                                    for each custom field you want to update. For example, this is enough
                                    to update two custom fields:

                                    ```json
                                    {
                                      "custom_fields": {
                                        "C41B2DDA662F4EF6B730F9CB6DB04696": {
                                          "value": "New Value"
                                        },
                                        "users_email": {
                                          "value": "new_email@example.com"
                                        }
                                    }
                                    ```

                                    Any custom fields not included in the `custom_fields` object will not be
                                    updated and will retain their current values. You can set the `null` value

                                    ### Viewability

                                    It's also important to note that Custom Fields are subject to
                                    viewability restrictions based on the "Reportability" property set by
                                    system administrators.

                                    :::tip

                                    Please note that access to view custom fields are automatically filtered by
                                    "Reportability", a property set by admins on the custom field definition that
                                    determines which User Roles are allowed to see the field. If you are not seeing
                                    a custom field that you expect to see, please check with your system administrator.

                                    :::

                                    ### Examples

                                    Here's an example value of `custom_fields` in a response:

                                    ```json
                                    "custom_fields": {
                                      "C41B2DDA662F4EF6B730F9CB6DB04696": {
                                        "attr_type": "ENUM_STRING_252",
                                        "description": "Employee pay group.",
                                        "id_attr_type": "C41B2DDA662F4EF6B730F9CB6DB04696",
                                        "id_attr_type_uri": "/api/v1/custom_fields/C41B2DDA662F4EF6B730F9CB6DB04696",
                                        "pname": "Pay Group",
                                        "value": "XYZ Pay Group"
                                      },
                                      "users_email": {
                                        "attr_type": "STRING_252",
                                        "description": "Email address",
                                        "id_attr_type": "users_email",
                                        "id_attr_type_uri": "/api/v1/custom_fields/users_email",
                                        "pname": "Email Address",
                                        "value": "username@example.com"
                                      }

                                    ```

                                    Note that there is an alternate representation available in most object types, where
                                    each custom field value is a separate key in the main object (not under `custom_fields`)
                                    in the following format, showing both a singular and multi-value example:

                                    ```json
                                    "users_attribs:C41B2DDA662F4EF6B730F9CB6DB04696": "XYZ Pay Group",
                                    "users_attribs:users_skills": [
                                      "CRM admin - advanced"
                                    ]
                                    ```

                                    This follows the pattern of `users_attribs:<field_id>`, where `users_attribs` is
                                    the internal table name for User custom fields. For other object types, the table
                                    name will be different, e.g. `projects_attribs`. This is a read-only representation
                                    for convenience and is not used for updating custom fields.

                                    This more compact representation is always provided (unless `$keys=$base` was set).
                                    However, the `custom_fields` object will only be available if `$keys=custom_fields`
                                    or `$keys=$extended` was set.
                                  properties: *ref_57
                              properties: &ref_140
                                pname:
                                  type: string
                                  description: |
                                    The name of the assignment.
                                  example: Documentation for Project XYZ
                                id_group:
                                  type: string
                                  description: |
                                    The internal ID of the group associated with this Assignment.
                                  example: C3C2B2D1A1E24E6B9E5A1D3C2B2D1A1
                                id_project:
                                  type: string
                                  description: |
                                    The internal ID of the project associated with this Assignment.
                                  example: C3C2B2D1A1E24E6B9E5A1D3C2B2D1A1
                                id_requisition:
                                  type: string
                                  description: |
                                    The internal ID of the requisition associated with this Assignment,
                                    if any.
                                  example: C3C2B2D1A1E24E6B9E5A1D3C2B2D1A1
                                id_role:
                                  type: string
                                  description: |
                                    The internal ID of the role associated with this Assignment.
                                  example: C3C2B2D1A1E24E6B9E5A1D3C2B2D1A1
                                id_team:
                                  type: string
                                  description: |
                                    The internal ID of the team associated with this Assignment,
                                    if any.
                                  example: C3C2B2D1A1E24E6B9E5A1D3C2B2D1A1
                                id_user:
                                  type: string
                                  description: |
                                    The internal ID of the user associated with this Assignment.
                                  example: C3C2B2D1A1E24E6B9E5A1D3C2B2D1A1
                                is_managed:
                                  type: boolean
                                  description: |
                                    Whether the Assignment is managed. A managed assignment has
                                    the start/end dates automatically managed based on the
                                    underlying PX Task.
                                  example: true
                                actual_duration:
                                  type: number
                                  description: |
                                    The actual duration of the assignment in days.
                                actual_end:
                                  type: number
                                  description: |
                                    The actual end date and time of the assignment in
                                    Unix epoch format.
                                actual_start:
                                  type: number
                                  description: |
                                    The actual start date and time of the assignment in
                                    Unix epoch format.
                                actual_work:
                                  type: number
                                  description: |
                                    The actual work hours of the assignment.
                                actual_work_updated:
                                  type: number
                                  description: |
                                    The date and time (in Unix epoch format) when the actual work
                                    hours were last updated.
                                duration_variance:
                                  type: number
                                  description: |
                                    The variance between the scheduled and actual duration of the
                                    assignment in days.
                                scheduled_duration:
                                  type: number
                                  description: |
                                    The scheduled duration of the assignment in days.
                                  example: 40
                                scheduled_end:
                                  type: number
                                  description: |
                                    The scheduled end date and time of the assignment in
                                    Unix epoch format.
                                  example: 1681430400
                                scheduled_start:
                                  type: number
                                  description: |
                                    The scheduled start date and time of the assignment in
                                    Unix epoch format.
                                  example: 1681372800
                                scheduled_work:
                                  type: number
                                  description: |
                                    The scheduled work hours of the assignment.
                                  example: 40
                                estimated_work:
                                  type: number
                                  description: |
                                    The estimate work hours for the assignment.
                                  example: 125
                                estimated_work1:
                                  type: number
                                  description: |
                                    Internal field.
                                  example: 0
                                estimated_work2:
                                  type: number
                                  description: |
                                    Internal field.
                                  example: 0
                                msp_assignment_id:
                                  type: string
                                  description: |
                                    The ID of the assignment for an external accounting system.
                                msp_file_id:
                                  type: string
                                  description: |
                                    The ID of the file for an external accounting system.
                                start_variance:
                                  type: number
                                  description: |
                                    The variance between the scheduled and actual start dates.
                                  example: 0
                                end_variance:
                                  type: number
                                  description: |
                                    The variance between the scheduled and actual end dates.
                                  example: 0
                                work_variance:
                                  type: number
                                  description: |
                                    The variance between the scheduled and actual work hours.
                                  example: 0
                                utilization:
                                  type: number
                                  description: |
                                    The utilization percentage for this resource on the assignment.
                                daily_load:
                                  type: number
                                  description: |
                                    The daily load for the assignment.
                                  example: 4
                            - type: object
                              description: |
                                Fields related to the creation of a resource, including the creation
                                timestamp, creator user ID, and creator user name.

                                Note that extended information about the creator user may be included
                                in the `creator_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_1
                              properties: *ref_2
                            - type: object
                              description: Object creation date/time fields common to many resources.
                              allOf: *ref_5
                              properties: *ref_6
                            - type: object
                              description: |
                                Fields related to the last modification of a resource, including the
                                last modified timestamp in various formats, the modifier's user ID and
                                full name. Please note that this only records the most recent
                                modification. In addition, it may not reflect modifications to child
                                resources or extended properties that are defined in other tables, such
                                as "Custom Fields". These last modifier fields are always read-only.

                                Note that extended information about the modifier user may be included
                                in the `modifier_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_7
                              properties: *ref_8
                            - type: object
                              description: |
                                The last modified date/time fields common to many resources. Please note
                                that this only records the most recent modification. In addition, it may
                                not record modifications to child resources or extended properties that
                                are defined in other tables, such as "Custom Fields". These fields are
                                read-only.
                              allOf: *ref_9
                              properties: *ref_10
                            - type: object
                              description: |
                                These are fields related to the deprecated "Domain" object.
                              properties: *ref_11
                          properties: &ref_142
                            id_assignment:
                              type: string
                              description: |
                                The unique internal ID of the Assignment. (Same as `id` field.)
                              readOnly: true
                            alerts:
                              type: array
                              description: |
                                An array of alerts associated with this Assignment.
                              readOnly: true
                              items:
                                type: object
                                description: |
                                  An alert object.
                                properties:
                                  assn_target_is_team:
                                    type: boolean
                                    description: |
                                      Whether the Assignment target is a Team.
                                  assn_target_is_user:
                                    type: boolean
                                    description: |
                                      Whether the Assignment target is a User.
                                  assn_target_pname:
                                    type: string
                                    description: |
                                      The name of the Assignment target (user or team).
                                  assn_url:
                                    type: string
                                    description: |
                                      The URL of the Assignment related to this alert.
                                  id_assn:
                                    type: string
                                    description: |
                                      The internal ID of the related Assignment.
                                  id_assn_target:
                                    type: string
                                    description: |
                                      The internal ID of the Assignment target (user or team).
                                  is_alert:
                                    type: boolean
                                    description: |
                                      Whether this alert is an alert.
                                  is_warning:
                                    type: boolean
                                    description: |
                                      Whether this alert is a warning.
                                  message:
                                    type: string
                                    example: Assignment completion overdue 49 day(s).
                            assn_type:
                              type: string
                              description: |
                                A human readable description of the type of the Assignment.
                              example: Direct assignment to user User XYZ
                              readOnly: true
                            is_team_assignment:
                              type: boolean
                              description: |
                                Whether the Assignment is assigned to a Team.
                              example: false
                              readOnly: true
                            is_user_assignment:
                              type: boolean
                              description: |
                                Whether the Assignment is assigned to a User.
                              example: true
                              readOnly: true
                            project_backup_owner_id:
                              type: string
                              description: |
                                The internal User ID of the backup owner of the project associated
                                with this Assignment.
                              example: C3C2B2D1A1E24E6B9E5A1D3C2B2D1A1
                              readOnly: true
                            project_backup_owner_pname:
                              type: string
                              description: |
                                The name of the backup owner of the project associated with this Assignment.
                              example: User XYZ
                              readOnly: true
                            project_owner_id:
                              type: string
                              description: |
                                The internal User ID of the owner of the project associated with this Assignment.
                              example: C3C2B2D1A1E24E6B9E5A1D3C2B2D1A1
                              readOnly: true
                            project_owner_pname:
                              type: string
                              description: |
                                The name of the owner of the project associated with this Assignment.
                              example: User XYZ
                              readOnly: true
                            project_pname:
                              type: string
                              description: |
                                The name of the project associated with this Assignment.
                              example: Project XYZ
                              readOnly: true
                            resource_overhead_hours:
                              type: number
                              description: |
                                The number of overhead hours for the resource associated with this Assignment.
                              example: 12
                              readOnly: true
                            resource_work_days:
                              type: number
                              description: |
                                The number of work days for the resource associated with this Assignment.
                              example: 5
                              readOnly: true
                            resource_work_hours:
                              type: number
                              description: |
                                The number of work hours for the resource associated with this Assignment.
                              example: 40
                              readOnly: true
                            target_pname:
                              type: string
                              description: |
                                The name of the target (user or team) of the Assignment.
                              readOnly: true
                              example: User XYZ
                            top_level_project_id:
                              type: string
                              description: |
                                The internal ID of the top level project associated with this Assignment.
                              example: C3C2B2D1A1E24E6B9E5A1D3C2B2D1A1
                              readOnly: true
                            top_level_project_pname:
                              type: string
                              description: |
                                The name of the top level project associated with this Assignment.
                              example: Project XYZ
                              readOnly: true
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create an Assignment
      description: |
        Create a new Assignment in the system.

        :::info[Required abilities]

        This operation requires the `Project - Add` ability, or
        `Authority - Administrator`.

        :::
      operationId: create-assignment
      x-required-abilities:
        - Project - Add
      requestBody:
        required: true
        description: |
          Fields that can be modified on an Assignment.
        content:
          application/json:
            schema:
              type: object
              description: |
                Fields that can be modified on an Assignment.
              allOf: *ref_139
              properties: *ref_140
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '201':
          description: |
            The item was successfully created.

            This is a minimal response that indicates whether the request was successful and provides the
            URI of the created item. To retrieve additional details or the full item, you may need to make
            additional requests.

            :::info

            See the `Location` header for the URL of the new item,
            as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
            table name of the new item.

            :::
          content:
            application/json:
              schema:
                description: |
                  The item was successfully created.

                  This is a minimal response that indicates whether the request was successful and provides the
                  URI of the created item. To retrieve additional details or the full item, you may need to make
                  additional requests.

                  :::info

                  See the `Location` header for the URL of the new item,
                  as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
                  table name of the new item.

                  :::
                type: object
                properties: *ref_46
          headers:
            Location: *ref_47
            X-Item-Id: *ref_48
            X-Item-Table: *ref_49
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/px/assignments/{id_item}:
    get:
      summary: Get an Assignment
      description: |
        Retrieve information about a specific Assignment in the system.
      operationId: get-assignment
      parameters:
        - name: id_item
          in: path
          required: true
          schema: &ref_143
            type: string
          description: |
            The internal ID of the Assignment to retrieve or modify.
          example: 64BBA147B9AC41D9978062300826C89F
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_259
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          An Assignment is an artifact of a work assignment to a PX Task
                          given to either a User or a Team.
                        allOf: *ref_141
                        properties: *ref_142
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete an Assignment
      description: |
        Remove an Assignment from the system.

        # START_RAW
        import DeleteWarning from '@site/content/partials/\_delete-warning.mdx'

        <DeleteWarning itemName='accrual' />
        # END_RAW

        :::info[Required abilities]

        This operation requires the `Project - Delete` ability, or
        `Authority - Administrator`.

        :::
      operationId: delete-assignment
      x-required-abilities:
        - Project - Delete
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_143
          description: |
            The internal ID of the Assignment to retrieve or modify.
          example: 64BBA147B9AC41D9978062300826C89F
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            Successful response; the Assignment has been removed from the system.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update an Assignment
      description: |
        Update an existing Assignment in the system.

        :::info[Required abilities]

        This operation requires the `Project - Edit` ability, or
        `Authority - Administrator`.

        :::
      x-required-abilities:
        - Project - Edit
      operationId: update-assignment
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_143
          description: |
            The internal ID of the Assignment to retrieve or modify.
          example: 64BBA147B9AC41D9978062300826C89F
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          Fields that can be modified on an Assignment.
        content:
          application/json:
            schema:
              type: object
              description: |
                Fields that can be modified on an Assignment.
              allOf: *ref_139
              properties: *ref_140
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/px/requisitions:
    get:
      summary: List Requisitions
      description: |
        Retrieve a list of available Requisitions.
      operationId: list-requisitions
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_260
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          A Requisition represents a request for an assignment of a
                          user (or team) to a particular PX Task.
                        items:
                          type: object
                          description: |
                            A Requisition represents a request for an assignment of a
                            user (or team) to a particular PX Task.
                          allOf: &ref_145
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              description: |
                                A Requisition represents a request for an assignment of a
                                user (or team) to a particular PX Task. These are the fields
                                that can be modified when creating or updating a Requisition.
                              properties: &ref_144
                                id_project:
                                  type: string
                                  description: |
                                    The internal ID of the Project that the Requisition is associated with.
                                    This can only be set at create time (`POST`) and cannot be updated.
                                  example: 20945205C94E4576B5FB798DA09B44DE
                                id_requestee:
                                  type: string
                                  description: |
                                    The internal ID of the user or team that the Requisition is requesting.
                                  example: 64BBA147B9AC41D9978062300826C89F
                                id_requestor:
                                  type: string
                                  description: |
                                    The internal ID of the user that is requesting the Requisition.
                                  example: 64BBA147B9AC41D9978062300826C89F
                                request_date:
                                  type: number
                                  description: |
                                    The date that the Requisition was created. This is a Unix timestamp.
                                  example: 1681776000
                                response_date:
                                  type: number
                                  description: |
                                    The date that the Requisition was responded to. This is a Unix timestamp.
                                  example: 1681796000
                                state:
                                  type: string
                                  example: open
                                  description: |
                                    The current state of the Requisition. The options are:

                                    - `open` - the Requisition has been created and is awaiting a response
                                    - `fulfilled` - the Requisition has been accepted and the assignment has been created
                                    - `declined` - the Requisition has been declined
                                    - `discussion` - the Requisition is in discussion
                                  enum:
                                    - open
                                    - fulfilled
                                    - declined
                                    - discussion
                                comment:
                                  type: string
                                  description: |
                                    A comment that can be added to the Requisition.
                                notify_requestee:
                                  type: boolean
                                  description: |
                                    If `true`, the requestee will be notified when the Requisition is created
                                    or updated.
                                notify_requestor:
                                  type: boolean
                                  description: |
                                    If `true`, the requestor will be notified when the Requisition is responded to.
                                id_assignment:
                                  type: string
                                  description: |
                                    The internal ID of the
                                    [Assignment](/docs/reference/list-assignments) that was created from this
                                    Requisition.
                                    This is only set when the Requisition is fulfilled.
                                scheduled_end:
                                  type: number
                                  description: |
                                    The scheduled end date of the assignment.
                                    This is a Unix timestamp.
                                  example: 1679616000
                                scheduled_start:
                                  type: number
                                  description: |
                                    The scheduled start date of the assignment.
                                    This is a Unix timestamp.
                                  example: 1678060800
                                scheduled_work:
                                  type: number
                                  description: |
                                    The scheduled work hours for the assignment.
                                  example: 40
                            - type: object
                              description: |
                                Fields related to the creation of a resource, including the creation
                                timestamp, creator user ID, and creator user name.

                                Note that extended information about the creator user may be included
                                in the `creator_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_1
                              properties: *ref_2
                            - type: object
                              description: Object creation date/time fields common to many resources.
                              allOf: *ref_5
                              properties: *ref_6
                            - type: object
                              description: |
                                Fields related to the last modification of a resource, including the
                                last modified timestamp in various formats, the modifier's user ID and
                                full name. Please note that this only records the most recent
                                modification. In addition, it may not reflect modifications to child
                                resources or extended properties that are defined in other tables, such
                                as "Custom Fields". These last modifier fields are always read-only.

                                Note that extended information about the modifier user may be included
                                in the `modifier_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_7
                              properties: *ref_8
                            - type: object
                              description: |
                                The last modified date/time fields common to many resources. Please note
                                that this only records the most recent modification. In addition, it may
                                not record modifications to child resources or extended properties that
                                are defined in other tables, such as "Custom Fields". These fields are
                                read-only.
                              allOf: *ref_9
                              properties: *ref_10
                            - type: object
                              description: |
                                These are fields related to the deprecated "Domain" object.
                              properties: *ref_11
                          properties: &ref_146
                            id_requisition:
                              type: string
                              description: |
                                The internal ID of the Requisition. This is the same as the `id` field.
                              example: 150B0C860670432E82D39F14F98DD2F3
                              readOnly: true
                            pname:
                              type: string
                              description: |
                                The name of the Requisition. This is generated and cannot be modified.
                              example: Task XYZ
                              readOnly: true
                            assignment_pname:
                              type: string
                              description: |
                                The name of the Assignment that was created from this Requisition.
                                This is generated and cannot be modified.
                              example: Task XYZ
                              readOnly: true
                            description:
                              type: string
                              description: |
                                The description of the Requisition as shown to the Requestee.
                              readOnly: true
                              example: Requisition for Task XYZ
                            history_url:
                              type: string
                              format: uri-reference
                              description: |
                                The URL to the history of the Requisition.
                              example: notes.pyc?viewnote=F6668AA582574475A6FE5D1CC501F795&bday=19710101&eday=20131214
                              readOnly: true
                            id_assignment_properties:
                              type: object
                              description: |
                                The properties of the Assignment that was created from this Requisition.
                                This is only included if requested in `$keys`.
                              allOf:
                                - type: object
                                  description: |
                                    An Assignment is an artifact of a work assignment to a PX Task
                                    given to either a User or a Team.
                                  allOf: *ref_141
                                  properties: *ref_142
                              readOnly: true
                            id_project_properties:
                              type: object
                              description: |
                                The properties of the Project that the Requisition is associated with.
                                This is only included if requested in `$keys`.
                              allOf:
                                - type: object
                                  description: |
                                    A Project or PX Scheduled Task in the JX system.
                                  allOf: *ref_137
                              readOnly: true
                            id_requestee_properties:
                              type: object
                              description: |
                                The properties of the Requestee of the Requisition.
                                This is only included if requested in `$keys`.
                              allOf:
                                - type: object
                                  description: |
                                    A user account in the JX system.
                                  allOf: *ref_3
                                  properties: *ref_4
                              readOnly: true
                            id_requestor_properties:
                              type: object
                              description: |
                                The properties of the Requestor of the Requisition.
                                This is only included if requested in `$keys`.
                              allOf:
                                - type: object
                                  description: |
                                    A user account in the JX system.
                                  allOf: *ref_3
                                  properties: *ref_4
                              readOnly: true
                            project_pname:
                              type: string
                              description: |
                                The name of the Project that the Requisition is associated with.
                              example: Project XYZ
                              readOnly: true
                            requestee_fullname:
                              type: string
                              description: |
                                The full name of the Requestee of the Requisition.
                              readOnly: true
                            requestor_fullname:
                              type: string
                              description: |
                                The full name of the Requestor of the Requisition.
                              readOnly: true
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create a Requisition
      description: |
        Create a new Requisition, which is a request for an assignment
        of a resource (user or team) to a PX Task.

        :::info[Required abilities]

        This operation requires either the `Access - Scheduled Project Management`
        ability, or `Authority - Administrator`.

        :::
      x-required-abilities:
        - Access - Scheduled Project Management
      operationId: create-requisition
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          A Requisition represents a request for an assignment of a
          user (or team) to a particular PX Task. These are the fields
          that can be modified when creating or updating a Requisition.
        content:
          application/json:
            schema:
              type: object
              description: |
                A Requisition represents a request for an assignment of a
                user (or team) to a particular PX Task. These are the fields
                that can be modified when creating or updating a Requisition.
              properties: *ref_144
      responses:
        '201':
          description: |
            The item was successfully created.

            This is a minimal response that indicates whether the request was successful and provides the
            URI of the created item. To retrieve additional details or the full item, you may need to make
            additional requests.

            :::info

            See the `Location` header for the URL of the new item,
            as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
            table name of the new item.

            :::
          content:
            application/json:
              schema:
                description: |
                  The item was successfully created.

                  This is a minimal response that indicates whether the request was successful and provides the
                  URI of the created item. To retrieve additional details or the full item, you may need to make
                  additional requests.

                  :::info

                  See the `Location` header for the URL of the new item,
                  as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
                  table name of the new item.

                  :::
                type: object
                properties: *ref_46
          headers:
            Location: *ref_47
            X-Item-Id: *ref_48
            X-Item-Table: *ref_49
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/px/requisitions/{id_item}:
    get:
      summary: Get Requisition
      description: |
        Retrieve information about a specific Requisition in the system.
      operationId: get-requisition
      parameters:
        - name: id_item
          in: path
          required: true
          schema: &ref_147
            type: string
          description: The ID of the Requisition to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_261
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          A Requisition represents a request for an assignment of a
                          user (or team) to a particular PX Task.
                        allOf: *ref_145
                        properties: *ref_146
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete Requisition
      description: |
        Delete a Requisition from the system.

        :::info[Required abilities]

        This operation requires either the `Access - Scheduled Project Management`
        ability, or `Authority - Administrator`.

        :::
      x-required-abilities:
        - Access - Scheduled Project Management
      operationId: delete-requisition
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_147
          description: The ID of the Requisition to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            The object was successfully deleted. The response body is empty.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update Requisition
      description: |
        Modify the fields of a Requisition.

        :::info[Required abilities]

        This operation requires either the `Access - Scheduled Project Management`
        ability, or `Authority - Administrator`.

        :::
      x-required-abilities:
        - Access - Scheduled Project Management
      operationId: update-requisition
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_147
          description: The ID of the Requisition to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          A Requisition represents a request for an assignment of a
          user (or team) to a particular PX Task. These are the fields
          that can be modified when creating or updating a Requisition.
        content:
          application/json:
            schema:
              type: object
              description: |
                A Requisition represents a request for an assignment of a
                user (or team) to a particular PX Task. These are the fields
                that can be modified when creating or updating a Requisition.
              properties: *ref_144
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/px/teams:
    get:
      summary: List Teams
      description: |
        Retrieve a list of all Teams in the system.

        Teams are groups of users for making
        preliminary "team assignments" to scheduled tasks before you have
        determined the individual(s) who will do the work.

        Teams can be assigned "Skills" in order to help make
        decisions about which Teams are best suited for
        specific tasks.

        The list of available skills is defined by the Team Skills
        [User Custom Field](/docs/reference/list-custom-fields).
      operationId: list-teams
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_262
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          The Teams feature allows you to create groups of users with shared
                          characteristics for making preliminary "team assignments" to
                          scheduled tasks before you have determined the individual(s) who
                          will do the work.

                          See the [List Teams](/docs/reference/list-teams) endpoint for
                          general information about the purpose and role of Teams in the
                          Journyx system.
                        items:
                          type: object
                          description: |
                            The Teams feature allows you to create groups of users with shared
                            characteristics for making preliminary "team assignments" to
                            scheduled tasks before you have determined the individual(s) who
                            will do the work.

                            See the [List Teams](/docs/reference/list-teams) endpoint for
                            general information about the purpose and role of Teams in the
                            Journyx system.
                          allOf: &ref_151
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              description: |
                                These are fields in the Team object that can be modified or given as
                                input when creating a new Team.

                                See the [List Teams](/docs/reference/list-teams) endpoint for
                                general information about the purpose and role of Teams in the
                                Journyx system.
                              required: &ref_148
                                - pname
                              allOf: &ref_149
                                - type: object
                                  description: |
                                    These are group-related fields that are common to most object types.

                                    Please note that these fields may not be present in the response unless
                                    the `$keys` query parameter includes the field name, e.g. `$keys=groups`.

                                    See [Collection#Selecting Fields](/docs/collections#selecting-fields)
                                    for more information about the `$keys` parameter.

                                    The `$keys=$extended` parameter will also include the `group_names` field.

                                    In general, Groups determine the visibility of objects to each user in the system.
                                    For example, a user can only see objects that belong to a Group that
                                    they are themselves a member of.

                                    When creating or modifying objects with `POST` or `PUT` requests, you can
                                    only use the `groups` field to specify the Group IDs that the object belongs to.
                                    The `group_names` field is read-only.

                                    If an object does not belong to any groups, it is considered to be "hidden"
                                    and the `is_hidden` field will be set to `true`. Hidden objects are normally
                                    only accessible to administrators, and then only if the `$filter` query parameter
                                    is used to include hidden status objects.

                                    For most object types, that would be done with a filter like this:

                                    ```
                                    $filter = status_code intersects ["lr","ro","h"]
                                    ```

                                    The [Users](/docs/reference/list-users) collection can be filtered
                                    like this to show hidden users:

                                    ```
                                    $filter = status intersects ["active","inactive","hidden"]
                                    ```

                                    You can read more about [Filtering](/docs/collections#filtering) in the
                                    section on Collections.

                                    If you **only** want hidden objects, just remove the other status codes from
                                    the filter.
                                  allOf: *ref_58
                                  properties: *ref_59
                              properties: &ref_150
                                pname:
                                  type: string
                                  description: |
                                    The name of the Team.
                                  example: Sales Team
                                auto_add:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates whether the Team is automatically added to new Groups
                                    as they are created.
                                hidden:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates whether the Team is hidden.
                                team_members:
                                  type: array
                                  description: |
                                    A list of Team Members that belongs to current Team.
                                  items:
                                    type: object
                                    properties:
                                      fullname:
                                        type: string
                                        description: |
                                          The full name of the user.
                                        example: Alex Denton
                                      id_user:
                                        type: string
                                        description: |
                                          The unique internal ID of this user (32-character hexadecimal string).
                                        example: 66C197E19B1645A8A3D4A966F39907CF
                                      skills:
                                        type: array
                                        items:
                                          type: string
                                          description: |
                                            Skill name.
                                          example: C++ Programming
                                        description: |
                                          A list of skills for the user.

                                          Important: the list of available skills is determined by
                                          the "Team Skills" User Custom Field definition, a multi-selection
                                          typed [Custom Field](/docs/reference/list-custom-fields).
                                          In order to modify the list of available skills, this
                                          User Custom Field definition must be updated.
                            - type: object
                              description: |
                                Fields related to the creation of a resource, including the creation
                                timestamp, creator user ID, and creator user name.

                                Note that extended information about the creator user may be included
                                in the `creator_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_1
                              properties: *ref_2
                            - type: object
                              description: Object creation date/time fields common to many resources.
                              allOf: *ref_5
                              properties: *ref_6
                            - type: object
                              description: |
                                Fields related to the last modification of a resource, including the
                                last modified timestamp in various formats, the modifier's user ID and
                                full name. Please note that this only records the most recent
                                modification. In addition, it may not reflect modifications to child
                                resources or extended properties that are defined in other tables, such
                                as "Custom Fields". These last modifier fields are always read-only.

                                Note that extended information about the modifier user may be included
                                in the `modifier_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_7
                              properties: *ref_8
                            - type: object
                              description: |
                                The last modified date/time fields common to many resources. Please note
                                that this only records the most recent modification. In addition, it may
                                not record modifications to child resources or extended properties that
                                are defined in other tables, such as "Custom Fields". These fields are
                                read-only.
                              allOf: *ref_9
                              properties: *ref_10
                            - type: object
                              description: |
                                These are fields related to the deprecated "Domain" object.
                              properties: *ref_11
                          properties: &ref_152
                            id_team:
                              type: string
                              description: |
                                The internal ID of the Team (32-character hexadecimal string).
                              example: 64BBA147B9AC41D9978062300826C89F
                              readOnly: true
                            skills_field_name:
                              type: string
                              description: |
                                Indicates the name of the
                                [User Custom Field](/docs/reference/list-custom-fields)
                                that defines the available Skills to be assigned
                                to Teams.
                              example: Team Skills
                            team_member_group_id:
                              type: string
                              description: |
                                The ID of a special group that contains the members
                                of this Team (32-character hexadecimal string).
                              example: 96C197E19B1645A8A3D4A966F39907CF
                            team_type:
                              type: integer
                              description: |
                                The type of team - usually 1.
                              example: 1
                            team_type_name:
                              type: string
                              description: |
                                The name of Team type.
                              example: PX Team
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create a new Team
      description: |
        Create a new Team in the system.

        :::info[Required abilities]

        This operation requires the `Teams - Create` ability, or
        `Authority - Administrator`.

        :::

        See the [List Teams](/docs/reference/list-teams) endpoint for
        general information about the purpose and role of Teams in the
        Journyx system.
      operationId: create-team
      x-required-abilities:
        - Teams - Create
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          These are fields in the Team object that can be modified or given as
          input when creating a new Team.

          See the [List Teams](/docs/reference/list-teams) endpoint for
          general information about the purpose and role of Teams in the
          Journyx system.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Team object that can be modified or given as
                input when creating a new Team.

                See the [List Teams](/docs/reference/list-teams) endpoint for
                general information about the purpose and role of Teams in the
                Journyx system.
              required: *ref_148
              allOf: *ref_149
              properties: *ref_150
      responses:
        '201':
          description: |
            The item was successfully created.

            This is a minimal response that indicates whether the request was successful and provides the
            URI of the created item. To retrieve additional details or the full item, you may need to make
            additional requests.

            :::info

            See the `Location` header for the URL of the new item,
            as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
            table name of the new item.

            :::
          content:
            application/json:
              schema:
                description: |
                  The item was successfully created.

                  This is a minimal response that indicates whether the request was successful and provides the
                  URI of the created item. To retrieve additional details or the full item, you may need to make
                  additional requests.

                  :::info

                  See the `Location` header for the URL of the new item,
                  as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
                  table name of the new item.

                  :::
                type: object
                properties: *ref_46
          headers:
            Location: *ref_47
            X-Item-Id: *ref_48
            X-Item-Table: *ref_49
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/px/teams/{id_team}:
    get:
      summary: Get a Team
      description: |
        Retrieve information about a specific Team in the system.

        See the [List Teams](/docs/reference/list-teams) endpoint for
        general information about the purpose and role of Teams in the
        Journyx system.
      operationId: get-team
      parameters:
        - name: id_team
          in: path
          required: true
          schema: &ref_153
            type: string
          description: The ID of the Team to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_263
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          The Teams feature allows you to create groups of users with shared
                          characteristics for making preliminary "team assignments" to
                          scheduled tasks before you have determined the individual(s) who
                          will do the work.

                          See the [List Teams](/docs/reference/list-teams) endpoint for
                          general information about the purpose and role of Teams in the
                          Journyx system.
                        allOf: *ref_151
                        properties: *ref_152
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete a Team
      description: |
        Remove a Team from the system.

        :::info[Required abilities]

        This operation requires the `Teams - Delete` ability, or
        `Authority - Administrator`.

        :::
      operationId: delete-team
      x-required-abilities:
        - Teams - Delete
      parameters:
        - name: id_team
          in: path
          required: true
          schema: *ref_153
          description: The ID of the Team to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            The object was successfully deleted. The response body is empty.
          content: {}
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update a Team
      description: |
        Update (modify) an existing Team in the system.

        :::info[Required abilities]

        This operation requires the `Teams - Modify` ability, or
        `Authority - Administrator`.

        :::

        See the [List Teams](/docs/reference/list-teams) endpoint for
        general information about the purpose and role of Teams in the
        Journyx system.
      x-required-abilities:
        - Teams - Modify
      operationId: update-team
      parameters:
        - name: id_team
          in: path
          required: true
          schema: *ref_153
          description: The ID of the Team to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          These are fields in the Team object that can be modified or given as
          input when creating a new Team.

          See the [List Teams](/docs/reference/list-teams) endpoint for
          general information about the purpose and role of Teams in the
          Journyx system.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Team object that can be modified or given as
                input when creating a new Team.

                See the [List Teams](/docs/reference/list-teams) endpoint for
                general information about the purpose and role of Teams in the
                Journyx system.
              required: *ref_148
              allOf: *ref_149
              properties: *ref_150
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/rate_rules/policies:
    get:
      summary: List Rate Rule Policies
      description: |
        Retrieve a list of Rate Rule Policies in the system.
        This endpoint is read-only and not fully developed;
        currently intended to support the use case of selecting from
        available policies on the User Management screen.

        # START_RAW
        import ReadOnlyEndpoint from '@site/content/partials/_read-only-endpoint.mdx'

        <ReadOnlyEndpoint itemName="Rate Rule Policies" />
        # END_RAW
      operationId: list-rate-rule-policies
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_264
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          A rate rules policy.
                        items:
                          type: object
                          description: |
                            A rate rules policy.
                          allOf: &ref_154
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              properties: *ref_69
                            - type: object
                              properties: *ref_70
                            - type: object
                              properties: *ref_71
                            - type: object
                              properties: *ref_72
                            - type: object
                              description: |
                                These are fields related to the deprecated "Domain" object.
                              properties: *ref_11
                          properties: &ref_155
                            context_class:
                              type: string
                              description: |
                                Always set to `RateFlow` for a Policy.
                              enum:
                                - RateFlow
                              example: RateFlow
                            descendants:
                              type: number
                              description: |
                                Always set to 0.0 for a Policy.
                              example: 0
                            description:
                              type: string
                              description: |
                                The description of the policy.
                              example: This is a rate rules policy.
                            footer:
                              type: string
                              nullable: true
                              description: |
                                Always null for a Policy.
                              example: null
                            header:
                              type: string
                              nullable: true
                              description: |
                                Always null for a Policy.
                              example: null
                            id_rule:
                              type: string
                              description: |
                                The unique internal ID of the policy. Same as the `id` field.
                                Unlike most other object types, the ID will be composed
                                of the `install_root_dom` constant plus the `pname`` field.
                              example: install_root_domTestPolicy
                            pname:
                              type: string
                              description: |
                                The name of the policy.
                              example: Billing Policy
                            python_1:
                              type: string
                              description: |
                                Internal field.
                            python_2:
                              type: string
                              description: |
                                Internal field.
                            python_3:
                              type: string
                              description: |
                                Internal field.
                            python_4:
                              type: string
                              description: |
                                Internal field.
                            python_5:
                              type: string
                              description: |
                                Internal field.
                            python_6:
                              type: string
                              description: |
                                Internal field.
                            python_7:
                              type: string
                              description: |
                                Internal field.
                            python_8:
                              type: string
                              description: |
                                Internal field.
                            python_9:
                              type: string
                              description: |
                                Internal field.
                            python_10:
                              type: string
                              description: |
                                Internal field.
                            rejected:
                              type: number
                              description: |
                                Always set to 0.0 for a Policy.
                              example: 0
                            subtype:
                              type: string
                              description: |
                                Always set to `RuleSet` for a Policy.
                              example: RuleSet
                              enum:
                                - RuleSet
                            type:
                              type: string
                              description: |
                                Always set to `JxRule` for a Policy.
                            xml_1:
                              type: string
                              description: |
                                Internal field.
                            xml_2:
                              type: string
                              description: |
                                Internal field.
                            xml_3:
                              type: string
                              description: |
                                Internal field.
                            xml_4:
                              type: string
                              description: |
                                Internal field.
                            xml_5:
                              type: string
                              description: |
                                Internal field.
                            xml_6:
                              type: string
                              description: |
                                Internal field.
                            xml_7:
                              type: string
                              description: |
                                Internal field.
                            xml_8:
                              type: string
                              description: |
                                Internal field.
                            xml_9:
                              type: string
                              description: |
                                Internal field.
                            xml_10:
                              type: string
                              description: |
                                Internal field.
                            xml_11:
                              type: string
                              description: |
                                Internal field.
                            xml_12:
                              type: string
                              description: |
                                Internal field.
                            xml_13:
                              type: string
                              description: |
                                Internal field.
                            xml_14:
                              type: string
                              description: |
                                Internal field.
                            xml_15:
                              type: string
                              description: |
                                Internal field.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/rate_rules/policies/{id_item}:
    get:
      summary: Get Rate Rule Policy
      description: |
        Retrieve information about a specific Rate Rule Policy in the system.

        This is currently a read-only endpoint.
      operationId: get-rate-rule-policy
      parameters:
        - name: id_item
          in: path
          required: true
          schema: &ref_295
            type: string
          description: |
            The internal ID of the Rate Rules Policy.
          example: install_root_domTestPolicy
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_265
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          A rate rules policy.
                        allOf: *ref_154
                        properties: *ref_155
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/reports/commit_records:
    post:
      summary: Commit records from report
      description: |
        This marks the time/expense records listed in a report as "Committed".

        A "committed" record is marked in the system with a flag that signifies
        that it's exported to an external system or otherwise processed, and
        can no longer be modified in Journyx.

        The report type must be an "Item" type (regular Time or Expense report).

        :::info[Required abilities]

        You must have `Authority - Administrator`, and additionally, the System
        Setting > Approvals > Audit Trail > Show Report Commit button option
        must be set.

        :::
      operationId: reports-commit-records
      requestBody:
        required: true
        description: |
          The request body for the `POST /api/v1/reports/commit_records` endpoint.
        content:
          application/json:
            schema:
              type: object
              description: |
                The request body for the `POST /api/v1/reports/commit_records` endpoint.
              required: &ref_266
                - id_report
                - start
                - end
              properties: &ref_267
                id_report:
                  type: string
                  description: |
                    The ID of the report to use to locate time/expense records to commit.
                  example: D964DF9968B8424AB1E939BEDB44C68D
                start:
                  type: string
                  description: |
                    The start date of the period to commit in YYYYMMDD (F8) format.
                  example: '20210101'
                end:
                  type: string
                  description: |
                    The end date of the period to commit in YYYYMMDD (F8) format.
                  example: '20210131'
                period_index:
                  type: integer
                  description: |
                    An offset from the time period given by `start` and `end` to move forward
                    (if positive) or backward (if negative) in time.
                  example: -1
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            The response body for the `POST /api/v1/reports/commit_records` endpoint.
          content:
            application/json:
              schema:
                type: object
                description: |
                  The response body for the `POST /api/v1/reports/commit_records` endpoint.
                allOf: &ref_268
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response.
                    type: object
                    properties: *ref_31
                  - type: object
                    properties:
                      results:
                        type: boolean
                        example: true
                        description: |
                          Indicates whether the request was successful (normally true if it's not
                          an error response).
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/reports/get_custom_field_search_settings:
    post:
      summary: Custom Field search options
      description: |
        Get the list of custom fields that can be used in the search filter for a report.

        Note that the results from this endpoint may include all Custom Fields, but
        only `ENUM_*` type Custom Fields will have the `items` list populated.

        # START_RAW
        import NotRestful from '@site/content/partials/\_not-restful.mdx'

        <NotRestful />
        # END_RAW

        This is mainly used to support the user interface code for Reports.
      operationId: reports-get-custom-field-search-settings
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - table_name
              properties:
                table_name:
                  type: string
                  description: |
                    The table name of the base object that you want to retrieve
                    Custom Field report search options for. Example: `users`, `projects`.
                  example: users
      responses:
        '200':
          description: |
            The response body for the `POST /api/v1/reports/get_custom_field_search_settings` endpoint.

            This is a list of select-type (`ENUM`) Custom Fields that can be used in the
            report search filter.
          content:
            application/json:
              schema:
                type: object
                description: |
                  The response body for the `POST /api/v1/reports/get_custom_field_search_settings` endpoint.

                  This is a list of select-type (`ENUM`) Custom Fields that can be used in the
                  report search filter.
                allOf: &ref_269
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response.
                    type: object
                    properties: *ref_31
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |
                                The internal ID of the Custom Field.
                              example: users_dept
                            text:
                              type: string
                              description: |
                                The display name (pname) of the Custom Field.
                              example: Department
                            items:
                              type: array
                              description: |
                                The list of options for the Custom Field.
                                This list will only be populated for `ENUM` type Custom Fields.
                              items:
                                type: object
                                properties:
                                  text:
                                    type: string
                                    description: |
                                      The display name of the Custom Field option.
                                    example: Sales
                                  value:
                                    type: string
                                    description: |
                                      The internal ID of the Custom Field option.
                                    example: '12345'
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/reports/get_group_search_types:
    post:
      summary: Group Type search options
      operationId: reports-get-group-search-types
      description: |
        Get the list of Group Types that can be used in the search filter for a report.

        This is mainly used to support the user interface code for Reports.
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        description: |
          You do not need to provide a request body for this operation.
        content:
          application/json:
            schema:
              type: object
              nullable: true
              description: |
                You do not need to provide a request body for this operation.
              properties: *ref_119
      responses:
        '200':
          description: |
            The response body for the `POST /api/v1/reports/get_group_search_types` endpoint.

            This shows the *types of Groups* available for filtering. Examples:

            - Normal
            - Assignment
            - System Generated
            - Work Request
            - PX Team
          content:
            application/json:
              schema:
                type: object
                description: |
                  The response body for the `POST /api/v1/reports/get_group_search_types` endpoint.

                  This shows the *types of Groups* available for filtering. Examples:

                  - Normal
                  - Assignment
                  - System Generated
                  - Work Request
                  - PX Team
                allOf: &ref_270
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response.
                    type: object
                    properties: *ref_31
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          The list of Group Types that can be used in the report search filter.
                        items:
                          type: object
                          properties:
                            value:
                              type: string
                              description: |
                                The internal ID of the Group Type.
                            text:
                              type: string
                              description: |
                                The display name of the Group Type.
                            encoded:
                              type: string
                              description: |
                                An encoded form of the option for internal use.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/reports/get_report_settings:
    post:
      summary: Load report settings
      operationId: get-report-settings
      description: |
        Get the settings for a specific report.

        # START_RAW
        import NotRestful from '@site/content/partials/\_not-restful.mdx'

        <NotRestful />
        # END_RAW

        :::info[Required abilities]

        In order to retrieve the settings for a report, you must be either
        the owner of that report, or have either the `Authority - Administrator`
        or `Report Modification` ability.

        :::
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - id_report
              properties:
                id_report:
                  type: string
                  description: |
                    The internal ID of the report you want to retrieve settings for.
                  example: '12345'
      responses:
        '200':
          description: |
            The response body for the `POST /api/v1/reports/get_report_settings` endpoint.

            This is the current settings for the report. This includes the report's
            name, description, and the settings for the report's display columns.
          content:
            application/json:
              schema:
                type: object
                description: |
                  The response body for the `POST /api/v1/reports/get_report_settings` endpoint.

                  This is the current settings for the report. This includes the report's
                  name, description, and the settings for the report's display columns.
                allOf: &ref_271
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response.
                    type: object
                    properties: *ref_31
                  - type: object
                    description: |
                      The current settings for the report. This includes the report's
                      name, description, and the settings for the report's display columns.
                    properties: &ref_156
                      options:
                        type: array
                        description: |
                          The set of report options.
                        items:
                          type: object
                          properties:
                            key:
                              type: string
                              example: anchordom
                              description: |
                                The internal ID of the report setting.
                            value:
                              type: string
                              description: |
                                The value of the report setting.
                            hidden:
                              type: boolean
                              description: |
                                If this key is present and true, then
                                this report option will be hidden in the UI.
                              example: false
                            items:
                              type: array
                              description: |
                                The list of options or choices for the report setting,
                                if applicable.
                              items:
                                type: object
                                properties:
                                  value:
                                    type: string
                                    description: |
                                      The internal ID of the option.
                                  text:
                                    type: string
                                    description: |
                                      The display name of the option.
                      filters:
                        type: array
                        description: |
                          The list of all filters that the report users.
                        items:
                          type: object
                          properties:
                            key:
                              type: string
                              example: userfilter
                              description: |
                                The internal ID of the filter.
                            label:
                              type: string
                              example: Users
                              description: |
                                The display name of the filter.
                            reptype:
                              type: integer
                              example: 10
                              description: |
                                The internal code for the type of report.
                            include:
                              type: string
                              example: ALL
                              description: |
                                The scope of the filter.
                            selected:
                              type: array
                              items:
                                type: string
                              description: |
                                The list of currently selected choices for the filter.
                            selectItems:
                              type: array
                              items:
                                type: object
                                properties:
                                  value:
                                    type: string
                                    example: '123'
                                    description: |
                                      The internal ID of the filter choice.
                                  text:
                                    type: string
                                    example: Sales
                                    description: |
                                      The display name of the filter choice.
                            match:
                              type: string
                              example: and
                              description: |
                                The match type for the filter. Either `and` or `or`.
                            customFilters:
                              type: array
                              description: |
                                The list of Custom Field filters that the report users.
                            canFilterCustomFields:
                              type: boolean
                              example: true
                              description: |
                                Whether the report can filter by Custom Fields. In other
                                words, are there any `ENUM` custom fields that are
                                relevant to this report type?
                            tableName:
                              type: string
                              example: users
                              description: |
                                The table name of the base object that this filter
                                applies to. Example: `users`, `projects`.
                            searchParams:
                              type: object
                              description: |
                                An optional dictionary of search parameters for the
                                filter's internal UI search component.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/reports/save_report_settings:
    post:
      summary: Save report settings
      operationId: save-report-settings
      description: |
        Save the settings for a specific report.

        :::info[Required abilities]

        In order to update the settings for a report, you must be either
        the owner of that report, or have either the `Authority - Administrator`
        or `Report Modification` ability.

        :::
      x-required-abilities:
        - Report Modification
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - id_report
                - settings
              properties:
                id_report:
                  type: string
                  description: |
                    The internal ID of the report you want to retrieve settings for.
                  example: '12345'
                settings:
                  description: |
                    The settings to save for the report.
                  type: object
                  properties: *ref_156
      responses:
        '200':
          description: |
            The response body for the `POST /api/v1/reports/save_report_settings` endpoint.

            This normally just returns `results: true` value on success. To see the
            report's current settings, use the `GET /api/v1/reports/get_report_settings` endpoint.
          content:
            application/json:
              schema:
                type: object
                description: |
                  The response body for the `POST /api/v1/reports/save_report_settings` endpoint.

                  This normally just returns `results: true` value on success. To see the
                  report's current settings, use the `GET /api/v1/reports/get_report_settings` endpoint.
                allOf: &ref_272
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response.
                    type: object
                    properties: *ref_31
                  - type: object
                    properties:
                      results:
                        type: boolean
                        example: true
                        description: |
                          Indicates whether the request was successful (normally true if it's not
                          an error response).
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/reports/run_report:
    post:
      summary: Run report
      operationId: run-report
      description: |
        Run a report and get the output.

        :::info[Required abilities]

        In order to run a report, you must either be the owner of the report,
        or have the the `Authority - Administrator` ability, or have
        certain other conditions apply such as Timekeeping or Approver
        authority over the user.

        In addition, the actual data you see in the report can vary
        depending on the report settings and your current access permissions
        such as group memberships.

        :::

        # START_RAW
        import NotRestful from '@site/content/partials/\_not-restful.mdx'

        <NotRestful />
        # END_RAW
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - id_report
              properties:
                id_report:
                  type: string
                  description: |
                    The internal ID of the report you want to run.
                  example: '12345'
                for_dashboard:
                  type: boolean
                  example: false
                  description: |
                    If `true`, the report is being run for a dashboard view.
                period_index:
                  type: integer
                  description: |
                    An offset from the time period given by `start` and `end` to move forward
                    (if positive) or backward (if negative) in time.
                  example: -1
                id_sheet:
                  type: string
                  description: |
                    ID of the related User Time Sheet; only applicable to the "Timesheet Report"
                    type.
                id_chart:
                  type: string
                  description: |
                    The internal ID of the chart to display on the report;
                    if set, this overrides the chart ID already set in the
                    report settings. This field is required if `for_dashboard`
                    is set to `true`.
                start:
                  type: string
                  description: |
                    The start date of the period to report on in YYYYMMDD (F8) format.
                  example: '20210101'
                end:
                  type: string
                  description: |
                    The end date of the period to report on in YYYYMMDD (F8) format.
                  example: '20210131'
      responses:
        '200':
          description: |
            The response object for a report run.

            Note that not all of these keys will be present in all responses,
            depending on the report type.

            The core data of the report is usually under the following key:

            `results > data > report_desc > items`

            This will be an array of objects, either subtotal objects or
            individual data objects (rows), depending on the report type
            and options. The base row objects usually have keys that
            correspond to the fields listed in:

            `results > data > report_desc > fields`
          content:
            application/json:
              schema:
                type: object
                description: |
                  The response object for a report run.

                  Note that not all of these keys will be present in all responses,
                  depending on the report type.

                  The core data of the report is usually under the following key:

                  `results > data > report_desc > items`

                  This will be an array of objects, either subtotal objects or
                  individual data objects (rows), depending on the report type
                  and options. The base row objects usually have keys that
                  correspond to the fields listed in:

                  `results > data > report_desc > fields`
                properties: &ref_273
                  data:
                    type: object
                    description: |
                      The report data. The exact format of this object will vary depending
                      on the report type, but the following keys are typical.
                    properties:
                      report_desc:
                        type: object
                        description: |
                          The description of the report.
                        properties:
                          disableActions:
                            type: array
                            description: |
                              The list of actions that are disabled in the report. These are
                              internal UI action codes such as `view-printable`.
                            items:
                              type: string
                          fields:
                            type: array
                            description: |
                              The list of fields that are shown in the report.
                            items:
                              type: object
                              description: |
                                The schema for a report field that describes how to
                                display and interact with the field in the report UI.
                              properties: &ref_157
                                canDefaultSubtotal:
                                  type: boolean
                                  example: true
                                  description: |
                                    Indicates if the field can be the default subtotal field
                                    for the report.
                                canSubtotal:
                                  type: boolean
                                  example: true
                                  description: |
                                    Indicates if the field can be used to subtotal the chart.
                                canSubtotalMinor:
                                  type: boolean
                                  example: true
                                  description: |
                                    Indicates if the field can be used for the "minor" subtotal
                                    within Charts only.
                                canSubtotalReport:
                                  type: boolean
                                  example: true
                                  description: |
                                    Indicates if the field can be used to subtotal the report
                                    rows.
                                extraSpecial:
                                  type: boolean
                                  example: false
                                  description: |
                                    Internal use; indicates special display logic in the report UI.
                                hasURL:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if report field contains URLs (links), such
                                    as attachments.
                                id:
                                  type: string
                                  example: codes_tasks
                                  description: |
                                    The internal ID of the report field; same as the `key` field.
                                index:
                                  type: integer
                                  example: 2
                                  description: |
                                    The index of the field in the report; the left-most column
                                    is index 0 and increases to the right.
                                integer:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the field is an integer field.
                                isAttachmentField:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the field is an attachment field.
                                isDateField:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the field is a date field.
                                isPercentField:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the field is a percentage field.
                                isTotalColumn:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the field is totals column.
                                key:
                                  type: string
                                  example: codes_tasks
                                  description: |
                                    The internal ID of the report field; same as the `id` field.
                                label:
                                  type: string
                                  description: |
                                    The display name of the report field.
                                  example: Task
                                nonPositive:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the field is a expected to hold negative values,
                                    which needs special treatment especially in charts.
                                numeric:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the field is a numeric field.
                                searchable:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the field is searchable.
                                shown:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the field is currently enabled to be shown in the report.
                                sortable:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the field is sortable in the report.
                                truncateText:
                                  type: boolean
                                  example: false
                                  description: |
                                    Indicates if the text in the field should be truncated with a tooltip
                                    to see the rest, or always displayed in full.
                          fields_amount:
                            description: |
                              The list of displayed fields that are Amount fields with special treatment.
                            type: array
                            items:
                              type: object
                              description: |
                                The schema for a report field that describes how to
                                display and interact with the field in the report UI.
                              properties: *ref_157
                          fields_rank_by:
                            description: |
                              The list of fields that can be used as ranking / axis fields
                              in the Chart associated with the report.
                            type: array
                            items:
                              type: object
                              description: |
                                The schema for a report field that describes how to
                                display and interact with the field in the report UI.
                              properties: *ref_157
                          id_report:
                            type: string
                            example: DB3235A3C0914C21ACEA05B37C060912
                            description: |
                              The internal ID of the report.
                          id_user:
                            type: string
                            example: 9D9C3CD9096F422D8390352F6814A466
                            description: |
                              The internal ID of the user who owns the report.
                          items:
                            type: array
                            items:
                              type: object
                            description: |
                              This contains the core data of the report. The exact format
                              of the data objects depends on the report type. Typically the
                              first-level objects will be subtotal objects that then
                              contain the actual data under that subtotal.

                              Typically the keys in these objects correspond to the field
                              names in the `fields` array.
                          outputOptions:
                            type: object
                            description: |
                              The formatting and display options of the report.
                            properties:
                              alwaysShowSubtotalLabel:
                                type: boolean
                                example: false
                                description: |
                                  Indicates if the subtotal label should always be shown.
                              dateFormat:
                                type: string
                                example: MM/DD/YYYY
                                description: |
                                  The date format used in the report.
                              detailsExpanded:
                                type: boolean
                                example: false
                                description: |
                                  Indicates if the details are expanded by default.
                              htmlFooter:
                                type: string
                                description: |
                                  The custom HTML footer of the report.
                                example: Detailed Hours by Date Report
                              htmlHeader:
                                type: string
                                description: |
                                  The custom HTML header of the report.
                                example: Detailed Hours by Date Report
                              reportEndDate:
                                type: string
                                description: |
                                  The end date of the report in YYYYMMDD format.
                                example: '20210131'
                              reportStartDate:
                                type: string
                                description: |
                                  The start date of the report in YYYYMMDD format.
                                example: '20210101'
                              showDetail:
                                type: boolean
                                example: false
                                description: |
                                  Indicates if there is an expandable details that can be shown.
                              showGrandTotal:
                                type: boolean
                                example: true
                                description: |
                                  Indicates if the grand total should be shown.
                              showSubReports:
                                type: boolean
                                example: true
                                description: |
                                  Indicates if sub-reports should be shown. Only
                                  applicable to certain report types such as the Accrual report.
                          report_name:
                            type: string
                            example: Detailed Hours by Date Report
                            description: |
                              The name of the report.
                          report_type:
                            type: integer
                            example: 0
                            description: |
                              The internal Report Type code.
                          supported_chart_types:
                            type: array
                            items:
                              type: object
                              properties:
                                component:
                                  description: |
                                    The internal name of the chart UI component.
                                  example: UtilizationChartCard
                                name:
                                  description: |
                                    The internal name of the chart type.
                                  example: horizontal-bar
                          supports_charts:
                            type: boolean
                            description: |
                              Indicates if the report supports charts or not.
                            example: true
                      chart_desc:
                        type: object
                        description: |
                          The settings of the chart shown in the report.
                        properties:
                          component:
                            type: string
                            description: |
                              The internal name of the chart UI component.
                            example: UtilizationChartCard
                          extras:
                            type: object
                            description: |
                              Additional properties of the chart.
                          name:
                            type: string
                            description: |
                              The name of the chart.
                      attachments:
                        type: array
                        description: |
                          The list of attachments associated with the report.
                        items:
                          type: object
                          properties:
                            label:
                              type: string
                              description: |
                                The display name of the attachment.
                            url:
                              type: string
                              format: uri
                              description: |
                                The URL of the attachment to access the raw data.
                            description:
                              type: string
                              description: |
                                A generated text description of the attachment
                                which includes the uploader's name and time.
                            is_pdf:
                              type: boolean
                              example: true
                              description: |
                                Indicates if the attachment is a PDF file.
                            is_image:
                              type: boolean
                              example: false
                              description: |
                                Indicates if the attachment is an image file.
                  id_sheet:
                    type: string
                    description: |
                      The internal ID of the applicable User Time Sheet;
                      only present for the "Timesheet Report" type.
                  oldestRecDate:
                    type: string
                    example: '20190101'
                    description: |
                      The oldest record date in the report as a YYYYMMDD date; only
                      included when prompting the user for free-floating report dates.
                  latestRecDate:
                    type: string
                    example: '20190131'
                    description: |
                      The latest record date in the report as a YYYYMMDD date; only
                      included when prompting the user for free-floating report dates.
                  flag:
                    type: string
                    description: |
                      Set to `prompt-free-floating` if the report requires the user to
                      select a date range.
                  canModReport:
                    type: boolean
                    example: true
                    description: |
                      Indicates if the user can modify the report settings.
                  canCommitRecords:
                    type: boolean
                    example: false
                    description: |
                      Indicates if the report enables a "Commit Records" button
                      that marks all included records as read-only and committed to an
                      external system.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/settings/screens/{id_user}:
    get:
      summary: List user screen settings
      description: |
        Returns the list (collection) of a user's settings for all configurable screens
        in the system, at least those that have the configurable field settings.
        User settings are the settings that apply to a specific user for a specific screen.
      operationId: list-screens-user
      parameters:
        - name: id_user
          in: path
          description: The unique identifier of the User.
          required: true
          schema: &ref_160
            type: string
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_274
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          This represents the settings for a UI management screen, which generally
                          consists of a search panel area and a table of results.
                        items:
                          type: object
                          description: |
                            This represents the settings for a UI management screen, which generally
                            consists of a search panel area and a table of results.
                          allOf: *ref_158
                          properties: *ref_159
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/settings/screens/{id_user}/{id_screen}:
    get:
      summary: Get user screen settings
      description: |
        Returns the user settings for the given Screen ID. User settings are the settings
        that apply to a specific user for a specific screen.
      operationId: get-screen-user
      parameters:
        - name: id_screen
          in: path
          description: The unique identifier of the Screen.
          required: true
          schema: &ref_161
            type: string
          example: accruals
        - name: id_user
          in: path
          description: The unique identifier of the User.
          required: true
          schema: *ref_160
          example: 1F9E41337EA341219D9D1D023F1D8C24
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                description: |
                  A successful response with a single item object;
                  see the `results` key in the response body.
                allOf: &ref_164
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          This represents the settings for a UI management screen, which generally
                          consists of a search panel area and a table of results.
                        allOf: *ref_158
                        properties: *ref_159
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Reset a user's screen settings
      description: |
        Resets the user settings for the given Screen ID to the default settings.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability if the user is not the
        currently authenticated user. Otherwise, the user can reset their own settings.

        :::
      operationId: reset-screen-user
      parameters:
        - name: id_screen
          in: path
          description: The unique identifier of the Screen.
          required: true
          schema: *ref_161
          example: accruals
        - name: id_user
          in: path
          description: The unique identifier of the User.
          required: true
          schema: *ref_160
          example: 1F9E41337EA341219D9D1D023F1D8C24
      responses:
        '204':
          description: |
            The user settings for the Screen ID have been reset to the default settings.
          content: {}
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update a user's screen settings
      description: |
        Updates the user settings for the given Screen ID. This operation allows you to
        update the user settings for a screen, which apply to a specific user for a specific screen.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability if the user is not the
        currently authenticated user. Otherwise, the user can update their own settings.

        :::
      operationId: update-screen-user
      parameters:
        - name: id_screen
          in: path
          description: The unique identifier of the Screen.
          required: true
          schema: *ref_161
          example: accruals
        - name: id_user
          in: path
          description: The unique identifier of the User.
          required: true
          schema: *ref_160
          example: 1F9E41337EA341219D9D1D023F1D8C24
      requestBody:
        description: |
          These are the fields that can be modified on the UI Screen endpoint.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: |
                These are the fields that can be modified on the UI Screen endpoint.
              properties: *ref_162
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/settings/screens/choices:
    get:
      summary: List all field choices
      description: |
        Returns the "screen choices" objects for various Screen IDs. This object contains the available
        choices for built-in fields and Custom Fields that are available on the management
        screen corresponding to the given Screen ID.
      operationId: list-screen-choices
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_276
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          A list of choices for a screen field.
                        items:
                          type: object
                          description: |
                            A list of choices for a screen field.
                          properties: &ref_163
                            custom_fields:
                              readOnly: true
                              type: object
                              description: |
                                A list of choices for searchable custom fields to show
                                on this management screen.  The keys are the table name
                                of the custom field table, e.g. `users_attribs` for
                                User Custom Fields.
                              additionalProperties:
                                type: array
                                items:
                                  type: object
                                  description: |
                                    A specific instance (value) of a Custom field for a particular object.
                                  allOf: *ref_12
                                  properties: *ref_13
                            fields:
                              type: array
                              description: |
                                A list of choices for built-in fields available to show on this
                                management screen.
                              items:
                                type: object
                                description: |
                                  Describes an available built-in field available as a search results
                                  field on a management screen.
                                properties: &ref_275
                                  default_label:
                                    type: string
                                    description: |
                                      The default label for the field.
                                    example: Accrual Name
                                  default_tooltip:
                                    type: string
                                    description: |
                                      The default tooltip for the field shown when hovering over the
                                      field label.
                                    example: The name of the Accrual.
                                  field_type:
                                    type: string
                                    description: |
                                      The type of the field. Direct fields are fields that are directly
                                      on the main table. Extended fields are fields that are on a related
                                      table.
                                    example: direct
                                    enum:
                                      - direct
                                      - extended
                                  id:
                                    type: string
                                    description: |
                                      The hardcoded identifier for the field within the screen.
                                      These are unique within the screen, but not across different screens.
                                      (Same as `id_field`.)
                                    example: pname
                                  id_field:
                                    type: string
                                    description: |
                                      The hardcoded identifier for the field within the screen.
                                      These are unique within the screen, but not across different screens.
                                      (Same as `id`.)
                                    example: pname
                                  id_screen:
                                    type: string
                                    description: |
                                      The unique identifier for the screen that this field is on.
                                    example: accruals
                                  is_boolean:
                                    type: boolean
                                    description: |
                                      Whether the field is a boolean field, which will be displayed as a
                                      "Yes" or "No" value in the column.
                                    example: false
                                  is_percent:
                                    type: boolean
                                    description: |
                                      Whether the field is a percentage field, which will be displayed as a
                                      formatted percentage value in the column.
                                    example: false
                                  is_truncated:
                                    type: boolean
                                    description: |
                                      Whether the field is automatically truncated when displayed in the
                                      search results; the full value can be seen in the tooltip.
                                    example: false
                                  is_url:
                                    type: boolean
                                    description: |
                                      Whether the field is a URL field, which will be displayed as a
                                      clickable link in the column.
                                    example: false
                                  mod_label:
                                    type: string
                                    description: |
                                      The description to show for this field in the Field Modification
                                      screen (the UI adjustment screen). This does not appear on the actual
                                      management screen.
                                    example: Accrual Name
                                  mod_label_tooltip:
                                    type: string
                                    description: |
                                      The tooltip to show for this field in the Field Modification
                                      screen (the UI adjustment screen). This does not appear on the actual
                                      management screen.
                                    example: The name of the Accrual.
                                  numeric:
                                    type: boolean
                                    description: |
                                      Whether the field is a numeric field, which will be displayed as a
                                      formatted number in the column.
                                    example: false
                                  required:
                                    type: boolean
                                    description: |
                                      Whether the field is required to be present on the management screen.
                                    example: false
                                  searchable:
                                    type: boolean
                                    description: |
                                      Whether the field is searchable in the search panel area on the
                                      management screen.
                                    example: true
                                  sort_by_field:
                                    type: string
                                    description: |
                                      If set, this is an alternate field to use for sorting the search
                                      results when this field is selected for sorting.
                                  sortable:
                                    type: boolean
                                    description: |
                                      Whether the field is sortable in the search results.
                                    example: true
                            id:
                              type: string
                              description: |
                                The ID of the management screen that these choices are for.
                                (Same value is in the field `id_screen`.)
                              example: accruals
                            id_screen:
                              type: string
                              description: |
                                The ID of the management screen that these choices are for.
                                (Same value is in the field `id`.)
                              example: accruals
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/settings/screens/choices/{id_screen}:
    get:
      summary: List field choices for a screen
      description: |
        Returns the "screen choice" object for the given Screen ID. This object contains the
        available fields (built-in fields and Custom Fields) that are available on the management
        screen corresponding to the given Screen ID.

        These choices are always read-only; they are generated based on the system
        configuration and are not directly editable via the API.
      operationId: get-screen-choices-item
      parameters:
        - name: id_screen
          in: path
          description: The unique identifier of the Screen.
          required: true
          schema: *ref_161
          example: accruals
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_277
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          A list of choices for a screen field.
                        properties: *ref_163
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/settings/screens/global:
    get:
      summary: List global screens settings
      description: |
        Returns the list (collection) of global settings for all screens in the system,
        at least those that have the configurable field settings.
        Global settings are the settings that apply to all users unless they have
        customized settings for a specific screen.
      operationId: list-screens-global
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_278
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          This represents the settings for a UI management screen, which generally
                          consists of a search panel area and a table of results.
                        items:
                          type: object
                          description: |
                            This represents the settings for a UI management screen, which generally
                            consists of a search panel area and a table of results.
                          allOf: *ref_158
                          properties: *ref_159
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/settings/screens/global/{id_screen}:
    get:
      summary: Global settings for a screen
      description: |
        Returns the global settings for the given Screen ID. Global settings are the settings
        that apply to all users unless they have customized settings for a specific screen.
      operationId: get-screen-global
      parameters:
        - name: id_screen
          in: path
          description: The unique identifier of the Screen.
          required: true
          schema: *ref_161
          example: accruals
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                description: |
                  A successful response with a single item object;
                  see the `results` key in the response body.
                allOf: *ref_164
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Reset a screen's global settings
      description: |
        Resets the global settings for the given Screen ID to the default settings.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability.

        :::
      x-required-abilities:
        - Authority - Administrator
      operationId: reset-screen-global
      parameters:
        - name: id_screen
          in: path
          description: The unique identifier of the Screen.
          required: true
          schema: *ref_161
          example: accruals
      responses:
        '204':
          description: |
            The global settings for the Screen ID have been reset to the default settings.
          content: {}
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update a screen's global settings
      description: |
        Updates the global settings for the given Screen ID. This operation allows you to
        update the global settings for a screen, which apply to all users unless they have
        customized settings for a specific screen.

        :::info[Required abilities]

        This operation requires the `Authority - Administrator` ability.

        :::
      x-required-abilities:
        - Authority - Administrator
      operationId: update-screen-global
      parameters:
        - name: id_screen
          in: path
          description: The unique identifier of the Screen.
          required: true
          schema: *ref_161
          example: accruals
      requestBody:
        description: |
          These are the fields that can be modified on the UI Screen endpoint.
        required: true
        content:
          application/json:
            schema:
              type: object
              description: |
                These are the fields that can be modified on the UI Screen endpoint.
              properties: *ref_162
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/timezones:
    get:
      summary: List timezones
      operationId: list-timezones
      description: |
        Retrieve a list of IANA timezone options with user-friendly display labels.
        This endpoint is intended for populating timezone picker UIs.

        Each item includes the IANA timezone key, a human-readable display label,
        a short label, an abbreviation, and a flag indicating whether it is a
        commonly used timezone. Common timezones (e.g. US, Canadian, and major
        European/Asian zones) are listed first.

        UTC offsets in the display labels reflect the current DST state at the
        time of the request.

        The response also includes the server's own timezone for reference.

        :::info[Non-collection endpoint]

        This endpoint is **not** a standard paginated collection. It returns all
        matching timezones in a single response without pagination, filtering,
        or sorting parameters.

        :::

        **Required abilities:** None (any authenticated user).
      responses:
        '200':
          description: A list of timezone options.
          content:
            application/json:
              schema:
                type: object
                description: |
                  Response from the timezones endpoint containing a list of timezone
                  options and the server's local timezone.
                properties: &ref_281
                  server_timezone:
                    type: string
                    description: |
                      The IANA timezone key of the Journyx server's local timezone.
                    example: America/Chicago
                  server_timezone_label:
                    type: string
                    description: |
                      Human-readable display label for the server's local timezone,
                      in the same format as the `text` field of timezone items.
                    example: Central Time (UTC-06:00) - America/Chicago
                  timezones:
                    type: array
                    description: |
                      List of available timezone options. Common timezones are listed
                      first (sorted by ascending UTC offset, then IANA key), followed
                      by all other timezones in the same order.
                    items:
                      type: object
                      description: A single timezone option for use in timezone pickers.
                      properties: &ref_279
                        value:
                          type: string
                          description: |
                            The canonical IANA timezone key. This is the value that should be
                            stored and sent back to the API in fields like `default_timezone`
                            or the `timezone` field on entry sheet save requests.
                          example: America/Chicago
                        text:
                          type: string
                          description: |
                            Human-readable display label including the timezone's common name,
                            current UTC offset, and IANA key. The UTC offset reflects the
                            current DST state.
                          example: Central Time (UTC-06:00) - America/Chicago
                        text_short:
                          type: string
                          description: |
                            Shorter display label with just the common name and UTC offset.
                          example: Central Time (UTC-06:00)
                        abbrev:
                          type: string
                          description: |
                            Standard timezone abbreviation (e.g. `CST`, `CDT`, `EST`).
                            Reflects the current DST state.
                          example: CST
                        common:
                          type: boolean
                          description: |
                            Whether this is a commonly used timezone. Common timezones are
                            sorted first in the response for prominent display in the UI.
                          example: true
                      required: &ref_280
                        - value
                        - text
                        - text_short
                        - abbrev
                        - common
                required: &ref_282
                  - server_timezone
                  - server_timezone_label
                  - timezones
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
  /api/v1/ui_prefs/ui_prefs:
    get:
      summary: List User UI Settings
      description: |
        Retrieve the current user's UI preferences relating only
        to the "modern" (Vue-based) Entry Screen types, such
        as "Summary View".
      operationId: get-vue-ui-prefs
      responses:
        '200':
          description: The user's UI preferences
          content:
            application/json:
              schema:
                description: |
                  The response to a `/ui_prefs/ui_prefs` GET request.
                allOf: &ref_167
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response as an object in the `results` field.
                    type: object
                    allOf: *ref_165
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          The result of a `/ui_prefs/ui_prefs` GET request.
                        properties: &ref_166
                          PagedTable:
                            type: object
                            description: |
                              The user's preferences for the Paged Table component.
                            properties:
                              itemsPerPage:
                                type: object
                                description: |
                                  The user's preference for the number of items to display per page.

                                  The keys are the component or page in question and the value
                                  is the number of items to display per page, as a string.
                                additionalProperties:
                                  type: string
                                  example: dashboard-approvals-table
                          SheetSummaryView:
                            type: object
                            properties:
                              decimalTimeFormat:
                                type: boolean
                                description: |
                                  Indicates whether the user prefers to display time in decimal format.
                                example: true
                              expandLevels:
                                type: string
                                description: |
                                  The number of nested Entry Code levels to expand in the
                                  summary entry view. E.g. Project -> Activity ->
                                  Bill Type -> Pay Type
                                example: '0'
                              viewMode:
                                type: string
                                enum:
                                  - comments
                                  - dates
                                example: comments
                                description: |
                                  The user's preference for the view mode of the summary entry view,
                                  either showing organized around comments or dates.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Set User UI Settings
      description: |
        Set the current user's UI preferences relating only
        to the "modern" (Vue-based) Entry Screen types, such
        as "Summary View".
      operationId: set-vue-ui-prefs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: |
                The result of a `/ui_prefs/ui_prefs` GET request.
              properties: *ref_166
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            The response to a `/ui_prefs/ui_prefs` GET request.
          content:
            application/json:
              schema:
                description: |
                  The response to a `/ui_prefs/ui_prefs` GET request.
                allOf: *ref_167
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/users:
    get:
      summary: List users
      description: |
        Retrieve a list of users in the system.
      operationId: list-users
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_283
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          A user account in the JX system.
                        items:
                          type: object
                          description: |
                            A user account in the JX system.
                          allOf: *ref_3
                          properties: *ref_4
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create a user
      description: |
        Add a new user to the system.

        :::info[Required abilities]

        This operation requires the `User - Add` ability, or
        `Authority - Administrator`.

        :::
      operationId: create-user
      x-required-abilities:
        - User - Add
      requestBody:
        required: true
        description: |
          These are fields in the User object that can be modified (not necessarily by the user in question)
          or given as input when creating a new User.

          :::tip

          Note that only `user_login` and `fullname` are required when creating a new User.

          :::

          **Note:** If using SSO (Single Sign-On), the `user_login` field usually
          needs to match the user's email address, UPN, or other primary identifier in
          the external authentication system.

          :::warning

          The `new_pw`, `new_pw2`, and `expire_new_pw` fields should only be used when
          intending to change the user's password.

          :::
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the User object that can be modified (not necessarily by the user in question)
                or given as input when creating a new User.

                :::tip

                Note that only `user_login` and `fullname` are required when creating a new User.

                :::

                **Note:** If using SSO (Single Sign-On), the `user_login` field usually
                needs to match the user's email address, UPN, or other primary identifier in
                the external authentication system.

                :::warning

                The `new_pw`, `new_pw2`, and `expire_new_pw` fields should only be used when
                intending to change the user's password.

                :::
              required: *ref_168
              allOf: *ref_169
              properties: *ref_170
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '201':
          description: |
            The item was successfully created.

            This is a minimal response that indicates whether the request was successful and provides the
            URI of the created item. To retrieve additional details or the full item, you may need to make
            additional requests.

            :::info

            See the `Location` header for the URL of the new item,
            as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
            table name of the new item.

            :::
          content:
            application/json:
              schema:
                description: |
                  The item was successfully created.

                  This is a minimal response that indicates whether the request was successful and provides the
                  URI of the created item. To retrieve additional details or the full item, you may need to make
                  additional requests.

                  :::info

                  See the `Location` header for the URL of the new item,
                  as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
                  table name of the new item.

                  :::
                type: object
                properties: *ref_46
          headers:
            Location: *ref_47
            X-Item-Id: *ref_48
            X-Item-Table: *ref_49
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/users/{userId}:
    get:
      summary: Get user by ID
      description: |
        Retrieve a user by their internal User ID.
      operationId: get-user-item
      parameters:
        - name: userId
          in: path
          required: true
          schema: &ref_171
            type: string
          description: |
            The internal ID of the user to retrieve or modify.
          example: 64BBA147B9AC41D9978062300826C89F
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_284
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          A user account in the JX system.
                        allOf: *ref_3
                        properties: *ref_4
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete user by ID
      description: |
        Remove a user from the system by their internal ID.

        Note that the response body is empty on a successful 204 response.

        # START_RAW
        import DeleteWarning from '@site/content/partials/\_delete-warning.mdx'

        <DeleteWarning itemName='user record' />
        # END_RAW

        :::info[Required abilities]

        This operation requires the `User - Delete` ability, or
        `Authority - Administrator`.

        :::
      x-required-abilities:
        - User - Delete
      operationId: delete-user-item
      parameters:
        - name: userId
          in: path
          required: true
          schema: *ref_171
          description: |
            The internal ID of the user to retrieve or modify.
          example: 64BBA147B9AC41D9978062300826C89F
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            The object was successfully deleted. The response body is empty.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update a user record
      description: |
        Update (modify) a user record by their internal ID. This will update the
        user record with the new data provided in the request body.

        # START_RAW
        import PutHeaders from '@site/content/partials/_put-headers.mdx'

        <PutHeaders />
        # END_RAW

        :::info[Required abilities]

        This operation requires the `User - Modify` ability, or
        `Authority - Administrator`.

        :::
      operationId: update-user-item
      x-required-abilities:
        - User - Modify
      parameters:
        - name: userId
          in: path
          required: true
          schema: *ref_171
          description: |
            The internal ID of the user to retrieve or modify.
          example: 64BBA147B9AC41D9978062300826C89F
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          These are fields in the User object that can be modified (not necessarily by the user in question)
          or given as input when creating a new User.

          :::tip

          Note that only `user_login` and `fullname` are required when creating a new User.

          :::

          **Note:** If using SSO (Single Sign-On), the `user_login` field usually
          needs to match the user's email address, UPN, or other primary identifier in
          the external authentication system.

          :::warning

          The `new_pw`, `new_pw2`, and `expire_new_pw` fields should only be used when
          intending to change the user's password.

          :::
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the User object that can be modified (not necessarily by the user in question)
                or given as input when creating a new User.

                :::tip

                Note that only `user_login` and `fullname` are required when creating a new User.

                :::

                **Note:** If using SSO (Single Sign-On), the `user_login` field usually
                needs to match the user's email address, UPN, or other primary identifier in
                the external authentication system.

                :::warning

                The `new_pw`, `new_pw2`, and `expire_new_pw` fields should only be used when
                intending to change the user's password.

                :::
              required: *ref_168
              allOf: *ref_169
              properties: *ref_170
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/users/abilities:
    get:
      summary: List system abilities
      description: |
        Retrieve a list of all system abilities that can be assigned to users.
        Note that "abilities" cannot be directly assigned to users; instead
        they are assigned to Custom Roles, and then the role can be assigned
        to users.
      operationId: list-system-abilities
      responses:
        '200':
          description: |
            A response containing the various abilities defined in the system.
          content:
            application/json:
              schema:
                type: object
                properties:
                  $count:
                    type: integer
                    description: |
                      The number of abilities returned in the response.
                  response_code:
                    type: integer
                    description: HTTP status code of the response for reference purposes.
                    example: 200
                    default: 200
                  results:
                    type: array
                    description: |
                      An array of abilities that are defined in the system.
                    items:
                      type: object
                      properties:
                        flag:
                          type: string
                          description: |
                            The internal bit-flag code of the ability.
                          example: '79228162514264337593543950336'
                        id:
                          type: string
                          description: |
                            The internal ID of the ability (same as `id_ability`).
                          example: api_keys_generate
                        id_ability:
                          type: string
                          description: |
                            The internal ID of the ability (same as `id`).
                          example: api_keys_generate
                        pname:
                          type: string
                          description: |
                            The printable name (label) of the ability.
                          example: Generate API Keys
                  success:
                    type: boolean
                    description: |
                      Indicates whether the request was successful (normally `true` if it's
                      not an error response).
                    example: true
                  uri:
                    type: string
                    description: URL of the current request / resource, for reference purposes.
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/users/activate:
    post:
      summary: Activate or deactivate a user
      description: |
        Activate or deactivate a user in the system. This will change the user's
        status from active to inactive, or vice versa.  Inactive users cannot
        sign in, but their records will still show up in reports and other areas.

        :::info[Required abilities]

        This operation requires the `User - Modify` ability, or
        `Authority - Administrator`.

        :::
      x-required-abilities:
        - User - Modify
      operationId: activate-user
      requestBody:
        required: true
        description: |
          The request to activate a user.
        content:
          application/json:
            schema:
              type: object
              description: |
                The request to activate a user.
              properties: &ref_285
                id_user:
                  type: array
                  description: |
                    A list of the User IDs to activate or deactivate. You can provide
                    either a list (array) or a single value.
                  items:
                    type: string
                    example: 5CD906A3941C463B9CC98F49DBCC25AA
                activate:
                  type: boolean
                  description: |
                    Set to `true` to activate the user, or `false` to deactivate the user.
                  default: true
                  example: true
                deactivate:
                  type: boolean
                  description: |
                    Set to `true` to deactivate the user, or `false` to activate the user.
                    Setting this to `true` is equivalent to setting `activate` to `false`.
                    The value in `activate` takes precedence over this value.
                  default: false
                  example: false
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            The response to a user Activate / Deactivate request.
            Check the `results` object for the outcome details
          content:
            application/json:
              schema:
                description: |
                  The response to a user Activate / Deactivate request.
                  Check the `results` object for the outcome details
                allOf: &ref_287
                  - description: |
                      A success response that may be returned by certain API endpoints
                      that do not support pagination; the entire result set is returned in a single
                      response as an object in the `results` field.
                    type: object
                    allOf: *ref_165
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          The details about a request to activate or deactivate a set of users.
                        properties: &ref_286
                          changed_users:
                            type: array
                            description: |
                              A list of the User IDs that were activated or deactivated.
                            items:
                              type: string
                              example: 5CD906A3941C463B9CC98F49DBCC25AA
                          unchanged_users:
                            type: array
                            description: |
                              A list of the User IDs that were not activated or deactivated,
                              typically because they were already in the desired state.
                            items:
                              type: string
                              example: 5CD906A3941C463B9CC98F49DBCC25AA
                          activated:
                            type: boolean
                            description: |
                              Indicates whether the users were activated. (Based on the `activate
                              parameter in the request.)
                            example: true
                          deactivated:
                            type: boolean
                            description: |
                              Indicates whether the users were deactivated. (Based on the `activate`
                              parameter in the request.)
                            example: false
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/users/accruals:
    get:
      summary: List Accruals
      description: |
        Retrieve a list of all Accruals in the system.

        [Accruals are described in more detail here](/docs/reference/schemas/accrual).
      operationId: list-accruals
      parameters:
        - name: $top
          in: query
          required: false
          schema: *ref_38
          description: |
            The maximum number of objects to return. The default may vary from
            endpoint to endpoint, but is typically 100.
          example: 10
        - name: $skip
          in: query
          required: false
          schema: *ref_39
          description: |
            The number of objects to skip before returning results.
          example: 0
        - name: $keys
          in: query
          required: false
          schema: *ref_40
          description: |
            Specifies which keys (data values) to include in objects in the response. If this
            parameter is not given, typically most keys are included unless they are
            expensive to compute or return.

            This parameter can be repeated to request multiple keys.

            Any regular field can be named here, though many are automatically
            included by default and don't need to be specified.

            Special values are:
            - `$base` - only include the base object fields, which is usually much faster.
              Note that if `$base` is specified, no other keys will be included even if
              they are specified here.
            - `$extended` - include all extended properties, such as custom fields.
          example: creator_properties.fullname
        - name: $filter
          in: query
          required: false
          schema: *ref_41
          description: |
            A filter specification string.

            See the [Collections#Filtering](/docs/collections#filtering) page for more
            information.

            <ins>Important:</ins> all string literals must be JSON-encoded; for
            example, a string literal must be enclosed in double quotes (`"`) and
            any double quotes within the string must be escaped with a backslash
            (`\"`), as shown in the example.
          example: pname eq "Embedded \" Quote Project"
        - name: $orderBy
          in: query
          required: false
          schema: *ref_42
          description: |
            The field to sort by, optionally followed by a space and the sort direction. If this
            parameter is not given, the default sort field is typically `pname` if available. Specify
            additional secondary sort fields by separating them with commas. This field is not
            case-sensitive.

            The sort direction can be `asc` (ascending) or `desc` (descending).

            If not specified, the default sort direction is usually ascending.

            This parameter can be repeated to sort by multiple fields, or you
            can comma-separate multiple fields in a single parameter.

            <ins>Important:</ins> not all fields are sortable. If you attempt to
            sort by a non-sortable field, the API will return an 400 Bad Request
            error.
          example: creator.fullname desc, pname asc
      responses:
        '200':
          description: |
            A successful response from a paged collection; see the `results` array in the
            response for the list of results for this page. Additional pages may be
            available and can be fetched using the `@nextLink` URL.

            Note that the examples given may include keys (fields) that may not always be
            present in the response, depending on the fields requested in the `$keys`
            parameter, the user's permissions, and other system settings.
          content:
            application/json:
              schema:
                allOf: &ref_288
                  - description: |
                      A standard success response that may be returned by the API for most
                      collection endpoints. This response includes a list of result objects (items),
                      a count of the total number of items matching the query, and other metadata.
                    type: object
                    properties: *ref_33
                  - type: object
                    properties:
                      results:
                        type: array
                        description: |
                          An Accrual or "time bank" is a collection of time that can be used to
                          pay for time off. Accruals are typically used to track vacation time,
                          sick time, and other types of paid time off.

                          Each accrual is tied to a user and one or more Pay Types. The accrual can have
                          a name, a balance, and hard and soft limits.  Balances can be managed
                          manually, or can be generated through the Accrual Calculator product.

                          Time is deducted from the Accrual when a user creates a Time Entry for
                          a Pay Type associated with the Accrual.

                          A hard limit is a minimum balance that cannot be exceeded. For example
                          a hard limit of 0.00 hours would mean that the user cannot have a negative
                          balance in the Accrual.

                          A soft limit is a balance at which the user is notified or warned that
                          they are approaching the hard limit.
                        items:
                          type: object
                          description: |
                            An Accrual or "time bank" is a collection of time that can be used to
                            pay for time off. Accruals are typically used to track vacation time,
                            sick time, and other types of paid time off.

                            Each accrual is tied to a user and one or more Pay Types. The accrual can have
                            a name, a balance, and hard and soft limits.  Balances can be managed
                            manually, or can be generated through the Accrual Calculator product.

                            Time is deducted from the Accrual when a user creates a Time Entry for
                            a Pay Type associated with the Accrual.

                            A hard limit is a minimum balance that cannot be exceeded. For example
                            a hard limit of 0.00 hours would mean that the user cannot have a negative
                            balance in the Accrual.

                            A soft limit is a balance at which the user is notified or warned that
                            they are approaching the hard limit.
                          allOf: &ref_174
                            - type: object
                              description: |
                                These are fields that are common to most object types.
                              properties: *ref_0
                            - type: object
                              description: |
                                These are fields in the Accrual ("Time Bank") object that can be modified
                                or given as input when creating a new Accrual.
                              required: &ref_172
                                - pname
                                - pay_type_ids
                              properties: &ref_173
                                hard_threshold:
                                  type: number
                                  format: float
                                  description: |
                                    The hard threshold for the Accrual. If the Accrual balance drops below
                                    this value, the user cannot create new Time Entries using this Accrual.
                                    A typical hard threshold is 0.0.
                                  example: 0
                                hours_left:
                                  type: number
                                  format: float
                                  description: |
                                    The number of hours left in the Accrual - the hours balance.
                                  example: 40
                                id_user:
                                  type: string
                                  description: |
                                    The internal ID of the User associated with this Accrual.
                                    Once set, this value cannot be changed.
                                  example: 64BBA147B9AC41D9978062300826C89F
                                id_user_properties:
                                  type: object
                                  description: |
                                    The properties associated with the user who owns this Accrual.
                                    Note that this key may not be present unless requested in the `$keys` parameter.
                                  allOf:
                                    - type: object
                                      description: |
                                        A user account in the JX system.
                                      allOf: *ref_3
                                      properties: *ref_4
                                  readOnly: true
                                is_hidden:
                                  type: boolean
                                  description: |
                                    If true, this Accrual is hidden from the user interface.
                                    A hidden accrual can still be enforced, but the user will not see a listing
                                    of the accrual in the user interface and will not see the available balance.
                                  example: false
                                pay_type_ids:
                                  type: array
                                  items:
                                    type: string
                                  description: |
                                    The internal IDs of the Pay Types associated with this Accrual.
                                    These Pay Types are the types of time that can be used to pay for time off.
                                pname:
                                  type: string
                                  description: |
                                    The name of the Accrual. Typically this is the name of the main Pay Type
                                    associated with the Accrual, but it can be any name. This will be displayed
                                    to the end user.
                                  example: Vacation
                                use_hard_threshold:
                                  type: boolean
                                  description: |
                                    If true, the hard threshold is enforced. If false, the hard threshold is ignored.
                                  example: true
                                use_warning:
                                  type: boolean
                                  description: |
                                    If true, the warning ("soft") threshold is enforced. If false, the warning
                                    threshold is ignored.
                                  example: true
                                warning_threshold:
                                  type: number
                                  format: float
                                  description: |
                                    The warning threshold for the Accrual. If the Accrual balance drops below
                                    this value, the user is notified or warned that they are approaching the hard limit.
                                    An example warning threshold is 16.0.
                                  example: 16
                            - type: object
                              description: |
                                These are common fields used throughout the system to indicate the status
                                of an object, whether "hidden", "loggable", "reportable-only".

                                Note that "hidden" status is defined as not belonging to any
                                [Groups](/docs/reference/schemas/groupfields). See that link
                                for more information about finding hidden items.

                                Loggable and Reportable status means that the object is both visible
                                to at least some users, and can be used in current (new) time entries.

                                Reportable Only means that the object is visible to at least some users,
                                but cannot be used in newly created time entries.
                              properties: *ref_133
                            - type: object
                              description: |
                                Fields related to the creation of a resource, including the creation
                                timestamp, creator user ID, and creator user name.

                                Note that extended information about the creator user may be included
                                in the `creator_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_1
                              properties: *ref_2
                            - type: object
                              description: Object creation date/time fields common to many resources.
                              allOf: *ref_5
                              properties: *ref_6
                            - type: object
                              description: |
                                Fields related to the last modification of a resource, including the
                                last modified timestamp in various formats, the modifier's user ID and
                                full name. Please note that this only records the most recent
                                modification. In addition, it may not reflect modifications to child
                                resources or extended properties that are defined in other tables, such
                                as "Custom Fields". These last modifier fields are always read-only.

                                Note that extended information about the modifier user may be included
                                in the `modifier_properties` field, depending on the `$keys` requested.
                                If present, this information will follow the schema of the
                                [User](/docs/reference/schemas/user) object.
                              allOf: *ref_7
                              properties: *ref_8
                            - type: object
                              description: |
                                The last modified date/time fields common to many resources. Please note
                                that this only records the most recent modification. In addition, it may
                                not record modifications to child resources or extended properties that
                                are defined in other tables, such as "Custom Fields". These fields are
                                read-only.
                              allOf: *ref_9
                              properties: *ref_10
                            - type: object
                              description: |
                                These are fields related to the deprecated "Domain" object.
                              properties: *ref_11
                          properties: &ref_175
                            id_timebank:
                              type: string
                              description: |
                                The internal ID of the Time Bank associated with this Accrual;
                                same as the `id` field. This ID cannot be changed once created.
                              example: 1A40D7570AF94AFDB286D0697DEA5CF3
                              readOnly: true
                            limits_description:
                              type: string
                              readOnly: true
                              description: |
                                A generated short description of the limits for this Accrual that
                                describes the hard and soft limits in human-readable terms.
                              example: Min 0.00
                            limits_description_full:
                              type: string
                              readOnly: true
                              description: |
                                A generated description of the limits for this Accrual that
                                describes the hard and soft limits in human-readable terms
                                in long form.
                              example: Minimum balance of 0.00 hours is enforced.
                            pay_type_names:
                              type: array
                              items:
                                type: string
                              description: |
                                The printable names (labels) of the Pay Types associated with this Accrual.
                                These Pay Types are the types of time that can be used to pay for time off.
                              example:
                                - Vacation
                                - Sick
                            pay_type_names_str:
                              type: string
                              readOnly: true
                              description: |
                                A comma-separated string of the printable names (labels) of the Pay Types
                                associated with this Accrual.
                              example: Vacation, Sick
                            pay_type_uris:
                              type: array
                              readOnly: true
                              items:
                                type: string
                              description: |
                                The URIs of the Pay Types associated with this Accrual.
                                These Pay Types are the types of time that can be used to pay for time off.
                              example:
                                - /api/v1/entry_codes/codes_pay_types/Vacation
                                - /api/v1/entry_codes/codes_pay_types/Sick
                            warning_type:
                              type: string
                              readOnly: true
                              description: |
                                An internal code that describes the format of the accrual record.
                              example: v2
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    post:
      summary: Create a new Accrual
      description: |
        Create a new Accrual in the system.

        :::info[Required abilities]

        This operation requires the `Accruals - Create` ability, or
        `Authority - Administrator`.

        :::

        [Accruals are described in more detail here](/docs/reference/schemas/accrual).
      operationId: create-accrual
      x-required-abilities:
        - Accruals - Create
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          These are fields in the Accrual ("Time Bank") object that can be modified
          or given as input when creating a new Accrual.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Accrual ("Time Bank") object that can be modified
                or given as input when creating a new Accrual.
              required: *ref_172
              properties: *ref_173
      responses:
        '201':
          description: |
            The item was successfully created.

            This is a minimal response that indicates whether the request was successful and provides the
            URI of the created item. To retrieve additional details or the full item, you may need to make
            additional requests.

            :::info

            See the `Location` header for the URL of the new item,
            as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
            table name of the new item.

            :::
          content:
            application/json:
              schema:
                description: |
                  The item was successfully created.

                  This is a minimal response that indicates whether the request was successful and provides the
                  URI of the created item. To retrieve additional details or the full item, you may need to make
                  additional requests.

                  :::info

                  See the `Location` header for the URL of the new item,
                  as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
                  table name of the new item.

                  :::
                type: object
                properties: *ref_46
          headers:
            Location: *ref_47
            X-Item-Id: *ref_48
            X-Item-Table: *ref_49
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/users/accruals/{id_item}:
    get:
      summary: Get an Accrual
      description: |
        Retrieve information about a specific Accrual in the system.

        [Accruals are described in more detail here](/docs/reference/schemas/accrual).
      operationId: get-accrual
      parameters:
        - name: id_item
          in: path
          required: true
          schema: &ref_176
            type: string
          description: The ID of the Accrual ("Time Bank") to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                allOf: &ref_289
                  - description: |
                      A standard success response includes a single item (object), and other metadata.
                    type: object
                    properties: *ref_50
                  - type: object
                    properties:
                      results:
                        type: object
                        description: |
                          An Accrual or "time bank" is a collection of time that can be used to
                          pay for time off. Accruals are typically used to track vacation time,
                          sick time, and other types of paid time off.

                          Each accrual is tied to a user and one or more Pay Types. The accrual can have
                          a name, a balance, and hard and soft limits.  Balances can be managed
                          manually, or can be generated through the Accrual Calculator product.

                          Time is deducted from the Accrual when a user creates a Time Entry for
                          a Pay Type associated with the Accrual.

                          A hard limit is a minimum balance that cannot be exceeded. For example
                          a hard limit of 0.00 hours would mean that the user cannot have a negative
                          balance in the Accrual.

                          A soft limit is a balance at which the user is notified or warned that
                          they are approaching the hard limit.
                        allOf: *ref_174
                        properties: *ref_175
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    delete:
      summary: Delete an Accrual
      description: |
        Remove an Accrual from the system.

        :::info[Required abilities]

        This operation requires the `Accruals - Delete` ability, or
        `Authority - Administrator`.

        :::

        # START_RAW
        import DeleteWarning from '@site/content/partials/\_delete-warning.mdx'

        <DeleteWarning itemName='accrual' />
        # END_RAW
      operationId: delete-accrual
      x-required-abilities:
        - Accruals - Delete
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_176
          description: The ID of the Accrual ("Time Bank") to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '204':
          description: |
            The object was successfully deleted. The response body is empty.
          content: {}
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
    put:
      summary: Update an Accrual
      description: |
        Update (modify) an existing Accrual in the system.

        :::info[Required abilities]

        This operation requires the `Accruals - Modify` ability, or
        `Authority - Administrator`.

        :::
      x-required-abilities:
        - Accruals - Modify
      operationId: update-accrual
      parameters:
        - name: id_item
          in: path
          required: true
          schema: *ref_176
          description: The ID of the Accrual ("Time Bank") to retrieve.
          example: 1F9E41337EA341219D9D1D023F1D8C24
        - name: If-Match
          in: header
          required: true
          schema: *ref_52
          description: |
            The `If-Match` header is *required* for all `PUT` requests that modify
            objects. The value should be the current ETag value of the object you
            are modifying, which can be obtained from the `ETag` header of the
            object's `GET` response. This is to ensure you are not accidentally
            overwriting changes made by another client.

            See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
            guide and the related
            [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
          example: 333c3873b9a60...
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      requestBody:
        required: true
        description: |
          These are fields in the Accrual ("Time Bank") object that can be modified
          or given as input when creating a new Accrual.
        content:
          application/json:
            schema:
              type: object
              description: |
                These are fields in the Accrual ("Time Bank") object that can be modified
                or given as input when creating a new Accrual.
              required: *ref_172
              properties: *ref_173
      responses:
        '204':
          description: |
            The object was successfully updated. The response body is empty.
            See the `Location` header for the URL of the updated object.
          content: {}
          headers:
            Location: *ref_53
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
  /api/v1/users/login-available:
    post:
      summary: Username availability
      description: |
        Check if a user login (username) is available for use in the system. This
        is used to validate that a user login is unique and can be used when
        creating a new user. This can also be used to validate whether a potential
        new login is valid and acceptable.

        :::info[Required abilities]

        This operation requires either the `User - Create` ability, or
        `User - Modify`, or `Authority - Administrator`.

        :::
      operationId: check-user-login-available
      x-required-abilities:
        - User - Add
        - User - Modify
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - user_login
              properties:
                user_login:
                  type: string
                  description: |
                    The user login to check for availability.
                  example: john_doe@example.com
                id_user:
                  type: string
                  description: |
                    The internal ID of the user to check the login for, when
                    updating an existing user. This is so when we check
                    whether the login is already in use, we can exclude that
                    user from the check.
                  example: 64BBA147B9AC41D9978062300826C89F
      parameters:
        - name: Content-Type
          in: header
          required: true
          schema: *ref_25
          description: |
            The Content-Type header is required for all `POST` or `PUT` requests
            that have a request body.

            The value should normally be `application/json` assuming
            you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
          example: application/json
        - name: X-Requested-With
          in: header
          required: true
          schema: *ref_26
          description: |
            The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be `XMLHttpRequest`.
          example: XMLHttpRequest
        - name: Origin
          in: header
          required: true
          schema: *ref_27
          description: |
            The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
            This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
            measure.

            The value should be the base URL of the service you are calling.

            The `Referer` header can also be used in place of `Origin`.
            Please note the unusual spelling of `Referer`.
          example: https://example.apps.journyx.com
      responses:
        '200':
          description: |
            A successful response with a single item object;
            see the `results` key in the response body.
          content:
            application/json:
              schema:
                type: object
                properties:
                  user_login_in_use:
                    type: boolean
                    description: |
                      If true, the login is already in use and is **NOT** available
                      for another user. If false, the login is available.
                    example: false
                  valid_as_user_login:
                    type: boolean
                    description: |
                      If true, the login is a valid format for a user login. If false,
                      the login is not a valid format. For example, it may be too short,
                      too long, or contain invalid characters.
                    example: true
                  errors:
                    type: array
                    items:
                      type: string
                    description: |
                      An array of error messages if the login is not valid.
                    example:
                      - This username is already in use or is unavailable.
                  warnings:
                    type: array
                    items:
                      type: string
                    description: |
                      An array of warning messages. Typically this will be when
                      the login is acceptable but is too similar to another login.
                    example:
                      - This username is available, but there is another one that differs only in case (capitalization). This might cause confusion.
                  differs_only_by_case:
                    type: boolean
                    description: |
                      If true, the login is available but differs from another
                      login only by case (capitalization), and the system is currently
                      configured to allow this. This may cause confusion for users.
                    example: false
                    nullable: true
        '400':
          description: |
            A `400 Bad Request` is returned when the client request was malformed,
            invalid, or otherwise could not be processed as-is. Usually, the cause for
            the error is included in the `error.message` field of the response, and the
            client should correct the request and try again.

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_17
        '401':
          description: |
            Not authenticated - you must be signed in to access this resource. Please
            check the section of the documentation on authentication.
          content: *ref_18
        '403':
          description: |
            A `403 Forbidden` response means that you are not authorized to perform
            this action or access this object, or the object does not exist at all.

            The client request may have been valid but the client does not have
            permission to access the requested resource or perform the requested action.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_19
        '404':
          description: |
            Not found - the requested resource could not be found or does not exist.
            This may also include cases where the resource does exist, but the client
            does not have permission to access that resource.

            :::tip[403 Forbidden also used when objects don't exist]

            In most cases, the system will not return a `404 Not Found` error response;
            it returns `403 Forbidden` both when the object doesn't exist at all,
            and also when it exists but the client does not have permission to access it.
            This is a security measure to prevent unauthorized users from determining
            whether an object exists or not.

            :::

            See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
          content: *ref_20
        '500':
          description: |
            Internal server error; an unexpected error occurred on the server. This
            could be due to a temporary condition or might be the result of a bug in the
            server software. Also, in some cases, an incorrect client input can
            trigger this error, and can be resolved by correcting the input.

            If the error persists, please contact support along along with the following
            details when possible:

            - any error messages received from the server
            - the full request and response details (full headers and body)
            - a description of the steps that led to the error
            - the time range when it occurred.
          content: *ref_21
        '503':
          description: |
            Service unavailable - the server is currently unable to handle the request,
            usually due to maintenance activity on the server. Check if the server's web
            interface is currently available, or try again later.
          content: *ref_22
components:
  securitySchemes:
    wtsession:
      description: |
        Authentication is described in more detail in the dedicated
        [Authentication](/docs/authentication) section of the documentation.

        Using the `wtsession` cookie header is the recommended way to authenticate
        your Journyx API requests. The `wtsession` cookie is a limited-time
        authentication token that can be sent in the `Cookie` header
        of your requests.

        You obtain a `wtsession` cookie by calling the
        [Sign-in endpoint](/docs/reference/login) with a username and either
        a password or an API Key. The server will respond with a `Set-Cookie`
        header that contains the `wtsession` cookie. Then in subsequent
        requests, you include the `wtsession` cookie in the `Cookie` header.

        API Keys are the recommended way to authenticate your Journyx API
        requests, but it's important to understand that, at least in this implementation,
        they merely replace the direct use of passwords. The actual authentication
        mechanism used in API requests must be either a `wtsession` cookie,
        or else the HTTP Basic authentication scheme, and either of those
        methods will accept either passwords or API Keys, assuming API Keys
        have been enabled in the System Settings.

        HTTP Basic Authentication is also available.
        Please see the [Authentication](/docs/authentication) section for
        complete details.
      type: apiKey
      in: cookie
      name: wtsession
    http-basic:
      description: |
        HTTP Basic Authentication; this authenticates each request separately
        with a username and either a password or an API Key. This is less performant
        than using a `wtsession` cookie, so we recommend using the `wtsession`
        cookie instead. However, HTTP Basic Auth is often useful for testing
        and for simple scripts.

        Please see the [Authentication](/docs/authentication) section for
        complete details.
      type: http
      scheme: basic
  schemas:
    CommonFields:
      type: object
      description: |
        These are fields that are common to most object types.
      properties: *ref_0
    BasicCreatorFields:
      type: object
      properties: *ref_69
    CustomFieldCommonFields:
      type: object
      properties: *ref_54
    CustomFieldValue:
      type: object
      description: |
        A specific instance (value) of a Custom field for a particular object.
      allOf: *ref_12
      properties: *ref_13
    CustomFields:
      type: object
      description: |
        Custom fields are used to store additional information about a resource.
        The fields are defined by the system administrators and can be of various
        data types.

        This page describes the schema for custom field values as shown in
        the response of a resource that has custom fields. There is an expanded
        schema for the custom field definitions at their own endpoint, as
        shown in the `id_attr_type_uri` field.

        :::tip

        The `custom_fields` object will only be included in the response if requested
        in `$keys`; see details below.

        :::

        ### Editing Custom Fields

        In general, to update Custom Field values for an object, when submitting
        a `PUT` request to update the object, you can include the `custom_fields`
        object in the request body. The `custom_fields` object should follow
        the basic schema shown here, but only needs to include the `value` field
        for each custom field you want to update. For example, this is enough
        to update two custom fields:

        ```json
        {
          "custom_fields": {
            "C41B2DDA662F4EF6B730F9CB6DB04696": {
              "value": "New Value"
            },
            "users_email": {
              "value": "new_email@example.com"
            }
        }
        ```

        Any custom fields not included in the `custom_fields` object will not be
        updated and will retain their current values. You can set the `null` value

        ### Viewability

        It's also important to note that Custom Fields are subject to
        viewability restrictions based on the "Reportability" property set by
        system administrators.

        :::tip

        Please note that access to view custom fields are automatically filtered by
        "Reportability", a property set by admins on the custom field definition that
        determines which User Roles are allowed to see the field. If you are not seeing
        a custom field that you expect to see, please check with your system administrator.

        :::

        ### Examples

        Here's an example value of `custom_fields` in a response:

        ```json
        "custom_fields": {
          "C41B2DDA662F4EF6B730F9CB6DB04696": {
            "attr_type": "ENUM_STRING_252",
            "description": "Employee pay group.",
            "id_attr_type": "C41B2DDA662F4EF6B730F9CB6DB04696",
            "id_attr_type_uri": "/api/v1/custom_fields/C41B2DDA662F4EF6B730F9CB6DB04696",
            "pname": "Pay Group",
            "value": "XYZ Pay Group"
          },
          "users_email": {
            "attr_type": "STRING_252",
            "description": "Email address",
            "id_attr_type": "users_email",
            "id_attr_type_uri": "/api/v1/custom_fields/users_email",
            "pname": "Email Address",
            "value": "username@example.com"
          }

        ```

        Note that there is an alternate representation available in most object types, where
        each custom field value is a separate key in the main object (not under `custom_fields`)
        in the following format, showing both a singular and multi-value example:

        ```json
        "users_attribs:C41B2DDA662F4EF6B730F9CB6DB04696": "XYZ Pay Group",
        "users_attribs:users_skills": [
          "CRM admin - advanced"
        ]
        ```

        This follows the pattern of `users_attribs:<field_id>`, where `users_attribs` is
        the internal table name for User custom fields. For other object types, the table
        name will be different, e.g. `projects_attribs`. This is a read-only representation
        for convenience and is not used for updating custom fields.

        This more compact representation is always provided (unless `$keys=$base` was set).
        However, the `custom_fields` object will only be available if `$keys=custom_fields`
        or `$keys=$extended` was set.
      properties: *ref_57
    GroupNamesField:
      type: object
      description: |
        This is the `group_names` field which is attached to many object types to provide
        a convenient representation of the Groups that an object belongs to, including
        both name and ID.
      properties: *ref_75
    GroupFields:
      type: object
      description: |
        These are group-related fields that are common to most object types.

        Please note that these fields may not be present in the response unless
        the `$keys` query parameter includes the field name, e.g. `$keys=groups`.

        See [Collection#Selecting Fields](/docs/collections#selecting-fields)
        for more information about the `$keys` parameter.

        The `$keys=$extended` parameter will also include the `group_names` field.

        In general, Groups determine the visibility of objects to each user in the system.
        For example, a user can only see objects that belong to a Group that
        they are themselves a member of.

        When creating or modifying objects with `POST` or `PUT` requests, you can
        only use the `groups` field to specify the Group IDs that the object belongs to.
        The `group_names` field is read-only.

        If an object does not belong to any groups, it is considered to be "hidden"
        and the `is_hidden` field will be set to `true`. Hidden objects are normally
        only accessible to administrators, and then only if the `$filter` query parameter
        is used to include hidden status objects.

        For most object types, that would be done with a filter like this:

        ```
        $filter = status_code intersects ["lr","ro","h"]
        ```

        The [Users](/docs/reference/list-users) collection can be filtered
        like this to show hidden users:

        ```
        $filter = status intersects ["active","inactive","hidden"]
        ```

        You can read more about [Filtering](/docs/collections#filtering) in the
        section on Collections.

        If you **only** want hidden objects, just remove the other status codes from
        the filter.
      allOf: *ref_58
      properties: *ref_59
    UserModifiableFields:
      type: object
      description: |
        These are fields in the User object that can be modified (not necessarily by the user in question)
        or given as input when creating a new User.

        :::tip

        Note that only `user_login` and `fullname` are required when creating a new User.

        :::

        **Note:** If using SSO (Single Sign-On), the `user_login` field usually
        needs to match the user's email address, UPN, or other primary identifier in
        the external authentication system.

        :::warning

        The `new_pw`, `new_pw2`, and `expire_new_pw` fields should only be used when
        intending to change the user's password.

        :::
      required: *ref_168
      allOf: *ref_169
      properties: *ref_170
    CreatorFields:
      type: object
      description: |
        Fields related to the creation of a resource, including the creation
        timestamp, creator user ID, and creator user name.

        Note that extended information about the creator user may be included
        in the `creator_properties` field, depending on the `$keys` requested.
        If present, this information will follow the schema of the
        [User](/docs/reference/schemas/user) object.
      allOf: *ref_1
      properties: *ref_2
    BasicCreateTimestampFields:
      type: object
      properties: *ref_70
    CreateTimestamps:
      type: object
      description: Object creation date/time fields common to many resources.
      allOf: *ref_5
      properties: *ref_6
    BasicModifierFields:
      type: object
      properties: *ref_71
    User:
      type: object
      description: |
        A user account in the JX system.
      allOf: *ref_3
      properties: *ref_4
    ModifierFields:
      type: object
      description: |
        Fields related to the last modification of a resource, including the
        last modified timestamp in various formats, the modifier's user ID and
        full name. Please note that this only records the most recent
        modification. In addition, it may not reflect modifications to child
        resources or extended properties that are defined in other tables, such
        as "Custom Fields". These last modifier fields are always read-only.

        Note that extended information about the modifier user may be included
        in the `modifier_properties` field, depending on the `$keys` requested.
        If present, this information will follow the schema of the
        [User](/docs/reference/schemas/user) object.
      allOf: *ref_7
      properties: *ref_8
    BasicModifyTimestampFields:
      type: object
      properties: *ref_72
    ModifyTimestamps:
      type: object
      description: |
        The last modified date/time fields common to many resources. Please note
        that this only records the most recent modification. In addition, it may
        not record modifications to child resources or extended properties that
        are defined in other tables, such as "Custom Fields". These fields are
        read-only.
      allOf: *ref_9
      properties: *ref_10
    DomainFields:
      type: object
      description: |
        These are fields related to the deprecated "Domain" object.
      properties: *ref_11
    ScreenField:
      type: object
      description: |
        A configured field on a screen.
      properties: *ref_30
    CollectionsScreen:
      type: object
      description: |
        Defines various user interface properties for the web UI screen that
        this collection supports. This is an internal object that is read-only
        on most object endpoints and is not guaranteed to be a stable interface.
        This mainly defines the search filters available in the UI. This object
        may not be present in all collections.

        :::warning[Not available in every collection]

        This key (object) may not be present in all collections that refer
        to this schema.

        :::
      allOf: *ref_177
      properties: *ref_178
    PagedResponse:
      description: |
        A standard success response that may be returned by the API for most
        collection endpoints. This response includes a list of result objects (items),
        a count of the total number of items matching the query, and other metadata.
      type: object
      properties: *ref_33
    Request:
      type: object
      description: |
        Represents a 'Request' within the system.
        Usually, but not always, represents an HTTP request,
        but may also represent a Scheduled Task (cron job) or
        other special event types.
      allOf: *ref_15
      properties: *ref_16
    ActivityMonitorCollectionResponse:
      allOf: *ref_179
    ErrorResponse:
      description: |
        A standard format for error responses that may be returned by the API when various
        types of errors occur, including authentication (sign-in) failures, authorization
        (permission) failures, "object not found" (404), internal server errors (500),
        bad client requests (400) and other types of errors.
      type: object
      properties: *ref_14
    ItemResponse:
      description: |
        A standard success response includes a single item (object), and other metadata.
      type: object
      properties: *ref_50
    ActivityMonitorItemResponse:
      allOf: *ref_23
    ApiKey:
      type: object
      description: |
        An API Key metadata (description) object.

        Important: many of these fields will only be shown
        if the key in question belongs to the current user.
      properties: *ref_28
    UnpagedResponseBase:
      description: |
        A success response that may be returned by certain API endpoints
        that do not support pagination; the entire result set is returned in a single
        response.
      type: object
      properties: *ref_31
    UnpagedResponse:
      description: |
        A success response that may be returned by certain API endpoints
        that do not support pagination; the entire result set is returned in a single
        response as an array in the `results` field.
      type: object
      allOf: *ref_29
    ApiKeysListResponse:
      allOf: *ref_180
    SearchApiKeysResult:
      type: object
      description: |
        A single result from a search for API keys.
      properties: *ref_181
    ApprovalRequest:
      type: object
      required: *ref_182
      properties: *ref_183
    ApprovalRequestBody:
      type: array
      items: *ref_184
      description: |
        The request body for the "Approve Sheet" endpoint.
        Note that the request body must be a JSON list, not an object,
        with one entry (object) in the array per sheet to approve.
    ApprovalResponse:
      description: |
        The response to an Approve, Reject, or Reopen action on an Entry Sheet.
        The `results` array will be empty, but the `status` array will contain
        any status (confirmation) messages generated by the action.
      allOf: *ref_32
    ScreenModifiableFields:
      type: object
      description: |
        These are the fields that can be modified on the UI Screen endpoint.
      properties: *ref_162
    Screen:
      type: object
      description: |
        This represents the settings for a UI management screen, which generally
        consists of a search panel area and a table of results.
      allOf: *ref_158
      properties: *ref_159
    ApprovalQueueItem:
      type: object
      description: |
        This represents an individual sheet waiting in the approval queue.
      properties: *ref_185
    MyApprovalQueueResults:
      type: object
      description: |
        The response to a request for the current user's approval queue.
      properties: *ref_186
    MyApprovalQueueResponse:
      description: |
        The response to a request for the current user's approval queue.
      allOf: *ref_187
    UnpagedObjectResponse:
      description: |
        A success response that may be returned by certain API endpoints
        that do not support pagination; the entire result set is returned in a single
        response as an object in the `results` field.
      type: object
      allOf: *ref_165
    MyApprovalTypesResponse:
      description: |
        The response to a request for the current user's approval sheet types.
        Check the `results` object for the types of sheets that the user can approve.
      allOf: *ref_188
    RejectRequest:
      type: object
      required: *ref_189
      properties: *ref_190
    RejectRequestBody:
      type: array
      items: *ref_191
      description: |
        The request body for the "Reject Sheet" endpoint of Approvals.
        Note that the request body must be a JSON list, not an object,
        with one entry (object) in the array per sheet to reject.
    ReopenRequest:
      type: object
      required: *ref_192
      properties: *ref_193
    ReopenRequestBody:
      type: array
      items: *ref_194
      description: |
        The request body for the "Reopen Sheet" endpoint.
        Note that the request body must be a JSON list, not an object,
        with one entry (object) in the array per sheet to reopen.
    AutoSheetProcessingJobModifiableFields:
      type: object
      description: |
        The fields that can be modified when creating or updating
        an Auto Sheet Processing job.
      properties: *ref_34
    AutoSheetProcessingSettingModifiableFields:
      type: object
      description: |
        Auto Sheet Processing (ASP) Settings Group modifiable fields.

        These are the fields that can be modified or given as input when creating
        or modifying an Auto Sheet Processing settings group.
      properties: *ref_45
    AutoSheetProcessingSetting:
      type: object
      description: |
        Auto Sheet Processing (ASP) Settings Group.

        This represents a single configuration settings group for the ASP
        feature that can be applied as a rule-set to selected users.
      allOf: *ref_43
      properties: *ref_44
    AutoSheetProcessingJob:
      type: object
      description: |
        An Auto Sheet Processing job.
      allOf: *ref_35
      properties: *ref_36
    ASPJobsCollectionResponse:
      allOf: *ref_195
    CreateItemResponse:
      description: |
        The item was successfully created.

        This is a minimal response that indicates whether the request was successful and provides the
        URI of the created item. To retrieve additional details or the full item, you may need to make
        additional requests.

        :::info

        See the `Location` header for the URL of the new item,
        as well as the `X-Item-Id` and `X-Item-Table` headers for the ID and
        table name of the new item.

        :::
      type: object
      properties: *ref_46
    ASPSettingsCollectionResponse:
      allOf: *ref_196
    ASPSettingItemResponse:
      allOf: *ref_197
    BatchRequestSchema:
      type: object
      description: |
        A single request within a batch request.
      properties: *ref_198
    BatchResponseSchema:
      type: object
      description: |
        The response to a batch request, containing the results of each individual request.

        Note that the index of each response in the array corresponds to the index of the request
        in the original batch request.  If `stop_on_error` is `true`, the response array will
        stop at the first error encountered.
      properties: *ref_199
    CustomFieldDefinition:
      type: object
      description: |
        The definition record of a Custom Field.
      allOf: *ref_55
      properties: *ref_56
    CustomFieldsCollectionResponse:
      allOf: *ref_200
    CustomFieldItemResponse:
      allOf: *ref_201
    ObjectStatusFields:
      type: object
      description: |
        These are common fields used throughout the system to indicate the status
        of an object, whether "hidden", "loggable", "reportable-only".

        Note that "hidden" status is defined as not belonging to any
        [Groups](/docs/reference/schemas/groupfields). See that link
        for more information about finding hidden items.

        Loggable and Reportable status means that the object is both visible
        to at least some users, and can be used in current (new) time entries.

        Reportable Only means that the object is visible to at least some users,
        but cannot be used in newly created time entries.
      properties: *ref_133
    EntryCodeModifiableFields:
      type: object
      description: |
        These are fields in the Entry Code object that can be modified
        or given as input when creating a new Entry Code.
      required: *ref_62
      allOf: *ref_63
      properties: *ref_64
    EntryCode:
      type: object
      description: |
        An Entry Code is a unique selection value in an Entry Screen column.
      allOf: *ref_65
      properties: *ref_66
    EntryCodesCollectionResponse:
      allOf: *ref_60
    EntryCodeTablesEnum:
      description: |
        This is a list of the valid table names used for different Entry Codes that can be
        managed in the system.

        Note that not all of these tables may be available in your specific
        Journyx configuration.
      type: string
      enum: *ref_202
    EntryCodeItemResponse:
      allOf: *ref_203
    EntryColumn:
      type: object
      description: |
        Represents an Entry Column definition. That is an available
        selection (dropdown) or text entry column on an Entry Screen.
      properties: *ref_68
    EntryColumnsCollectionResponse:
      allOf: *ref_204
    EntryColumnItemResponse:
      allOf: *ref_205
    EntryPeriod:
      type: object
      description: |
        An Entry Period is the definition of the time-span to use in individual
        Entry Sheets, such as weekly, bi-weekly, or monthly. Entry Periods are
        assigned via the Entry Screen configuration.
      allOf: *ref_73
      properties: *ref_74
    EntryPeriodsCollectionResponse:
      allOf: *ref_206
    EntryPeriodItemResponse:
      allOf: *ref_207
    EntryScreen:
      type: object
      description: |
        An Entry Screen is the configuration of the Entry Sheet, including the
        fields and layout of the sheet, as well as the Entry Periods assigned to
        the sheet, which defines the time period such as weekly, bi-weekly, etc.
        The Entry Screen config determines which
        [Entry Columns](/docs/reference/list-entry-columns)
        appear on a user's entry sheet, and in what order, along with
        many other entry screen configuration options.
      allOf: *ref_78
      properties: *ref_79
    CustomEntryScreen:
      type: object
      description: |
        An Entry Screen is the configuration of the Entry Sheet, including the
        fields and layout of the sheet, as well as the Entry Periods assigned to
        the sheet, which defines the time period such as weekly, bi-weekly, etc.
        The Entry Screen config determines which
        [Entry Columns](/docs/reference/list-entry-columns)
        appear on a user's entry sheet, and in what order, along with
        many other entry screen configuration options.
      allOf: *ref_76
      properties: *ref_77
    CustomEntryScreensCollectionResponse:
      allOf: *ref_208
    CustomEntryScreenItemResponse:
      allOf: *ref_209
    ExpenseEntryScreen:
      type: object
      description: |
        An Entry Screen is the configuration of the Entry Sheet, including the
        fields and layout of the sheet, as well as the Entry Periods assigned to
        the sheet, which defines the time period such as weekly, bi-weekly, etc.
        The Entry Screen config determines which
        [Entry Columns](/docs/reference/list-entry-columns)
        appear on a user's entry sheet, and in what order, along with
        many other entry screen configuration options.
      allOf: *ref_81
      properties: *ref_82
    ExpenseEntryScreensCollectionResponse:
      allOf: *ref_210
    ExpenseEntryScreenItemResponse:
      allOf: *ref_211
    TimeEntryScreen:
      type: object
      description: |
        An Entry Screen is the configuration of the Entry Sheet, including the
        fields and layout of the sheet, as well as the Entry Periods assigned to
        the sheet, which defines the time period such as weekly, bi-weekly, etc.
        The Entry Screen config determines which
        [Entry Columns](/docs/reference/list-entry-columns)
        appear on a user's entry sheet, and in what order, along with
        many other entry screen configuration options.
      allOf: *ref_83
      properties: *ref_84
    TimeEntryScreensCollectionResponse:
      allOf: *ref_212
    TimeEntryScreenItemResponse:
      allOf: *ref_213
    EntrySheetBase:
      type: object
      description: |
        Base entry sheet fields common to all entry types (time, expense, custom).
        An entry sheet represents a user's entries for a specific period.
      allOf: *ref_214
    Attachment:
      type: object
      description: |
        A file attachment associated with an entry cell (e.g., receipt, document).
      properties: *ref_215
      required: *ref_216
    EntryNote:
      type: object
      description: |
        A diary note attached to an entry cell.
      properties: *ref_217
      required: *ref_218
    Location:
      type: object
      description: |
        GPS location coordinates and associated metadata for an entry record or punch time.
        Captured when location tracking is enabled.
      properties: *ref_85
      required: *ref_86
    EntryCell:
      type: object
      description: |
        A cell represents the intersection of a row and a date, containing the actual
        entry data (hours/amount) and associated metadata for that specific combination.
      properties: *ref_219
      required: *ref_220
    Punch:
      type: object
      description: |
        A punch-in/punch-out time pair representing a work period.
        Only applicable to time entry sheets with punch time tracking enabled.
      properties: *ref_221
      required: *ref_222
    PunchList:
      type: object
      description: Collection of punch pairs for a specific date or row
      properties: *ref_89
    EntryRow:
      type: object
      description: |
        A row represents a unique combination of entry column values (project, codes, comment).
        Each row aggregates entries across all dates in the period.

        Note that the exact keys present here (e.g., code3+) may depend on other system settings,
        including whether additional entry columns are activated system-wide.
      properties: *ref_223
      required: *ref_224
    EntryColumn-2:
      type: object
      description: |
        Metadata describing a configurable entry column (dimension) for the sheet.
        Columns define what fields are available for entry (project, task, pay type, etc.).
      properties: *ref_87
      required: *ref_88
    ApprovalPlanInfo:
      type: object
      description: |
        Information about the approval workflow configuration for the sheet.
      properties: *ref_225
      required: *ref_226
    AuditSettings:
      type: object
      description: |
        Audit configuration controlling how corrections to submitted entries are handled.
      properties: *ref_227
      required: *ref_228
    EntrySheetExtended:
      description: |
        Extended entry sheet with all optional fields included.

        These fields are returned when:
        - Getting a single sheet (not a collection)
        - Using `$keys=$extended` or specifying keys explicitly
        - Requesting specific keys like `rows`, `columns`, etc.
      allOf: *ref_95
    TimeSheetAccrual:
      type: object
      description: |
        A time bank (accrual) showing available leave balance for a specific pay type.
        Only applicable to time entry sheets. The schema for accruals as shown in
        time sheets is slightly different than the separate
        [accrual definition](/docs/reference/schemas/accrual) schema.
      properties: *ref_229
      required: *ref_230
    TimeSheet:
      description: |
        Time entry sheet.

        See the
        [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
        for a discussion of the structure of the sheet, especially the `rows` key
        which contains the actual time entries.
      allOf: *ref_90
    TimeSheetCollectionResponse:
      description: Paginated collection of time sheets
      allOf: *ref_231
    EntrySheetCreateBase:
      type: object
      description: |
        See the
        [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
      required: *ref_96
      properties: *ref_97
    TimeSheetCreateRequest:
      description: |
        Request body schema for creating a Time Entry Sheet.
      allOf: *ref_232
    EntrySheetModifyResponse:
      description: |
        Response from creating or updating an entry sheet.
        Returns the full sheet plus validation messages.
      type: object
      properties: *ref_98
      required: *ref_99
    TimeSheetModifyResponse:
      description: Response schema for creating or updating (modifying) a Time Entry sheet.
      allOf: *ref_93
    TimeSheetItemResponse:
      description: Single time sheet response
      allOf: *ref_233
    EntrySheetUpdateBase:
      type: object
      description: |
        These are the updatable fields for an entry sheet. In general, you
        do not need to send most of the fields available in a sheet back to
        the server when creating or modifying it - just `id_user` and `dates`
        fields, plus the `rows` field if you wish to update the entry data.
        The `rows` field should contain the complete set of entry data for the sheet,
        not just the changes.

        See the
        [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets).
      required: *ref_102
      properties: *ref_103
    TimeSheetUpdateRequest:
      allOf: *ref_234
    ExpenseSheet:
      description: |
        Expense entry sheet.

        Expense sheets use the same base structure as time sheets but track
        monetary expenses (and in some legacy configurations, mileage) instead of hours.

        See the
        [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
        for a discussion of the structure of the sheet, especially the `rows` key
        which contains the actual expense entries.
      allOf: *ref_100
    ExpenseSheetCollectionResponse:
      description: Paginated collection of expense sheets
      allOf: *ref_235
    ExpenseSheetCreateRequest:
      description: |
        Request body schema for creating an Expense Entry Sheet.
      allOf: *ref_236
    ExpenseSheetModifyResponse:
      description: Response schema for creating or updating (modifying) an Expense Entry sheet.
      allOf: *ref_104
    ExpenseSheetItemResponse:
      description: Single expense sheet response
      allOf: *ref_237
    ExpenseSheetUpdateRequest:
      allOf: *ref_238
    CustomSheet:
      description: |
        Custom/mileage entry sheet.

        Custom sheets use the same base structure as time sheets but track
        mileage/distance, equipment, or other custom metrics.

        See the
        [Entry Sheet API tutorial](/docs/tutorial/api-tutorial-entry-sheets)
        for a discussion of the structure of the sheet, especially the `rows` key
        which contains the actual Custom Entry records.
      allOf: *ref_105
    CustomSheetCollectionResponse:
      description: Paginated collection of custom sheets
      allOf: *ref_239
    CustomSheetCreateRequest:
      description: |
        Request body schema for creating a Custom Entry Sheet.
      allOf: *ref_240
    CustomSheetModifyResponse:
      description: Response schema for creating or updating (modifying) a Custom Entry sheet.
      allOf: *ref_106
    CustomSheetItemResponse:
      description: Single custom sheet response
      allOf: *ref_241
    CustomSheetUpdateRequest:
      allOf: *ref_242
    EntryRecordBase:
      type: object
      description: |
        Base entry record fields common to all entry types.
        Entry records are the individual line items of time, expense, or custom data.

        **Note**: The Entry Records API is read-only. To create or modify entry records,
        use the Entry Sheets API.
      allOf: *ref_108
    TimeRecord:
      description: |
        A time entry record representing hours worked on a specific project/task combination.
      allOf: *ref_107
    TimeRecordCollectionResponse:
      description: Paginated collection of time records
      allOf: *ref_243
    TimeRecordItemResponse:
      description: Single time record response
      allOf: *ref_244
    ExpenseRecord:
      description: |
        An expense entry record representing a monetary expense or mileage.
      allOf: *ref_110
    ExpenseRecordCollectionResponse:
      description: Paginated collection of expense records
      allOf: *ref_245
    ExpenseRecordItemResponse:
      description: Single expense record response
      allOf: *ref_246
    CustomRecord:
      description: |
        A custom/mileage entry record representing distance traveled or other custom metrics.
        Also referred to as "travel record" in the database.
      allOf: *ref_111
    CustomRecordCollectionResponse:
      description: Paginated collection of custom records
      allOf: *ref_247
    CustomRecordItemResponse:
      description: Single custom record response
      allOf: *ref_248
    FavoritesTablesEnum:
      description: |
        This is a list of the valid table names that can be used with the
        Favorites (star icon) feature of Entry Columns.

        Note that not all of these tables may be available in your specific
        Journyx configuration.
      type: string
      enum: *ref_112
    Favorite:
      type: object
      description: |
        Represents a 'Favorite' within the system.

        This marks an Entry Screen column value as a favorite so it appears
        at the top of selection lists.

        Accessible in the UI from the Profile menu (upper right) > My Favorites.
      properties: *ref_114
    FavoritesCollectionResponse:
      allOf: *ref_116
    FavoritesItemResponse:
      allOf: *ref_118
    EmptyRequestBody:
      type: object
      nullable: true
      description: |
        You do not need to provide a request body for this operation.
      properties: *ref_119
    GeofenceAssignment:
      type: object
      description: |
        A geofence assignment links a geofence to a specific entity (user, group, project, or entry screen).

        When an entry is submitted, the system determines which geofences apply by checking if the user
        or project matches any assignment for active geofences.

        **Assignment Target Tables:**
        - `users` - Direct assignment to individual users
        - `groups` - Assignment to all users in a group (via ACL membership)
        - `projects` - Assignment to a specific project (including PX tasks)
        - `time_guis` - Assignment to a time entry screen configuration
        - `expense_guis` - Assignment to an expense entry screen configuration
        - `travel_entry_guis` - Assignment to a custom entry screen configuration
      required: *ref_120
      properties: *ref_121
    GeofenceModifiableFields:
      type: object
      description: |
        These are fields in the Geofence object that can be modified or provided as input
        when creating a new Geofence.

        **Required Fields**

        Only `pname`, `latitude`, `longitude`, and `radius` are required when creating a new Geofence.


        **Geofence Types**

        Currently, only circular geofences are supported. The `type` field must be set to `"circle"` (the default).
        Future versions may support other geofence shapes like polygons.


        **Coordinate Validation**

        Both `latitude` and `longitude` cannot be exactly 0.0 simultaneously, as this represents a location
        in the Atlantic Ocean off the coast of Africa and is likely an error.
      required: *ref_122
      properties: *ref_123
    Geofence:
      type: object
      description: |
        A geofence definition that specifies a geographic boundary for location-based access control.

        Geofences are used to ensure users are physically present at approved locations when submitting
        time entries, expense entries, or custom entries. When a geofence is assigned to users, groups,
        projects, or entry screens, the system validates that the user's location falls within at least
        one applicable geofence boundary before allowing entry submission.
      allOf: *ref_124
      properties: *ref_125
    GeofenceCollectionResponse:
      allOf: *ref_249
    GeofenceItemResponse:
      allOf: *ref_126
    LeaveRequestModifiableFields:
      type: object
      description: |
        These are fields in the Leave Request object that can be modified
        or given as input when creating a new Leave Request.
      required: *ref_128
      properties: *ref_129
    LeaveRequest:
      type: object
      description: |
        A leave request.  Depending on the system configuration, this will not be
        converted to a Time Entry until it is approved and the user has loaded and saved
        their Time Entry screen.
      allOf: *ref_130
      properties: *ref_131
    LeaveRequestsCollectionResponse:
      allOf: *ref_250
    LeaveRequestsItemResponse:
      allOf: *ref_251
    AuthRequest:
      description: |
        The request body for the `login` operation.
      type: object
      required: *ref_252
      properties: *ref_253
    AuthResponse:
      type: object
      description: |
        The response body for the `login` operation.

        :::warning[Important]

        Note that the actual session token is returned in the `wtsession` cookie
        in the response headers (`Set-Cookie`). It is also available in the
        header `X-Session-Id`. The token is **not** returned in the response body.

        :::
      properties: *ref_254
    NavResponse:
      type: object
      description: |
        The response body for the `nav` operation containing the menu
        structure and related info for the current user.
      properties: *ref_255
    ProjectModifiableFields:
      type: object
      description: |
        These are fields in the Project object that can be modified or given as input
        when creating a new Project.
      required: *ref_134
      allOf: *ref_135
      properties: *ref_136
    Project:
      type: object
      description: |
        A Project or PX Scheduled Task in the JX system.
      allOf: *ref_137
    ProjectCollectionResponse:
      allOf: *ref_256
    ProjectItemResponse:
      description: |
        A successful response with a single item object;
        see the `results` key in the response body.
      allOf: *ref_257
    AssignmentModifiableFields:
      type: object
      description: |
        Fields that can be modified on an Assignment.
      allOf: *ref_139
      properties: *ref_140
    Assignment:
      type: object
      description: |
        An Assignment is an artifact of a work assignment to a PX Task
        given to either a User or a Team.
      allOf: *ref_141
      properties: *ref_142
    AssignmentsCollectionResponse:
      allOf: *ref_258
    AssignmentItemResponse:
      allOf: *ref_259
    RequisitionModifiableFields:
      type: object
      description: |
        A Requisition represents a request for an assignment of a
        user (or team) to a particular PX Task. These are the fields
        that can be modified when creating or updating a Requisition.
      properties: *ref_144
    Requisition:
      type: object
      description: |
        A Requisition represents a request for an assignment of a
        user (or team) to a particular PX Task.
      allOf: *ref_145
      properties: *ref_146
    RequisitionsCollectionResponse:
      allOf: *ref_260
    RequisitionItemResponse:
      allOf: *ref_261
    TeamModifiableFields:
      type: object
      description: |
        These are fields in the Team object that can be modified or given as
        input when creating a new Team.

        See the [List Teams](/docs/reference/list-teams) endpoint for
        general information about the purpose and role of Teams in the
        Journyx system.
      required: *ref_148
      allOf: *ref_149
      properties: *ref_150
    Team:
      type: object
      description: |
        The Teams feature allows you to create groups of users with shared
        characteristics for making preliminary "team assignments" to
        scheduled tasks before you have determined the individual(s) who
        will do the work.

        See the [List Teams](/docs/reference/list-teams) endpoint for
        general information about the purpose and role of Teams in the
        Journyx system.
      allOf: *ref_151
      properties: *ref_152
    TeamsCollectionResponse:
      allOf: *ref_262
    TeamItemResponse:
      allOf: *ref_263
    RateRulesPolicy:
      type: object
      description: |
        A rate rules policy.
      allOf: *ref_154
      properties: *ref_155
    RateRulesPoliciesCollectionResponse:
      allOf: *ref_264
    RateRulesPolicyItemResponse:
      allOf: *ref_265
    ReportCommitRequestBody:
      type: object
      description: |
        The request body for the `POST /api/v1/reports/commit_records` endpoint.
      required: *ref_266
      properties: *ref_267
    ReportCommitResponse:
      type: object
      description: |
        The response body for the `POST /api/v1/reports/commit_records` endpoint.
      allOf: *ref_268
    ReportCustomFieldSearchSettingsResponse:
      type: object
      description: |
        The response body for the `POST /api/v1/reports/get_custom_field_search_settings` endpoint.

        This is a list of select-type (`ENUM`) Custom Fields that can be used in the
        report search filter.
      allOf: *ref_269
    ReportGroupSearchTypesResponse:
      type: object
      description: |
        The response body for the `POST /api/v1/reports/get_group_search_types` endpoint.

        This shows the *types of Groups* available for filtering. Examples:

        - Normal
        - Assignment
        - System Generated
        - Work Request
        - PX Team
      allOf: *ref_270
    ReportSettingsObject:
      type: object
      description: |
        The current settings for the report. This includes the report's
        name, description, and the settings for the report's display columns.
      properties: *ref_156
    GetReportSettingsResponse:
      type: object
      description: |
        The response body for the `POST /api/v1/reports/get_report_settings` endpoint.

        This is the current settings for the report. This includes the report's
        name, description, and the settings for the report's display columns.
      allOf: *ref_271
    SaveReportSettingsResponse:
      type: object
      description: |
        The response body for the `POST /api/v1/reports/save_report_settings` endpoint.

        This normally just returns `results: true` value on success. To see the
        report's current settings, use the `GET /api/v1/reports/get_report_settings` endpoint.
      allOf: *ref_272
    ReportFieldSchema:
      type: object
      description: |
        The schema for a report field that describes how to
        display and interact with the field in the report UI.
      properties: *ref_157
    ReportRunResponse:
      type: object
      description: |
        The response object for a report run.

        Note that not all of these keys will be present in all responses,
        depending on the report type.

        The core data of the report is usually under the following key:

        `results > data > report_desc > items`

        This will be an array of objects, either subtotal objects or
        individual data objects (rows), depending on the report type
        and options. The base row objects usually have keys that
        correspond to the fields listed in:

        `results > data > report_desc > fields`
      properties: *ref_273
    ScreensUserCollectionResponse:
      allOf: *ref_274
    ScreenItemResponse:
      description: |
        A successful response with a single item object;
        see the `results` key in the response body.
      allOf: *ref_164
    ScreenChoicesField:
      type: object
      description: |
        Describes an available built-in field available as a search results
        field on a management screen.
      properties: *ref_275
    ScreenChoices:
      type: object
      description: |
        A list of choices for a screen field.
      properties: *ref_163
    ScreensChoicesCollectionResponse:
      allOf: *ref_276
    ScreenChoicesItemResponse:
      allOf: *ref_277
    ScreensGlobalCollectionResponse:
      allOf: *ref_278
    TimezoneItem:
      type: object
      description: A single timezone option for use in timezone pickers.
      properties: *ref_279
      required: *ref_280
    TimezonesResponse:
      type: object
      description: |
        Response from the timezones endpoint containing a list of timezone
        options and the server's local timezone.
      properties: *ref_281
      required: *ref_282
    UserUIPrefsResult:
      type: object
      description: |
        The result of a `/ui_prefs/ui_prefs` GET request.
      properties: *ref_166
    UserUIPrefsResponse:
      description: |
        The response to a `/ui_prefs/ui_prefs` GET request.
      allOf: *ref_167
    UserCollectionResponse:
      allOf: *ref_283
    UserItemResponse:
      allOf: *ref_284
    UserActivateRequest:
      type: object
      description: |
        The request to activate a user.
      properties: *ref_285
    UserActivateResult:
      type: object
      description: |
        The details about a request to activate or deactivate a set of users.
      properties: *ref_286
    UserActivateResponse:
      description: |
        The response to a user Activate / Deactivate request.
        Check the `results` object for the outcome details
      allOf: *ref_287
    AccrualModifiableFields:
      type: object
      description: |
        These are fields in the Accrual ("Time Bank") object that can be modified
        or given as input when creating a new Accrual.
      required: *ref_172
      properties: *ref_173
    Accrual:
      type: object
      description: |
        An Accrual or "time bank" is a collection of time that can be used to
        pay for time off. Accruals are typically used to track vacation time,
        sick time, and other types of paid time off.

        Each accrual is tied to a user and one or more Pay Types. The accrual can have
        a name, a balance, and hard and soft limits.  Balances can be managed
        manually, or can be generated through the Accrual Calculator product.

        Time is deducted from the Accrual when a user creates a Time Entry for
        a Pay Type associated with the Accrual.

        A hard limit is a minimum balance that cannot be exceeded. For example
        a hard limit of 0.00 hours would mean that the user cannot have a negative
        balance in the Accrual.

        A soft limit is a balance at which the user is notified or warned that
        they are approaching the hard limit.
      allOf: *ref_174
      properties: *ref_175
    AccrualsCollectionResponse:
      allOf: *ref_288
    AccrualItemResponse:
      allOf: *ref_289
  responses:
    BadRequest:
      description: |
        A `400 Bad Request` is returned when the client request was malformed,
        invalid, or otherwise could not be processed as-is. Usually, the cause for
        the error is included in the `error.message` field of the response, and the
        client should correct the request and try again.

        See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
      content: *ref_17
    NotAuthenticated:
      description: |
        Not authenticated - you must be signed in to access this resource. Please
        check the section of the documentation on authentication.
      content: *ref_18
    NotAuthorized:
      description: |
        A `403 Forbidden` response means that you are not authorized to perform
        this action or access this object, or the object does not exist at all.

        The client request may have been valid but the client does not have
        permission to access the requested resource or perform the requested action.

        :::tip[403 Forbidden also used when objects don't exist]

        In most cases, the system will not return a `404 Not Found` error response;
        it returns `403 Forbidden` both when the object doesn't exist at all,
        and also when it exists but the client does not have permission to access it.
        This is a security measure to prevent unauthorized users from determining
        whether an object exists or not.

        :::

        See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
      content: *ref_19
    NotFound:
      description: |
        Not found - the requested resource could not be found or does not exist.
        This may also include cases where the resource does exist, but the client
        does not have permission to access that resource.

        :::tip[403 Forbidden also used when objects don't exist]

        In most cases, the system will not return a `404 Not Found` error response;
        it returns `403 Forbidden` both when the object doesn't exist at all,
        and also when it exists but the client does not have permission to access it.
        This is a security measure to prevent unauthorized users from determining
        whether an object exists or not.

        :::

        See also [Core Concepts#Error Responses](/docs/rest-overview#error-responses).
      content: *ref_20
    InternalServerError:
      description: |
        Internal server error; an unexpected error occurred on the server. This
        could be due to a temporary condition or might be the result of a bug in the
        server software. Also, in some cases, an incorrect client input can
        trigger this error, and can be resolved by correcting the input.

        If the error persists, please contact support along along with the following
        details when possible:

        - any error messages received from the server
        - the full request and response details (full headers and body)
        - a description of the steps that led to the error
        - the time range when it occurred.
      content: *ref_21
    ServiceUnavailable:
      description: |
        Service unavailable - the server is currently unable to handle the request,
        usually due to maintenance activity on the server. Check if the server's web
        interface is currently available, or try again later.
      content: *ref_22
  parameters:
    id_event:
      name: id_event
      in: path
      description: The ID of the event to retrieve
      required: true
      schema: *ref_290
    id_request:
      name: id_request
      in: path
      description: The ID of the request to retrieve
      required: true
      schema: *ref_24
    ContentTypeHeader:
      name: Content-Type
      in: header
      required: true
      schema: *ref_25
      description: |
        The Content-Type header is required for all `POST` or `PUT` requests
        that have a request body.

        The value should normally be `application/json` assuming
        you are sending [JSON data](https://en.wikipedia.org/wiki/JSON).
      example: application/json
    XRequestedWithHeader:
      name: X-Requested-With
      in: header
      required: true
      schema: *ref_26
      description: |
        The X-Requested-With header is required for all `POST`, `PUT`, and `DELETE` requests.
        This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
        measure.

        The value should be `XMLHttpRequest`.
      example: XMLHttpRequest
    OriginHeader:
      name: Origin
      in: header
      required: true
      schema: *ref_27
      description: |
        The `Origin` header is required for all `POST`, `PUT`, and `DELETE` requests.
        This is an [anti-CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)
        measure.

        The value should be the base URL of the service you are calling.

        The `Referer` header can also be used in place of `Origin`.
        Please note the unusual spelling of `Referer`.
      example: https://example.apps.journyx.com
    $top:
      name: $top
      in: query
      required: false
      schema: *ref_38
      description: |
        The maximum number of objects to return. The default may vary from
        endpoint to endpoint, but is typically 100.
      example: 10
    $skip:
      name: $skip
      in: query
      required: false
      schema: *ref_39
      description: |
        The number of objects to skip before returning results.
      example: 0
    $keys:
      name: $keys
      in: query
      required: false
      schema: *ref_40
      description: |
        Specifies which keys (data values) to include in objects in the response. If this
        parameter is not given, typically most keys are included unless they are
        expensive to compute or return.

        This parameter can be repeated to request multiple keys.

        Any regular field can be named here, though many are automatically
        included by default and don't need to be specified.

        Special values are:
        - `$base` - only include the base object fields, which is usually much faster.
          Note that if `$base` is specified, no other keys will be included even if
          they are specified here.
        - `$extended` - include all extended properties, such as custom fields.
      example: creator_properties.fullname
    $filter:
      name: $filter
      in: query
      required: false
      schema: *ref_41
      description: |
        A filter specification string.

        See the [Collections#Filtering](/docs/collections#filtering) page for more
        information.

        <ins>Important:</ins> all string literals must be JSON-encoded; for
        example, a string literal must be enclosed in double quotes (`"`) and
        any double quotes within the string must be escaped with a backslash
        (`\"`), as shown in the example.
      example: pname eq "Embedded \" Quote Project"
    $orderBy:
      name: $orderBy
      in: query
      required: false
      schema: *ref_42
      description: |
        The field to sort by, optionally followed by a space and the sort direction. If this
        parameter is not given, the default sort field is typically `pname` if available. Specify
        additional secondary sort fields by separating them with commas. This field is not
        case-sensitive.

        The sort direction can be `asc` (ascending) or `desc` (descending).

        If not specified, the default sort direction is usually ascending.

        This parameter can be repeated to sort by multiple fields, or you
        can comma-separate multiple fields in a single parameter.

        <ins>Important:</ins> not all fields are sortable. If you attempt to
        sort by a non-sortable field, the API will return an 400 Bad Request
        error.
      example: creator.fullname desc, pname asc
    id_job_item:
      name: id_item
      in: path
      required: true
      schema: *ref_37
      description: The ID of the ASP Settings Job to retrieve.
      example: 56D334B005D84A1188661901299D87DA
    IfMatchHeader:
      name: If-Match
      in: header
      required: true
      schema: *ref_52
      description: |
        The `If-Match` header is *required* for all `PUT` requests that modify
        objects. The value should be the current ETag value of the object you
        are modifying, which can be obtained from the `ETag` header of the
        object's `GET` response. This is to ensure you are not accidentally
        overwriting changes made by another client.

        See the [modifying objects](/docs/rest-overview#modifying-objects-with-put)
        guide and the related
        [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
      example: 333c3873b9a60...
    id_setting_item:
      name: id_item
      in: path
      required: true
      schema: *ref_51
      description: The ID of the ASP Settings Group to retrieve.
      example: 56D334B005D84A1188661901299D87DA
    customFieldId:
      name: id_item
      in: path
      required: true
      schema: *ref_291
      description: The unique identifier of the Custom Field.
      example: C41B2DDA662F4EF6B730F9CB6DB04696
    tablename:
      name: tablename
      in: path
      required: true
      schema: *ref_61
      description: |
        This is a list of the valid table names used for different Entry Codes that can be
        managed in the system.

        Note that not all of these tables may be available in your specific
        Journyx configuration.
      example: codes_pay_types
    id_item:
      name: id_item
      in: path
      required: true
      schema: *ref_67
      description: The ID of the Entry Codes value to retrieve.
      example: 1F9E41337EA341219D9D1D023F1D8C24
    id_item-2:
      name: id_item
      in: path
      required: true
      schema: *ref_292
      description: |
        The internal ID of the Entry Column.
      example: 64BBA147B9AC41D9978062300826C89F
    id_item-3:
      name: id_item
      in: path
      required: true
      schema: *ref_293
      description: |
        The internal ID of the Entry Period.
      example: 64BBA147B9AC41D9978062300826C89F
    id_item-4:
      name: id_item
      in: path
      required: true
      schema: *ref_80
      description: |
        The internal ID of the Entry Screen config.
      example: 64BBA147B9AC41D9978062300826C89F
    $screenInclude:
      name: $screenInclude
      in: query
      required: false
      schema: *ref_94
      description: |
        Specifies whether to include the `screen` key in the response; defaults to
        false / 0. The `screen` field contains information needed to construct
        the related user interface (UI) page and is not needed for typical
        API usage.

        See the [Collections#ScreenInclude](/docs/collections#the-screen-key)
        page for more information.
    sheetId:
      name: sheetId
      in: path
      required: true
      schema: *ref_101
      description: |
        The internal ID of the Entry Sheet to retrieve or modify.
      example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
    recordId:
      name: recordId
      in: path
      required: true
      schema: *ref_109
      description: |
        The internal ID of the Entry Sheet Record (e.g. Time Rec) to retrieve or modify.
      example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
    tablename-2:
      name: tablename
      in: path
      required: true
      schema: *ref_113
      description: |
        This is a list of the valid table names that can be used with the
        Favorites (star icon) feature of Entry Columns.

        Note that not all of these tables may be available in your specific
        Journyx configuration.
      example: projects
    id_item-5:
      name: id_item
      in: path
      description: The Entry Column value ID of the item to retrieve
      required: true
      schema: *ref_115
      example: 1F9E41337EA341219D9D1D023F1D8C24
    id_user:
      name: id_user
      in: path
      description: The ID of the user to set/retrieve favorites for.
      required: true
      schema: *ref_117
      example: 64BBA147B9AC41D9978062300826C89F
    geofenceId:
      name: geofenceId
      in: path
      required: true
      schema: *ref_127
      description: |
        The internal ID of the geofence to retrieve or modify.
      example: 8A2F4B3D5E6C7891A2B3C4D5E6F78901
    id_item-6:
      name: id_item
      in: path
      description: The unique identifier of the Leave Request to retrieve.
      required: true
      schema: *ref_132
      example: 1F9E41337EA341219D9D1D023F1D8C24
    AcceptHeader:
      name: Accept
      in: header
      required: true
      schema: *ref_294
      description: |
        The Accept header is required for all `GET` requests that expect a
        response body. The value should normally be `application/json` assuming
        you are expecting JSON data.
      example: application/json
    projectId:
      name: projectId
      in: path
      required: true
      schema: *ref_138
      description: |
        The internal ID of the Project to retrieve or modify.
    id_item-7:
      name: id_item
      in: path
      required: true
      schema: *ref_143
      description: |
        The internal ID of the Assignment to retrieve or modify.
      example: 64BBA147B9AC41D9978062300826C89F
    id_item-8:
      name: id_item
      in: path
      required: true
      schema: *ref_147
      description: The ID of the Requisition to retrieve.
      example: 1F9E41337EA341219D9D1D023F1D8C24
    id_team:
      name: id_team
      in: path
      required: true
      schema: *ref_153
      description: The ID of the Team to retrieve.
      example: 1F9E41337EA341219D9D1D023F1D8C24
    id_item-9:
      name: id_item
      in: path
      required: true
      schema: *ref_295
      description: |
        The internal ID of the Rate Rules Policy.
      example: install_root_domTestPolicy
    id_user-2:
      name: id_user
      in: path
      description: The unique identifier of the User.
      required: true
      schema: *ref_160
      example: 1F9E41337EA341219D9D1D023F1D8C24
    id_screen:
      name: id_screen
      in: path
      description: The unique identifier of the Screen.
      required: true
      schema: *ref_161
      example: accruals
    userId:
      name: userId
      in: path
      required: true
      schema: *ref_171
      description: |
        The internal ID of the user to retrieve or modify.
      example: 64BBA147B9AC41D9978062300826C89F
    id_item-10:
      name: id_item
      in: path
      required: true
      schema: *ref_176
      description: The ID of the Accrual ("Time Bank") to retrieve.
      example: 1F9E41337EA341219D9D1D023F1D8C24
  headers:
    Location:
      schema: *ref_92
      description: URI of the sheet
    ETag:
      schema: *ref_91
      description: |-
        The current ETag value for the sheet, needed to perform a PUT modification.
        See the [modifying objects](/docs/rest-overview#modifying-objects-with-put) guide and the related [tutorial section](/docs/tutorial/api-tutorial-creating#modify-or-update-with-put).
