Timesheets

Create a timesheet

Creates a timesheet for a member. All time entries within the specified date range are associated with the timesheet and submitted for approval.

The start and end must fall within the same ISO week (Monday through Sunday). In the simplest case, start is Monday and end is Sunday of the same week.

Split weeks

When a workspace has split-week timesheets enabled (at month boundaries or semi-month boundaries), the timesheet period may be shorter than a full week. In these cases, start and end must match one of the valid split boundaries:

  • Month-end split: If the workspace splits timesheets at the end of the month and a week crosses a month boundary, valid periods are Monday through the last day of the month, or the first day of the new month through Sunday.
  • Semi-month split: If the workspace splits timesheets at the 15th of the month and a week crosses the 15th, valid periods are Monday through the 15th, or the 16th through Sunday.

If the provided dates do not match a valid period, the API returns a 400 error listing the accepted start and end dates.

Timesheet attestation

A timesheet attestation requires a signature at the time of submission, and the API does not accept one. A timesheet for a member who is assigned a timesheet attestation must be submitted in the Ruddr app, and a request to submit one through the API returns a 400 error.

post/timesheets

Request

  • Base URL: https://www.ruddr.io/api/workspace
  • URL: https://www.ruddr.io/api/workspace/timesheets
  • Auth: HTTP bearer

Request body

memberIdstring required

The unique identifier of the member to create the timesheet for.

startstring date required

The start date of the timesheet period. Must be in the form YYYY-MM-DD.

endstring date required

The end date of the timesheet period. Must be on or after start and within the same ISO week. Must be in the form YYYY-MM-DD.

Response

200

idstring

The unique identifier for the object.

startstring date

The start date of the timesheet period. Will be in the form YYYY-MM-DD.

endstring date

The end date of the timesheet period. Will be in the form YYYY-MM-DD.

createdAtstring date-time

The timestamp when the object was created.

submittedOnstring date-time

The timestamp when the timesheet was submitted.

hoursnumber

The total number of hours tracked in this timesheet period.

attestationTextstring nullable

The statement the member attested to when the timesheet was submitted. null when no attestation was captured.

attestationSignaturestring nullable

The signature the member provided when attesting to the timesheet. null when no attestation was captured.

attestedboolean

Whether the timesheet was attested. This is a calculated value based on whether an attestationSignature was captured.

Example response

{
  "id": "7b3e8f1a-4c2d-4a9e-b6f5-8d1c3e7a2b9f",
  "start": "2025-03-03",
  "end": "2025-03-09",
  "createdAt": "2025-03-09T14:22:18.437Z",
  "submittedOn": "2025-03-09T14:22:18.437Z",
  "hours": 38.5,
  "attestationText": "I certify that all hours worked during this period have been accurately recorded and associated with the correct projects and tasks.",
  "attestationSignature": "Sarah Chen",
  "member": {
    "id": "a1d4e7b2-3f8c-4e6a-9b5d-2c7f1a8e4d3b",
    "name": "Sarah Chen"
  },
  "timeEntries": [
    {
      "id": "c9f2a4b7-1e8d-4c3f-a6b5-7d2e9f1c8a4b",
      "minutes": 480
    },
    {
      "id": "d8e3b5c6-2f9a-4d1e-b7c4-6a3f8e2d9b5c",
      "minutes": 360
    },
    {
      "id": "e7f4c6d5-3a1b-4e2f-c8d3-5b4a9f1e7c6d",
      "minutes": 450
    },
    {
      "id": "f6a5d7e4-4b2c-4f3a-d9e2-4c5b8a2f6d7e",
      "minutes": 420
    }
  ],
  "submittedByMember": {
    "id": "38df2dce-936f-44a1-993a-66a545fdcee4",
    "name": "Michael Torres"
  },
  "attested": true
}

Changes

No recorded changes to this operation across all 1 revision of this API.