> ## Documentation Index
> Fetch the complete documentation index at: https://docs.teamfollowup.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Use the public API base URL: https://api.teamfollowup.ai/api.
> Authenticate public API requests with Authorization: Bearer YOUR_API_KEY.
> Use product-owned terms: agents, campaigns, projects (GoHighLevel sub-accounts), contacts, calls, outcomes, skills, cadences, phone numbers.
> Scope requests by locationId rather than projectName.
> Read the guide linked from each API reference group before recommending an endpoint.

# AI After Hours

> Let the AI cover only the hours your human team does not. You give the team's schedule and the outer limits the AI may dial between, and it works the gap. Leads arriving during human hours are dropped, not queued.

AI After Hours has one rule: **the AI never calls while your human team is
working.** It only picks up the hours they do not cover.

Use it when a human team is doing the calling and you want the AI to fill the
gaps. If nobody is doing the calling by hand, you want a plain
[calling window](/campaigns/calling-window) instead.

## How the gap is worked out

You give it two things:

1. **Your human rep schedule**: the days and hours your people work, in their
   timezone.
2. **AI coverage limits**: the earliest and latest the AI may ever dial, so it
   never calls someone at 3am.

The AI then works only the **gap**: the time inside your AI limits that falls
outside your team's hours, on your business clock, or on each lead's own clock
when [contact timezone](/campaigns/timezones) is on.

<div style={{ margin: '1.75rem 0' }}>
  <div style={{ display: 'flex', borderRadius: '10px', overflow: 'hidden', fontSize: '13px', textAlign: 'center', border: '1px solid rgba(128,128,128,0.25)' }}>
    <div style={{ flex: '1.5', padding: '16px 8px', background: 'rgba(16,102,188,0.18)', color: '#3b93f2' }}>
      6:30am to 8am<br /><strong>AI calls</strong>
    </div>

    <div style={{ flex: '9', padding: '16px 8px', background: 'rgba(128,128,128,0.14)', color: '#9aa0a6' }}>
      8am to 5pm<br />Human reps work<br />(AI stays out)
    </div>

    <div style={{ flex: '5', padding: '16px 8px', background: 'rgba(16,102,188,0.18)', color: '#3b93f2' }}>
      5pm to 10pm<br /><strong>AI calls</strong>
    </div>
  </div>

  <p style={{ fontSize: '12px', color: '#9aa0a6', textAlign: 'center', marginTop: '10px' }}>
    Example: human team 8am to 5pm, AI limits 6:30am to 10pm. The AI works only the two blue gaps. Before 6:30am and after 10pm, no one calls.
  </p>
</div>

<Tip>
  No human team? Turn the human schedule off. The AI then covers your whole
  window on the days you pick. That is the simplest way to run a single strict
  window with no human handoff.
</Tip>

## The four answers it needs

Four values, and they only work if they agree with each other. Get all four
before setting anything, from whoever actually runs the phones. This decides when
a real voice calls real people, so a guess is not a small mistake.

| What | Example | Watch out for |
| - | - | - |
| **When your team works** | 08:00 to 17:00 | The hours they are genuinely on the phones, not the hours the office is unlocked. |
| **The timezone your team works in** | America/Chicago | Your people's timezone, not the campaign's and not the lead's. If your reps are in Chicago while the campaign runs on New York time, this is Chicago. |
| **The earliest and latest the AI may ever dial** | 06:30 to 22:00 | The outer bounds, before your team's hours are taken out. Treat them as a decency limit. |
| **Which days the AI covers** | Monday to Friday | Weekends are a separate decision. Leaving them out means the AI is silent all weekend, not that it inherits your standard window. |

If your team works different hours on different days, you can set a start and end
per day instead of one pattern across the week.

Before you save, say the result out loud in plain words: "so it calls 6:30am to
8am and 5pm to 10pm, Monday to Friday, and never at weekends." If that sentence
is not what you wanted, the numbers are wrong, not the sentence.

## The combination that fails quietly

This is the one mistake worth knowing about in advance, because nothing about it
looks like a mistake.

If your AI limits sit **entirely inside** your team's hours, subtracting one from
the other leaves nothing. And an empty window does not mean "never call". It
means "no hours restriction", so the campaign becomes free to dial at any hour of
the day or night. The exact opposite of what you asked for.

| Team works | AI limits | What the AI actually gets |
| - | - | - |
| 08:00 to 17:00 | 06:30 to 22:00 | 06:30 to 08:00, and 17:00 to 22:00 |
| 09:00 to 17:00 | 09:00 to 20:00 | 17:00 to 20:00 |
| 08:00 to 18:00 | 09:00 to 17:00 | Nothing, which is read as no restriction at all |

<Warning>
  Team Follow Up refuses this combination. The dialog will not let you save it and
  the chat will not write it. Turning off every day is refused for the same
  reason: no days also derives an empty window. If you want the AI to stop
  calling, switch the mode off rather than emptying it out.
</Warning>

For the AI to have anything to cover, its limits have to reach past your team's
hours at one end or both. That is the whole test.

## Leads that arrive during human hours are dropped

Not queued. Dropped.

A lead that comes in while your reps are working is **theirs**. If the AI merely
held it, it would call that same person that evening, after a rep had already
worked them. So After Hours drops those leads instead, which is what keeps the AI
to genuine after hours work.

<Warning>
  This means a lead arriving during your team's hours gets no AI call at all.
  That is the point of the mode, but it only works if your human team actually
  works those leads.
</Warning>

Turning the mode on turns dropping on with it, everywhere: in the dialog and from
the chat.

## Turning it off

Switching back to a standard window turns the mode off, and turns dropping off
with it.

What it does not do is pick your hours for you. The campaign falls back to
whatever standard window was saved before you switched, which is often nothing at
all, which means no restriction. Set the [standard
hours](/campaigns/calling-window) you want in the same sitting.

## In the API

* [Update campaign](/api-reference/campaigns/update-campaign) sets `config.afterHours` with the team schedule and the AI limits, and `calling.dropOutsideWindow`
* [Get campaign](/api-reference/campaigns/get-campaign) reads it back; `null` means a plain calling window
* [Calling window](/campaigns/calling-window) covers the fixed window
