---
title: "Update Outbound Contact Windows"
method: PUT
path: "/settings/outbound-windows"
tags: ["Settings"]
---

# Update Outbound Contact Windows

`PUT /settings/outbound-windows`

## Request

- Base URL: `https://api.openintake.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openintake.ai/settings/outbound-windows`
- Auth: none declared

Replace the weekday windows for each channel present in the payload.

A channel must carry all seven weekdays or none of them: that is what makes
"no ``call`` rows" mean "never migrated" rather than "partially saved", which
the legacy fallback depends on. Channels absent from the payload are left
untouched, so the UI can save one section without knowing the other.

Times are in the firm's timezone, never cross midnight, and for ``call`` must
sit inside the customer's allowed band (12:00-18:00, widening to 08:00-22:00
with the developer-only extended calling window). ``text`` has no bound.

``skip_federal_holidays`` is written only when present, so ``windows: []``
plus the flag saves just the flag.

## Request body

- UpdateOutboundContactWindowsRequest: Per-channel full replacement set of weekday contact windows
  - `windows` OutboundContactWindowEntry[], required: Every channel present must carry all 7 weekdays. Channels absent from the payload are left untouched, so one section can be saved without knowing the other
    - `channel` 'call' | 'text' | 'lead_call', required: Which channel these hours apply to. `lead_call` is the calling hours read in the LEAD's own time zone when hours_follow_lead_timezone is on; `call` is then the fallback for a lead whose location is unknown, still in firm time
    - `weekday` integer, required: Weekday, 0=Monday .. 6=Sunday
    - `enabled` boolean: Whether this channel may contact leads on this weekday
    - `start_time` string, time, required: Window start in the firm's timezone. Text windows may cross midnight into the following day. Call windows must end the same day.
    - `end_time` string, time, required: Window end, in the firm's timezone. Exclusive: nothing goes out at this exact time
  - `skip_federal_holidays` boolean, nullable: Set to turn calling on US federal holidays off (true) or back on (false). Omitted leaves it unchanged, so a windows-only save does not touch it

## Response `200`

Successful Response

- OutboundContactWindowsResponse: Per-channel, per-weekday outbound contact windows
  - `windows` OutboundContactWindowEntry[], required: Windows ordered by (channel, weekday). The `call` channel always has all 7 weekdays -- when no rows are stored these are synthesized from the customer's effective legacy window. `text` is absent entirely until configured
    - `channel` 'call' | 'text' | 'lead_call', required: Which channel these hours apply to. `lead_call` is the calling hours read in the LEAD's own time zone when hours_follow_lead_timezone is on; `call` is then the fallback for a lead whose location is unknown, still in firm time
    - `weekday` integer, required: Weekday, 0=Monday .. 6=Sunday
    - `enabled` boolean: Whether this channel may contact leads on this weekday
    - `start_time` string, time, required: Window start in the firm's timezone. Text windows may cross midnight into the following day. Call windows must end the same day.
    - `end_time` string, time, required: Window end, in the firm's timezone. Exclusive: nothing goes out at this exact time
  - `bounds` object, required: Allowed bounds per channel. `call` widens with the developer-only extended calling window flag; `text` is unbounded
  - `timezone` string, required: The firm's IANA timezone. Every time above is stated in it -- never in Eastern by convention and never in the browser's zone
  - `text_sending_enabled` boolean: Whether a text program is enabled: missed-call fallback or automatic LeadDocket questionnaire invitations. Sending still requires eligibility and configured text hours.
  - `skip_federal_holidays` boolean: When true, no outbound calls go out on a US federal public holiday (actual or observed date, in the firm's timezone). Texts are unaffected
  - `hours_follow_lead_timezone` boolean: When true, calling hours are judged in each lead's own time zone: the `lead_call` windows in the lead's zone, with the `call` windows (firm time) as the location-unknown fallback — and a lead who can't be called right now is texted immediately, so the text windows are not used

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-09** `d61063451a04`: 1 warning, 2 info
  - added the new `lead_call` enum value to the `windows/items/channel` response property for the response status `200`
  - added the new `lead_call` enum value to the request property `windows/items/channel`
  - added the optional property `hours_follow_lead_timezone` to the response with the `200` status
- **2026-10-06** `dbd6e3ee7afe`: 2 info
  - added the new optional request property `skip_federal_holidays`
  - added the optional property `skip_federal_holidays` to the response with the `200` status
- **2026-09-21** `7255c82c55a0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/openintake/apis/openintake-api/changes/settings/outbound-windows/put.md)

---

[API](https://skmtc.dev/openintake/apis/openintake-api.md) - [All operations](https://skmtc.dev/openintake/apis/openintake-api/llms.txt) - [OpenAPI document](https://skmtc.dev/openintake/apis/openintake-api/revisions/de90a8dcbc07?raw)
