{
  "components": {
    "schemas": {
      "AuthSnapshot": {
        "properties": {
          "domain": {
            "type": "string"
          },
          "email": {
            "format": "email",
            "type": "string"
          },
          "token": {
            "type": "string"
          }
        },
        "required": [
          "domain",
          "email",
          "token"
        ],
        "type": "object"
      },
      "Organization": {
        "properties": {
          "coreHours": {
            "properties": {
              "end": {
                "type": "string"
              },
              "start": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "currency": {
            "type": "string"
          },
          "holidays": {
            "additionalProperties": true,
            "type": "object"
          },
          "id": {
            "type": "string"
          },
          "lockingTimesheets": {
            "additionalProperties": true,
            "type": "object"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "onboarding": {
            "additionalProperties": true,
            "type": "object"
          },
          "plan": {
            "type": "string"
          },
          "rounding": {
            "additionalProperties": true,
            "type": "object"
          },
          "timeZone": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "currency",
          "coreHours",
          "lockingTimesheets",
          "name"
        ],
        "type": "object"
      },
      "OrganizationSummary": {
        "properties": {
          "active": {
            "type": "boolean"
          },
          "domain": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "active",
          "domain",
          "name"
        ],
        "type": "object"
      },
      "OrganizationDeleteResult": {
        "properties": {
          "domain": {
            "type": "string"
          },
          "redirectUrl": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "domain"
        ],
        "type": "object"
      },
      "OrganizationRenameResult": {
        "properties": {
          "domain": {
            "type": "string"
          }
        },
        "required": [
          "domain"
        ],
        "type": "object"
      },
      "Activity": {
        "properties": {
          "billable": {
            "type": "boolean"
          },
          "endedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "projectId": {
            "nullable": true,
            "type": "string"
          },
          "startedAt": {
            "format": "date-time",
            "type": "string"
          },
          "userId": {
            "type": "string"
          }
        },
        "required": [
          "billable",
          "id",
          "name",
          "startedAt",
          "userId"
        ],
        "type": "object"
      },
      "ActivityMap": {
        "additionalProperties": {
          "$ref": "#/components/schemas/Activity"
        },
        "type": "object"
      },
      "Project": {
        "properties": {
          "archived": {
            "type": "boolean"
          },
          "avatar": {
            "nullable": true,
            "type": "string"
          },
          "billable": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          }
        },
        "required": [
          "archived",
          "billable",
          "id",
          "name"
        ],
        "type": "object"
      },
      "ProjectMap": {
        "additionalProperties": {
          "$ref": "#/components/schemas/Project"
        },
        "type": "object"
      },
      "ProjectMember": {
        "properties": {
          "archived": {
            "nullable": true,
            "type": "boolean"
          },
          "assignedBy": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "projectId": {
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "title": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "projectId",
          "role",
          "userId"
        ],
        "type": "object"
      },
      "ProjectMemberMap": {
        "additionalProperties": {
          "$ref": "#/components/schemas/ProjectMember"
        },
        "type": "object"
      },
      "RevenueRate": {
        "properties": {
          "currency": {
            "type": "string"
          },
          "from": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "memberId": {
            "type": "string"
          },
          "projectId": {
            "type": "string"
          },
          "taxRate": {
            "type": "number"
          },
          "to": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "value": {
            "type": "number"
          }
        },
        "required": [
          "currency",
          "from",
          "id",
          "memberId",
          "projectId",
          "taxRate",
          "value"
        ],
        "type": "object"
      },
      "RevenueRateMap": {
        "additionalProperties": {
          "$ref": "#/components/schemas/RevenueRate"
        },
        "type": "object"
      },
      "User": {
        "properties": {
          "archived": {
            "type": "boolean"
          },
          "avatar": {
            "nullable": true,
            "type": "string"
          },
          "email": {
            "format": "email",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "phone": {
            "nullable": true,
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "title": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "archived",
          "email",
          "id",
          "role"
        ],
        "type": "object"
      },
      "UserMap": {
        "additionalProperties": {
          "$ref": "#/components/schemas/User"
        },
        "type": "object"
      },
      "UserPreferences": {
        "properties": {
          "dateTimeFormat": {
            "additionalProperties": true,
            "type": "object"
          },
          "desktop": {
            "additionalProperties": true,
            "type": "object"
          },
          "durationFormat": {
            "additionalProperties": true,
            "type": "object"
          },
          "locale": {
            "nullable": true,
            "type": "string"
          },
          "notifications": {
            "additionalProperties": true,
            "type": "object"
          },
          "timeZone": {
            "nullable": true,
            "type": "string"
          }
        },
        "type": "object"
      },
      "CostRate": {
        "properties": {
          "currency": {
            "type": "string"
          },
          "from": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "taxRate": {
            "type": "number"
          },
          "to": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "value": {
            "type": "number"
          }
        },
        "required": [
          "currency",
          "from",
          "id",
          "taxRate",
          "userId",
          "value"
        ],
        "type": "object"
      },
      "CostRateMap": {
        "additionalProperties": {
          "$ref": "#/components/schemas/CostRate"
        },
        "type": "object"
      },
      "Report": {
        "properties": {
          "dimensions": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "end": {
            "format": "date-time",
            "type": "string"
          },
          "filters": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "hideEmptyRows": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "metrics": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "name": {
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "pinned": {
            "type": "boolean"
          },
          "selectedProjectMembers": {
            "items": {
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "selectedProjects": {
            "items": {
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "showArchivedMembers": {
            "type": "boolean"
          },
          "showArchivedProjects": {
            "type": "boolean"
          },
          "start": {
            "format": "date-time",
            "type": "string"
          },
          "userId": {
            "type": "string"
          }
        },
        "required": [
          "dimensions",
          "end",
          "filters",
          "hideEmptyRows",
          "id",
          "metrics",
          "name",
          "period",
          "start",
          "userId"
        ],
        "type": "object"
      },
      "ReportMap": {
        "additionalProperties": {
          "$ref": "#/components/schemas/Report"
        },
        "type": "object"
      },
      "Geofence": {
        "properties": {
          "enterAction": {
            "type": "string"
          },
          "exitAction": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "latitude": {
            "type": "number"
          },
          "longitude": {
            "type": "number"
          },
          "name": {
            "type": "string"
          },
          "projectId": {
            "nullable": true,
            "type": "string"
          },
          "radius": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "latitude",
          "longitude",
          "radius"
        ],
        "type": "object"
      },
      "GeofenceMap": {
        "additionalProperties": {
          "$ref": "#/components/schemas/Geofence"
        },
        "type": "object"
      },
      "RequestRecord": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "createdBy": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "resolvedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "resolvedBy": {
            "nullable": true,
            "type": "string"
          },
          "status": {
            "enum": [
              "PENDING",
              "REJECTED",
              "RESOLVED"
            ],
            "type": "string"
          }
        },
        "required": [
          "createdAt",
          "id",
          "status"
        ],
        "type": "object"
      },
      "TimesheetLock": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "unlockedTo": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "week": {
            "type": "integer"
          },
          "year": {
            "type": "integer"
          }
        },
        "required": [
          "createdAt",
          "id",
          "updatedAt",
          "userId",
          "week",
          "year"
        ],
        "type": "object"
      },
      "Subscription": {
        "properties": {
          "id": {
            "type": "string"
          },
          "nextBillDate": {
            "type": "string"
          },
          "plan": {
            "type": "string"
          },
          "quantity": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "status"
        ],
        "type": "object"
      },
      "CheckoutLink": {
        "properties": {
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "BillingTransaction": {
        "properties": {
          "amount": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "paidAt": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "required": [
          "amount",
          "currency",
          "id",
          "status"
        ],
        "type": "object"
      },
      "EmptyResponse": {
        "additionalProperties": false,
        "type": "object"
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "bearerFormat": "JWT",
        "description": "Copy the temporary access token from the sandtime_access_token session cookie and send it as a Bearer token. This matches the current MCP authentication flow.",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "The Sandtime.io REST API targets one organization workspace per hostname. Authenticate with a Bearer token copied from the current session cookie while the dedicated token flow is still in progress.",
    "title": "Sandtime.io REST API",
    "version": "2026-07-04"
  },
  "openapi": "3.0.3",
  "paths": {
    "/auth": {
      "get": {
        "description": "Returns the current user email, active organization domain, and the same Bearer token currently extracted from the session cookie.",
        "operationId": "get-auth",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "domain": "acme",
                  "email": "alex.rivera@example.com",
                  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example"
                },
                "schema": {
                  "$ref": "#/components/schemas/AuthSnapshot"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get the current auth snapshot",
        "tags": [
          "Workspace"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/auth' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      }
    },
    "/organizations": {
      "get": {
        "description": "Returns the active workspaces available to the current user across Sandtime.io.",
        "operationId": "get-organizations",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": [
                  {
                    "active": true,
                    "domain": "acme",
                    "name": "Acme Studio"
                  },
                  {
                    "active": true,
                    "domain": "northwind",
                    "name": "Northwind Consulting"
                  }
                ],
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/OrganizationSummary"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List active organizations",
        "tags": [
          "Workspace"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/organizations' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      }
    },
    "/organization": {
      "get": {
        "description": "Returns the organization settings loaded for the current hostname.",
        "operationId": "get-organization",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "coreHours": {
                    "end": "17:00",
                    "start": "09:00"
                  },
                  "currency": "USD",
                  "holidays": {
                    "country": "US",
                    "excluded": []
                  },
                  "id": "8a4affba-df59-47bd-8173-d175e76efd15",
                  "lockingTimesheets": {
                    "enabled": false,
                    "timeZone": null,
                    "week": null,
                    "year": null
                  },
                  "name": "Acme Studio",
                  "notes": "Weekly client delivery team.",
                  "onboarding": {
                    "assignMembers": {
                      "done": true,
                      "viewed": true
                    },
                    "inviteMembers": {
                      "done": true,
                      "viewed": true
                    },
                    "organization": {
                      "done": true,
                      "viewed": true
                    },
                    "preferences": {
                      "done": false,
                      "viewed": true
                    },
                    "projects": {
                      "done": true,
                      "viewed": true
                    }
                  },
                  "plan": "free",
                  "rounding": {
                    "enabled": false,
                    "interval": 900000,
                    "mode": "NEAREST"
                  },
                  "timeZone": "Europe/Warsaw"
                },
                "schema": {
                  "$ref": "#/components/schemas/Organization"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get organization settings",
        "tags": [
          "Workspace"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/organization' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      },
      "put": {
        "description": "Updates mutable organization settings such as currency, notes, core hours, holidays, rounding, and timesheet locking.",
        "operationId": "put-organization",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "coreHours": {
                    "end": "17:00",
                    "start": "09:00"
                  },
                  "currency": "USD",
                  "holidays": {
                    "country": "US",
                    "excluded": []
                  },
                  "id": "8a4affba-df59-47bd-8173-d175e76efd15",
                  "lockingTimesheets": {
                    "enabled": false,
                    "timeZone": null,
                    "week": null,
                    "year": null
                  },
                  "name": "Acme Studio",
                  "notes": "Weekly client delivery team.",
                  "onboarding": {
                    "assignMembers": {
                      "done": true,
                      "viewed": true
                    },
                    "inviteMembers": {
                      "done": true,
                      "viewed": true
                    },
                    "organization": {
                      "done": true,
                      "viewed": true
                    },
                    "preferences": {
                      "done": false,
                      "viewed": true
                    },
                    "projects": {
                      "done": true,
                      "viewed": true
                    }
                  },
                  "plan": "free",
                  "rounding": {
                    "enabled": false,
                    "interval": 900000,
                    "mode": "NEAREST"
                  },
                  "timeZone": "Europe/Warsaw"
                },
                "schema": {
                  "$ref": "#/components/schemas/Organization"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update organization settings",
        "tags": [
          "Workspace"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/organization' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"coreHours\": {\n    \"end\": \"16:00\",\n    \"start\": \"08:00\"\n  },\n  \"currency\": \"EUR\",\n  \"notes\": \"Updated delivery schedule for the summer quarter.\",\n  \"rounding\": {\n    \"enabled\": true,\n    \"interval\": 900000,\n    \"mode\": \"NEAREST\"\n  },\n  \"timeZone\": \"Europe/Warsaw\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "coreHours": {
                  "end": "16:00",
                  "start": "08:00"
                },
                "currency": "EUR",
                "notes": "Updated delivery schedule for the summer quarter.",
                "rounding": {
                  "enabled": true,
                  "interval": 900000,
                  "mode": "NEAREST"
                },
                "timeZone": "Europe/Warsaw"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      },
      "delete": {
        "description": "Deletes the current organization. This action is restricted to administrators and may return a redirect URL for follow-up account cleanup.",
        "operationId": "delete-organization",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "domain": "acme",
                  "redirectUrl": "https://sandtime.io/offboarding-thank-you"
                },
                "schema": {
                  "$ref": "#/components/schemas/OrganizationDeleteResult"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete the current organization",
        "tags": [
          "Workspace"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X DELETE 'https://your-organization.sandtime.io/api/organization' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      }
    },
    "/organization/rename": {
      "post": {
        "description": "Starts an organization rename from the current subdomain to the new desired subdomain.",
        "operationId": "post-organization-rename",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "domain": "acme-europe"
                },
                "schema": {
                  "$ref": "#/components/schemas/OrganizationRenameResult"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Rename the organization subdomain",
        "tags": [
          "Workspace"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/organization/rename' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"domain\": \"acme-europe\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "domain": "acme-europe"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/activities": {
      "get": {
        "description": "Returns an ID-keyed map of activity records visible to the current user.",
        "operationId": "get-activities",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302": {
                    "billable": true,
                    "endedAt": "2026-07-03T08:30:00.000Z",
                    "id": "c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302",
                    "name": "Implement API docs page",
                    "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                    "startedAt": "2026-07-03T07:00:00.000Z",
                    "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ActivityMap"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List activities",
        "tags": [
          "Activities"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/activities' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      },
      "post": {
        "description": "Creates a new activity. Send `pending: true` with no `endedAt` when you want an open timer.",
        "operationId": "post-activities",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "billable": true,
                  "endedAt": "2026-07-03T08:30:00.000Z",
                  "id": "c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302",
                  "name": "Implement API docs page",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "startedAt": "2026-07-03T07:00:00.000Z",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                },
                "schema": {
                  "$ref": "#/components/schemas/Activity"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create an activity",
        "tags": [
          "Activities"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/activities' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"billable\": true,\n  \"endedAt\": \"2026-07-03T10:30:00+02:00\",\n  \"name\": \"Implement API docs page\",\n  \"projectId\": \"9d58c4ce-3e6f-4d06-bf47-f70d8c4af001\",\n  \"startedAt\": \"2026-07-03T09:00:00+02:00\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "billable": true,
                "endedAt": "2026-07-03T10:30:00+02:00",
                "name": "Implement API docs page",
                "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                "startedAt": "2026-07-03T09:00:00+02:00"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/activities/{activityId}": {
      "get": {
        "description": "Returns one activity record when the ID exists and the current user can see it.",
        "operationId": "get-activities-activityId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "billable": true,
                  "endedAt": "2026-07-03T08:30:00.000Z",
                  "id": "c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302",
                  "name": "Implement API docs page",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "startedAt": "2026-07-03T07:00:00.000Z",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                },
                "schema": {
                  "$ref": "#/components/schemas/Activity"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get an activity",
        "tags": [
          "Activities"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/activities/c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The activity identifier.",
            "example": "c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302",
            "in": "path",
            "name": "activityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "put": {
        "description": "Updates one activity. Typical changes include timestamps, billable status, title, and project assignment.",
        "operationId": "put-activities-activityId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "billable": false,
                  "endedAt": "2026-07-03T09:00:00.000Z",
                  "id": "c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302",
                  "name": "Polish the REST API guide",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "startedAt": "2026-07-03T07:00:00.000Z",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                },
                "schema": {
                  "$ref": "#/components/schemas/Activity"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update an activity",
        "tags": [
          "Activities"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/activities/c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"billable\": false,\n  \"endedAt\": \"2026-07-03T11:00:00+02:00\",\n  \"name\": \"Polish the REST API guide\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The activity identifier.",
            "example": "c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302",
            "in": "path",
            "name": "activityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "billable": false,
                "endedAt": "2026-07-03T11:00:00+02:00",
                "name": "Polish the REST API guide"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      },
      "delete": {
        "description": "Deletes one activity by ID.",
        "operationId": "delete-activities-activityId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {},
                "schema": {
                  "$ref": "#/components/schemas/EmptyResponse"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete an activity",
        "tags": [
          "Activities"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X DELETE 'https://your-organization.sandtime.io/api/activities/c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The activity identifier.",
            "example": "c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302",
            "in": "path",
            "name": "activityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/projects": {
      "get": {
        "description": "Returns an ID-keyed map of projects.",
        "operationId": "get-projects",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001": {
                    "archived": false,
                    "avatar": null,
                    "billable": true,
                    "id": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                    "name": "Website refresh",
                    "notes": "Main client delivery project."
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProjectMap"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List projects",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/projects' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      },
      "post": {
        "description": "Creates a project and automatically adds the creating administrator as a project member.",
        "operationId": "post-projects",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "archived": false,
                  "avatar": null,
                  "billable": true,
                  "id": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "name": "Website refresh",
                  "notes": "Main client delivery project."
                },
                "schema": {
                  "$ref": "#/components/schemas/Project"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a project",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/projects' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"billable\": true,\n  \"name\": \"Website refresh\",\n  \"notes\": \"Main client delivery project.\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "billable": true,
                "name": "Website refresh",
                "notes": "Main client delivery project."
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/projects/{projectId}": {
      "get": {
        "description": "Returns one project by ID.",
        "operationId": "get-projects-projectId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "archived": false,
                  "avatar": null,
                  "billable": true,
                  "id": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "name": "Website refresh",
                  "notes": "Main client delivery project."
                },
                "schema": {
                  "$ref": "#/components/schemas/Project"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get a project",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "put": {
        "description": "Updates project metadata such as notes, billable status, archived state, or avatar.",
        "operationId": "put-projects-projectId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "archived": false,
                  "avatar": null,
                  "billable": false,
                  "id": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "name": "Website refresh",
                  "notes": "Internal redesign and QA support."
                },
                "schema": {
                  "$ref": "#/components/schemas/Project"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update a project",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"billable\": false,\n  \"notes\": \"Internal redesign and QA support.\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "billable": false,
                "notes": "Internal redesign and QA support."
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      },
      "delete": {
        "description": "Deletes a project permanently.",
        "operationId": "delete-projects-projectId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {},
                "schema": {
                  "$ref": "#/components/schemas/EmptyResponse"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete a project",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X DELETE 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/projects/{projectId}/members": {
      "get": {
        "description": "Returns an ID-keyed map of members assigned to the project.",
        "operationId": "get-projects-projectId-members",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04": {
                    "archived": false,
                    "assignedBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                    "id": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
                    "notes": "Frontend owner",
                    "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                    "role": "Administrator",
                    "tags": [
                      "design-system",
                      "client-facing"
                    ],
                    "title": "Frontend Lead",
                    "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProjectMemberMap"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List project members",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "post": {
        "description": "Assigns a user to the project and optionally stores role, title, notes, and tags.",
        "operationId": "post-projects-projectId-members",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "archived": false,
                  "assignedBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
                  "notes": "Frontend owner",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "role": "User",
                  "tags": [
                    "design-system",
                    "client-facing"
                  ],
                  "title": "Product Designer",
                  "userId": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af"
                },
                "schema": {
                  "$ref": "#/components/schemas/ProjectMember"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a project member",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"notes\": \"Frontend owner\",\n  \"role\": \"Administrator\",\n  \"tags\": [\n    \"design-system\",\n    \"client-facing\"\n  ],\n  \"title\": \"Frontend Lead\",\n  \"userId\": \"8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "notes": "Frontend owner",
                "role": "Administrator",
                "tags": [
                  "design-system",
                  "client-facing"
                ],
                "title": "Frontend Lead",
                "userId": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/projects/{projectId}/members/{memberId}": {
      "get": {
        "description": "Returns one project membership by member ID.",
        "operationId": "get-projects-projectId-members-memberId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "archived": false,
                  "assignedBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
                  "notes": "Frontend owner",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "role": "Administrator",
                  "tags": [
                    "design-system",
                    "client-facing"
                  ],
                  "title": "Frontend Lead",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                },
                "schema": {
                  "$ref": "#/components/schemas/ProjectMember"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get a project member",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members/3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The project member identifier.",
            "example": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
            "in": "path",
            "name": "memberId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "put": {
        "description": "Updates role, title, tags, notes, or archived state for one project member.",
        "operationId": "put-projects-projectId-members-memberId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "archived": false,
                  "assignedBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
                  "notes": "Delivery owner",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "role": "User",
                  "tags": [
                    "handover",
                    "qa"
                  ],
                  "title": "Delivery Manager",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                },
                "schema": {
                  "$ref": "#/components/schemas/ProjectMember"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update a project member",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members/3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"notes\": \"Delivery owner\",\n  \"role\": \"User\",\n  \"tags\": [\n    \"handover\",\n    \"qa\"\n  ],\n  \"title\": \"Delivery Manager\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The project member identifier.",
            "example": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
            "in": "path",
            "name": "memberId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "notes": "Delivery owner",
                "role": "User",
                "tags": [
                  "handover",
                  "qa"
                ],
                "title": "Delivery Manager"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      },
      "delete": {
        "description": "Removes the member from the project.",
        "operationId": "delete-projects-projectId-members-memberId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {},
                "schema": {
                  "$ref": "#/components/schemas/EmptyResponse"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete a project member",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X DELETE 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members/3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The project member identifier.",
            "example": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
            "in": "path",
            "name": "memberId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/projects/{projectId}/members/{memberId}/rates/revenue": {
      "get": {
        "description": "Returns an ID-keyed map of revenue rates for the selected project member.",
        "operationId": "get-projects-projectId-members-memberId-rates-revenue",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "e6dd7425-f0ef-403c-8f21-5fe1931cc9a9": {
                    "currency": "USD",
                    "from": "2026-07-01T00:00:00.000Z",
                    "id": "e6dd7425-f0ef-403c-8f21-5fe1931cc9a9",
                    "memberId": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
                    "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                    "taxRate": 23,
                    "to": "2026-12-31T23:59:59.000Z",
                    "value": 145
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/RevenueRateMap"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List member revenue rates",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members/3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04/rates/revenue' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The project member identifier.",
            "example": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
            "in": "path",
            "name": "memberId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "post": {
        "description": "Creates a dated revenue rate window for a project member.",
        "operationId": "post-projects-projectId-members-memberId-rates-revenue",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "currency": "USD",
                  "from": "2026-07-01T00:00:00.000Z",
                  "id": "e6dd7425-f0ef-403c-8f21-5fe1931cc9a9",
                  "memberId": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "taxRate": 23,
                  "to": "2026-12-31T23:59:59.000Z",
                  "value": 145
                },
                "schema": {
                  "$ref": "#/components/schemas/RevenueRate"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a member revenue rate",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members/3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04/rates/revenue' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"currency\": \"USD\",\n  \"from\": \"2026-07-01T00:00:00+02:00\",\n  \"taxRate\": 23,\n  \"to\": \"2026-12-31T23:59:59+01:00\",\n  \"value\": 145\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The project member identifier.",
            "example": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
            "in": "path",
            "name": "memberId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "currency": "USD",
                "from": "2026-07-01T00:00:00+02:00",
                "taxRate": 23,
                "to": "2026-12-31T23:59:59+01:00",
                "value": 145
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/projects/{projectId}/members/{memberId}/rates/revenue/{revenueId}": {
      "get": {
        "description": "Returns one revenue rate record.",
        "operationId": "get-projects-projectId-members-memberId-rates-revenue-revenueId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "currency": "USD",
                  "from": "2026-07-01T00:00:00.000Z",
                  "id": "e6dd7425-f0ef-403c-8f21-5fe1931cc9a9",
                  "memberId": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "taxRate": 23,
                  "to": "2026-12-31T23:59:59.000Z",
                  "value": 145
                },
                "schema": {
                  "$ref": "#/components/schemas/RevenueRate"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get a member revenue rate",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members/3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04/rates/revenue/e6dd7425-f0ef-403c-8f21-5fe1931cc9a9' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The project member identifier.",
            "example": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
            "in": "path",
            "name": "memberId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The revenue rate identifier.",
            "example": "e6dd7425-f0ef-403c-8f21-5fe1931cc9a9",
            "in": "path",
            "name": "revenueId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "put": {
        "description": "Updates one revenue rate window.",
        "operationId": "put-projects-projectId-members-memberId-rates-revenue-revenueId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "currency": "USD",
                  "from": "2026-07-01T00:00:00.000Z",
                  "id": "e6dd7425-f0ef-403c-8f21-5fe1931cc9a9",
                  "memberId": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "taxRate": 23,
                  "to": "2026-12-31T23:59:59.000Z",
                  "value": 155
                },
                "schema": {
                  "$ref": "#/components/schemas/RevenueRate"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update a member revenue rate",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members/3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04/rates/revenue/e6dd7425-f0ef-403c-8f21-5fe1931cc9a9' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"currency\": \"USD\",\n  \"from\": \"2026-07-01T00:00:00+02:00\",\n  \"taxRate\": 23,\n  \"to\": \"2026-12-31T23:59:59+01:00\",\n  \"value\": 155\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The project member identifier.",
            "example": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
            "in": "path",
            "name": "memberId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The revenue rate identifier.",
            "example": "e6dd7425-f0ef-403c-8f21-5fe1931cc9a9",
            "in": "path",
            "name": "revenueId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "currency": "USD",
                "from": "2026-07-01T00:00:00+02:00",
                "taxRate": 23,
                "to": "2026-12-31T23:59:59+01:00",
                "value": 155
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      },
      "delete": {
        "description": "Deletes one revenue rate record.",
        "operationId": "delete-projects-projectId-members-memberId-rates-revenue-revenueId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {},
                "schema": {
                  "$ref": "#/components/schemas/EmptyResponse"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete a member revenue rate",
        "tags": [
          "Projects"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X DELETE 'https://your-organization.sandtime.io/api/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members/3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04/rates/revenue/e6dd7425-f0ef-403c-8f21-5fe1931cc9a9' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The project member identifier.",
            "example": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
            "in": "path",
            "name": "memberId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The revenue rate identifier.",
            "example": "e6dd7425-f0ef-403c-8f21-5fe1931cc9a9",
            "in": "path",
            "name": "revenueId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/users": {
      "get": {
        "description": "Returns an ID-keyed map of organization users.",
        "operationId": "get-users",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d": {
                    "archived": false,
                    "avatar": null,
                    "email": "alex.rivera@example.com",
                    "id": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                    "name": "Alex Rivera",
                    "phone": "+1 415 555 0102",
                    "role": "Administrator",
                    "title": "Operations Lead"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/UserMap"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List users",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/users' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      },
      "post": {
        "description": "Invites a user to the current organization. Existing users are re-invited instead of duplicated.",
        "operationId": "post-users",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "archived": false,
                  "avatar": null,
                  "email": "sam.lee@example.com",
                  "id": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "name": "Sam Lee",
                  "phone": "+1 415 555 0102",
                  "role": "User",
                  "title": "Product Designer"
                },
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create or invite a user",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/users' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"email\": \"sam.lee@example.com\",\n  \"name\": \"Sam Lee\",\n  \"role\": \"User\",\n  \"title\": \"Product Designer\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "email": "sam.lee@example.com",
                "name": "Sam Lee",
                "role": "User",
                "title": "Product Designer"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/users/{userId}": {
      "get": {
        "description": "Returns one user record.",
        "operationId": "get-users-userId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "archived": false,
                  "avatar": null,
                  "email": "alex.rivera@example.com",
                  "id": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "name": "Alex Rivera",
                  "phone": "+1 415 555 0102",
                  "role": "Administrator",
                  "title": "Operations Lead"
                },
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get a user",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/users/2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The user identifier.",
            "example": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "put": {
        "description": "Updates one user. Administrators can change role and archived state. Users can update their own profile fields.",
        "operationId": "put-users-userId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "archived": false,
                  "avatar": null,
                  "email": "alex.rivera@example.com",
                  "id": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "name": "Alex Rivera",
                  "phone": "+1 415 555 0188",
                  "role": "Administrator",
                  "title": "Head of Operations"
                },
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update a user",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/users/2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"archived\": false,\n  \"phone\": \"+1 415 555 0188\",\n  \"role\": \"Administrator\",\n  \"title\": \"Head of Operations\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The user identifier.",
            "example": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "archived": false,
                "phone": "+1 415 555 0188",
                "role": "Administrator",
                "title": "Head of Operations"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      },
      "delete": {
        "description": "Permanently removes a user and their associated workspace data after server-side validations pass.",
        "operationId": "delete-users-userId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {},
                "schema": {
                  "$ref": "#/components/schemas/EmptyResponse"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete a user",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X DELETE 'https://your-organization.sandtime.io/api/users/2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The user identifier.",
            "example": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/users/{userId}/preferences": {
      "get": {
        "description": "Returns the preference document for the user. Users can only read their own preferences.",
        "operationId": "get-users-userId-preferences",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "dateTimeFormat": {
                    "clock24Hour": true,
                    "numeric": true,
                    "showSeconds": false
                  },
                  "desktop": {
                    "startTrackingOnStartup": false,
                    "stopTrackingOnShutdown": true
                  },
                  "durationFormat": {
                    "compact": false,
                    "mode": "HOURS_MINUTES",
                    "showSeconds": false
                  },
                  "locale": "en-US",
                  "notifications": {
                    "activityCreated": {
                      "dashboard": true,
                      "email": false,
                      "popup": true
                    },
                    "monthlyGoalReached": {
                      "dashboard": true,
                      "email": true,
                      "popup": true
                    }
                  },
                  "timeZone": "Europe/Warsaw"
                },
                "schema": {
                  "$ref": "#/components/schemas/UserPreferences"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get user preferences",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/users/2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d/preferences' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The user identifier.",
            "example": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "put": {
        "description": "Updates the user preference document with locale, formatting, desktop, notification, or time-zone changes.",
        "operationId": "put-users-userId-preferences",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "dateTimeFormat": {
                    "clock24Hour": true,
                    "numeric": true,
                    "showSeconds": false
                  },
                  "desktop": {
                    "startTrackingOnStartup": false,
                    "stopTrackingOnShutdown": true
                  },
                  "durationFormat": {
                    "compact": false,
                    "mode": "HOURS_MINUTES",
                    "showSeconds": false
                  },
                  "locale": "pl-PL",
                  "notifications": {
                    "activityCreated": {
                      "dashboard": true,
                      "email": false,
                      "popup": true
                    },
                    "monthlyGoalReached": {
                      "dashboard": true,
                      "email": true,
                      "popup": true
                    }
                  },
                  "timeZone": "Europe/Warsaw"
                },
                "schema": {
                  "$ref": "#/components/schemas/UserPreferences"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update user preferences",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/users/2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d/preferences' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"locale\": \"pl-PL\",\n  \"notifications\": {\n    \"monthlyGoalReached\": {\n      \"dashboard\": true,\n      \"email\": true,\n      \"popup\": false\n    }\n  },\n  \"timeZone\": \"Europe/Warsaw\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The user identifier.",
            "example": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "locale": "pl-PL",
                "notifications": {
                  "monthlyGoalReached": {
                    "dashboard": true,
                    "email": true,
                    "popup": false
                  }
                },
                "timeZone": "Europe/Warsaw"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/users/{userId}/rates/cost": {
      "get": {
        "description": "Returns an ID-keyed map of cost rates for the user.",
        "operationId": "get-users-userId-rates-cost",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334": {
                    "currency": "USD",
                    "from": "2026-07-01T00:00:00.000Z",
                    "id": "7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334",
                    "taxRate": 0,
                    "to": "2026-12-31T23:59:59.000Z",
                    "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                    "value": 65
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/CostRateMap"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List user cost rates",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/users/2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d/rates/cost' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The user identifier.",
            "example": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "post": {
        "description": "Creates a dated cost-rate window for the user.",
        "operationId": "post-users-userId-rates-cost",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "currency": "USD",
                  "from": "2026-07-01T00:00:00.000Z",
                  "id": "7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334",
                  "taxRate": 0,
                  "to": "2026-12-31T23:59:59.000Z",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "value": 65
                },
                "schema": {
                  "$ref": "#/components/schemas/CostRate"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a user cost rate",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/users/2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d/rates/cost' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"currency\": \"USD\",\n  \"from\": \"2026-07-01T00:00:00+02:00\",\n  \"taxRate\": 0,\n  \"to\": \"2026-12-31T23:59:59+01:00\",\n  \"value\": 65\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The user identifier.",
            "example": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "currency": "USD",
                "from": "2026-07-01T00:00:00+02:00",
                "taxRate": 0,
                "to": "2026-12-31T23:59:59+01:00",
                "value": 65
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/users/{userId}/rates/cost/{costId}": {
      "get": {
        "description": "Returns one user cost-rate record.",
        "operationId": "get-users-userId-rates-cost-costId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "currency": "USD",
                  "from": "2026-07-01T00:00:00.000Z",
                  "id": "7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334",
                  "taxRate": 0,
                  "to": "2026-12-31T23:59:59.000Z",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "value": 65
                },
                "schema": {
                  "$ref": "#/components/schemas/CostRate"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get a user cost rate",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/users/2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d/rates/cost/7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The user identifier.",
            "example": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The cost rate identifier.",
            "example": "7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334",
            "in": "path",
            "name": "costId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "put": {
        "description": "Updates one user cost-rate window.",
        "operationId": "put-users-userId-rates-cost-costId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "currency": "USD",
                  "from": "2026-07-01T00:00:00.000Z",
                  "id": "7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334",
                  "taxRate": 0,
                  "to": "2026-12-31T23:59:59.000Z",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "value": 72
                },
                "schema": {
                  "$ref": "#/components/schemas/CostRate"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update a user cost rate",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/users/2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d/rates/cost/7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"currency\": \"USD\",\n  \"from\": \"2026-07-01T00:00:00+02:00\",\n  \"taxRate\": 0,\n  \"to\": \"2026-12-31T23:59:59+01:00\",\n  \"value\": 72\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The user identifier.",
            "example": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The cost rate identifier.",
            "example": "7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334",
            "in": "path",
            "name": "costId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "currency": "USD",
                "from": "2026-07-01T00:00:00+02:00",
                "taxRate": 0,
                "to": "2026-12-31T23:59:59+01:00",
                "value": 72
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      },
      "delete": {
        "description": "Deletes one user cost-rate record.",
        "operationId": "delete-users-userId-rates-cost-costId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {},
                "schema": {
                  "$ref": "#/components/schemas/EmptyResponse"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete a user cost rate",
        "tags": [
          "Users"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X DELETE 'https://your-organization.sandtime.io/api/users/2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d/rates/cost/7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The user identifier.",
            "example": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The cost rate identifier.",
            "example": "7bc0f6d1-d6a8-4718-8e64-b3ddcfe35334",
            "in": "path",
            "name": "costId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/reports": {
      "get": {
        "description": "Returns an ID-keyed map of saved reports.",
        "operationId": "get-reports",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01": {
                    "dimensions": [
                      "project"
                    ],
                    "end": "2026-07-31T21:59:59.000Z",
                    "filters": [],
                    "hideEmptyRows": true,
                    "id": "6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01",
                    "metrics": [
                      "time",
                      "billable"
                    ],
                    "name": "July project summary",
                    "period": "custom",
                    "pinned": true,
                    "selectedProjectMembers": null,
                    "selectedProjects": [
                      "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                      "58f5aa89-aed2-4a67-8808-d85ef4034f42"
                    ],
                    "showArchivedMembers": false,
                    "showArchivedProjects": false,
                    "start": "2026-06-30T22:00:00.000Z",
                    "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ReportMap"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List reports",
        "tags": [
          "Reports"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/reports' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      },
      "post": {
        "description": "Creates a saved report configuration for the current user.",
        "operationId": "post-reports",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "dimensions": [
                    "project"
                  ],
                  "end": "2026-07-31T21:59:59.000Z",
                  "filters": [],
                  "hideEmptyRows": true,
                  "id": "6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01",
                  "metrics": [
                    "time",
                    "billable"
                  ],
                  "name": "July project summary",
                  "period": "custom",
                  "pinned": true,
                  "selectedProjectMembers": null,
                  "selectedProjects": [
                    "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                    "58f5aa89-aed2-4a67-8808-d85ef4034f42"
                  ],
                  "showArchivedMembers": false,
                  "showArchivedProjects": false,
                  "start": "2026-06-30T22:00:00.000Z",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                },
                "schema": {
                  "$ref": "#/components/schemas/Report"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a report",
        "tags": [
          "Reports"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/reports' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"dimensions\": [\n    \"project\"\n  ],\n  \"end\": \"2026-07-31T23:59:59+02:00\",\n  \"filters\": [],\n  \"hideEmptyRows\": true,\n  \"metrics\": [\n    \"time\",\n    \"billable\"\n  ],\n  \"name\": \"July project summary\",\n  \"period\": \"custom\",\n  \"selectedProjectMembers\": null,\n  \"selectedProjects\": [\n    \"9d58c4ce-3e6f-4d06-bf47-f70d8c4af001\",\n    \"58f5aa89-aed2-4a67-8808-d85ef4034f42\"\n  ],\n  \"showArchivedMembers\": false,\n  \"showArchivedProjects\": false,\n  \"start\": \"2026-07-01T00:00:00+02:00\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "dimensions": [
                  "project"
                ],
                "end": "2026-07-31T23:59:59+02:00",
                "filters": [],
                "hideEmptyRows": true,
                "metrics": [
                  "time",
                  "billable"
                ],
                "name": "July project summary",
                "period": "custom",
                "selectedProjectMembers": null,
                "selectedProjects": [
                  "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "58f5aa89-aed2-4a67-8808-d85ef4034f42"
                ],
                "showArchivedMembers": false,
                "showArchivedProjects": false,
                "start": "2026-07-01T00:00:00+02:00"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/reports/{reportId}": {
      "get": {
        "description": "Returns one report configuration.",
        "operationId": "get-reports-reportId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "dimensions": [
                    "project"
                  ],
                  "end": "2026-07-31T21:59:59.000Z",
                  "filters": [],
                  "hideEmptyRows": true,
                  "id": "6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01",
                  "metrics": [
                    "time",
                    "billable"
                  ],
                  "name": "July project summary",
                  "period": "custom",
                  "pinned": true,
                  "selectedProjectMembers": null,
                  "selectedProjects": [
                    "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                    "58f5aa89-aed2-4a67-8808-d85ef4034f42"
                  ],
                  "showArchivedMembers": false,
                  "showArchivedProjects": false,
                  "start": "2026-06-30T22:00:00.000Z",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                },
                "schema": {
                  "$ref": "#/components/schemas/Report"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get a report",
        "tags": [
          "Reports"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/reports/6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The report identifier.",
            "example": "6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01",
            "in": "path",
            "name": "reportId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "put": {
        "description": "Updates one saved report.",
        "operationId": "put-reports-reportId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "dimensions": [
                    "project"
                  ],
                  "end": "2026-07-31T21:59:59.000Z",
                  "filters": [],
                  "hideEmptyRows": true,
                  "id": "6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01",
                  "metrics": [
                    "time",
                    "billable"
                  ],
                  "name": "July project summary",
                  "period": "custom",
                  "pinned": true,
                  "selectedProjectMembers": null,
                  "selectedProjects": [
                    "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                    "58f5aa89-aed2-4a67-8808-d85ef4034f42"
                  ],
                  "showArchivedMembers": false,
                  "showArchivedProjects": false,
                  "start": "2026-06-30T22:00:00.000Z",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                },
                "schema": {
                  "$ref": "#/components/schemas/Report"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update a report",
        "tags": [
          "Reports"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/reports/6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"dimensions\": [\n    \"project\"\n  ],\n  \"end\": \"2026-07-31T23:59:59+02:00\",\n  \"filters\": [],\n  \"hideEmptyRows\": true,\n  \"metrics\": [\n    \"time\",\n    \"billable\"\n  ],\n  \"name\": \"July project summary\",\n  \"period\": \"custom\",\n  \"selectedProjectMembers\": null,\n  \"selectedProjects\": [\n    \"9d58c4ce-3e6f-4d06-bf47-f70d8c4af001\",\n    \"58f5aa89-aed2-4a67-8808-d85ef4034f42\"\n  ],\n  \"showArchivedMembers\": false,\n  \"showArchivedProjects\": false,\n  \"start\": \"2026-07-01T00:00:00+02:00\",\n  \"pinned\": true\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The report identifier.",
            "example": "6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01",
            "in": "path",
            "name": "reportId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "dimensions": [
                  "project"
                ],
                "end": "2026-07-31T23:59:59+02:00",
                "filters": [],
                "hideEmptyRows": true,
                "metrics": [
                  "time",
                  "billable"
                ],
                "name": "July project summary",
                "period": "custom",
                "selectedProjectMembers": null,
                "selectedProjects": [
                  "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "58f5aa89-aed2-4a67-8808-d85ef4034f42"
                ],
                "showArchivedMembers": false,
                "showArchivedProjects": false,
                "start": "2026-07-01T00:00:00+02:00",
                "pinned": true
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      },
      "delete": {
        "description": "Deletes a saved report.",
        "operationId": "delete-reports-reportId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {},
                "schema": {
                  "$ref": "#/components/schemas/EmptyResponse"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete a report",
        "tags": [
          "Reports"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X DELETE 'https://your-organization.sandtime.io/api/reports/6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The report identifier.",
            "example": "6b0dfe58-9c80-4d8d-8a9f-9e48983f4e01",
            "in": "path",
            "name": "reportId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/geofences": {
      "get": {
        "description": "Returns an ID-keyed map of geofences.",
        "operationId": "get-geofences",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c": {
                    "enterAction": "START_TRACKING_PROJECT",
                    "exitAction": "STOP_TRACKING",
                    "id": "cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c",
                    "latitude": 52.2297,
                    "longitude": 21.0122,
                    "name": "Warsaw office",
                    "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                    "radius": 120
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/GeofenceMap"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List geofences",
        "tags": [
          "Geofences"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/geofences' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      },
      "post": {
        "description": "Creates a geofence with enter and exit actions.",
        "operationId": "post-geofences",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "enterAction": "START_TRACKING_PROJECT",
                  "exitAction": "STOP_TRACKING",
                  "id": "cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c",
                  "latitude": 52.2297,
                  "longitude": 21.0122,
                  "name": "Warsaw office",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "radius": 120
                },
                "schema": {
                  "$ref": "#/components/schemas/Geofence"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a geofence",
        "tags": [
          "Geofences"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/geofences' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"enterAction\": \"START_TRACKING_PROJECT\",\n  \"exitAction\": \"STOP_TRACKING\",\n  \"latitude\": 52.2297,\n  \"longitude\": 21.0122,\n  \"name\": \"Warsaw office\",\n  \"projectId\": \"9d58c4ce-3e6f-4d06-bf47-f70d8c4af001\",\n  \"radius\": 120\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "enterAction": "START_TRACKING_PROJECT",
                "exitAction": "STOP_TRACKING",
                "latitude": 52.2297,
                "longitude": 21.0122,
                "name": "Warsaw office",
                "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                "radius": 120
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/geofences/{geofenceId}": {
      "get": {
        "description": "Returns one geofence by ID.",
        "operationId": "get-geofences-geofenceId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "enterAction": "START_TRACKING_PROJECT",
                  "exitAction": "STOP_TRACKING",
                  "id": "cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c",
                  "latitude": 52.2297,
                  "longitude": 21.0122,
                  "name": "Warsaw office",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "radius": 120
                },
                "schema": {
                  "$ref": "#/components/schemas/Geofence"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Get a geofence",
        "tags": [
          "Geofences"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/geofences/cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The geofence identifier.",
            "example": "cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c",
            "in": "path",
            "name": "geofenceId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      },
      "put": {
        "description": "Updates one geofence.",
        "operationId": "put-geofences-geofenceId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "enterAction": "START_TRACKING_PROJECT",
                  "exitAction": "STOP_TRACKING",
                  "id": "cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c",
                  "latitude": 52.2297,
                  "longitude": 21.0122,
                  "name": "Warsaw office",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "radius": 150
                },
                "schema": {
                  "$ref": "#/components/schemas/Geofence"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update a geofence",
        "tags": [
          "Geofences"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/geofences/cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"enterAction\": \"START_TRACKING_PROJECT\",\n  \"exitAction\": \"STOP_TRACKING\",\n  \"latitude\": 52.2297,\n  \"longitude\": 21.0122,\n  \"name\": \"Warsaw office\",\n  \"projectId\": \"9d58c4ce-3e6f-4d06-bf47-f70d8c4af001\",\n  \"radius\": 150\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The geofence identifier.",
            "example": "cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c",
            "in": "path",
            "name": "geofenceId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "enterAction": "START_TRACKING_PROJECT",
                "exitAction": "STOP_TRACKING",
                "latitude": 52.2297,
                "longitude": 21.0122,
                "name": "Warsaw office",
                "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                "radius": 150
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      },
      "delete": {
        "description": "Deletes one geofence.",
        "operationId": "delete-geofences-geofenceId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {},
                "schema": {
                  "$ref": "#/components/schemas/EmptyResponse"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete a geofence",
        "tags": [
          "Geofences"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X DELETE 'https://your-organization.sandtime.io/api/geofences/cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The geofence identifier.",
            "example": "cf6b0bd6-dbbf-4ef5-98a7-7ae04e0eb18c",
            "in": "path",
            "name": "geofenceId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/geofencing/enter": {
      "post": {
        "description": "Processes a geofence enter event. This is mainly used by mobile clients and location automations.",
        "operationId": "post-geofencing-enter",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "endedAt": null,
                  "name": "geofencing test",
                  "projectId": null,
                  "startedAt": "2026-07-03T10:00:00.000Z"
                },
                "schema": {
                  "additionalProperties": true,
                  "type": "object"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Send a geofence-enter event",
        "tags": [
          "Geofences"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/geofencing/enter' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"latitude\": 52.2297,\n  \"longitude\": 21.0122,\n  \"source\": \"ios-geofence\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "latitude": 52.2297,
                "longitude": 21.0122,
                "source": "ios-geofence"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/geofencing/exit": {
      "post": {
        "description": "Processes a geofence exit event and returns the pending activities that were stopped.",
        "operationId": "post-geofencing-exit",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": [
                  {
                    "billable": true,
                    "endedAt": "2026-07-03T08:30:00.000Z",
                    "id": "c2dbd56f-0f09-4bf8-87ae-a1c8d7e5f302",
                    "name": "Implement API docs page",
                    "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                    "startedAt": "2026-07-03T07:00:00.000Z",
                    "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d"
                  }
                ],
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Activity"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Send a geofence-exit event",
        "tags": [
          "Geofences"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/geofencing/exit' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"latitude\": 52.2297,\n  \"longitude\": 21.0122,\n  \"source\": \"ios-geofence\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "latitude": 52.2297,
                "longitude": 21.0122,
                "source": "ios-geofence"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/requests/projects/{projectId}/members/{memberId}/role": {
      "post": {
        "description": "Creates a request to change the selected project member role.",
        "operationId": "post-requests-projects-projectId-members-memberId-role",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED",
                  "projectId": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "role": "Administrator"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a role-change request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/requests/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members/3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04/role' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"role\": \"Administrator\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The project member identifier.",
            "example": "3b13dd8f-bc60-4db8-a2bc-5eb16ca31a04",
            "in": "path",
            "name": "memberId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "role": "Administrator"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/requests/{requestId}/projects/members/role": {
      "put": {
        "description": "Applies or rejects the role change for an existing request.",
        "operationId": "put-requests-requestId-projects-members-role",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Resolve a role-change request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/requests/1fbbd48d-176f-4b32-a98d-c8cf1eb291c5/projects/members/role' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"status\": \"RESOLVED\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The workflow request identifier.",
            "example": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
            "in": "path",
            "name": "requestId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "status": "RESOLVED"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/requests/projects/{projectId}/members": {
      "post": {
        "description": "Creates a request to assign one or more users to a project.",
        "operationId": "post-requests-projects-projectId-members",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a project-member assignment request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/requests/projects/9d58c4ce-3e6f-4d06-bf47-f70d8c4af001/members' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"userIds\": [\n    \"8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af\"\n  ]\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The project identifier.",
            "example": "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "userIds": [
                  "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af"
                ]
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/requests/{requestId}/projects/members": {
      "put": {
        "description": "Marks the request RESOLVED or REJECTED. Resolved requests assign the selected users to the project.",
        "operationId": "put-requests-requestId-projects-members",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Resolve a project-member assignment request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/requests/1fbbd48d-176f-4b32-a98d-c8cf1eb291c5/projects/members' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"status\": \"RESOLVED\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The workflow request identifier.",
            "example": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
            "in": "path",
            "name": "requestId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "status": "RESOLVED"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/requests/projects/request-assignment": {
      "post": {
        "description": "Creates a self-service request asking administrators to assign the current user to projects.",
        "operationId": "post-requests-projects-request-assignment",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a project-assignment request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/requests/projects/request-assignment' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      }
    },
    "/requests/{requestId}/projects/assign": {
      "put": {
        "description": "Marks the request RESOLVED or REJECTED. Resolved requests use `projectIds` to assign the requester to projects.",
        "operationId": "put-requests-requestId-projects-assign",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Resolve a project-assignment request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/requests/1fbbd48d-176f-4b32-a98d-c8cf1eb291c5/projects/assign' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"projectIds\": [\n    \"9d58c4ce-3e6f-4d06-bf47-f70d8c4af001\",\n    \"58f5aa89-aed2-4a67-8808-d85ef4034f42\"\n  ],\n  \"status\": \"RESOLVED\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The workflow request identifier.",
            "example": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
            "in": "path",
            "name": "requestId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "projectIds": [
                  "9d58c4ce-3e6f-4d06-bf47-f70d8c4af001",
                  "58f5aa89-aed2-4a67-8808-d85ef4034f42"
                ],
                "status": "RESOLVED"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/requests/{requestId}": {
      "put": {
        "description": "Marks the impersonation request RESOLVED or REJECTED. A resolved request triggers a one-time support sign-in link.",
        "operationId": "put-requests-requestId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Resolve an impersonation request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/requests/1fbbd48d-176f-4b32-a98d-c8cf1eb291c5' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"status\": \"RESOLVED\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The workflow request identifier.",
            "example": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
            "in": "path",
            "name": "requestId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "status": "RESOLVED"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/requests/timesheets/{year}/{week}/unlock": {
      "post": {
        "description": "Creates a request asking administrators to unlock one weekly timesheet.",
        "operationId": "post-requests-timesheets-year-week-unlock",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a timesheet-unlock request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/requests/timesheets/2026/27/unlock' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "ISO week-numbering year.",
            "example": "2026",
            "in": "path",
            "name": "year",
            "required": true,
            "schema": {
              "minimum": 2020,
              "type": "integer"
            }
          },
          {
            "description": "ISO week number in the organization time zone.",
            "example": "27",
            "in": "path",
            "name": "week",
            "required": true,
            "schema": {
              "minimum": 1,
              "maximum": 53,
              "type": "integer"
            }
          }
        ]
      }
    },
    "/requests/{requestId}/timesheets/unlock": {
      "put": {
        "description": "Marks the unlock request RESOLVED or REJECTED. A resolved request opens the timesheet for a temporary editing window.",
        "operationId": "put-requests-requestId-timesheets-unlock",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Resolve a timesheet-unlock request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/requests/1fbbd48d-176f-4b32-a98d-c8cf1eb291c5/timesheets/unlock' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"status\": \"RESOLVED\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The workflow request identifier.",
            "example": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
            "in": "path",
            "name": "requestId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "status": "RESOLVED"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/requests/timesheets/{year}/{week}/approvals": {
      "post": {
        "description": "Creates a request asking administrators to approve a weekly timesheet.",
        "operationId": "post-requests-timesheets-year-week-approvals",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a timesheet-approval request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/requests/timesheets/2026/27/approvals' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "ISO week-numbering year.",
            "example": "2026",
            "in": "path",
            "name": "year",
            "required": true,
            "schema": {
              "minimum": 2020,
              "type": "integer"
            }
          },
          {
            "description": "ISO week number in the organization time zone.",
            "example": "27",
            "in": "path",
            "name": "week",
            "required": true,
            "schema": {
              "minimum": 1,
              "maximum": 53,
              "type": "integer"
            }
          }
        ]
      }
    },
    "/requests/{requestId}/timesheets/approvals": {
      "put": {
        "description": "Marks the approval request RESOLVED or REJECTED.",
        "operationId": "put-requests-requestId-timesheets-approvals",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T09:02:11.000Z",
                  "createdBy": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "id": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
                  "resolvedAt": "2026-07-03T09:08:45.000Z",
                  "resolvedBy": "8eb3c82f-420d-4a7d-b4e5-689f6cf9c8af",
                  "status": "RESOLVED"
                },
                "schema": {
                  "$ref": "#/components/schemas/RequestRecord"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Resolve a timesheet-approval request",
        "tags": [
          "Requests"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/requests/1fbbd48d-176f-4b32-a98d-c8cf1eb291c5/timesheets/approvals' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"status\": \"RESOLVED\"\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The workflow request identifier.",
            "example": "1fbbd48d-176f-4b32-a98d-c8cf1eb291c5",
            "in": "path",
            "name": "requestId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "status": "RESOLVED"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/timesheets/auto-lock": {
      "put": {
        "description": "Evaluates whether the next weekly lock should run and updates organization lock metadata when it does.",
        "operationId": "put-timesheets-auto-lock",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "coreHours": {
                    "end": "17:00",
                    "start": "09:00"
                  },
                  "currency": "USD",
                  "holidays": {
                    "country": "US",
                    "excluded": []
                  },
                  "id": "8a4affba-df59-47bd-8173-d175e76efd15",
                  "lockingTimesheets": {
                    "enabled": false,
                    "timeZone": null,
                    "week": null,
                    "year": null
                  },
                  "name": "Acme Studio",
                  "notes": "Weekly client delivery team.",
                  "onboarding": {
                    "assignMembers": {
                      "done": true,
                      "viewed": true
                    },
                    "inviteMembers": {
                      "done": true,
                      "viewed": true
                    },
                    "organization": {
                      "done": true,
                      "viewed": true
                    },
                    "preferences": {
                      "done": false,
                      "viewed": true
                    },
                    "projects": {
                      "done": true,
                      "viewed": true
                    }
                  },
                  "plan": "free",
                  "rounding": {
                    "enabled": false,
                    "interval": 900000,
                    "mode": "NEAREST"
                  },
                  "timeZone": "Europe/Warsaw"
                },
                "schema": {
                  "$ref": "#/components/schemas/Organization"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Run auto-lock",
        "tags": [
          "Timesheets"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/timesheets/auto-lock' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"reason\": \"scheduled-reminder-run\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "reason": "scheduled-reminder-run"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/timesheets/lock": {
      "post": {
        "description": "Creates or replaces one timesheet lock for the selected user/week combination.",
        "operationId": "post-timesheets-lock",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "createdAt": "2026-07-03T10:00:00.000Z",
                  "id": "5c27ad51-cbb7-4f96-84c7-f19dd3750a42",
                  "unlockedTo": "2026-07-04T18:00:00.000Z",
                  "updatedAt": "2026-07-03T10:00:00.000Z",
                  "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                  "week": 27,
                  "year": 2026
                },
                "schema": {
                  "$ref": "#/components/schemas/TimesheetLock"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a timesheet lock",
        "tags": [
          "Timesheets"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/timesheets/lock' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"unlockedTo\": \"2026-07-04T20:00:00+02:00\",\n  \"userId\": \"2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d\",\n  \"week\": 27,\n  \"year\": 2026\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "unlockedTo": "2026-07-04T20:00:00+02:00",
                "userId": "2f9fd8a8-9f6d-4b2b-a4f4-1f1f2a7d9b9d",
                "week": 27,
                "year": 2026
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/timesheets/lock/{lockId}": {
      "delete": {
        "description": "Deletes one timesheet lock by ID.",
        "operationId": "delete-timesheets-lock-lockId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {},
                "schema": {
                  "$ref": "#/components/schemas/EmptyResponse"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete a timesheet lock",
        "tags": [
          "Timesheets"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X DELETE 'https://your-organization.sandtime.io/api/timesheets/lock/5c27ad51-cbb7-4f96-84c7-f19dd3750a42' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ],
        "parameters": [
          {
            "description": "The timesheet lock identifier.",
            "example": "5c27ad51-cbb7-4f96-84c7-f19dd3750a42",
            "in": "path",
            "name": "lockId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/timesheets/reminder": {
      "post": {
        "description": "Runs the reminder logic for the current organization.",
        "operationId": "post-timesheets-reminder",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": null,
                "schema": {
                  "nullable": true,
                  "type": "object"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Send timesheet reminders",
        "tags": [
          "Timesheets"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/timesheets/reminder' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"reason\": \"friday-evening-check\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "reason": "friday-evening-check"
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/subscriptions": {
      "get": {
        "description": "Returns subscription records for the current organization.",
        "operationId": "get-subscriptions",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": [
                  {
                    "id": "sub_01J1YB3TQK5K9S2H4E5T6U7V8W",
                    "nextBillDate": "2026-08-01",
                    "plan": "monthly",
                    "quantity": 1,
                    "status": "active"
                  }
                ],
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Subscription"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List subscriptions",
        "tags": [
          "Billing"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/subscriptions' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      }
    },
    "/subscriptions/{subscriptionId}": {
      "put": {
        "description": "Updates one existing subscription. This route is limited to administrators.",
        "operationId": "put-subscriptions-subscriptionId",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {},
                "schema": {
                  "$ref": "#/components/schemas/EmptyResponse"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update a subscription",
        "tags": [
          "Billing"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X PUT 'https://your-organization.sandtime.io/api/subscriptions/sub_01J1YB3TQK5K9S2H4E5T6U7V8W' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"quantity\": 2\n}'"
          }
        ],
        "parameters": [
          {
            "description": "The external subscription identifier.",
            "example": "sub_01J1YB3TQK5K9S2H4E5T6U7V8W",
            "in": "path",
            "name": "subscriptionId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "quantity": 2
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/checkout": {
      "post": {
        "description": "Creates a Paddle checkout link for the selected product and quantity.",
        "operationId": "post-checkout",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "url": "https://pay.paddle.com/pay/cpl_example"
                },
                "schema": {
                  "$ref": "#/components/schemas/CheckoutLink"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a checkout link",
        "tags": [
          "Billing"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/checkout' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"product\": 123456,\n  \"quantity\": 1\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "product": 123456,
                "quantity": 1
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    },
    "/billing-history": {
      "get": {
        "description": "Returns the current billing history from the payment provider.",
        "operationId": "get-billing-history",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": [
                  {
                    "amount": 4900,
                    "currency": "USD",
                    "id": "txn_01J1YB6A0M2K8H5V7P9R4S3T2Q",
                    "paidAt": "2026-07-01T08:10:00.000Z",
                    "status": "paid"
                  }
                ],
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/BillingTransaction"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List billing history",
        "tags": [
          "Billing"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X GET 'https://your-organization.sandtime.io/api/billing-history' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\""
          }
        ]
      }
    },
    "/receipt": {
      "post": {
        "description": "Submits a base64-encoded receipt payload to the billing backend.",
        "operationId": "post-receipt",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "ok": true
                },
                "schema": {
                  "additionalProperties": true,
                  "type": "object"
                }
              }
            },
            "description": "Successful response"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Upload a receipt",
        "tags": [
          "Billing"
        ],
        "x-codeSamples": [
          {
            "lang": "bash",
            "label": "cURL",
            "source": "curl -X POST 'https://your-organization.sandtime.io/api/receipt' \\\n  -H \"Authorization: Bearer YOUR_SANDTIME_ACCESS_TOKEN\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"receiptBase64\": \"MIIT9QYJKoZIhvcNAQcCoIIT5jCCE+ICAQExCzAJBgUr...\"\n}'"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "receiptBase64": "MIIT9QYJKoZIhvcNAQcCoIIT5jCCE+ICAQExCzAJBgUr..."
              },
              "schema": {
                "additionalProperties": true,
                "type": "object"
              }
            }
          },
          "required": true
        }
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "servers": [
    {
      "description": "Per-organization REST API base URL",
      "url": "https://your-organization.sandtime.io/api"
    }
  ],
  "tags": [
    {
      "description": "Workspace discovery, organization settings, and authentication helpers.",
      "name": "Workspace"
    },
    {
      "description": "Time entry CRUD for manual logging, timers, and admin corrections.",
      "name": "Activities"
    },
    {
      "description": "Projects, memberships, and project-specific revenue rates.",
      "name": "Projects"
    },
    {
      "description": "Users, personal preferences, and organization-level cost rates.",
      "name": "Users"
    },
    {
      "description": "Saved report definitions for dashboards, billing, and exports.",
      "name": "Reports"
    },
    {
      "description": "Geofence definitions plus mobile enter and exit triggers.",
      "name": "Geofences"
    },
    {
      "description": "Approval and assignment workflows live under /requests.",
      "name": "Requests"
    },
    {
      "description": "Explicit timesheet locks, automatic lock execution, and reminder delivery.",
      "name": "Timesheets"
    },
    {
      "description": "Billing, plan changes, and checkout helpers.",
      "name": "Billing"
    }
  ]
}