Calendars
This page specifies commands for working with calendars for a given tenant.
Each section shows language-specific SDK calls first (Ruby, PHP, JavaScript, Elixir), followed by the raw REST request/response.
CALENDARS
List all calendars attached to a tenant.
Optional query params:
- limit – Maximum number of calendars to return (default: 25)
- offset – Number of calendars to skip before starting to return results (default: 0)
- q – Search term (matches against calendar name)
Ruby
SD::TenantCalendars.list(tenant_id: "00000000-0000-0000-0000-000000000000", limit: 25, offset: 0)
# => [%{id: "...", name: "Some calendar"}]
PHP
<?php
$calendars = \SweetDate\TenantCalendars::list("00000000-0000-0000-0000-000000000000", 25, 0);
print_r($calendars);
JavaScript
const calendars = await SD.TenantCalendars.list("00000000-0000-0000-0000-000000000000", { limit: 25, offset: 0 });
console.log(calendars);
Elixir
{:ok, calendars} = SD.TenantCalendars.list("00000000-0000-0000-0000-000000000000", limit: 25, offset: 0)
IO.inspect(calendars)
Request
GET /api/v1/tenants/:tenant_id/calendars
Response
{
"status": "ok",
"calendars": [
{
"id": "00000000-0000-0000-0000-000000000000",
"name": "Some name",
"color_theme": "red",
"visibility": "shared",
"inserted_at": "2025-08-18T09:20:00Z",
"updated_at": "2025-08-19T10:15:00Z"
},
{
"id": "00000000-0000-0000-0000-000000000000",
"name": "Some other name",
"color_theme": "blue",
"visibility": "shared",
"inserted_at": "2025-08-18T09:20:00Z",
"updated_at": "2025-08-19T10:15:00Z"
}
]
}
Errors 404 Not Found
{
"status": "error",
"message": "not found"
}
CREATE
Attach a calendar to a tenant.
Permitted values for
visibility:
- private – Only the owner has access
- shared – Shared with selected users
- public – Discoverable within the tenant
- unlisted – Hidden from discovery, link/ID required
Ruby
SD::TenantCalendars.create("00000000-0000-0000-0000-000000000000", calendar_id: "CAL-123")
PHP
<?php
$calendar = \SweetDate\TenantCalendars::create("00000000-0000-0000-0000-000000000000", [
"calendar_id" => "CAL-123"
]);
print_r($calendar);
JavaScript
const calendar = await SD.TenantCalendars.create("00000000-0000-0000-0000-000000000000", {
calendar_id: "CAL-123"
});
console.log(calendar);
Elixir
{:ok, calendar} = SD.TenantCalendars.create("00000000-0000-0000-0000-000000000000", %{calendar_id: "CAL-123"})
IO.inspect(calendar)
Request
POST /api/v1/tenants/:tenant_id/calendars
{
"calendar_id": "00000000-0000-0000-0000-000000000000"
}
Response
{
"status": "ok",
"calendar": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Some name",
"visibility": "shared",
"color_theme": "red",
"inserted_at": "2025-08-18T09:20:00Z",
"updated_at": "2025-08-19T10:15:00Z"
}
}
Error
{ "status": "error", "message": "..." }
GET
Get a tenant calendar by ID, including its associated users.
Ruby
SD::TenantCalendars.get("TENANT-ID", "CALENDAR-ID")
PHP
<?php
$calendar = \SweetDate\TenantCalendars::get("TENANT-ID", "CALENDAR-ID");
print_r($calendar);
JavaScript
const calendar = await SD.TenantCalendars.get("TENANT-ID", "CALENDAR-ID");
console.log(calendar);
Elixir
{:ok, calendar} = SD.TenantCalendars.get("TENANT-ID", "CALENDAR-ID")
IO.inspect(calendar)
Request
GET /api/v1/tenants/:tenant_id/calendars/:id
Response
{
"status": "ok",
"calendar": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Some calendar",
"color_theme": "white",
"visibility": "private",
"inserted_at": "2025-08-18T09:20:00Z",
"updated_at": "2025-08-19T10:15:00Z",
"users": [
{
"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"
},
{
"id": "00000000-0000-0000-0000-000000000000",
"name": "Some other name",
"email": "some-other-name@example.com",
"role": "admin",
"inserted_at": "2025-08-18T09:20:00Z",
"updated_at": "2025-08-19T10:15:00Z"
}
]
}
}
Error
{ "status": "error", "message": "..." }
DELETE
Delete a tenant calendar association.
Ruby
SD::TenantCalendars.delete("TENANT-ID", "CALENDAR-ID")
# => { status: "ok" }
PHP
<?php
$resp = \SweetDate\TenantCalendars::delete("TENANT-ID", "CALENDAR-ID");
print_r($resp);
JavaScript
const resp = await SD.TenantCalendars.delete("TENANT-ID", "CALENDAR-ID");
console.log(resp);
Elixir
:ok = SD.TenantCalendars.delete("TENANT-ID", "CALENDAR-ID")
Request
DELETE /api/v1/tenants/:tenant_id/calendars/:id
Response
{ "status": "ok" }
Error
{ "status": "error", "message": "..." }