# GET /v1/users/{userId}

**Service:** Users  
**Operation:** `UserService_GetUser`

Returns the user record — name, email, and active status — for the given id, scoped to your company.

## Parameters

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `userId` | path | string | yes | The id of the user to retrieve. Required. |
| `fields` | query | string | no | Comma-separated response fields to include, using camelCase JSON names (e.g. `orderId,total.amountMicros`). Dot paths reach into nested objects and map transparently across arrays. Paths are relative to the resource, not the response envelope; envelope keys like `nextPageToken` are always preserved. Only 2xx JSON responses are filtered; error bodies pass through unmodified. Unknown names are silently ignored. Takes precedence over `excludeFields` when both are provided. |
| `excludeFields` | query | string | no | Comma-separated response fields to exclude, using camelCase JSON names. Dot paths and array-transparency work the same as `fields`. Paths are relative to the resource, not the response envelope. Only 2xx JSON responses are filtered; error bodies pass through unmodified. Ignored when `fields` is also provided. |

## Responses

| Status | Schema | Description |
| --- | --- | --- |
| 200 | `GetUserResponse` | A successful response. |
| 400 | `Error` | The request was rejected because it was malformed — for example a badly formed id. The body is a validation-failure envelope: an overall type and message and one entry per problem (each with a stable code, a message, and a param pointing at the offending parameter). |
| 401 | `Error` | The request is missing a valid bearer token, or the token is invalid or expired. |
| 403 | `Error` | The authenticated user is not a company administrator. Retrieving a user by id is an administrator-only operation. |
| 404 | `Error` | No user with the given id exists in the authenticated company. |
| 429 | `Error` | The request was throttled (rate_limited) or exceeded a size limit (resource_exhausted). When throttled, the Retry-After header says how many seconds to wait before retrying; a resource_exhausted request will fail the same way if retried unchanged. |
| default | `Error` | Any other error. The body is the same error envelope every error uses: a short stable type identifying the kind of failure (for example "rate_limited" or "internal"), a human-readable message, and the request's idempotency key echoed back when one was supplied. |

## Returns

`GetUserResponse`

| Field | Type | Description |
| --- | --- | --- |
| `user` | User | The requested user. |
| `user.userId` | string | The user's unique id. This is the value to use as a labour line's user id when assigning the user to a labour line on an order. |
| `user.firstName` | string | The user's first name. |
| `user.lastName` | string | The user's last name. |
| `user.email` | string | The user's email address. In ListUsers responses this is populated only when the caller is a company administrator; GetUser always returns it. |
| `user.isActive` | boolean | Whether the user is active. Only active users can be assigned to a labour line. |
| `user.hourlyRateCharged` | Money | The default per-hour rate charged for this user's labour — what an hour of their work sells for. Zero when no rate has been set for the user. |
| `user.hourlyRateCharged.amountMicros` | string | Amount in micros — millionths of the currency's major unit. 1.00 = 1_000_000 micros, so $12.34 is 12_340_000 — sent and returned over JSON as the string "12340000" (64-bit integers serialize as JSON strings). A whole number of cents (or pence, etc.) is a multiple of 10_000 micros. |
| `user.hourlyRateCharged.currency` | string | ISO 4217 currency code (3 letters, e.g. "AUD"). |
| `user.hourlyRateCost` | Money | The per-hour cost of this user's labour to your company. Zero when no rate has been set for the user. |
| `user.hourlyRateCost.amountMicros` | string | Amount in micros — millionths of the currency's major unit. 1.00 = 1_000_000 micros, so $12.34 is 12_340_000 — sent and returned over JSON as the string "12340000" (64-bit integers serialize as JSON strings). A whole number of cents (or pence, etc.) is a multiple of 10_000 micros. |
| `user.hourlyRateCost.currency` | string | ISO 4217 currency code (3 letters, e.g. "AUD"). |

---

Source: https://developer.factory.app/reference/users/get-user · Factory Sales API v1
