Skip to content

List Users ​

Returns a paginated list of all users.

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)
viewstringNoResponse format: default (default) or slim (slim response)
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 <=)

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 — deleted users cannot be determined via the API. The endpoint still returns them without marking them.

In the updatedSince feed a deletion looks like an ordinary change. So do not count on deletion detection 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"
        }
      ],
      "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[].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.

Slim response (?view=slim) ​

With view=slim, the endpoint returns a slim response with less data per user. Without the parameter, the response stays unchanged.

If view is given more than once, the last value wins — ?view=default&view=slim returns the slim response.

The slim response contains:

id, title, firstName, lastName, abbreviation, isDoctor, createdAt, updatedAt

sex, email, color, sort, isBookable, showBookingWeeks, and tenancies are omitted.

Note: Currently the slim response additionally returns createdAt and updatedAt — the default response doesn't include these fields yet.

Example: view=slim

json
{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "title": "Dr.",
      "firstName": "Maria",
      "lastName": "Muster",
      "abbreviation": "MM",
      "isDoctor": true,
      "createdAt": "2026-01-10T08:30:00+01:00",
      "updatedAt": "2026-05-02T11:45:00+02:00"
    }
  ],
  "meta": {
    "total": 5,
    "offset": 0,
    "limit": 50
  }
}
Beispiele
bash
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/users?offset=0&limit=50&view=default&createdSince=beispiel&createdUntil=beispiel&updatedSince=2026-04-15T10%3A00%3A00&updatedUntil=2026-04-15T10%3A00%3A00" \
  -H "Authorization: Bearer {access_token}"
Parameter
Zuerst Token anfordern

Possible errors ​

StatusCodeDescription
400validation_errorInvalid value for view (valid values: default, slim)
400validation_errorA timestamp filter contains an invalid value
401invalid_clientInvalid or missing access token
403insufficient_scopeScope users not present

Offisy GmbH