openlabelengine

Document formats

Keep the workflow in structured documents.

Labels, automations and saved forms are declarative JSON. Their schemas make the structure inspectable, while stable IDs let editors and integrations change specific objects without rebuilding the document.

Use the schema for the document

schemaVersion is a string such as "1.0", not an integer or a product release number. Use the matching build's schemas and node definitions when creating or editing documents.

DocumentPurpose
label.jsonMedia, variables, styles and stable objects that define the label.
flow.jsonAn automation graph of versioned nodes, typed connections, parameters and layout.
form.jsonSaved operator fields, bindings, validation and configured actions.

A complete label document

This complete document uses label schema 1.0 and comes from the product's label validation examples. Use a schema version supported by your build. Submit a print request separately to choose a target and copy count.

{
  "schemaVersion": "1.0",
  "kind": "label",
  "id": "lbl_9k3f",
  "name": "SSCC Palette",
  "media": { "widthMm": 101.6, "heightMm": 152.4, "type": "gap", "gapMm": 3.0 },
  "requirements": { "minDpi": 203 },
  "variables": [
    { "name": "gtin", "type": "string", "source": "input", "prompt": "GTIN" },
    { "name": "serial", "type": "counter", "counterRef": "seq://sscc-line3", "mode": "allocated" },
    { "name": "sscc", "type": "string", "source": "expr", "expr": "gs1.sscc('9012345','3',serial)" }
  ],
  "objects": [
    { "id": "o1", "name": "titel", "type": "text",
      "xMm": 5, "yMm": 5, "wMm": 91.6, "hMm": 10,
      "style": "h1", "value": "PALLET LABEL", "overflow": "shrink", "minFontPt": 8 },
    { "id": "o2", "name": "sscc_code", "type": "barcode", "symbology": "gs1-128",
      "xMm": 5, "yMm": 120, "wMm": 91.6, "hMm": 25,
      "value": "${gs1.ai('00', sscc)}",
      "hri": { "show": true, "position": "below" } },
    { "id": "o3", "name": "hinweis", "type": "text",
      "xMm": 5, "yMm": 100, "wMm": 91.6, "hMm": 8,
      "value": "${gtin}", "visibleWhen": "gtin != ''" }
  ],
  "styles": { "h1": { "font": "liberation-sans-narrow", "sizePt": 24, "align": "center" } }
}

Notice kind: "label", the media object and the camel-case millimetre fields: xMm, yMm, wMm and hMm. Each object has a stable id and name. Text and barcode content use value.

For an evaluation of this example, configure its referenced counter and supply the input values. Treat the identifier prefix as example data. The print request supplies its target and requested copies separately, as shown in the API guide.

Edit existing objects with patches

Keep document, object and node IDs stable. Use the document API's version-aware patch contract to change the intended fields. Inspect validation errors before saving and review a rendered label with representative values before printing.

In a source checkout, the label schema is pkg/label/schema/label.schema.json. The schemas and registries define valid fields; changing a name to resemble another labeling format does not make it part of this contract.

Expressions and automation parameters

CEL is the expression language. Label values can contain interpolation, as in the example. Each automation node defines its parameter rules: database args, for example, contain plain CEL expressions, while SQL text uses bound placeholders. Follow the node definition instead of applying one interpolation rule to every field.

See bound database arguments → · Find the current API contract →

Runs for 7 days

Test it now

Your own instance, running in seconds. Nothing to install.

.openlabelengine.com

We fill this in from your email — change it if you like.

You will use this to sign in to your instance.

Isolated instance, runs for 7 days. We email you before it expires. Want to run it yourself instead? Deploy it.