An ad set in a Meta campaign you manage in PromoPilot (Ads > Campaigns) can run only at the hours you choose, for example when someone is free to answer the phone. Open the campaign, press Edit on the ad set, open Advanced and paint the hours on the Dayparting grid. The presets fill it with Always on, Weekdays 9-17, Evenings or Weekend all day. An empty grid, or one with every hour painted, means the ad set may deliver at any time.
It needs a lifetime budget
Meta only runs an ad set on a schedule with a lifetime budget, which also needs an end time. PromoPilot asks for one before it saves a schedule. Hours are whole hours, in the time zone of the person seeing the ad.
Ad sets already on Meta
Saving a new schedule updates Meta straight away, and clearing it turns scheduling off there. Other edits, such as a rename, leave the schedule on Meta as it is.
From the API and the MCP server
PATCH /api/v1/ads/adsets/<id>/ and the update_adset and create_adset tools take schedule, a list such as [{"days": ["mon", "tue", "wed", "thu", "fri"], "start": "09:00", "end": "17:00"}]. Days are names (mon to sun, weekdays, weekend, everyday), start and end are whole hours with the end hour not included, and an empty list clears it. get_campaign shows each ad set's schedule with a one-line summary.