Users
This page specifies commands for working with users for a given tenant.
Each section shows language-specific SDK calls first (Ruby, PHP, JavaScript, Elixir), followed by the raw REST request/response.
USERS
List all tenant users.
Optional query params:
- limit – Maximum number of users to return (default: 25)
- offset – Number of users to skip before starting to return results (default: 0)
- q – Search term (matches against user name or email)
Ruby
SD::TenantUsers.list("TENANT-ID", limit: 10, offset: 20, q: "alice")
PHP
<?php
$users = \SweetDate\TenantUsers::list("TENANT-ID", 10, 20, "alice");
print_r($users);
JavaScript
const users = await SD.TenantUsers.list("TENANT-ID", { limit: 10, offset: 20, q: "alice" });
console.log(users);
Elixir
{:ok, users} = SD.TenantUsers.list("TENANT-ID", limit: 10, offset: 20, q: "alice")
IO.inspect(users)
Request
GET /api/v1/tenants/:tenant_id/users?limit=10&offset=20&q=alice
Response
{
"status": "ok",
"users": [
{
"id": "00000000-0000-0000-0000-000000000000",
"name": "some name",
"email": "some-email@example.com",
"role": "owner",
"inserted_at": "2025-08-18T09:20:00Z",
"updated_at": "2025-08-19T10:15:00Z"
},
{
"id": "00000000-0000-0000-0000-000000000000",
"name": "Some other name",
"email": "some-other-email@example.com",
"role": "admin",
"inserted_at": "2025-08-18T09:20:00Z",
"updated_at": "2025-08-19T10:15:00Z"
}
]
}
Error
{
"status": "error",
"message": "not found",
"error_code": "NOT_FOUND"
}
CREATE
Create a tenant–user association.
Permitted values for
role:
- owner – Create, Show, Update, Delete tenant and calendar
- admin – Create, Show, Update, Delete calendar
- guest – Show calendar
Ruby
SD::TenantUsers.create("TENANT-ID", user_id: "USER-ID", role: :admin)
PHP
<?php
$user = \SweetDate\TenantUsers::create("TENANT-ID", [
"user_id" => "USER-ID",
"role" => "admin"
]);
print_r($user);
JavaScript
const user = await SD.TenantUsers.create("TENANT-ID", {
user_id: "USER-ID",
role: "admin"
});
console.log(user);
Elixir
{:ok, user} = SD.TenantUsers.create("TENANT-ID", %{user_id: "USER-ID", role: :admin})
IO.inspect(user)
Request
POST /api/v1/tenants/:tenant_id/users
{
"user_id": "00000000-0000-0000-0000-000000000000",
"role": "admin"
}
Response
{
"status": "ok",
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"email": "some-name@example.com",
"name": "some name",
"role": "admin",
"inserted_at": "2025-08-18T09:20:00Z",
"updated_at": "2025-08-19T10:15:00Z"
}
}
Error 404 Not Found
{
"status": "error",
"message": "not found",
"error_code": "NOT_FOUND"
}
Error 422 Unprocessable Entity
{
"status": "error",
"message": "invalid input",
"error_code": "VALIDATION_ERROR",
"fields": {
"user_id": ["is not a valid UUID"],
"role": ["is invalid"]
}
}
GET
Get a tenant user by ID.
Ruby
SD::TenantUsers.get("TENANT-ID", "USER-ID")
PHP
<?php
$user = \SweetDate\TenantUsers::get("TENANT-ID", "USER-ID");
print_r($user);
JavaScript
const user = await SD.TenantUsers.get("TENANT-ID", "USER-ID");
console.log(user);
Elixir
{:ok, user} = SD.TenantUsers.get("TENANT-ID", "USER-ID")
IO.inspect(user)
Request
GET /api/v1/tenants/:tenant_id/users/:id
Response
{
"status": "ok",
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Some name",
"email": "some-name@example.com",
"role": "owner",
"inserted_at": "2025-08-18T09:20:00Z",
"updated_at": "2025-08-19T10:15:00Z"
}
}
Error
{
"status": "error",
"error_code": "VALIDATION_ERROR",
"fields": { "role": ["is invalid"] },
"message": "invalid input"
}
UPDATE
Update a tenant user.
Ruby
SD::TenantUsers.update("TENANT-ID", "USER-ID", role: :admin)
PHP
<?php
$user = \SweetDate\TenantUsers::update("TENANT-ID", "USER-ID", ["role" => "admin"]);
print_r($user);
JavaScript
const user = await SD.TenantUsers.update("TENANT-ID", "USER-ID", { role: "admin" });
console.log(user);
Elixir
{:ok, user} = SD.TenantUsers.update("TENANT-ID", "USER-ID", %{role: :admin})
IO.inspect(user)
Request
PUT /api/v1/tenants/:tenant_id/users/:id
{
"role": "admin"
}
Response
{
"status": "ok",
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Some name",
"email": "some-name@example.com",
"role": "admin",
"inserted_at": "2025-08-18T09:20:00Z",
"updated_at": "2025-08-19T10:15:00Z"
}
}
Error 422 Unprocessable Entity
{
"status": "error",
"message": "invalid input",
"error_code": "VALIDATION_ERROR",
"fields": {
"role": ["is invalid"]
}
}
Error 404 Not Found
{
"status": "error",
"message": "not found",
"error_code": "NOT_FOUND"
}
USER
Delete a tenant user.
Ruby
SD::TenantUsers.delete("TENANT-ID", "USER-ID")
# => { status: "ok" }
PHP
<?php
$resp = \SweetDate\TenantUsers::delete("TENANT-ID", "USER-ID");
print_r($resp);
JavaScript
const resp = await SD.TenantUsers.delete("TENANT-ID", "USER-ID");
console.log(resp);
Elixir
:ok = SD.TenantUsers.delete("TENANT-ID", "USER-ID")
Request
DELETE /api/v1/tenants/:tenant_id/users/:id
Response
{ "status": "ok" }
Error 404 Not Found
{
"status": "error",
"message": "not found",
"error_code": "NOT_FOUND"
}