← Barcode generator
Generate a barcode in PHP
Make product and shipping barcodes: EAN-13, EAN-8, UPC-A, UPC-E, Code 128, Code 39, Code 93, ITF-14 and Codabar, as PNG or SVG. Here is the whole call in PHP, with the output it produced when we ran it.
Before you start
- An API key. Create a free account; it comes with free tokens every month. Put the key in an environment variable so it stays out of your code:
export BLOODWEB_KEY=your_key - PHP 7.4 or later with the curl extension, which most installs have.
The code
Save it as barcode-generate.php and run php barcode-generate.php.
<?php
$ch = curl_init('https://bloodweb.net/api/v1/barcode-generate?' . http_build_query(['type' => 'ean13', 'data' => '590123412345']));
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('BLOODWEB_KEY')],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($body === false) {
exit(curl_error($ch) . "\n");
}
if ($status !== 200) {
exit($status . ': ' . json_decode($body, true)['error']['message'] . "\n");
}
file_put_contents('barcode.png', $body);
What you get
Tested 19 October 2026: this exact code ran against our test copy of the API, which runs the same service code as bloodweb.net, and produced this.
It writes barcode.png: a PNG image, 230 × 106 pixels, 2 KB.
Change the call
Every option the Barcode generator takes. Add or change them the same way as the ones in the code.
datarequired: What to encode. For EAN and UPC, leave off the check digit and it is added; include it and it is verified.type: Symbology. One of: code128, code39, code93, ean13, ean8, upca, upce, itf14, codabar.format: Image format. One of: png, svg.bar_width: Width of the narrowest bar in pixels. 2 or more for printing.height: Bar height in pixels.text: Print the human-readable value under the bars.color: Bar colour.background: Background colour, or "transparent".
If it fails
A failed call is not charged. The answer is JSON with an error object; the code above prints its message. The usual ones:
- 401
missing_keyorinvalid_key:BLOODWEB_KEYis not set in the shell that runs the code, or the key was revoked. - 400
bad_param: a value is wrong or missing. The message names the parameter. - 402
insufficient_tokens: the balance does not cover the call. Top up in the dashboard. - 429
rate_limited: too many calls at once. Wait the seconds in theRetry-Afterheader and send it again.
Every code and its fix is in the docs.
Next
- The Barcode generator page: every option, the limits, and Try it now in your browser.
- Getting started: keys, errors and rate limits for all the services.