K
Docs
API Reference→Pieces→Do It Later
⏳

Do It Later

clock.laterThe ClocktowerTime

Splits the flow in two. Now carries on straight away, like normal. Later runs when the time comes — in ten minutes, in three days, or on a set date — even if the bot restarted in between, and even on Interaction Only bots, which don't stay online while they wait. The Later path still knows everything this flow knew (who ran it, which channel, every ✨ Spark), so /remindme, temporary roles and giveaway endings are a single piece.

When to use this
  • →Waits from 5 seconds up to a year — for a short dramatic pause, use ⏸️ Wait instead
  • →Scheduling the same tag again replaces the old one — great for “move my reminder”
  • →<t:{{later.at}}:R> shows a live Discord countdown to when it runs
  • →On the Later path the command is long over: Reply posts in the channel, and private replies can't be sent — use Send DM

On the canvas

This is what Do It Later looks like when you place it on your flow. Each field below is something you configure in the inspector panel.

⏳
Do It Later
clock.later
Time
mode
select…
wait
e.g. 10m, 2h, 1 day, {{input.options.in}}
unit
select…
at
e.g. {{shifted.unix}} or 2026-12-24T18:00:00Z
tag
e.g. remind:{{input.user.id}}
asrequired
later
now
later
invalid

Config fields

FieldTypeReqWhat it does
modeselect—When ⏰
wait
e.g. 10m, 2h, 1 day, {{input.options.in}}
text—Wait for ⏱️
unitselect—A plain number means… ⏱️
at
e.g. {{shifted.unix}} or 2026-12-24T18:00:00Z
text—At 📅
tag
e.g. remind:{{input.user.id}}
text—Tag 🏷️
as
later
textyesSave it as ✨

Sparks this piece adds

After this piece runs, these values are available as sparks in every node downstream.

{{later.at}}numberWhen the Later path runs, as a Unix time — try <t:…:R>
{{later.tag}}stringThe tag it was scheduled with
{{later.late}}booleanTrue if the bot was offline when it was due and caught up afterwards
{{later.lateBy}}stringHow late it ran, like 2h 5m (empty when on time)

Output ports

nowCarries on straight away — say “got it, I'll remind you”
laterRuns when the time comes — Reply posts in the same channel
invalidThe time didn't make sense (too soon, past, over a year) or too many are waiting
📐

In TypeScript, this would be…

Not something you need to write — just a look at what Kitcord does for you.

TypeScript
// Saved in the bot's own database, so it survives restarts
await db.run(
  "INSERT INTO later (tag, due_at, sparks) VALUES (?, ?, ?)",
  [`remind:${userId}`, Date.now() + 30 * 60_000, JSON.stringify(sparks)],
);
await interaction.reply(`I'll remind you <t:${dueAtUnix}:R>`); // Now ▶
// …30 minutes later, even after a restart:
await channel.send(`⏰ <@${userId}>, stretch!`); // Later ⏰