List project users
- Sandbox: available
- Staging: available
- Production: unknown
Lists the practitioner memberships of a given project: your own project or one of its direct child projects. Use it to manage the team of a child project from its parent.
Auth: Bearer token for a practitioner, project admin or System Owner session. The caller's access policy must grant Practitioner:read (a project admin who holds no access policy skips this check). The session must carry a project.
Scope: The project in the path. It must be the caller's project (from the token) or a direct child of it. Grandchildren are not reachable.
Behaviour
- The project is read first, so an unknown or out-of-scope
idfails before any membership is searched. - Rows, filters, sorting, paging and
statuswork exactly as inGET /v1/slim/project/users: one row perPractitionermembership with a user and a profile,searchis fuzzy over profile, user and access policy names,countis 1 to 100 (default20). - Answers are cached for up to about a minute.
Example
curl -X GET 'https://api.sandbox.ovok.com/v1/slim/project/c3499c27-2973-0a7f-807e-fb8676a92dcb/users?count=50' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NjcyNjg4MDAsImV4cCI6MTc2NzI3MjQwMH0.Ql3B_ztDvctlyZ2z0vp4sl3ExXRQGkzmxdmTAqxNzZk'bearerAuthorizationBearer <JWT>id*string1 <= lengthprofileType?"Practitioner""Practitioner""Practitioner"sortBy?string"profileName""profileName""userName""accessPolicyName"orderBy?string"ASC""ASC""DESC"search?string1 <= lengthaccessPolicyId?string1 <= lengthprofileId?string1 <= lengthuserId?string1 <= lengthpage?string"0"count?string"20"Project users retrieved successfully.
application/json- response
total*number0 <= valuepage*number0 <= valuecount*number1 <= valueresources*array<>curl -X GET 'https://api.sandbox.ovok.com/v1/slim/project/string/users'{ "total": 0, "page": 0, "count": 1, "resources": [ { "user": { "resourceType": "User", "id": "string", "firstName": "string", "lastName": "string", "email": "string", "project": { "reference": "string", "display": "string" }, "meta": { "project": "string", "lastUpdated": "string" } }, "profile": { "resourceType": "Practitioner", "id": "string", "name": [ { "use": "string", "text": "string", "family": "string", "given": [ "string" ], "prefix": [ "string" ], "suffix": [ "string" ] } ], "meta": { "project": "string", "lastUpdated": "string" } }, "membership": { "resourceType": "ProjectMembership", "id": "string", "project": { "reference": "string", "display": "string" }, "user": { "reference": "string", "display": "string" }, "profile": { "reference": "string", "display": "string" }, "accessPolicy": { "reference": "string", "display": "string" }, "meta": { "project": "string", "lastUpdated": "string" } }, "status": "Active", "accessPolicy": { "resourceType": "AccessPolicy", "id": "string", "name": "string" } } ]}Delete a child project DELETE
Deletes an empty direct child project of your current project, including the setup Ovok created with it. Use it to remove a child project that is no longer needed. **Auth:** Bearer token for a project admin. No other role passes. **Scope:** `subProjectId` must be a direct child of the caller's project (from the token). ## Behaviour - The child must be empty: no `Patient`, `Device` or `Location`, and no child projects of its own. Otherwise the request is refused with 409 and nothing is changed. The 409 body has `error: "project_not_empty"`, a `counts` object per resource type and the `childProjectIds`. - On success Ovok unlinks the child from your project, deletes its access policies, practitioners, memberships, threshold plan, client applications, top-level organizations and tenant code, deletes the project, then revokes its Signals tenant. - User accounts are never deleted: a user can belong to other projects. Audit records (`Provenance`, `AuditEvent`) are kept. - Two deletes of the same project cannot run at once: the second gets 409. - The delete is safe to retry. If the Signals revoke fails, the project is already deleted and the request answers 502. Send the same request again to finish it. - Returns `{ "success": true }`. ## Example ```bash curl -X DELETE 'https://api.sandbox.ovok.com/v1/slim/project/child/c3499c27-2973-0a7f-807e-fb8676a92dcb' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NjcyNjg4MDAsImV4cCI6MTc2NzI3MjQwMH0.Ql3B_ztDvctlyZ2z0vp4sl3ExXRQGkzmxdmTAqxNzZk' ```
Get project device counts GET
Returns summary counts of the devices in a project: total, assigned to a resident, active and by manufacturer. Use it for project overview tiles. **Auth:** Bearer token. The caller's access policy must grant `Device:search` and `Device:read` (a project admin who holds no access policy skips this check). **Scope:** The project in the path. It must be the caller's project (from the token) or a direct child of it. ## Behaviour - Counts come from the project's live device list, the same rows that back the live device views. That list is cached, so a device change can take a moment to show. - A row is left out when its device, resident, location or organization belongs to another project. - `assignedResidentDeviceCount` counts devices with a resident; `unassignedDeviceCount` is the rest. - `activeDeviceCount` counts devices whose latest telemetry reports them active; `inactiveDeviceCount` is the rest. - `withingsDeviceCount` counts devices whose serial number resolves to Withings. Every other device is counted in `radarDeviceCount`. - If the device list fails to build, the last complete list is used. ## Example ```bash curl -X GET 'https://api.sandbox.ovok.com/v1/slim/project/c3499c27-2973-0a7f-807e-fb8676a92dcb/device-counts' \ -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3NjcyNjg4MDAsImV4cCI6MTc2NzI3MjQwMH0.Ql3B_ztDvctlyZ2z0vp4sl3ExXRQGkzmxdmTAqxNzZk' ```