One-off and repeating reminders, snoozing, history and the agenda.
Base URL https://app.heybmo.comFor agents: llms.txt · OpenAPI
Operations
WritePOST /api/ops/reminders.add
Set reminders
Set up to 50 reminders in one call. Each has a short text, when it fires (once at a day and time, or a repeating rule) in the person's time zone, how it reaches the person (their settings unless asked otherwise), and the record it is about (a note, list, list item, expense entry or debt): when the person mentions something already in HeyBMO, find it and link it, so the reminder shows it. It reaches the person in their HeyBMO inbox when due. The answer includes the current time, for times the person gives from now.
remindersrequiredlist of objectUp to 50 items.Each item:
textrequiredtextWhat to be reminded of, short ("Call mum"). Up to 300 characters.
whenrequiredobjectWhen it fires, in its time zone. Once: { repeat: "never", date, time }. Repeating: daily, weekly (weekdays 1 = Monday), monthly (day, or "last"), yearly; every N; until a day or a number of times.
timeZonetextA fixed time zone such as America/New_York, only when the person names one ("9am New York time"). Default: their own, following them when they move. Up to 64 characters.
delivery"default" or list of email | push | desktop or inbox | email | pushHow this one reaches the person besides the inbox: default follows their notification settings; or its own channels, several at once, which replace the settings for this reminder: email, push (a pop-up), desktop (the HeyBMO app on their computer); [] is the inbox only. To add to their usual channels ("my usual plus email"), read the reminders group in inbox.settings and list its channels too. Quiet hours still apply. Only set it when asked. Default "default".
linkobjectThe record this reminder is about, when the person mentions one that exists (it is shown with the reminder, never changed).
unlinkedtruetrue when the words name a record HeyBMO keeps but this reminder is not about it (otherwise HeyBMO links that record).
Change up to 50 reminders: text, time, time zone, delivery, link, or paused. A new when replaces the old time or rule; timeZone null follows the person again; link null removes it; paused true stops it firing until set back to false. Only what is given changes. To mark one done or snooze it, use reminders.done or reminders.snooze.
remindersrequiredlist of objectUp to 50 items.Each item:
reminderIdrequiredidA reminder id (from reminders.list or reminders.add).
revisionnumberThe revision you last read. If it changed since, the change is refused so nothing is overwritten.
texttextWhat to be reminded of, short ("Call mum"). Up to 300 characters.
whenobjectWhen it fires, in its time zone. Once: { repeat: "never", date, time }. Repeating: daily, weekly (weekdays 1 = Monday), monthly (day, or "last"), yearly; every N; until a day or a number of times.
timeZonetext or null
delivery"default" or list of email | push | desktop or inbox | email | pushHow this one reaches the person besides the inbox: default follows their notification settings; or its own channels, several at once, which replace the settings for this reminder: email, push (a pop-up), desktop (the HeyBMO app on their computer); [] is the inbox only. To add to their usual channels ("my usual plus email"), read the reminders group in inbox.settings and list its channels too. Quiet hours still apply. Only set it when asked.
Reminders, soonest first, with when each fires next, its rule and link, a page at a time with how many match in all. Status: upcoming (default: still to fire, not paused), repeating (not paused), paused, notDone (went off and not marked done) or all (finished one-offs too). Filter by words in the text, the kind of record (linked), the record it is about, or the days its next time falls on (nextFrom, nextTo). comingDays adds each one’s times in the next days (repeats included, snoozed ones at the time they come back), to snooze or mark done one of them ahead with its dueAt. For what went off and was missed, reminders.missed lists each time.
MCP tool reminders_listCLI heybmo reminders listLimit readSafe to retryInput
Every time reminders go off between two days, soonest first, each with its reminder, a page at a time, with how many there are in all. Repeating ones count each time, snoozed ones at the time they come back; past 62 days ahead only each reminder's next time shows. from defaults to today, no to means no end. byDay adds how many go off each day. Snooze or mark done one of them with its dueAt; reminders.list lists the reminders themselves.
MCP tool reminders_agendaCLI heybmo reminders agendaLimit readSafe to retryInput
fromdateFirst day (default: today, the person’s).
todateLast day, included (default: no end).
querytextWords in the text. Up to 200 characters.
linkedtextOnly reminders about a record of this feature (notes, lists, debts, expenses), or plain: about nothing.
aboutobjectOnly reminders about this record.
limitnumberDefault 50.
cursortextnextCursor from the previous page.
byDaytrue or falseAlso count the times on each day. Default false.
How many reminders there are of each sort, for the words or record kind asked. missed: times that went off in the last 365 days, not done. today: times going off today. upcoming: reminders with a time still to come. repeating, paused. done: times marked done. trash. kinds: live reminders by what they are about, for the words only. To list them, use reminders.agenda, reminders.list, reminders.missed or reminders.history.
MCP tool reminders_countsCLI heybmo reminders countsLimit readSafe to retryInput
querytextWords in the text. Up to 200 characters.
linkedtextOnly reminders about a record of this feature (notes, lists, debts, expenses), or plain: about nothing.
Each time a reminder went off and was not marked done, newest first: the last 30 days by default. Snoozed ones are left out until they go off again. Mark them done with reminders.done.
MCP tool reminders_missedCLI heybmo reminders missedLimit readSafe to retryInput
daysnumberHow far back, in days (1: since this time yesterday). Default 30.
dueFromdateOnly times due on or after this day, in the person’s time zone.
limitnumberDefault 100.
cursortextnextCursor from the previous page.
querytextWords in the text. Up to 200 characters.
linkedtextOnly reminders about a record of this feature (notes, lists, debts, expenses), or plain: about nothing.
Each time a reminder went off and was marked done, the most recently done first, a page at a time, with how many there are in all. Undo one with reminders.done (undo: true).
MCP tool reminders_historyCLI heybmo reminders historyLimit readSafe to retryInput
limitnumberDefault 50.
cursortextnextCursor from the previous page.
querytextWords in the text. Up to 200 characters.
linkedtextOnly reminders about a record of this feature (notes, lists, debts, expenses), or plain: about nothing.
Mark reminders done. With firingIds: those times they went off (from reminders.missed). With reminderIds: every time each went off and is not done; if none, its next time ahead, so it stays quiet then (a repeating one still fires after that). With upcoming: those exact times ahead (dueAt from reminders.list comingDays), so a repeating one skips just that time. undo: true (firingIds only) makes them not done again: a time that went off is missed again, a time marked done ahead goes off as planned. Stopping a reminder for good is reminders.delete.
MCP tool reminders_doneCLI heybmo reminders doneLimit writeSafe to retryInput
firingIdslist of idUp to 50 items.
reminderIdslist of idUp to 50 items.
upcominglist of objectTimes still ahead to mark done now, so they stay quiet. Up to 50 items.Each item:
reminderIdrequiredidA reminder id (from reminders.list or reminders.add).
atrequireddate and timeOne of its times still to come: a dueAt from reminders.list with comingDays.
undotrue or falseNot done again (with firingIds). Default false.
Make a reminder come back later: for 10m, 1h, evening (18:00), tomorrow (08:00 the next day), or until a given day and time, in the person’s time zone. Name the time it went off (firingId), or the reminder: its latest time not done, else its next time ahead. With reminderId and at (a dueAt from reminders.list comingDays), that time ahead is pushed back. Presets count from now, or from the time it would come when that is later (1h on a 15:00 reminder: 16:00). A repeating reminder keeps its rule: only that one time moves. A done one cannot be snoozed. To push back several at once, give targets (each a firingId, or a reminderId with an optional at) instead of firingId/reminderId; they all move the same way, together or not at all.
Mark done, snooze, pause, resume or restore every reminder or time in a section that matches the filter, up to 200 per call: while next is not null, call again with after: next for the rest. done and snooze act on times (missed, today, upcoming) or on repeating reminders' next time; pause on reminders with times or repeating ones; resume on paused ones; restore on the trash. For a few named ones, use reminders.done, reminders.snooze or reminders.update; to move all that match to the trash, reminders.delete with matching.
Move reminders to the trash: they stop firing, and can be restored with reminders.restore for 30 days, then they are deleted for good. Name them (reminderIds), or give matching for every reminder in a section that matches (a batch per call: while next is not null, call again with after: next). To stop one for a while, pause it with reminders.update instead.
Goes to the trash: it can be restored for 30 days.
MCP tool reminders_deleteCLI heybmo reminders deleteLimit deleteSafe to retryInput
reminderIdslist of idUp to 50 items.
matchingobjectInstead of reminderIds: every reminder in a section that matches, up to 200 per call.
aftertextWith matching: next from the previous call. Up to 100 characters.
Delete reminders that are in the trash for good, with their schedule and the record of when they went off: the ones named (reminderIds), or the whole trash (all: true). It cannot be undone, so ask the person first. Reminders not in the trash are refused: reminders.delete moves a reminder there.
Deletes for good. The first call changes nothing and answers CONFIRMATION_REQUIRED with what would be deleted; call again with confirm: true once the person agrees.
MCP tool reminders_deleteForeverCLI heybmo reminders deleteForeverLimit deleteSafe to retryInput
reminderIdslist of idReminders in the trash to delete for good (from reminders.trash). Up to 100 items.
alltrue or falsetrue: empty the trash instead, up to 200 per call (call again while left is above 0).
confirmtrue or falseSet to true once the person agreed. Without it nothing is deleted and you get a description of what would be.