Skip to content

Conditions

General

text

Checks for the given text in the event.

  • Specify field with TITLE, DESCRIPTION, LOCATION or ANY to set where the text must appear. ANY is the default.
  • Specify mode with START, END, EQUAL or CONTAIN to set where the given text must appear in the field. CONTAIN is the default.
{
  "type": "text",
  "search": "Lunch break",
  "field": "TITLE"
}

eventtype

Checks the type of the event.

  • Specify either a single type via is or a list via oneOf.

    Value Meaning
    DEFAULT A regular event.
    MEETING A meeting invitation with at least one attendee.
{
  "type": "eventtype",
  "is": "MEETING"
}

Compatibility note

When accessing Microsoft calendars using iCalendar addresses, meetings cannot be distinguished from other events.

status

Checks the status of the event.

  • Specify either a single status via is or a list via oneOf.
  • Possible values are FREE, WORKING_ELSEWHERE, TENTATIVE, BUSY, OUT_OF_OFFICE or UNKNOWN.
{
  "type": "status",
  "is": "BUSY"
}

Compatibility note

Not all values are supported by all systems. For details, see the "Status" table.

visibility

Checks the visibility of the event.

  • Specify either a single status via is or a list via oneOf.
  • Possible values are NORMAL, PERSONAL, CONFIDENTIAL, PRIVATE, UNSPECIFIED or PUBLIC.
{
  "type": "visibility",
  "is": "PRIVATE"
}

Compatibility note

Not all values are supported by all systems. For details, see the "Visibility" table.

creator

Checks who created the event. Usually, this is the calendar owner, but if calendars are shared it may be someone else.

  • Specify either a single email address via is or a list via oneOf.
{
  "type": "creator",
  "is": "oyana.tamru@example.com"
}

Compatibility note

This is only supported when accessing Google Calendar via a linked account. Microsoft does not offer a way to retrieve this information.

filled

Checks whether the given field is filled.

  • Specify field with DESCRIPTION or LOCATION.
{
  "type": "filled",
  "field": "LOCATION"
}

Details

A field is considered filled if its value is non-empty and does not consist entirely of whitespace (e.g. spaces, tabs, line breaks).

If HTML formatting tags are present, that alone does not count as a filled field; there must be visible text as well.

property

Checks whether the source event has a property with the given key.

  • Optionally, specify either a single value via is or a list via oneOf.
  • Value matching is case-insensitive unless matchCase is specified as true.
{
  "type": "property",
  "key": "google:color.name",
  "oneOf": [
    "flamingo",
    "tomato",
    "tangerine"
  ]
}

limit

Limits synchronization to the given number of events.

  • Use count to specify the event limit as a number greater than or equal to 1.
  • Optionally, you can apply that number to a period by specifying per with a value of DAY, WEEK, MONTH, QUARTER or YEAR. For example, you can use this to synchronize only the first event each day and ignore the others.
{
  "type": "limit",
  "count": 10
}
{
  "type": "limit",
  "count": 1,
  "per": "DAY"
}

First day of week

The first day of the week is Monday as defined by the ISO-8601 standard.

If that does not match your needs, we would love to hear from you! Please email a description of your use case to support@chronolink.app. We will either help you set it up using a combination of conditions or change ChronoLink so users can configure this.

Date and time

time

Checks whether the event is on certain days of week or within certain time ranges.

Use at least one of the following:

  • Specify onlyOn to ensure the event concerns any of the given days of week, specify exceptOn to ensure it does not.

  • Specify onlyDuring to ensure the event concerns any of the given time ranges, specify exceptDuring to ensure it does not.

{
  "type": "time",
  "onlyOn": "Mon-Fri",
  "onlyDuring": "9-17"
}
{
  "type": "time",
  "exceptOn": "Wednesday"
}
  • An event concerns a period of time (time range or day of week) if either
    • one contains the other, or
    • the two overlap each other to some degree.
  • Days of week can be specified using their full English names or abbreviated to 2 or more letters. Matching is case-insensitive, spaces are ignored.
    • Specify multiple days separated with commas (Tue, Sat), ranges with hyphens (Mon-Fri) or a combination of both (Tue-Fri, Sun).
  • Time ranges consist of start and end time separated by a hyphen. Spaces around the hyphen are ignored.
    • Each time can be specified as a single number (24-hour format) or with hours and minutes separated by a colon. For example, 5 o’clock in the afternoon can be written as 17 or 17:00.
    • Time ranges may span midnight, e.g. 22:00-6:00.

daterange

Checks that the event is in a certain date range. Date format is 2022-01-31+02:00.

  • Specify either start, end or both:
    • Specify start to ensure the event starts on or after the given date.
    • Specify end to ensure the events ends before the given date.
{
  "type": "daterange",
  "start": "2022-06-29+02:00"
}

relativerange

Checks that the event is in a certain range relative to the current time.

  • Specify unit with MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER or YEAR. The condition will only match events that are completely or partially inside the same time window of that unit as the current time.
    • For example, in a connection run at 13:37, a relativerange condition using HOUR would match a 12:45-13:15 event, a 13:30-14:00 event and a 12:00-15:00 event. However, an event starting at 14:00 would not be matched.
  • Optionally, use any of the following:

    • Specify pastCount, futureCount or both to extend matching to additional time periods. The value must be either "0" (the default), a positive integer like "1" or "90" for the corresponding number of units, or "*" for any past/future event.
    • Depending on the combination of pastCount and futureCount, you can use current to define how to treat the current time period (e.g. the current hour):

      Value Meaning
      EXCLUDE The current time period is not part of the matching range. Either pastCount or futureCount must be "0".
      SPLIT The current time period is split at the current precise time. Only the part adjacent to the past or future will be part of the matching range.
      INCLUDE The current time period is part of the matching range. This is the default value.
    • Specify strict as true to limit matching to events that are completely in, or identical to, the matching range.

      • For example, in a connection run at 13:37, a relativerange condition using HOUR and strict set to true would match a 13:00-13:05 event, a 13:00-14:00 event and a 13:55-14:00 event. However, it would match neither a 12:45-13:15 event nor a 12:00-15:00 event.
Events currently running
{
  "type": "relativerange",
  "unit": "MINUTE"
}
Current week
{
  "type": "relativerange",
  "unit": "WEEK"
}
Today & future events
{
  "type": "relativerange",
  "unit": "DAY",
  "futureCount": "*"
}
Previous 3 days and today until now
{
  "type": "relativerange",
  "unit": "DAY",
  "pastCount": "3",
  "current": "SPLIT"
}
Events that have ended
{
  "type": "relativerange",
  "unit": "MINUTE",
  "pastCount": "*",
  "strict": true
}

First day of week

The first day of the week is Monday as defined by the ISO-8601 standard.

If that does not match your needs, we would love to hear from you! Please email a description of your use case to support@chronolink.app. We will either help you set it up using a combination of conditions or change ChronoLink so users can configure this.

isallday

Checks whether the event starts and ends on midnight. Such events may cover multiple days.

{
  "type": "isallday"
}

duration

Checks the duration of the event. Use minimum, maximum or both. Alternatively, specify the exact value to match.

In each case, the value can either contain hours and minutes separated by a colon (e.g. "0:30" or "8:00") or a number of days followed by d (e.g. "14d").

Minimum

Specify either isAtLeast or isGreaterThan. While isAtLeast includes the given value, isGreaterThan does not.

For example, "isAtLeast": "0:15" would match a 15-minute event, but "isGreaterThan": "0:15" would not.

Maximum
Specify either isAtMost or isLesserThan. While isAtMost includes the given value, isLesserThan does not.
Exact match

Use is to specify the desired duration.

For example, "is": "1:00" will only match events with a duration of exactly one hour.

{
  "type": "duration",
  "isLessThan": "2:00"
}
{
  "type": "duration",
  "isAtLeast": "3d"
}
{
  "type": "duration",
  "isAtLeast": "0:15",
  "isLessThan": "1:00"
}

isrecurring

Checks whether the event is part of an event series.

{
  "type": "isrecurring"
}

Meetings

response

Checks the response of the calendar owner.

Value Meaning
ACCEPTED Responded with 'Yes'.
TENTATIVE Responded with 'Maybe'.
DECLINED Responded with 'No'.
Note: Event is only synchronized if you use include.
PENDING Did not respond yet.
Note: Event is only synchronized if you use include.
{
  "type": "response",
  "is": "TENTATIVE"
}
{
  "type": "response",
  "oneOf": [
    "ACCEPTED",
    "TENTATIVE"
  ]
}
  • Specify either a single response via is or a list via oneOf.
  • Specify "default": true to have this condition also match an event that is not a meeting. If not specified, the condition would not match such an event.

Remarks

In Google calendars, the meeting organizer can change their own response freely between ACCEPTED (the default), TENTATIVE and DECLINED. Declining their meeting does not cancel it.

In Microsoft calendars, there is no such possibility. Therefore, the response condition is only useful for meetings to which the calendar owner was invited by others. If the calendar owner is the meeting organizer, the response will always be ACCEPTED.

Compatibility note

When accessing Microsoft calendars on Exchange Server1 or using iCalendar addresses, response data is not available.

organizer

Checks who organized the meeting. Will not match any non-meeting events.

  • Specify either a single email address via is or a list via oneOf.
  • Instead of an email address, you can also specify an internet domain which is compared to the domain part of the organizer's email address.

Remark

Being the organizer does not imply being an attendee.

Compatibility note

When accessing Microsoft calendars on Exchange Server1 or using iCalendar addresses, organizer data is not available.

{
  "type": "organizer",
  "is": "zhang.san@example.com"
}
{
  "type": "organizer",
  "is": "example.com"
}
{
  "type": "organizer",
  "oneOf": [
    "zhang.san@example.com",
    "example.org"
  ]
}

Logical

not

Matches only if none of the given conditions match. Specify either a single condition or a list via anyOf.

{
  "type": "not",
  "condition": {
    "type": "isrecurring"
  }
}
{
  "type": "not",
  "anyOf": [
    {
      "type": "text",
      "search": "Standup",
      "field": "TITLE"
    },
    {
      "type": "eventtype",
      "is": "MEETING"
    }
  ]
}

and

Combines the given conditions into one.

{
  "type": "and",
  "conditions": [
    {
      "type": "property",
      "key": "clockodo:project.id",
      "is": "1234567"
    },
    {
      "type": "property",
      "key": "clockodo:text"
    }
  ]
}

or

Matches if at least one of the given conditions match.

{
  "type": "or",
  "conditions": [
    {
      "type": "text",
      "search": "Daily Standup",
      "field": "TITLE"
    },
    {
      "type": "property",
      "key": "google:color.name",
      "is": "graphite"
    }
  ]
}

  1. This feature is not supported for Exchange Server yet, but we plan to add it at some point. You can help speed this up by telling us that you are interested!