DriversRecommendedOutdated drivers can make a good PC feel brokenScan driver issues before chasing fixes manually.Scan NowOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix Now×
Skip to content
World desk4 min

Stop Parsing PNG as JSON: Fix a QR Code API Integration in Node.js

Stop calling response.json() on a QR API’s PNG response. Read image bytes with arrayBuffer(), convert them to a Buffer, and handle errors by the provider’s documented format.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A JSON POST can return a PNG. The request’s Content-Type: application/json describes what you send; it does not determine the format of the response. If the QR API returns image bytes, response.json() will fail because those bytes are not JSON. Read PNG as bytes, then convert them to a Node.js Buffer.

Why does response.json() fail when the QR API returns a PNG?

Request and response formats are independent. An API can accept a JSON body describing the QR code and return a binary PNG image on success. Its error responses may use JSON instead. For example, the LinkScan API documents JSON input, PNG or SVG success output, and JSON errors: LinkScan API documentation.

As an Amazon Associate I earn from qualifying purchases.

Choose the body reader for the response the endpoint actually returns: use arrayBuffer() for PNG bytes, text() for SVG markup, and json() only for a JSON response. QRGen documents all three output options, including JSON data in a { modules, size } structure rather than a PNG file: QRGen Node.js guide.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Read a successful PNG response as bytes

With Node.js 18 or later, the native fetch() API can read the response. Check the status before consuming the success body, then convert the returned ArrayBuffer into a Buffer for file operations.

#1 Best Overall
Eyoyo EYH2 Handheld USB Wired 2D 1D Barcode Scanner for POS Mobile Payment
  • Continuous Usage All Day: The EY-H2 USB barcode scanner is designed to always be ready for the next scan, which significantly reduces downtime and repair costs; it shortens checkout lines, improves customer service, and boosts business productivity
  • Plug and Play: Eyoyo wired barcode scanner is connected via a USB cable, with no need to install any driver or software; It offers effortless connection and is compatible with Windows, Mac, Android, and Linux; Seamlessly works with Quickbook, Word, Excel, Novell, and all common software
  • Supports Multiple 1D/2D Barcodes: Eyoyo QR code scanner scan with most 1D 2D barcodes with ease; 1D Barcodes: EAN, UPC, Code 39, Code 93, Code 128, UCC/EAN 128, Codabar, Interleaved 2 of 5, ITF-6, ITF-14, ISBN, ISSN, MSI-Plessey, GS1 Databar, Code 11, Industrial 25, Matrix 2 of 5, etc. 2D Barcodes: QR, DataMatrix, PDF417, and so on
  • Supports Screen Scanning: The Eyoyo 2D scanner is capable of reading barcodes from smartphone screens, such as mobile coupons, digital wallets, and digital loyalty cards; Before scanning, simply turn your screen brightness to the maximum
  • Sturdy Anti-Shock and Durable Design: The Eyoyo 2D barcode scanner features an ergonomic design made of high-quality ABS, enabling it to withstand repeated drops from 5 ft/1.5 m high onto the concrete ground; The durable plastic material ensures a long service life
import { writeFile } from "node:fs/promises";

const response = await fetch(apiUrl, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ data: "https://example.com", format: "png" }),
});

if (!response.ok) {
  // Use this only if the API documents JSON error responses.
  const error = await response.json();
  throw new Error(error.error ?? `QR API failed: ${response.status}`);
}

const png = Buffer.from(await response.arrayBuffer());
await writeFile("qr.png", png);

This follows the PNG-handling pattern in the QRGen Node.js guide. The example reads an error as JSON only on the unsuccessful branch; that is appropriate only when the provider documents JSON errors. Check the API contract rather than assuming every provider uses the same error format.

Relay the PNG from an Express route

If your server returns the generated image to a browser or another client, preserve the buffer as binary and label the outgoing response with the PNG media type. Do not JSON-serialize the image bytes.

Rank #2
Tera Barcode Scanner with Battery Indicator: 2D Wireless, D5100 Orange
  • 【Battery Level Indicator and 2200mAh Capacity】Larger battery enables longer continuous usage and twice the stand-by time of others. With the unique battery indicator light showing the remaining battery level, no more Low Battery Anxiety.
  • 【Ergonomic Design】 The curved handle is extended and thickened, tailor-made for North America customers. Specially designed smooth and flat trigger for better grip. 【Package Includes】Barcode Scanner x1, USB Cable x1, Dongle x1, User Manual x1.
  • 【Anti-Shock Silicone】 The orange anti-shock silicone protective cover can avoid scratches and friction while falling from the height of 6.56 feet. IP54 technology protects the wireless barcode scanner from dust.
  • 【2.4 GHz Wireless plus USB 2.0 Wired Connection】 Plug and play with the USB receiver or the USB cable, no driver installation needed. Easy and quick to set up. Wireless transmission distance reaches up to 328 ft. in barrier free environment.
  • 【Digital and Printed 1D 2D QR Bar Code Symbologies】1D: Codabar, Code 11, Code93, MSI, Code 128, UCC/EAN-128, Code 39, EAN-8, EAN-13, UPC-A, ISBN, Industrial 25, Interleaved 25, Standard25, Matrix 2D: QR, DataMatrix, Aztec, Hanxin, Micro PDF417. (Note: Not compatible with Square.)
app.post("/qr", async (req, res, next) => {
  try {
    const apiResponse = await fetch(apiUrl, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(req.body),
    });

    if (!apiResponse.ok) {
      const error = await apiResponse.json(); // Only if documented by the API.
      return res.status(apiResponse.status).json(error);
    }

    const png = Buffer.from(await apiResponse.arrayBuffer());
    res.type("image/png").send(png);
  } catch (error) {
    next(error);
  }
});

The error forwarding shown here assumes the upstream API returns JSON errors; adapt that branch to its actual contract. A cache header may be suitable for a public, stable QR image, but do not set a universal cache lifetime when the payload could be private or change over time. The QRGen guide also demonstrates forwarding image bytes through Express.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Pick the response reader for the output format

Output What the response contains Node.js handling Typical fit
PNG Binary raster image bytes arrayBuffer(), then Buffer.from() Fixed-size image use or systems that require PNG
SVG Text markup text(); return with an SVG media type Scalable output, including print use
JSON Structured data only when the provider explicitly offers JSON output json() Applications that need the QR matrix or other structured values, not a PNG file

These format options are documented by QRGen and UseQR. Follow the selected provider’s endpoint contract and inspect the status and response content type during development; a JSON request alone is no evidence that the response is JSON.

Rank #3
Tera Barcode Scanner with Battery Indicator: 2D Wireless, D5100, Blue
  • 【Battery Level Indicator and 2200mAh Capacity】Larger battery enables longer continuous usage and twice the stand-by time of others. With the unique battery indicator light showing the remaining battery level, no more Low Battery Anxiety.
  • 【Ergonomic Design】 The curved handle is extended and thickened, tailor-made for North America customers. Specially designed smooth and flat trigger for better grip. 【Package Includes】Barcode Scanner x1, USB Cable x1, Dongle x1, User Manual x1
  • 【Anti-Shock Silicone】 The orange anti-shock silicone protective cover can avoid scratches and friction while falling from the height of 6.56 feet. IP54 technology protects the wireless barcode scanner from dust.
  • 【2.4 GHz Wireless + USB 2.0 Wired Connection】 Plug and play with the USB receiver or the USB cable, no driver installation needed. Easy and quick to set up. Wireless transmission distance reaches up to 328 ft. in barrier free environment.
  • 【Digital and Printed 1D 2D QR Bar Code Symbologies】1D: Codabar, Code 11, Code93, MSI, Code 128, UCC/EAN-128, Code 39, EAN-8, EAN-13, UPC-A, ISBN, Industrial 25, Interleaved 25, Standard25, Matrix 2D: QR, DataMatrix, PDF417, Aztec, Hanxin, Micro PDF417. (Note: Not compatible with Square.)

Common parsing and image-relay failures

  • JSON parse error on a successful call: The endpoint may have returned PNG bytes. Use arrayBuffer() and convert to a buffer instead of calling response.json().
  • Corrupt image after relaying: Keep the image data binary and send it with Content-Type: image/png.
  • SVG handled as a buffer: Read SVG markup with text() and return it with the appropriate SVG media type.
  • Error body treated as an image: Check response.ok before reading the success body, and handle failures according to the provider’s documented error format.
  • Assuming providers share one contract: Authentication, output formats, rate limits, and error bodies vary. For instance, LinkScan documents bearer authentication and a limit of 60 requests per minute for its API, while QRGen describes its example API as requiring no API key. Those are provider-specific terms, not general QR API rules: LinkScan API documentation and QRGen Node.js guide.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

When local QR generation is a better fit

A hosted API is not required to generate QR codes in Node.js. UseQR documents local generation with the qrcode package, including writing PNG files, producing data URLs or SVG strings, and streaming PNG to an HTTP response: UseQR’s Node.js guide.

Local generation avoids sending the payload to a remote service and can work without network access. That matters when the QR content includes Wi-Fi credentials, personal contact details, payment data, or other sensitive information. UseQR recommends local generation for sensitive payloads; that is vendor guidance, not an independent security audit. A hosted API may instead save you from maintaining a rendering dependency or provide features you would otherwise need to implement. These are integration tradeoffs, not a measured performance comparison.

Best Value
Tera Barcode Scanner 2D Portable Wireless: BT 2.4G USB Pocket Reader, 1200
  • 【IP66 Waterproof Dustproof Mini Pocket 2D Scanner】Just bring this scanner with you. Anytime you want to collect data, just connect it with your device via Bluetooth or use the storage mode. 【Package Includes】Barcode Scanner x1, USB Cable x1, Dongle x1, User Manual x1.
  • 【Waterproof Dustproof Silicone Port Plug】Newly designed waterproof and dustproof silicone port plug on marketplace, it enables better performance of the scanner in every working conditions. The silicone button on the scanner body enables every soft and smooth scanning experience.
  • 【3-in-1 Connection Ways】This scanner works with Bluetooth, 2.4GHz wireless and USB 2.0 wired mode. The transmission distance can be 656ft in barrier free environment and 98 ft in an environment with obstacles using a 2.4G USB dongle. In addition, it is also compatible with various operating systems, such as windows 11/10/8/7/xp, Mac OS, iOS, android, linux.(Note: Not Compatible with Square)
  • 【Vibration Alert】: When you need a quiet working environment, just turn the volume off and the vibration function will let you know if a barcode is detected.
  • 【1D 2D QR Scanner】:Supports Both Digital and Printed 1D 2D QR Bar Code Symbologies: 1D Decode Capability: Codabar, Code 11, Code93, MSI, Code 128, UCC/EAN-128, Code 39, EAN-8, EAN-13, UPC-A, ISBN, Industrial 25, Interleaved 25, Standard 25, 2/5 Matrix 2D Decode Capability: QR, PDF417, Data Matrix, Aztec code, Maxi Code.
Rank #4
Sale
Tera Barcode Scanner Wireless with Screen: Pro Version 1D 2D QR with Setting Keypad Charging Cradle Works with Bluetooth 2.4G Wireless USB Wired Handheld Bar Code Reader HW0009
  • 【Unique Designed Screen Setting】It allows you to customize the screen display according to your preferences. With this innovative feature, you can easily set the language, adjust volume settings, select connection options, and view stored and total barcodes. Experience unparalleled convenience and flexibility as you personalize the settings of your Tera HW0009 to suit your specific needs. 【Package Includes: Barcode Scanner x1, Charging Cradle x1, Charging Cable x1, User Manual x1】
  • 【Superior Global CMOS Imaging Scanning】This advanced scanner excels in fast and accurate reading of both ordinary and high-density barcodes, including challenging formats like PDF417 found on driver's licenses. Its exceptional performance effortlessly handles various scanning scenarios, including underwater scanning, reading barcodes on silver paper, reflective materials, and more.
  • 【Charging Cradle & 2500mAh Large Battery】Designed with a convenient charging cradle, the HW0009 barcode scanner allows you to easily charge it whenever it's not in use. In addition, the scanner itself is equipped with a powerful 2500mAh battery, ensuring seamless all-day operation without the need for frequent charging.
  • 【3-in-1 Connections & Widely Compatible】 Tera HW0009 wireless barcode scanner can work with bluetooth & 2.4G wireless & usb wired. The transmission distance can be 328ft in barrier free environment and 114ft in obstacles environment using 2.4G USB dongle. It can be connected with a variety of devices, such as smartphones, computers, POS, tablets. In addition, it is also compatible with various operating systems, such as windows 11/10/8/7/xp, Mac OS, iOS, android, linux.
  • 【1D 2D QR code Programmable】2D: QR code, Data Matrix, PDF417(including PDF417 on driver’s license), Aztec, Maxicode, Micro QR, Micro PDF417; 1D: UPC/EAN, Code 128/EAN128, GS1-128, ISBT-128, Standard 2 of 5, Matrix 2 of 5, Code 39, Code 32, Code 93, Code 11, Codabar, PLESSEY, MSI, GSI Databar, ITF-14, GS1.

Check the provider contract before deployment

  • Confirm the success response format and choose its matching reader.
  • Verify how unsuccessful responses are encoded before parsing them.
  • Check whether authentication is required and whether usage limits apply to that specific API.
  • Decide whether the payload can be sent to a hosted service or should stay in your application.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.