Skip to content

JobClient

client.jobs is the JobClient. It covers the whole job lifecycle: creating runs, resolving presets, managing schedules, and inspecting progress.

Creating & running jobs

// Start a built-in preset
const job = await client.jobs.startWorkflow('gmail', { filter: 'newer_than:7d' })
// Lower-level create
await client.jobs.create({ /* job request */ })
await client.jobs.createSingle(/* one-step job */)
await client.jobs.createWorkflow(/* multi-step */)
// Lifecycle
await client.jobs.get(jobId)
await client.jobs.list({ scheduleName: 'daily-veille' })
await client.jobs.cancel(jobId)
await client.jobs.listPresets() // JobPresetMeta[]

Waiting for completion

const finished = await client.jobs.waitForCompletion(jobId)
// or poll with your own cadence:
await client.jobs.pollForCompletion(jobId, { intervalMs: 2000, timeoutMs: 60000 })

Progress inspection (pure helpers)

These take a Job and read its state — no network call:

client.jobs.getProgress(job) // number 0–100
client.jobs.getCurrentStep(job) // string | null
client.jobs.getItemProgress(job) // JobProgress | null
client.jobs.isPending(job)
client.jobs.isRunning(job)
client.jobs.isCompleted(job)
client.jobs.hasFailed(job)
client.jobs.getErrors(job) // string[]

Schedules & monitoring

await client.jobs.createSchedule({ slug, preset, cron })
await client.jobs.listSchedules()
await client.jobs.getSchedule(slug)
await client.jobs.runScheduleNow(slug) // { jobId }
await client.jobs.deleteSchedule(slug)
await client.jobs.getScheduleWatermarks(slug) // { lastReadAt }
await client.jobs.getQueueStats() // QueueStats[] (admin)

See Scheduling and Monitoring for semantics.