Vacation Tracker Docs
REST API v2API referenceAutomations

Delete an automation

This API method deletes an automation. Requires `automations:write`. No request body. The acting user is the key owner, or the `X-On-Behalf-Of` user. It waits for the deletion and returns `204`, or `202 Accepted` with an operation to poll. The automation's add-on does not need to be active. `deleteAddedDays` applies only to `seniority-entitlement`: `true` also removes the days the automation awarded to users, in the background; `false`, the default, keeps them. Sending it for any other type, or with a value other than `true` or `false`, fails with `400 VALIDATION_ERROR`. Errors: `400 VALIDATION_ERROR` (`deleteAddedDays`), `403 ON_BEHALF_OF_NOT_ALLOWED`, `403 FORBIDDEN` and `403 AUTOMATION_ADMIN_REQUIRED` (the acting user may not delete this automation), `404 AUTOMATION_TYPE_NOT_FOUND`, `404 RESOURCE_NOT_FOUND` (no automation of the type in the path has this ID), and the `Idempotency-Key` codes.

DELETE
/v2/automations/{type}/{id}

Authorization

bearerAuth automations:write
AuthorizationBearer <token>

API key sent as Authorization: Bearer vt_live_<secret>. See the Authentication and Scopes sections at the top of this document for how keys are created, which scopes exist and how the key owner's role limits them.

In: header

Scope: automations:write

Path Parameters

type*string

automation type. Any other value returns 404 AUTOMATION_TYPE_NOT_FOUND.

Value in"blackout-period" | "seniority-entitlement" | "entitlement-by-role" | "maximum-users-away" | "probation-period" | "leave-duration-limit" | "leave-request-notice-period"
id*string

resource ID.

Query Parameters

deleteAddedDays?boolean

only for seniority-entitlement. true also removes the days the automation awarded; false, the default, keeps them. Any other type fails with 400 VALIDATION_ERROR.

Defaultfalse

Header Parameters

Idempotency-Key?string

optional key (1 to 255 printable ASCII characters) that makes a write request safe to retry. Keys are retained for 24 hours per API key. Retrying with the same key and the same request within those 24 hours replays the original response (with the Idempotent-Replayed header). Reusing the key with a different request returns 422 IDEMPOTENCY_KEY_REUSED; retrying while the first request is still running returns 409 IDEMPOTENCY_REQUEST_IN_PROGRESS; an invalid key returns 400 INVALID_IDEMPOTENCY_KEY.

Length1 <= length <= 255
X-On-Behalf-Of?string

ID of the user the write is performed for. Requires the users:act-on-behalf scope, and the key owner must manage the target user; otherwise the request fails with 403 ON_BEHALF_OF_NOT_ALLOWED. Ignored on GET requests.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/v2/automations/blackout-period/string"
{
  "operation": {
    "id": "pa_3f1c2b9e-8a47-4d5e-9c61-2b7f0e4a1d93",
    "status": "PENDING",
    "url": "/v2/operations/pa_3f1c2b9e-8a47-4d5e-9c61-2b7f0e4a1d93"
  }
}
Empty
{
  "error": {
    "code": "VALIDATION_ERROR",
    "name": "ValidationError",
    "description": "A query parameter, body field or header failed validation.",
    "resolution": "Fix the fields listed in details.fields and send the request again.",
    "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef",
    "details": {
      "fields": [
        {
          "path": "startDate",
          "message": "\"startDate\" is required"
        }
      ]
    }
  }
}
{
  "error": {
    "code": "UNAUTHORIZED",
    "name": "Unauthorized",
    "description": "The API key is missing, malformed or not recognized.",
    "resolution": "Send a valid API key in the Authorization header as Bearer followed by the full vt_live_ key.",
    "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef"
  }
}

{
  "error": {
    "code": "INSUFFICIENT_SCOPE",
    "name": "InsufficientScope",
    "description": "The API key does not have the scopes this request needs.",
    "resolution": "Add the scopes listed in details.requiredScopes to the key in the Vacation Tracker dashboard.",
    "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef",
    "details": {
      "requiredScopes": [
        "leaves:write"
      ]
    }
  }
}

{
  "error": {
    "code": "AUTOMATION_TYPE_NOT_FOUND",
    "name": "Automation type not found",
    "description": "The automation type was not found.",
    "resolution": "Use one of the automation types listed in the API reference.",
    "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef"
  }
}

{
  "error": {
    "code": "CONFLICT",
    "name": "Conflict",
    "description": "The request conflicts with the current state of the resource.",
    "resolution": "Read the resource again and retry with up-to-date values.",
    "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef"
  }
}

{
  "error": {
    "code": "LEAVE_NEGATIVE_BALANCE",
    "name": "LeaveNegativeBalance",
    "description": "The user does not have enough balance for this leave.",
    "resolution": "Shorten the leave, use a different leave type, or ask an admin to adjust the quota.",
    "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef"
  }
}

{
  "error": {
    "code": "RATE_LIMITED",
    "name": "RateLimited",
    "description": "Too many requests were sent in a short time.",
    "resolution": "Wait a few seconds and retry, using the same Idempotency-Key for writes.",
    "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef"
  }
}
{
  "error": {
    "code": "INTERNAL_ERROR",
    "name": "InternalError",
    "description": "Something went wrong on our side.",
    "resolution": "Retry later, and if it keeps happening, contact Vacation Tracker support and quote the requestId.",
    "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef"
  }
}

Update an automation

This API method changes an automation. Requires `automations:write`. The acting user is the key owner, or the `X-On-Behalf-Of` user. It waits for the change and returns the automation with `200`, or `202 Accepted` with an operation to poll. Send only the fields you want to change, from the fields of the automation's type plus `isActive`; at least one field is required. `UpdateAutomationRequest` lists the fields per type (for example `UpdateBlackoutPeriodAutomationRequest` for `blackout-period`); fields of another type fail validation. Your changes are merged with the automation's current values and the result is validated like a create, so everything you do not send is kept: - `isActive: false` pauses the automation and `isActive: true` re-enables it. - Arrays such as `leaveTypeIds`, `locationIds`, `departmentIds`, `labelIds` and `periods`, when sent, **replace** the current list. - For `leave-duration-limit`, send `null` for `minimumDuration` or `maximumDuration` to remove that limit; at least one of them must stay set, and `maximumDuration` cannot be less than `minimumDuration`. - An update that leaves the automation active, including re-enabling it, fails with `403 AUTOMATION_ADDON_NOT_ACTIVE` when the company's add-on for this automation is not active. Pausing is always allowed. - An acting user who is not an admin can change only automations they created (`ownerId`); `seniority-entitlement` and `entitlement-by-role` automations can be changed only by admins. Errors: `400 VALIDATION_ERROR` (`details.fields`), `400 INVALID_REQUEST_BODY`, `403 ON_BEHALF_OF_NOT_ALLOWED`, `403 FORBIDDEN` and `403 AUTOMATION_ADMIN_REQUIRED` (the acting user may not change this automation), `403 AUTOMATION_ADDON_NOT_ACTIVE`, `404 AUTOMATION_TYPE_NOT_FOUND`, `404 RESOURCE_NOT_FOUND` (no automation of the type in the path has this ID), `409 DUPLICATE_NAME` (another automation already uses the new name), and the `Idempotency-Key` codes.

List notifications

This API method returns the daily, weekly and birthday notifications the key can see, in one response without pagination. Requires `notifications:read`. Admins see every notification in the company; other users see only the notifications they own (`ownerId`). Each notification has the fields of its `frequency`; `Notification` lists one schema per frequency.