SMAO API Documentation
Public APICalendars

Update a calendar

Partial update — only included fields are changed. Passing schedules replaces the calendar's full schedules array.

PATCH
/calendars/{calendar_id}
AuthorizationBearer <token>

API key in the Authorization: Bearer <key> header. Keys are created in the SMAO dashboard (Settings → API Keys).

In: header

Path Parameters

calendar_idstring
Match^[a-f0-9]{24}$
name?string

Whitespace is trimmed; the trimmed name must be at least 1 character.

Length1 <= length <= 100
timezone?string
Length1 <= length <= 100
schedules?

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://api.smao.ai/api/v1/calendars/string" \  -H "Content-Type: application/json" \  -d '{}'
{
  "data": {
    "id": "65f8fa6f1a9d8e0012ab34cd",
    "name": "Main Office",
    "timezone": "Europe/Berlin",
    "schedules": [
      {
        "id": "65f8fa6f1a9d8e0012ab34cd",
        "type": "opening_hours",
        "weekly_schedule": {
          "mon": {
            "is_open": true,
            "slots": [
              {
                "from": "09:00",
                "to": "17:00"
              }
            ]
          },
          "tue": {
            "is_open": true,
            "slots": [
              {
                "from": "09:00",
                "to": "17:00"
              }
            ]
          },
          "wed": {
            "is_open": true,
            "slots": [
              {
                "from": "09:00",
                "to": "17:00"
              }
            ]
          },
          "thu": {
            "is_open": true,
            "slots": [
              {
                "from": "09:00",
                "to": "17:00"
              }
            ]
          },
          "fri": {
            "is_open": true,
            "slots": [
              {
                "from": "09:00",
                "to": "17:00"
              }
            ]
          },
          "sat": {
            "is_open": true,
            "slots": [
              {
                "from": "09:00",
                "to": "17:00"
              }
            ]
          },
          "sun": {
            "is_open": true,
            "slots": [
              {
                "from": "09:00",
                "to": "17:00"
              }
            ]
          }
        },
        "overrides": [
          {
            "date": "2026-12-24",
            "type": "closed",
            "reason": "Christmas Eve",
            "slots": [
              {
                "from": "09:00",
                "to": "17:00"
              }
            ]
          }
        ]
      }
    ],
    "created_at": "2019-08-24T14:15:22Z",
    "updated_at": "2019-08-24T14:15:22Z"
  }
}
{
  "error": {
    "code": "validation_failed",
    "message": "Validation failed"
  }
}
{
  "error": {
    "code": "unauthorized",
    "message": "Missing API key"
  }
}
{
  "error": {
    "code": "subscription_required",
    "message": "This feature is not available in your current subscription. Please upgrade to a higher plan"
  }
}
{
  "error": {
    "code": "forbidden",
    "message": "No permission"
  }
}
{
  "error": {
    "code": "not_found",
    "message": "Not found"
  }
}
{
  "error": {
    "code": "conflict",
    "message": "A calendar with this name already exists"
  }
}
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Rate limit exceeded"
  }
}
{
  "error": {
    "code": "internal_error",
    "message": "An unexpected error occurred."
  }
}