When I Work · Schema
components-schemas-User
Employee SchedulingWorkforce ManagementTime TrackingTime ClockShift ManagementAttendanceTeam MessagingHourly WorkersLabor ForecastingHuman ResourcesScheduling
Properties
| Name | Type | Description |
|---|---|---|
| id | integer | Unique identifier for the user |
| login_id | integer | Unique identifier for the person/login belonging to the user. |
| account_id | integer | ID of the account for this user. |
| role | integer | The user's role: * `1` - Admin * `2` - Manager * `3` - Employee (Default) * `5` - Supervisor |
| string | The email address of the user. | |
| first_name | string | The first name of the user. |
| middle_name | string | The middle name of the user. |
| last_name | string | The last name of the user. |
| phone_number | string | The phone number of the user |
| employee_code | string | The user's employee code. This code can be used to clock in instead of the user's email address, or it can be used to help map users in When I Work to other services. |
| activated | boolean | Indicates of a manager has activated (accepted a pending user) this user. |
| notes | string | Notes about this user. (Only viewable by supervisors and managers). |
| hours_max | number | The max hours that this user can work. |
| hourly_rate | number | The hourly rate for this user. (Only viewable by managers and supervisors that can do payroll). |
| position_rates | object | A mapping of position IDs to the user's hourly rate for that position. The rates here are applied on top of the user's base hourly rate (see hourly_rate). A user with an hourly rate of 15 and a positi |
| type | integer | Use the `employment_type` property instead. A bitwise flag representing additional wage options: * `1` - Hourly employee * `2` - Salaried employee * `5` - Exempt from overtime. |
| employment_type | string | Employment type of the user. *These options are only available to payroll customers |
| last_login | string | The date and time when this user last logged in. |
| positions | array | An array of positions assigned to this user. |
| locations | array | An array of locations (schedules) assigned to this user. |
| is_deleted | boolean | Whether the user has been deleted. |
| is_hidden | boolean | Whether the user has been hidden from the scheduler. |
| is_payroll | boolean | Whether the user has access to payroll. (Only available for managers and supervisors). |
| is_private | boolean | Whether the user has privacy enabled, which will hide their contact details from other employees (excluding supervisors and managers). |
| is_trusted | boolean | Whether the user can edit their own timesheet. |
| created_at | string | |
| updated_at | string | |
| start_date | string | yyyy-mm-dd formatted date for when the user started their employment |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/when-i-work/json-schema/when-i-work-components-schemas-user-schema.json",
"title": "components-schemas-User",
"x-generated": "2026-11-10",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/when-i-work-accounts-api-openapi.yml#/components/schemas/components-schemas-User",
"type": "object",
"properties": {
"id": {
"type": "integer",
"readOnly": true,
"description": "Unique identifier for the user"
},
"login_id": {
"type": "integer",
"readOnly": true,
"description": "Unique identifier for the person/login belonging to the user."
},
"account_id": {
"type": "integer",
"readOnly": true,
"description": "ID of the account for this user."
},
"role": {
"type": "integer",
"enum": [
1,
2,
3,
5
],
"description": "The user's role:\n * `1` - Admin\n * `2` - Manager\n * `3` - Employee (Default)\n * `5` - Supervisor\n"
},
"email": {
"type": "string",
"description": "The email address of the user."
},
"first_name": {
"type": "string",
"description": "The first name of the user."
},
"middle_name": {
"type": "string",
"description": "The middle name of the user."
},
"last_name": {
"type": "string",
"description": "The last name of the user."
},
"phone_number": {
"type": "string",
"description": "The phone number of the user"
},
"employee_code": {
"type": "string",
"description": "The user's employee code. This code can be used to clock in instead of the user's email address, or it can be used to help map users in When I Work to other services.\n"
},
"activated": {
"type": "boolean",
"readOnly": true,
"description": "Indicates of a manager has activated (accepted a pending user) this user."
},
"notes": {
"type": "string",
"description": "Notes about this user. (Only viewable by supervisors and managers)."
},
"hours_max": {
"type": "number",
"format": "float",
"description": "The max hours that this user can work."
},
"hourly_rate": {
"type": "number",
"format": "float",
"description": "The hourly rate for this user. (Only viewable by managers and supervisors that can do payroll)."
},
"position_rates": {
"type": "object",
"description": "A mapping of position IDs to the user's hourly rate for that position. The rates here are applied on\ntop of the user's base hourly rate (see hourly_rate). A user with an hourly rate of 15 and a position rate \nof 1 for position 1001 would result in an hourly rate of 16 for position 1001. (Only viewable by managers \nand supervisors that can do payroll).\n"
},
"type": {
"type": "integer",
"description": "Use the `employment_type` property instead.\nA bitwise flag representing additional wage options:\n * `1` - Hourly employee\n * `2` - Salaried employee\n * `5` - Exempt from overtime.\n",
"deprecated": true
},
"employment_type": {
"type": "string",
"enum": [
"hourly",
"hourly_exempt",
"salaried *",
"salaried_exempt *",
"shareholder *"
],
"description": "Employment type of the user. *These options are only available to payroll customers"
},
"last_login": {
"type": "string",
"format": "date-time",
"readOnly": true,
"description": "The date and time when this user last logged in."
},
"positions": {
"type": "array",
"items": {
"type": "integer"
},
"description": "An array of positions assigned to this user."
},
"locations": {
"type": "array",
"items": {
"type": "integer"
},
"description": "An array of locations (schedules) assigned to this user."
},
"is_deleted": {
"type": "boolean",
"readOnly": true,
"description": "Whether the user has been deleted."
},
"is_hidden": {
"type": "boolean",
"description": "Whether the user has been hidden from the scheduler."
},
"is_payroll": {
"type": "boolean",
"description": "Whether the user has access to payroll. (Only available for managers and supervisors)."
},
"is_private": {
"type": "boolean",
"description": "Whether the user has privacy enabled, which will hide their contact details from other employees (excluding supervisors and managers)."
},
"is_trusted": {
"type": "boolean",
"description": "Whether the user can edit their own timesheet."
},
"created_at": {
"readOnly": true,
"type": "string",
"format": "date-time"
},
"updated_at": {
"readOnly": true,
"type": "string",
"format": "date-time"
},
"start_date": {
"type": "string",
"format": "date",
"description": "yyyy-mm-dd formatted date for when the user started their employment"
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/when-i-work-components-schemas-user"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.