Sending hours

Nothing leaves at 3am

Paint the hours mail may go out in, in the timezone that matters. Anything your code sends outside them waits and leaves the minute the window opens. Add a limit and it trickles out instead of landing at once.

time lockBusiness hours

Drag to paint a block. Pick a day, an hour or “All” to fill a whole row, column or week. Exact minutes go in below.

8h8h8h8h8h
Reads asMon–Fri 09:00–17:00
Allowed per week40 hours
OpensTomorrow 09:00

nora@northwind.iosales@lindmetall.de

Following up on RFQ 4471

heldGoes out Tomorrow 09:00 · in 1d 6h

The console's editor, live. Drag to paint hours, change the zone, and the send under it is replanned by the same code that decides in production.

Whose morning

A schedule keeps its own timezone

Nine in the morning is four different instants for an agent writing to four countries, so the zone belongs to the rule rather than to the workspace. Write one per region and point it at the people it is about — the same address patterns every pacing rule takes.

time lockEU hours
to *@*.deto *@*.atto *@*.nl
Mon–Fri 09:00–17:00 · Berlin
time lockUK hours
to *@*.co.uk
Mon–Fri 09:00–17:30 · London
time lockAPAC hours
to *@*.com.au
Mon–Fri 08:30–17:00 · Sydney

Rules stack rather than compete: mail addressed into two of these leaves in the overlap, when both are open. Clock changes are the zone’s own — a window moves with the country it belongs to, on the night that country moves.

In the console

Everything waiting for a window

Pacing

QueueRulesTimes in Europe/Berlin

Right now

1,284 waiting. The next goes out Tomorrow 09:00, in 15h 12m, when Business hours lets it.

Waiting1,284
Arrived, last 24h1,510
Going out, next 24h940
Queue clearsThu 09:40

Held back by

Business hours812Warm-up340on its way132

Waiting

nora@northwind.io → sales@lindmetall.de

RFQ 4471 — 3mm brushed sheets

4mTomorrow 09:00 · 15h 12mBusiness hours

nora@northwind.io → m.faber@stahlhandel.at

Quote wk 38 — cutting

19mTomorrow 09:00 · 15h 12mBusiness hours

jonas@northwind.io → procurement@havik-bv.nl

Re: lead times on brushed stock

31mTomorrow 09:02 · 15h 14mWarm-up

jonas@northwind.io → s.kallio@pohjola-steel.fi

Quote 4468 — revised

58mTomorrow 09:04 · 15h 16mWarm-up
1,280 more behind these, in the order they go.

Held, not refused

The send is accepted the moment you call it. It sits in the queue with the hour it leaves on it, and your code has nothing to retry.

It drains itself

Nothing has to run at nine. The window opening is what releases the mail behind it, in the order it arrived.

Out of hours anyway

Something that cannot wait for Monday goes out on one click, or one call, whether or not the window was open.

In your code

One rule, and nothing to schedule

No cron, no queue of your own, no send that has to be tried again at nine. Your code calls send when it has something to say, and the rule decides the minute it says it.

1pacingRules.createwritten once, in code or in the console
await aiinbx.pacingRules.create({  name: "Business hours",  kind: "hours",  match: [{ field: "to", pattern: "*@*.de" }],  schedule: {    timezone: "Europe/Berlin",    windows: [{ days: [0, 1, 2, 3, 4], start_minute: 540, end_minute: 1020 }],  },})
2emails.sendaccepted either way, and honest about which
const email = await aiinbx.emails.send(payload) if (email.pacing?.held_by.kind === "hours") {  console.log("goes out", email.pacing.estimated_send_at)}
3the one that must not waitpassword resets, login codes, security alerts
await aiinbx.emails.send({  ...reset,  pacing: { skip: true, count: false },})

Around it

What else decides when mail leaves

Rate limits

The other kind of rule in the same list: how many may go, per sender, domain or person. Hours say when, limits say how fast, and a send answers to both.

Scheduled sends

scheduled_at is the earliest a message may go, not a promise of the instant — one scheduled for 03:00 still waits for the window to open.

One space per customer

A schedule in a customer's space reads their mail alone. They can keep their own quiet hours inside yours, never outside them.

Replies are mail too

An agent that answers at 02:40 is the same tell as one that opens at 02:40. Hours apply to everything leaving, whatever prompted it.

Give your product an inbox. The hard parts are already handled.

Get started