---
title: "Update Outbound Developer Settings"
method: PATCH
path: "/developer/outbound-developer-settings"
tags: ["Developer", "Developer - Settings"]
---

# Update Outbound Developer Settings

`PATCH /developer/outbound-developer-settings`

## 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/developer/outbound-developer-settings`
- Auth: none declared

Update the developer-only outbound settings for the current customer.

This endpoint is restricted to developer users only. Customers can read
some of these settings via their own outbound-settings endpoint (they
drive copy and which parts of the Outbound page apply) but not change them.

## Request body

- UpdateOutboundDeveloperSettingsRequest: Request to update customer's developer-only outbound settings
  - `extended_calling_window_enabled` boolean, nullable: Set to true to relax the outbound calling window bounds for this customer from 12:00-18:00 to 08:00-22:00 firm-local. Note 08:00-22:00 extends past the 21:00 TCPA/Florida quiet-hours limit.
  - `trigger_fields` TriggerFieldConfig[], nullable: Replaces the full list of fields an outbound call trigger supplies for this customer. Customers cannot edit their own trigger contract.
    - `key` string, required: Key under which the resolved value is stored in trigger_metadata
    - `label` string, required: Human label shown in the UI
    - `type` string, required: Control type: "select", "text" or "qa_list"
    - `options` TriggerFieldOption[]: Allowed values; required for type=select, ignored for type=text and type=qa_list
      - `value` string, required: Value stored in OutboundLead.trigger_metadata
      - `label` string, required: Human label; this is what gets injected into the prompt
  - `call_pacing_enabled` boolean, nullable: Set to false to drain the whole outbound queue per run and dial immediately on enqueue instead of one call per 10 minutes
  - `max_calls_per_number_per_day` integer, nullable: Per-phone-number daily outbound call limit. Send 0 for no limit (stored as null). Omit to leave unchanged.
  - `callback_dial_share_percent` integer, nullable: Percent of the day's total dial budget callback re-dials may spend; the rest is held for new leads. Send 100 for no reservation. Omit to leave unchanged.
  - `outbound_leads_enabled` boolean, nullable: Set to false when this customer's leads come from a trigger: hides their lead list, CSV import and manual call queueing, and rejects the lead-writing endpoints
  - `auto_queue_active` boolean, nullable: Arm or disarm auto-queueing of uploaded never-contacted leads
  - `auto_queue_window_start` string, time, nullable: Firm-local time auto-queueing starts; must be before the end
  - `auto_queue_window_end` string, time, nullable: Firm-local time auto-queueing stops (exclusive); must be after the start
  - `auto_queue_interval_minutes` integer, nullable: Minutes between auto-queued leads
  - `auto_queue_max_per_day` integer, nullable: Most leads auto-queued per firm-local day
  - `auto_queue_weekdays` integer[], nullable: Weekdays auto-queueing runs on, 0=Monday .. 6=Sunday
  - `text_fallback_active` boolean, nullable: Arm or disarm outbound texting for this customer
  - `contact_choice_enabled` boolean, nullable: Set to true to have new text conversations offer a call now or later (plus the questionnaire where offered), answered by the SMS agent
  - `after_hours_text_enabled` boolean, nullable: Set to true to text new leads that arrive outside call hours to book a call, sent in text hours outside call hours. Needs contact_choice_enabled
  - `requested_call_bypasses_window` boolean, nullable: Set to true to dial a call the recipient asked for right now even outside the call window
  - `requested_callbacks_enabled` boolean, nullable: Set to true to dial a call at a time the recipient chose even outside the call window
  - `text_fallback_after_attempts` integer, nullable: How many unanswered outbound calls come before the missed-call text
  - `text_fallback_delay_minutes` integer, nullable: Minutes between the unanswered call and the missed-call text
  - `text_fallback_expires_hours` integer, nullable: Hours a text conversation stays open without a reply
  - `text_from_number` string, nullable: Number outbound texts are sent from; any phone format, stored as E.164. Send an empty string to clear (fall back to the branding or platform number). Omit to leave unchanged
  - `sms_agent_uses_lead_timezone` boolean, nullable: Set to true to read a time given by text in the person's own time zone (from their state), asking when it is unknown
  - `same_number_per_lead` boolean, nullable: Set to true to call and text each lead from the same one of the customer's outbound numbers every time
  - `hours_follow_lead_timezone` boolean, nullable: Set to true to judge calling hours in each lead's own time zone (lead_call windows, with the call windows as the location-unknown fallback) and text a lead immediately whenever they can't be called
  - `text_handoff_email_recipients` string[], nullable: Replaces who is emailed when the SMS agent hands a text conversation to staff. Send [] for no one. Omit to leave unchanged

## Response `200`

Successful Response

- OutboundDeveloperSettingsResponse: Response with customer's developer-only outbound settings (stored on settings_outbound)
  - `customer_id` string, uuid, required: The customer ID
  - `extended_calling_window_enabled` boolean, required: Whether this customer may set an outbound calling window wider than 12:00-18:00 firm-local (relaxes the bounds to 08:00-22:00 firm-local)
  - `trigger_fields` TriggerFieldConfig[]: Fields an outbound call trigger supplies for this customer (from their CRM or a Meta lead-ad automation)
    - `key` string, required: Key under which the resolved value is stored in trigger_metadata
    - `label` string, required: Human label shown in the UI
    - `type` string, required: Control type: "select", "text" or "qa_list"
    - `options` TriggerFieldOption[]: Allowed values; required for type=select, ignored for type=text and type=qa_list
      - `value` string, required: Value stored in OutboundLead.trigger_metadata
      - `label` string, required: Human label; this is what gets injected into the prompt
  - `call_pacing_enabled` boolean, required: Whether outbound calls are paced at one per customer per 10 minutes. When false, the whole queue drains in one run and enqueueing dials immediately.
  - `max_calls_per_number_per_day` integer, nullable: Per-phone-number daily outbound call limit. Null means no limit.
  - `callback_dial_share_percent` integer, required: Share of the day's total dial budget (outbound numbers x max calls per number) that callback re-dials may spend. The rest is held for first attempts. 100 means no reservation, and it is inert when there is no per-number limit.
  - `outbound_leads_enabled` boolean, required: Whether this customer curates an outbound lead list. When false their leads come from a trigger, so the lead list, CSV import and manual call queueing are hidden and the lead-writing endpoints reject.
  - `auto_queue_active` boolean, required: Whether uploaded never-contacted leads are queued automatically, one per interval
  - `auto_queue_window_start` string, time, required: Firm-local time auto-queueing starts
  - `auto_queue_window_end` string, time, required: Firm-local time auto-queueing stops (exclusive); unqueued rows expire then
  - `auto_queue_interval_minutes` integer, required: Minutes between auto-queued leads
  - `auto_queue_max_per_day` integer, required: Most leads auto-queued per firm-local day
  - `auto_queue_weekdays` integer[], required: Weekdays auto-queueing runs on, 0=Monday .. 6=Sunday
  - `text_fallback_active` boolean, required: Arm switch for outbound texting: whether texts may actually be sent (also needs the outbound_text_fallback_enabled feature flag and text contact windows)
  - `contact_choice_enabled` boolean, required: Whether new text conversations let the recipient choose a call now or a call at a time they pick (plus the questionnaire for a firm that offers Lead Docket questionnaires), answered by the SMS agent, instead of reply-Y-for-a-link
  - `after_hours_text_enabled` boolean, required: Whether a new lead arriving outside call hours (or on a holiday) is texted to book a call, at the next moment inside text hours that is still outside call hours. Its queued call stays queued; the text can move or cancel it. Needs contact_choice_enabled
  - `requested_call_bypasses_window` boolean, required: Whether a call the recipient asked for right now (by text) is dialed outside the call window
  - `requested_callbacks_enabled` boolean, required: Whether a call at a time the recipient chose (on a call or by text) is dialed at that time even outside the call window
  - `text_fallback_after_attempts` integer, required: How many unanswered outbound calls come before the missed-call text
  - `text_fallback_delay_minutes` integer, required: Minutes between the unanswered call and the missed-call text
  - `text_fallback_expires_hours` integer, required: Hours a text conversation stays open without a reply before it expires
  - `text_from_number` string, nullable: E.164 number outbound texts are sent from. Null falls back to the branding info-request number, then the platform number
  - `sms_agent_uses_lead_timezone` boolean, required: Whether a time the person gives by text without naming a zone is read in their own time zone (the usual one for their state), asking them when it is unknown, instead of the firm's
  - `same_number_per_lead` boolean, required: Whether each lead is called and texted from one of the customer's outbound numbers, the same one every time, instead of the least-used number per call and text_from_number for texts
  - `hours_follow_lead_timezone` boolean, required: Whether calling hours are judged in each lead's own time zone (lead_call contact windows; the call windows become the location-unknown fallback), with a lead who can't be called right now texted immediately instead of on a texting schedule
  - `text_handoff_email_recipients` string[]: Emailed when the SMS agent hands a text conversation to staff

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-27** `4d3da2f87786`: 2 info
  - added the new optional request property `text_handoff_email_recipients`
  - added the optional property `text_handoff_email_recipients` to the response with the `200` status
- **2026-10-09** `d61063451a04`: 2 info
  - added the new optional request property `hours_follow_lead_timezone`
  - added the required property `hours_follow_lead_timezone` to the response with the `200` status
- **2026-10-08** `376869b909f7`: 2 info
  - added the new optional request property `sms_agent_uses_lead_timezone`
  - added the required property `sms_agent_uses_lead_timezone` to the response with the `200` status
- **2026-10-07** `0a28ff91ba36`: 2 info
  - added the new optional request property `same_number_per_lead`
  - added the required property `same_number_per_lead` to the response with the `200` status
- **2026-10-07** `d443593f5f45`: 18 info
  - added the new optional request property `after_hours_text_enabled`
  - added the new optional request property `contact_choice_enabled`
  - added the new optional request property `requested_call_bypasses_window`
  - added the new optional request property `requested_callbacks_enabled`
  - …14 more

[Operation history](https://skmtc.dev/openintake/apis/openintake-api/changes/developer/outbound-developer-settings/patch.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)
