HomeBlog › CLP / GHS Chemical Labels

EU CLP / GHS Chemical Label Printing — From One Row to a Compliant Label, in One API Call

Putting a chemical product on the European market means putting a CLP-compliant label on every container that leaves your factory. The rules — Regulation (EC) No 1272/2008 with its Annexes — are not the hard part. The hard part is that every label needs the right pictograms in the right precedence, the right hazard and precautionary text in every market language, the right minimum dimensions for the container size, and (since 2021) a 16-character UFI code linking the formulation to a poison-centre notification.

Most teams handle this with a spreadsheet, a label designer, and a regulatory consultant on speed dial. We built LabelInn to handle it with one API call.

Print a CLP-compliant chemical label right now. POST a JSON row to /v1/print/jobs, get a fully compliant label out of a thermal printer in under a second. 14-day Pro trial, no credit card. Start the trial →

The shape of a CLP-compliant label

Every label has to carry, at minimum:

The label sells the product. The regulator inspects the label. Get any of the above wrong and you face product recalls, fines, and — if a downstream user is harmed — criminal liability under national CLP enforcement law.

What LabelInn does with one row

You send a single JSON row through the LabelInn API:

POST /v1/print/jobs
Authorization: Bearer sk_live_…

{
  "printer_id":   "prt_chem_line_3",
  "payload_type": "ghs_row",
  "design_id":    "tmpl_5l_jerrycan_clp",
  "data": {
    "product_name":       "Suma Bac D10",
    "supplier_name":      "Diversey",
    "container_litres":   5,
    "languages":          ["tr", "en", "de"],
    "h_codes":            ["H314", "H318"],
    "p_codes":            ["P280", "P305+P351+P338", "P310"],
    "vat_country_code":   "AT",
    "vat":                "U12345678",
    "formulation_number": 178956970
  },
  "copies": 50
}

And LabelInn delivers a label that contains, automatically and without any per-product configuration:

What you don't send: a hazard dictionary. The pictogram→H-code mapping. The H-code→language text. The CLP Annex I size rules. The UFI algorithm. The CLP Article 26 precedence logic. All of that lives inside LabelInn.

The five things LabelInn handles for you

1. The hazard text, in every language you ship to

LabelInn ships with the official H- and P-statement text for all 25 EU languages — sourced from EUR-Lex consolidated CLP and Resmi Gazete (Turkey). You ship to Turkey, Germany, France, Czechia and Poland? Send "languages": ["tr","de","fr","cs","pl"] and every code resolves into all five languages with one round-trip. Add a market in two years? Add a string to the list. No translation contract, no PDF copy-paste, no version drift.

For codes where the dictionary has a verified entry the resolved text is used directly. For codes that are present in the regulation but not yet verified for a given language the API returns a clear non-blocking warning — your label still prints with the verified-language fallback, but you know to have it reviewed. The same dictionary version stamps every audit record, so you can answer the question "what was the official H315 Turkish text on the day we printed batch 2026-04-17" five years later.

2. The pictograms, in the order CLP says

Send the H-codes. LabelInn picks the pictograms. The catch is that CLP Article 26 has replacement rules — when one pictogram applies, another is forbidden, optional, or superseded. Examples:

LabelInn walks these rules automatically. The label you get back has the right pictograms in the right precedence order, with a clear audit log of which pictograms were stripped by Art. 26 and which are optional under §1 or §5. No regulator is going to ask "why is there a GHS07 on this label" — because there isn't one when there shouldn't be.

3. The dimensions, per CLP Annex I

Annex I Table 1.3 sets minimum label area and minimum pictogram side length as a function of container size. A 50 mL bottle gets a 52×74 mm label minimum with a 10 mm minimum pictogram side. A 5 L jerrycan gets a 105×148 mm label minimum with a 16 mm minimum pictogram side. A 500 L IBC gets a 178×250 mm label with a 32 mm minimum pictogram side.

You tell LabelInn the container volume; LabelInn picks the band, sizes the pictograms, and renders the label. If the template you've chosen is smaller than the band requires you get a clear non-blocking warning with the suggested size — surface that in your design QA loop and your line never prints a non-compliant label.

4. The UFI code, by ECHA's algorithm

The Unique Formula Identifier is a 16-character code in the form XXXX-XXXX-XXXX-XXXX, generated from a 28-bit formulation number plus a country-and-VAT key. It links the label on the container to the Poison Centre Notification you filed with ECHA, so emergency-response physicians can look up the mixture composition from the UFI alone.

The generator is specified in the ECHA UFI Developers Manual. LabelInn implements it to the byte: every VAT format from all 28 EU countries plus company-key mode (no VAT), CLP Article 26 part 2 alignment, the canonical base-31 alphabet that drops ambiguous characters (B / I / L / O / Z), checksum, the lot. You pass vat_country_code + vat + formulation_number; you get a UFI you can verify on ECHA's own tool. Or pass "ufi": "C23S-PQ2V-AMH9-VVRF" directly if your PCN system already issued one.

LabelInn also exposes the generator as a standalone endpoint at POST /v1/ufi/generate if you just want a UFI for spreadsheet use — no print required.

5. The audit trail your inspector wants to see

Every chemical print writes a record to the LabelInn audit ledger. That record carries the full input row, the resolved text per language, the pictogram codes (kept + dropped by Art. 26 + flagged optional), the CLP Annex I size compliance check, the rendered PNG of the actual label, operator identity, timestamps, and the dictionary version that was in effect on the print date. The record is then signed with a per-tenant HMAC key and appended to a hash-chained log.

The chain is verifiable: ask the API "is the audit chain intact from seq 1 to today's head" and you get a yes/no plus the divergence point if any. Suitable for FDA 21 CFR Part 11 §11.50 and EU Annex 11 §14 — built into every Pro and Enterprise account, no add-on tier required.

What this replaces in your current stack

TodayWith LabelInn
Excel sheet of H-codes by SKU, maintained by a regulatory consultantSingle source row, sent on every print
One label template per (product × pack size × language combination)One template per pack size, language list passed at print time
Manual translation contract for every new market25 EU languages bundled, dictionary versioned
Quarterly review to catch designs that drift from regulation updatesDictionary versioned in audit log; updates roll forward
UFI generator script in a spreadsheet macroSame algorithm via API or auto-synthesised at print time
Inspector visits → manual export of print history into a PDFHash-chained audit trail with verifiable signatures, queryable by date
Annual NiceLabel / BarTender LMS Enterprise renewal$249.90 / year Pro covers the whole pipeline

What you still own

LabelInn is the runtime. You still own the regulatory decision: which H-codes apply to which product, which P-codes you choose from the regulator's permitted set, whether your design draft is fit for purpose. Our dictionary is verified against EUR-Lex consolidated CLP but the final compliance sign-off is yours. We provide a separate compliance review e-signature flow that lets a designated reviewer (qualified chemist, in-house regulatory officer, external consultant) sign off on a design before the print path will accept it — and if anyone edits the design afterwards, the signature is automatically marked superseded and printing is blocked until re-review. That's the part that turns a label-printing tool into a Part-11-grade compliance instrument.

Five-minute trial path

  1. Sign up for the 14-day Pro trial
  2. Download the LabelInn desktop app — Windows, macOS, or Linux
  3. Add a thermal printer (USB, TCP, or Bluetooth — driverless)
  4. From the design gallery, pick the CLP / GHS — 5 L jerrycan starter design (or design your own with the GHS variables sidebar)
  5. Generate an API key (Settings → API Keys)
  6. curl -X POST https://labelinn.com/v1/print/jobs … with a chemical row

Compliant label, out of a real printer, in under five minutes. Same path scales to a 50-line factory.

The CLP / GHS Pipeline. As a Single API Call.

✓ 25 EU languages from EUR-Lex consolidated CLP ✓ 9 UN GHS pictograms — Article 26 precedence applied automatically ✓ ECHA-spec UFI generator (Annex VIII) — all 28 EU country VAT formats ✓ CLP Annex I size rules enforced per container volume ✓ Hash-chained, HMAC-signed audit log on every print ✓ Compliance e-signature flow — Part 11 / Annex 11 ready

If you currently maintain CLP labels in a spreadsheet plus a label designer, you should not have to keep doing that.

Start the 14-day Pro trial →