Create a workflow run at a durable UTC timestamp:

{:ok, schedule_id} =
  Continuum.schedule_at(MyApp.InvoiceReminder, %{invoice_id: invoice.id}, run_at,
    namespace: "billing",
    attributes: %{invoice_id: invoice.id}
  )

The schedule stores its workflow version, input, namespace, attributes, and a preallocated run ID. The schedule runner claims due rows in bounded pages. Retries after a node or process crash converge on that same run ID, so one scheduled occurrence cannot create multiple workflow runs.

Inspect or cancel a schedule before dispatch starts:

{:ok, schedule} = Continuum.Schedules.get(schedule_id)
:ok = Continuum.Schedules.cancel(schedule_id)

schedule_at/4 is the one-shot foundation. Recurring definitions, overlap and missed-fire policies, and timezone-aware calendar schedules are intentionally a later API slice so those contracts can be introduced without changing one-shot semantics.