client.defineJob({
  id: "background-poll-job",
  name: "Background Poll Job",
  version: "0.0.1",
  trigger: invokeTrigger({
    schema: z.object({ url: z.string().url() }),
  }),
  run: async (payload, io, ctx) => {
    const result = await io.backgroundPoll<{ foo: string }>("poll", {
      url: payload.url,
      interval: 10, // every 10 seconds
      timeout: 300, // stop polling after 5 minutes
      responseFilter: {
        // stop polling once this filter matches
        status: [200],
        body: {
          status: ["SUCCESS"],
        },
      },
    });
  },
});

These are the docs for Trigger.dev v2 which will be deprecated on January 31st, 2025. You probably want the v3 docs.

Parameters

cacheKey
string
required

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

url
string
required

The url to fetch.

interval
number
required

The interval in seconds to wait between requests. Minimum interval is 10 seconds and maximum is 5 minutes.

timeout
number
required

The timeout in seconds before aborting the polling. Minimum timeout is 30 seconds and maximum is 1 hour.

requestInit
RequestInit

Options for the fetch request

responseFilter
ResponseFilter

Allows you to filter the response to determine when to stop polling.

requestTimeout
object

An optional object to specify a timeout for each individual request.

Returns

A Promise that resolves with the JSON response body of the matching background fetch request. You can specify the type of the response body as a generic parameter.

client.defineJob({
  id: "background-poll-job",
  name: "Background Poll Job",
  version: "0.0.1",
  trigger: invokeTrigger({
    schema: z.object({ url: z.string().url() }),
  }),
  run: async (payload, io, ctx) => {
    const result = await io.backgroundPoll<{ foo: string }>("poll", {
      url: payload.url,
      interval: 10, // every 10 seconds
      timeout: 300, // stop polling after 5 minutes
      responseFilter: {
        // stop polling once this filter matches
        status: [200],
        body: {
          status: ["SUCCESS"],
        },
      },
    });
  },
});