Publish to a URL with a 3 second delay and headers/body

import { Client } from "@upstash/qstash";

const client = new Client({ token: "<QSTASH_TOKEN>" });
const res = await client.publishJSON({
  url: "https://my-api...",
  body: { hello: "world" },
  headers: { "test-header": "test-value" },
  delay: 3,
});

Publish to a topic with a 3 second delay and headers/body

You can make a topic on the QStash console or using the topics API

import { Client } from "@upstash/qstash";

const client = new Client({ token: "<QSTASH_TOKEN>" });
const res = await client.publishJSON({
  topic: "mytopic",
  body: { hello: "world" },
  headers: { "test-header": "test-value" },
  delay: 3,
});

// When publishing to a topic, the response is an array of messages for each URL in the topic
console.log(res[0].messageId);

Publish a method with a callback URL

Callbacks are useful for long running functions. Here, QStash will return the response of the publish request to the callback URL.

We also change the method to GET in this use case so QStash will make a GET request to the url. The default is POST.

import { Client } from "@upstash/qstash";

const client = new Client({ token: "<QSTASH_TOKEN>" });
const res = await client.publishJSON({
  url: "https://my-api...",
  body: { hello: "world" },
  callback: "https://my-callback...",
  failureCallback: "https://my-failure-callback...",
  method: "GET",
});

Configure the number of retries

The max number of retries is based on your QStash plan

import { Client } from "@upstash/qstash";

const client = new Client({ token: "<QSTASH_TOKEN>" });
const res = await client.publishJSON({
  url: "https://my-api...",
  body: { hello: "world" },
  retries: 1,
});

Publish HTML content instead of JSON

import { Client } from "@upstash/qstash";

const client = new Client({ token: "<QSTASH_TOKEN>" });
const res = await client.publish({
  url: "https://my-api...",
  body: "<html><body><h1>Hello World</h1></body></html>",
  headers: {
    "Content-Type": "text/html",
  },
});

Publish a message with content-based-deduplication

import { Client } from "@upstash/qstash";

const client = new Client({ token: "<QSTASH_TOKEN>" });
const res = await client.publishJSON({
  url: "https://my-api...",
  body: { hello: "world" },
  contentBasedDeduplication: true,
});