Zum Inhalt
HALOWERK

Bürowerk

availability resolve

Give it a search window, a meeting length, and for each participant a list of busy blocks — start and end, nothing else — and it returns the windows in which the meeting fits. Each participant carries their own IANA timezone and working hours, so nine-to-five means nine-to-five where they are, across daylight saving changes, and a meeting is only offered when it lies entirely inside one working-hours block for everyone counted as present. Windows are returned with the participants who can.

POST https://buero.halowerk.com/v1/availability-resolve

Eingaben

Felder des veröffentlichten Eingabeschemas
FeldTypPflichtBeschreibung
participantsarrayJaOne entry per person. Identifiers are free text and need not be real names.
windowobjectJaThe search window. Every load figure is measured over exactly this span for everyone.
duration_minutesintegerJaHow long the meeting needs to be.
granularity_minutesintegerNeinStep of the candidate grid. Start times fall on this grid.
default_timezonestringNeinTimezone for participants that do not name one.
working_hoursobjectNeinDefault working hours for participants that do not name their own. Omit both this and per-participant hours to search around the clock.
ignore_working_hoursbooleanNeinSearch the whole window regardless of working hours.
min_attendeesintegerNeinAlso return windows where only this many can attend. Default: everyone who is not optional.
max_resultsintegerNeinHow many windows to return. What is dropped is counted.
output_timezonestringNeinAdditionally render every returned time in this zone. Defaults to default_timezone.
Vollständiges Eingabeschema anzeigen
{
  "type": "object",
  "required": [
    "participants",
    "window",
    "duration_minutes"
  ],
  "additionalProperties": false,
  "properties": {
    "participants": {
      "type": "array",
      "minItems": 1,
      "maxItems": 20,
      "description": "One entry per person. Identifiers are free text and need not be real names.",
      "items": {
        "type": "object",
        "required": [
          "id"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Any label, unique within the request. \"a\" is fine."
          },
          "busy": {
            "type": "array",
            "maxItems": 300,
            "description": "Busy blocks. Overlapping blocks are merged.",
            "items": {
              "type": "object",
              "required": [
                "start",
                "end"
              ],
              "additionalProperties": false,
              "properties": {
                "start": {
                  "type": "string",
                  "maxLength": 40,
                  "description": "ISO 8601 with offset or Z."
                },
                "end": {
                  "type": "string",
                  "maxLength": 40,
                  "description": "ISO 8601 with offset or Z."
                }
              }
            }
          },
          "timezone": {
            "type": "string",
            "maxLength": 60,
            "description": "IANA zone for this person, e.g. Europe/Berlin. Falls back to the request default."
          },
          "working_hours": {
            "type": "object",
            "additionalProperties": false,
            "description": "Working hours in this person local time. Omit to use the request default.",
            "properties": {
              "start": {
                "type": "string",
                "maxLength": 5,
                "description": "HH:MM, e.g. 09:00."
              },
              "end": {
                "type": "string",
                "maxLength": 5,
                "description": "HH:MM. An end before the start means the block runs past midnight."
              },
              "days": {
                "type": "array",
                "maxItems": 7,
                "items": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 6
                },
                "description": "0 is Sunday, 6 is Saturday. Default Monday to Friday."
              }
            }
          },
          "optional": {
            "type": "boolean",
            "default": false,
            "description": "Optional participants may be missing from a returned window."
          }
        }
      }
    },
    "window": {
      "type": "object",
      "required": [
        "start",
        "end"
      ],
      "additionalProperties": false,
      "description": "The search window. Every load figure is measured over exactly this span for everyone.",
      "properties": {
        "start": {
          "type": "string",
          "maxLength": 40,
          "description": "ISO 8601."
        },
        "end": {
          "type": "string",
          "maxLength": 40,
          "description": "ISO 8601."
        }
      }
    },
    "duration_minutes": {
      "type": "integer",
      "minimum": 5,
      "maximum": 1440,
      "description": "How long the meeting needs to be."
    },
    "granularity_minutes": {
      "type": "integer",
      "enum": [
        5,
        10,
        15,
        20,
        30,
        60
      ],
      "default": 15,
      "description": "Step of the candidate grid. Start times fall on this grid."
    },
    "default_timezone": {
      "type": "string",
      "maxLength": 60,
      "default": "UTC",
      "description": "Timezone for participants that do not name one."
    },
    "working_hours": {
      "type": "object",
      "additionalProperties": false,
      "description": "Default working hours for participants that do not name their own. Omit both this and per-participant hours to search around the clock.",
      "properties": {
        "start": {
          "type": "string",
          "maxLength": 5
        },
        "end": {
          "type": "string",
          "maxLength": 5
        },
        "days": {
          "type": "array",
          "maxItems": 7,
          "items": {
            "type": "integer",
            "minimum": 0,
            "maximum": 6
          }
        }
      }
    },
    "ignore_working_hours": {
      "type": "boolean",
      "default": false,
      "description": "Search the whole window regardless of working hours."
    },
    "min_attendees": {
      "type": "integer",
      "minimum": 1,
      "description": "Also return windows where only this many can attend. Default: everyone who is not optional."
    },
    "max_results": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "How many windows to return. What is dropped is counted."
    },
    "output_timezone": {
      "type": "string",
      "maxLength": 60,
      "description": "Additionally render every returned time in this zone. Defaults to default_timezone."
    }
  }
}

Originalschema öffnen

Veröffentlichtes Eingabebeispiel

{
  "participants": [
    {
      "id": "a",
      "timezone": "Europe/Berlin",
      "busy": [
        {
          "start": "2026-08-17T08:00:00Z",
          "end": "2026-08-17T10:00:00Z"
        }
      ]
    },
    {
      "id": "b",
      "timezone": "America/New_York",
      "busy": []
    }
  ],
  "window": {
    "start": "2026-08-17T00:00:00Z",
    "end": "2026-08-19T00:00:00Z"
  },
  "duration_minutes": 60,
  "working_hours": {
    "start": "09:00",
    "end": "17:00"
  },
  "output_timezone": "Europe/Berlin"
}

Ergebnis & Dokumentation

Maschinenlesbare Dokumentation dieses Hubs

Quelle dieser Seite: der veröffentlichte HALOWERK-Katalog. Stand: 2026-11-01, 15:19 UTC.

Weitere Endpunkte dieses Hubs

Alle Endpunkte dieses Hubs →