//this Job sends an event that triggers the second job
client.defineJob({
  id: "job-1",
  name: "First job",
  version: "0.0.1",
  trigger: cronTrigger({
    cron: "0 9 * * *", // 9am every day (UTC)
  }),
  run: async (payload, io, ctx) => {
    //sends the "new.user" event with a userId in the payload
    await io.sendEvent("send-event", {
      name: "new.user",
      payload: {
        userId: "u_1234567890",
      },
    });
  },
});

client.defineJob({
  id: "job-2",
  name: "Second job",
  version: "0.0.1",
  //subscribes to the "new.user" event
  trigger: eventTrigger({
    name: "new.user",
    schema: z.object({
      userId: z.string(),
    }),
  }),
  run: async (payload, io, ctx) => {
    await io.logger.log("New user created", { userId: payload.userId });
    //do stuff with the new user
  },
});

If you want to send an event from outside a run (e.g. just from your backend) you should use client.sendEvent() instead.

Use eventTrigger() on a Job to listen for events.

For multiple events, use io.sendEvents() instead.

Parameters

cacheKey
string
required

Should be a stable and unique cache key inside the run(). See resumability for more information.

event
object
required
name
string
required

The name property must exactly match any subscriptions you want to trigger.

payload
any

The payload property will be sent to any matching Jobs and will appear as the payload param of the run() function. You can leave this parameter out if you just want to trigger a Job without any input data.

context
any

The optional context property will be sent to any matching Jobs and will be passed through as the context.event.context param of the run() function. This is optional but can be useful if you want to pass through some additional context to the Job.

id
string

The id property uniquely identify this particular event. If unset it will be set automatically using ulid.

timestamp
Date

This is optional, it defaults to the current timestamp. Usually you would only set this if you have a timestamp that you wish to pass through, e.g. you receive a timestamp from a service and you want the same timestamp to be used in your Job.

source
string

This is optional, it defaults to "trigger.dev". It can be useful to set this as you can filter events using this in the eventTrigger().

options
object
deliverAt
Date

An optional Date when you want the event to Trigger Jobs. The event will be sent to the platform immediately but won't be acted upon until the specified time.

deliverAfter
number

An optional number of seconds you want to wait for the event to Trigger any relevant Jobs. The event will be sent to the platform immediately but won't be acted upon until the specified time.

accountId
string

This optional param will be used by the Trigger.dev Connect feature, which is coming soon.

Returns

id
string
required

The id of the event that was sent.

name
string
required

The name of the event that was sent.

payload
any
required

The payload of the event that was sent

timestamp
Date
required

The timestamp of the event that was sent

context
any

The context of the event that was sent. Is undefined if no context was set when sending the event.

deliverAt
Date

The timestamp when the event will be delivered to any matching Jobs. Is undefined if deliverAt or deliverAfter wasn't set when sending the event.

deliveredAt
Date

The timestamp when the event was delivered. Is undefined if deliverAt or deliverAfter were set when sending the event.

Was this page helpful?