Skip to content

List Users ​

Returns a paginated list of all users.

Breaking Change

This list already included deleted users before, without marking them. New is the deleted field and the status parameter, which lets you show or hide deleted users on purpose (status=active hides them).

Without a timestamp filter, the list now sorts by internal ID ascending instead of in unspecified order.

Request ​

GET /api/oauth/v2/resource/users

HeaderValue
AuthorizationBearer {access_token}

Query parameters ​

ParameterTypeRequiredDescription
offsetintegerNoStart position (default: 0)
limitintegerNoNumber of results (default: 50, max: 200)
createdSincestring (ISO 8601)NoOnly users created at or after this timestamp (createdAt >=)
createdUntilstring (ISO 8601)NoOnly users created at or before this timestamp (createdAt <=)
updatedSincestring (ISO 8601)NoOnly users modified at or after this timestamp (updatedAt >=). Newly created users are included, because the modification timestamp is set on creation.
updatedUntilstring (ISO 8601)NoOnly users modified at or before this timestamp (updatedAt <=)
statusstringNoComma-separated list (default: all). Allowed values: active, deleted. Invalid value → 400 validation_error. See Conventions for details.
viewstringNodefault (the default) or slim. slim returns only the most important fields per user — see Conventions for details. Invalid value → 400 validation_error.

Required scope: users

Note: For a sync, updatedSince alone is enough — it covers new and modified users.

Note: Formats, time zone behavior, sorting, cursor strategy, and the meta.total trap work the same across all timestamp filters. See Incremental Sync.

Note on deleted users: Users do not carry a deletion timestamp. There is no deletedSince here. Identify deleted users through the deleted field, or fetch them specifically with status=deleted.

In the updatedSince feed a deletion looks like an ordinary change, evaluated through the deleted field. So do not count on a dedicated deletion timestamp when syncing users.

Note on users without a modification timestamp: For some users, updatedAt is empty. This affects legacy data from before automatic timestamping, as well as bulk imports. updatedSince does not return those users, not even with a very early date.

So for the initial sync, fetch the full set once without a timestamp filter. After that, continue incrementally with updatedSince.

Response ​

Success (200 OK) ​

json
{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "title": "Dr.",
      "firstName": "Maria",
      "lastName": "Muster",
      "abbreviation": "MM",
      "sex": 1,
      "email": "maria.muster@example.com",
      "color": "#74AFAD",
      "isDoctor": true,
      "showBookingWeeks": 6,
      "sort": 0,
      "isBookable": true,
      "tenancies": [
        {
          "id": "f0e1d2c3-b4a5-6789-fedc-ba9876543210",
          "name": "Ordination Muster",
          "abbreviation": "OM",
          "color": "#00adba"
        }
      ],
      "deleted": false,
      "createdAt": "2026-01-15T08:00:00+01:00",
      "updatedAt": "2026-06-10T16:20:00+02:00"
    }
  ],
  "meta": {
    "total": 5,
    "offset": 0,
    "limit": 50
  }
}

Response fields ​

FieldTypeDescription
dataArrayList of users
data[].idstring (UUID)Unique user ID
data[].titlestring | nullAcademic title (e.g. Dr.)
data[].firstNamestringFirst name
data[].lastNamestringLast name
data[].abbreviationstring | nullAbbreviation
data[].sexinteger | nullSex (0 = male, 1 = female)
data[].emailstring | nullEmail address
data[].colorstringColor as hex code (e.g. #74AFAD)
data[].isDoctorbooleanWhether the user is a doctor
data[].showBookingWeeksintegerHow many weeks ahead are bookable
data[].sortintegerSort order
data[].isBookablebooleanWhether the user is bookable
data[].tenanciesArrayAssigned tenants
data[].tenancies[].idstring (UUID)Tenant ID
data[].tenancies[].namestringName of the tenant
data[].tenancies[].abbreviationstringAbbreviation
data[].tenancies[].colorstringColor as hex code
data[].deletedbooleantrue if the user is deleted
data[].createdAtstring (ISO 8601) | nullCreation timestamp
data[].updatedAtstring (ISO 8601) | nullLast modification timestamp
meta.totalintegerTotal number of users
meta.offsetintegerCurrent start position
meta.limitintegerNumber of returned entries

Note: The id is returned as a UUID and is required for querying available slots and booking appointments.

Beispiele
bash
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/users?offset=0&limit=50&createdSince=beispiel&createdUntil=beispiel&updatedSince=2026-04-15T10%3A00%3A00&updatedUntil=2026-04-15T10%3A00%3A00&status=all&view=default" \
  -H "Authorization: Bearer {access_token}"
Parameter
Zuerst Token anfordern

Possible errors ​

StatusCodeDescription
400validation_errorA timestamp filter contains an invalid value
400validation_errorstatus contains an invalid value
400validation_errorview is neither default nor slim
401invalid_clientInvalid or missing access token
403insufficient_scopeScope users not present

Offisy GmbH