Docs/APIs/Barcode Reader

Barcode Reader

Decode 1D barcodes from images

OperationalCredits 10 per callp50 111msImagesStar

Overview

Images are normalised and decoded with zxing-cpp, which tries rotated and inverted versions of the image, so barcodes printed sideways or light-on-dark are still found. Retail codes are reported in their native form, with the 13-digit GTIN alongside.

Live Test Barcode Reader API →

Endpoint

One host, one path per API. The block below shows this call in four languages; every one of them is the same HTTP request. Making requests covers the timeouts, retries and parameter rules that apply to all of them. The SDKs wrap the same call in a typed client.

POSThttps://api.apiverve.com/v1/barcodereader
curl -X POST https://api.apiverve.com/v1/barcodereader \
  -H "x-api-key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
  "image": "https://raw.githubusercontent.com/zxing/zxing/master/core/src/test/resources/blackbox/ean13-1/2.png"
}'

Replace your_api_key_here with the key from your dashboard. When the inputs arrive as a list rather than one at a time, batch requests run up to 200 of them through this same API in a single call.

Authentication

Send your key in the x-api-key header. That is the only auth step — there is no token exchange and no per-endpoint scope to configure. Authentication covers creating, rotating and revoking keys.

401 is the only auth verdict

A 401 means the key is missing, invalid or expired. A 403 means the key is valid but not permitted here — blocked by a key restriction or an IP allow-list. Running out of credits is a 429.

Parameters

Sent as JSON in the request body. Premium parameters are accepted on every plan but only take effect on plans that include them.

ParameterTypeDescription
imageOptionalstringAn image file containing a barcode (JPG, PNG, GIF, WebP or BMP), or a public image URL
url

Response

Every API returns the same three top-level keys, so one response handler covers your whole integration: status, error and data. Only data changes shape. Response format covers the envelope, the other output formats and how premium fields are withheld.

Sample response
{
  "status": "ok",
  "error": null,
  "data": {
    "text": "8480010092271",
    "format": "EAN-13",
    "isRetail": true,
    "gtin": "8480010092271",
    "orientation": 0,
    "position": {
      "topLeft": {
        "x": 565,
        "y": 366
      },
      "topRight": {
        "x": 1132,
        "y": 366
      },
      "bottomRight": {
        "x": 1145,
        "y": 734
      },
      "bottomLeft": {
        "x": 558,
        "y": 734
      }
    },
    "barcodeCount": 1,
    "barcodes": [
      {
        "text": "8480010092271",
        "format": "EAN-13",
        "gtin": "8480010092271",
        "orientation": 0,
        "position": {
          "topLeft": {
            "x": 565,
            "y": 366
          },
          "topRight": {
            "x": 1132,
            "y": 366
          },
          "bottomRight": {
            "x": 1145,
            "y": 734
          },
          "bottomLeft": {
            "x": 558,
            "y": 734
          }
        }
      }
    ]
  }
}

Response fields

Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.

FieldTypeExampleDescription
textstring"8480010092271"The decoded barcode value
formatstring"EAN-13"The symbology, such as EAN-13, UPC-A, Code 128 or ITF
isRetailbooleantrueTrue for retail product codes (EAN-13, EAN-8, UPC-A, UPC-E)
gtinPremiumstring"8480010092271"The 13-digit GTIN for retail codes, null for other formats
orientationPremiumnumber0Rotation of the barcode in degrees
positionPremiumobject{...}Corner coordinates of the barcode in the decoded image
topLeftPremiumobject{...}Top left corner with x and y
xPremiumnumber565
yPremiumnumber366
topRightPremiumobject{...}Top right corner with x and y
xPremiumnumber1132
yPremiumnumber366
bottomRightPremiumobject{...}Bottom right corner with x and y
xPremiumnumber1145
yPremiumnumber734
bottomLeftPremiumobject{...}Bottom left corner with x and y
xPremiumnumber558
yPremiumnumber734
barcodeCountPremiumnumber1Number of barcodes found in the image (up to 10)
barcodesPremiumarray[1]Every barcode found, with text, format, gtin, orientation and position
textPremiumstring"8480010092271"Decoded value
formatPremiumstring"EAN-13"Symbology
gtinPremiumstring"8480010092271"13-digit GTIN for retail codes, null otherwise
orientationPremiumnumber0Rotation in degrees
positionPremiumobject{...}Corner coordinates
topLeftPremiumobject{...}
xPremiumnumber565
yPremiumnumber366
topRightPremiumobject{...}
xPremiumnumber1132
yPremiumnumber366
bottomRightPremiumobject{...}
xPremiumnumber1145
yPremiumnumber734
bottomLeftPremiumobject{...}
xPremiumnumber558
yPremiumnumber734

Errors

Read the HTTP status first, then error for the specific reason. The body names the parameter that has to change. Error handling covers the full status list and which of them are worth retrying.

StatusMeaningWhat to do
400Input was rejectedRead error; it names the parameter.
401Key missing or invalidCheck the header name and the key value.
403Key valid, but not permittedA key restriction or IP allow-list; see key scoping.
429Rate limited, or out of creditsRead error to tell them apart; see rate limits.

Use cases

Product Lookup
Read the EAN or UPC from a customer's photo of a product and look the item up in your catalogue by GTIN.
Inventory and Warehousing
Decode Code 128 and ITF labels from photos taken by staff without dedicated scanners.
Returns and Receipts
Pull order or parcel numbers out of photographed labels and receipts to match them to records.
Document Processing
Extract barcodes from scanned forms and shipping documents as part of an intake pipeline.

Set up Barcode Reader

Ready to put it to work? Set up Barcode Reader on APIVerve.

More in Images:

Was this page helpful?