---
title: "Print barcode labels through an API"
description: "Send print-ready barcode, product and warehouse labels as PDF, ZPL, TSPL or CPCL to a compatible local printer."
---
<nav class="docs-breadcrumb" aria-label="Breadcrumb"><a href="/docs/">CloudPrint Documentation</a><span aria-hidden="true">/</span><span>Printing workflows</span></nav>

# Print barcode labels through an API

<p class="docs-lead">CloudPrint sends finished product, warehouse and barcode labels to local printers. Your application creates the label content; CloudPrint accepts a print-ready PDF or RAW data in ZPL, TSPL or CPCL, verifies the route and tracks the print job.</p>

## Prepare the final label

Generate the barcode, text and layout in your ecommerce, inventory, ERP or WMS system. CloudPrint is not a label designer and does not change the business data. Before uploading, verify that the item, batch, order and barcode value belong to the same operation.

## Choose PDF or a printer language

PDF is suitable when the label already exists as a page and the queue supports system printing or an available renderer. For direct thermal printing, use `document_format=raw` and set `document_raw_language` to `zpl`, `tspl` or `cpcl`. Do not rename one printer language as another or expect CloudPrint to convert it.

## Check the discovered capabilities

Call `GET /api/v1/printers` and inspect `capabilities.language_profiles` and `endpoint.raw_passthrough_available`. The agent discovers these values from the printer and queue. Select a route that advertises the required language; do not infer compatibility from a brand name or ask an operator to configure it manually.

## Match the physical media

Make the page or command dimensions match the actual label. When the workflow needs it, set `media_width_mm`, `media_height_mm` and `dpi`, then calibrate the gap or mark sensor, darkness and speed on the printer. Scan real samples before rollout; a `printed` status cannot prove that a clipped barcode is readable.

## Route and retry deliberately

Store a `printer_id` for each workstation or label purpose. Create the job with a stable `Idempotency-Key`, save `print_job_id` and follow the terminal result. Reusing the request after a timeout keeps the same key; a deliberate reprint gets a new key and an audit reason.

## Next steps

<div class="docs-card-grid"><a class="docs-card" href="/docs/guides/shipping-labels/"><strong>Print shipping labels from your application</strong><span>Send carrier-generated PDF labels or RAW label data in ZPL, TSPL or CPCL from an ecommerce, WMS or ERP backend to the correct local printer.</span></a>
<a class="docs-card" href="/docs/guides/print-formats/"><strong>PDF and RAW printer languages</strong><span>Choose PDF or an explicit RAW language—ZPL, TSPL, CPCL or ESC/POS—and route each job only to a compatible printer.</span></a>
<a class="docs-card" href="/docs/api/print-jobs/"><strong>Create and track CloudPrint print jobs</strong><span>Create idempotent print jobs, validate printer options and follow each job safely until it is printed or fails.</span></a></div>

<nav class="docs-resource-links" aria-label="Next steps"><a href="https://cloudprint.me/status/">Service status</a><a href="/docs/api/v1/explorer/">OpenAPI</a><a href="https://developer.cloudprint.me">Developer Portal</a><a href="https://my.cloudprint.me">Open account</a><a href="/docs/legal/privacy/">Privacy Policy</a><a href="/docs/legal/terms/">Terms</a><a href="/docs/legal/data-processing/">DPA</a><a href="/docs/legal/service-level-agreement/">Service Level Agreement</a></nav>