Generate a barcode with curl
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 with curl, 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 - curl 7.76 or later (for
--fail-with-body, which makes curl stop on an error and still show the reason).
The code
Save it as barcode-generate.sh and run bash barcode-generate.sh.
curl -sS --fail-with-body \
-H "Authorization: Bearer $BLOODWEB_KEY" \
"https://bloodweb.net/api/v1/barcode-generate?type=ean13&data=590123412345" \
-o barcode.png
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; curl stops with an error, and that JSON lands in barcode.png instead of the result, so open it as text to read the reason. 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.