Skip to main content

Produce Messages Using REST API


If you do not have a Kafka cluster and/or topic already, follow these steps to create one.

In the cluster details section of the Upstash Console, scroll down the REST API section and and copy UPSTASH_KAFKA_REST_URL, UPSTASH_KAFKA_REST_USERNAME and UPSTASH_KAFKA_REST_PASSWORD using the copy icons next to them.

We will use a Node.js sample code to show how to produce message(s) using the REST API. Our sample will use a topic named cities and send a few city names to this topic.

Replace following parameters in the code snippets below with your actual values.

const address = ""
const user = 'G9wcy1zdGluZ3JheS03ODYzJMUX'
const pass = 'eUmYCkAlxEhihIc7Hooi2IA2pz2fw=='
const auth = Buffer.from(`${user}:${pass}`).toString('base64')
const topic = 'cities'

Following code will produce three city names to a topic:

async function produce(topic, msg) {
const response = await fetch(`${address}/produce/${topic}/${msg}`, {
headers: {'Authorization': `Basic ${auth}`}
const metadata = await response.json();
`Topic: ${metadata.topic}, Partition: ${metadata.partition}, Offset: ${metadata.offset}`

produce(topic, 'Tokyo')
produce(topic, 'Istanbul')
produce(topic, 'London')

Alternatively we can post all cities using a single request, instead of producing them one-by-one. Note that in this case, URL does not have the message argument but instead all messages are posted in the request body.

async function produceMulti(topic, ...messages) {
let data = => {
return {value: msg};
const response = await fetch(`${address}/produce/${topic}`, {
headers: {'Authorization': `Basic ${auth}`},
method: 'POST',
body: JSON.stringify(data)
const metadata = await response.json();
metadata.forEach(m => {
console.log(`Topic: ${m.topic}, Partition: ${m.partition}, Offset: ${m.offset}`);

produceMulti(topic, 'Tokyo', 'Istanbul', 'London')

For more info about using the REST API see Kafka REST Produce API section.