McAPI - Barcode API JavaScript / Node JS

JavaScript / Node sample code to create barcodes with the McAPI Barcode REST API service.

Requirements: A free RapidAPI account. Replace YOUR_API_KEY in the snippets below with your RapidAPI key.

All samples below work with the free tier of the API, see RapidAPI McAPI Barcode Listing for available plans.

See the overview page for a reference that lists all available parameters and error codes.

Create a Barcode using Node JS with request module

Although deprecated, the request module is still in wide use. Shown is the creation of a Code 128 (code type: 7) with JavaScript encoding the text "123456". The module width is set to 0.5mm, the height is set to 20mm, the size of the human readable text under the barcode is set to 10 points. The code is returned as a base64 encoded PDF.

The source code:

// JavaScript
  
const request = require('request');

const options = {
  method: 'POST',
  url: 'https://mcapi-barcode.p.rapidapi.com/',
  headers: {
    'content-type': 'application/json',
    'x-rapidapi-key': 'YOUR_API_KEY',
    'x-rapidapi-host': 'mcapi-barcode.p.rapidapi.com',
  },
  body: {
    data: '123456',
    type: 7,
    moduleWidth: 0.5,
    moduleHeight: 20,
    hrSize: 10,
    format: 'pdf'
  },
  json: true
};

request(options, function (error, response, body) {
	if (error) throw new Error(error);

	console.log(body);
});

The data will be delivered as a JSON object in body, e.g.:

{
  service: "McAPI Barcode Generator, https://mcapi.io",
  version: "V1",
  format: "pdf",
  code: "data:application/pdf;base64,JVBE ... Cg=="
}

McAPI Barcode API - Sample barcode with JavaScript

The returned code from the Node JS request:

Image of McAPI Barcode API Sample Barcode Node JS

Create Barcode using Node JS with axios module

A modern, promise based replacement for request is the axios module which is almost 100% source code compatible.

Here's the same API call as above with axios:

// JavaScript
  
var axios = require("axios").default;

var options = {
  method: 'POST',
  url: 'https://mcapi-barcode.p.rapidapi.com/',
  headers: {
    'content-type': 'application/json',
    'x-rapidapi-key': 'YOUR_API_KEY',
    'x-rapidapi-host': 'mcapi-barcode.p.rapidapi.com',
  },
  data: {
    data: '123456',
    type: 7,
    moduleWidth: 0.5,
    moduleHeight: 20,
    hrSize: 10,
    format: 'pdf'
  }
};

axios.request(options).then(function (response) {
	console.log(response.data);
}).catch(function (error) {
	console.error(error);
});

Creating retail barcodes EAN, ISBN, UPC with JavaScript / Node JS

The introductory sample above created a Code 128 barcode. Code 128 has many applications, mostly in warehousing and logistics. In the following JS sample we show how to create EAN and UPC barcodes which are used in retail.

Let's create an EAN 13 code. First step is to set the code type. The reference section lists all available code types; for EAN 13, we have to set the type-parameter to "1". With Code 128, we set the size of the code by specifing values for moduleWidth and moduleHeight. Retail codes are standardized, with the standard specifying the permitted sizes (so called SC sizes). With the Barcode API, the size of retail barcodes is determined through the size-parameter, with "2" being the 100% size. Here's the data block for creating an EAN 13 encoding "401234567890", again returning a PDF:

// JavaScript
  
data: {
  data: '401234567890',
  type: 1,
  size: 2,
  format: 'pdf'
}

Here's the resulting EAN 13:

Image of McAPI Barcode API EAN 13 Barcode Node JS

As an aside, the reference section also specifies the expected data for each barcode symbology. EAN 13 encodes twelve digits plus check digit (hence the name). As such you'll have to specify twelve or thirteen digits, less than twelve or more than thirteen will result in an error, likewise if the submitted data contains letters. As a convenience, the API will always recalculate the check digit for retail codes to make sure that a valid symbol is created; in this example the EAN 13 check digit is "1" which will be appended automatically to the provided data.

Incidentally, the ">" to the right of the code is called the light margin indicator. This tells the graphics designer not to put other graphical elements too close to the code. The indicator can be switched off by setting the lmi-parameter to "false".

EAN 13 with reduced height (JavaScript)

As you can see, EAN codes can get quite large, with small boxes or packages the code might not fit into the available space. Per the standard, it's permitted to reduce the height of the code to some degree. The Barcode API supports a special truncate-parameter for retail codes. The parameter is percentage based, e.g. "50" will create a code with half height.

Sample data block:

// JavaScript

data: {
  data: '401234567890',
  type: 1,
  size: 2,
  truncate: 50,
  format: 'pdf'
}

Here's the resulting EAN 13 with half height:

Image of McAPI Barcode API EAN 13 Truncated Barcode Node JS

EAN 13 with additional text (JavaScript)

A very useful feature of the Barcode API is the support for additional text that can be put above and below the barcode. This can be used for article numbers, lot size, pricing, weight, best before dates etc.

The parameters over, under and suppSize control any additional text. The following data block will put the text "Paperclips" above the code, the text "$2.99" below the code and set the font size for the additional text to 8pt.:

// JavaScript

data: {
  data: '401234567890',
  type: 1,
  size: 2,
  truncate: 50,
  over: 'Paperclips',
  under: '$2.99',
  suppSize: 8,
  format: 'pdf'
}

The resulting EAN 13 with additional text:

Image of McAPI Barcode API EAN 13 Price Best before Barcode Node JS

Note: Additional text must be from the ASCII character set, Unicode is not supported.

Creating an EAN barcode without text (JavaScript)

Sometimes you will only want the actual barcode without any text at all; that's possible too: Simply specify the hrText-parameter as "false", like so:

// JavaScript
  
data: {
  data: '401234567890',
  type: 1,
  size: 2,
  truncate: 50,
  hrText: 'false',
  format: 'pdf'
}

The resulting EAN 13 without any text:

Image of McAPI Barcode API EAN 13 No text Barcode Node JS

Creating 2D matrix barcodes with JavaScript / Node JS

The Barcode API supports the most common 2D barcode symbologies: Datamatrix, Datamatrix GS1, PDF417, QR and Aztec. Creating those codes is no different from ordinary, linear barcodes; the only aspect to consider is using the moduleWidth-parameter to control the size of the code. With the exception of PDF417, dots are square, i.e. moduleWidth equals moduleHeight. With PDF417, the dots are created with a 3:1 ratio, i.e. moduleHeight equals 3 * moduleWidth.

The following data block will create a Datamatrix code (type = "16") with a dot size of 1x1mm²:

// JavaScript
  
data: {
  data: '1234567890',
  type: 16,
  moduleWidth: 1,
  format: 'pdf'
}

The resulting Datamatrix code:

Image of McAPI Barcode API Datamatrix 2D Barcode Node JS

2D barcodes are always created without text as the encoded data is typically too much to be displayed. Use the over and under parameters to put small amounts of text (max. 30 chars) next to the code.

Create QR codes with JavaScript / Node JS

The Barcode API supports the creation of QR codes that can contain plain text, URLs, email addresses, phone numbers and SMS numbers. Our QR implementation is fully Unicode-compatible.

Specify content as follows:

  • Plain text (max. 2,000 chars): "123456abcdefÄÖÜ日本語"
  • URL: Specify data param like so: "https://example.com"
  • Email: Specify data param like so: "mailto:info@example.com"
  • Phone no: Specify data param like so: "tel:+18005551234"
  • SMS: Specify data param like so: "smsto:44044"

Sample data block to create a QR code with the URL "https://mcapi.io":

// JavaScript
  
data: {
  data: 'https://mcapi.io',
  type: 19,
  moduleWidth: 1,
  format: 'pdf'
}

The resulting QR code:

Image of McAPI Barcode API QR URL Barcode Node JS

The header-parameter - writing barcodes to a file (JavaScript)

With all supported formats, the barcode is returned as a base64 encoded string. Per default, this string is preceded by a header that describes the media type (or MIME) of the string.

Sample data block for a QR code, to be returned as a PNG:

// JavaScript
  
data: {
  data: 'https://mcapi.io',
  type: 19,
  moduleWidth: 1,
  format: 'png'
}

The result will look like this:

{
  service: "McAPI Barcode Generator, https://mcapi.io",
  version: "V1",
  format: "png",
  code: "data:image/png;base64,iVBOR ... QmCC"
}

You can now directly set the "code"-string as the src property of an img tag, like so:

// JavaScript

...

if(response.statusCode == 200){
  let barcode = body.code;
  console.log('<img src="' + barcode + '"/>');
}
else{
  // error handling
}

...

The MIME header will make sure that the image data is interpreted correctly by the browser. However, when writing the image data to a file, including the header would result in an ivalid PNG or JPEG. To create a code without the header, set the header-parameter to "false", like so:

// JavaScript
  
data: {
  data: 'https://mcapi.io',
  type: 19,
  moduleWidth: 1,
  header: 'false',
  format: 'png'
}

The returned code without header:

{
  service: "McAPI Barcode Generator, https://mcapi.io",
  version: "V1",
  format: "png",
  code: "iVBOR ... QmCC"
}

Now, all we have to do is decode the base64 string using a buffer and then write the barcode image to a file:

// JavaScript

...

fs = require('fs');

if(response.statusCode == 200){
  let barcode = body.code;
  var buffer = Buffer.from(barcode, 'base64');
  
  fs.writeFile('barcode.png', buffer, err => {
    if (err) {
      // error handling
    }
  })
}
else{
  // error handling
}

...

Back to McAPI Barcode API main page.