ToolAssay

Compile a structured product-label spec (dimensions, EU FIC or US FDA ruleset, i

Compile a structured product-label spec (dimensions, EU FIC or US FDA ruleset, ingredients/allergens, nutrition, GS1 barcode, brand style) into a deterministic print-ready PDF with trim/bleed/safe boxes and embedded fonts, an SVG proof, a dieline, and a report auditing x-height legibility, allergen emphasis, nutrition order, and barcode check digits/quiet zones. Not a legal review of packaging compliance.

Answeringour last check, 2026-09-24
1 of 1checks answered this week
602 msmedian answer time
$0.15listed price per call
$0.15price it asked us

Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.

Endpoint

POST https://label.api.williamrobinson.dev/v1/label/compile

CategoryCode and developer
Provider hostlabel.api.williamrobinson.dev
Networkseip155:8453
Payment schemesexact
Self-reported calls, 30 days1 from 1 payers (the provider's figure, not ours)

Our checks, last 30 days

DayResultHTTPAskedTime
2026-09-24 valid payment request 402$0.15 602 ms

Example input (from the provider)

{
  "body": {
    "barcode": {
      "data": "5901234123457",
      "humanReadable": true,
      "symbology": "ean13"
    },
    "format": {
      "bleedMm": 2,
      "cornerRadiusMm": 3,
      "heightMm": 60,
      "safeMm": 2,
      "widthMm": 100
    },
    "ingredients": [
      {
        "allergen": true,
        "text": "Wheat flour"
      },
      {
        "allergen": false,
        "text": "Sunflower oil"
      },
      {
        "allergen": false,
        "text": "Sourdough culture"
      },
      {
        "allergen": false,
        "text": "Sea salt"
      },
      {
        "allergen": true,
        "text": "Sesame seeds"
      }
    ],
    "nutrition": {
      "basis": "100g",
      "carbohydrateG": 68.5,
      "energyKcal": 442,
      "energyKj": 1850,
      "fatG": 14.2,
      "fibreG": 3.4,
      "proteinG": 10.6,
      "saltG": 1.2,
      "saturatesG": 1.8,
      "sugarsG": 2.1
    },
    "product": {
      "brand": "Stonebake",
      "business": {
        "address": "14 Mill Lane, Bristol BS1 4ST, United Kingdom",
        "name": "Stonebake Bakery Ltd"
      },
      "dateLine": "Best before: see lid",
      "description": "Crisp sourdough crackers baked with stone-milled wheat flour.",
      "name": "Stonebake Sourdough Crackers",
      "netQuantity": {
        "unit": "g",
        "value": 150
      },
      "origin": "Baked in Italy",
      "storage": "Store in a cool, dry place. Reseal after opening."
    },
    "ruleset": "eu-fic",
    "style": {
      "accent": {
        "rgb": "#8a3b12"
      },
      "background": {
        "rgb": "#ffffff"
      },
      "fontFamily": "liberation-sans",
      "text": {
        "rgb": "#000000"
      }
    },
    "warnings": [
      "May contain traces of milk."
    ]
  },
  "bodyType": "json",
  "method": "POST",
  "type": "http"
}

Promised output schema (from the provider)

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "input": {
      "additionalProperties": false,
      "properties": {
        "body": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "additionalProperties": false,
          "properties": {
            "barcode": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Exactly 13 digits (with GS1 check digit) for ean13, exactly 12 for upca; any UTF-8 text up to 512 bytes for qrcode/datamatrix.",
                  "maxLength": 512,
                  "minLength": 1,
                  "type": "string"
                },
                "humanReadable": {
                  "default": true,
                  "description": "Draw the human-readable digits (1D only).",
                  "type": "boolean"
                },
                "symbology": {
                  "enum": [
                    "ean13",
                    "upca",
                    "qrcode",
                    "datamatrix"
                  ],
                  "type": "string"
                },
                "widthMm": {
                  "description": "Requested symbol width incl. quiet zones; omitted = GS1 nominal / 20 mm for 2D.",
                  "maximum": 300,
                  "minimum": 5,
                  "type": "number"
                }
              },
              "required": [
                "symbology",
                "data"
              ],
              "type": "object"
            },
            "format": {
              "additionalProperties": false,
              "properties": {
                "bleedMm": {
                  "default": 2,
                  "maximum": 5,
                  "minimum": 0,
                  "type": "number"
                },
                "cornerRadiusMm": {
                  "default": 0,
                  "description": "Must not exceed min(widthMm, heightMm) / 2; validated against the format's own dimensions.",
                  "minimum": 0,
                  "type": "number"
                },
                "heightMm": {
                  "description": "Trim height, millimetres.",
                  "maximum": 400,
                  "minimum": 20,
                  "type": "number"
                },
                "safeMm": {
                  "default": 2,
                  "description": "Inside the trim; mandatory text never enters it.",
                  "maximum": 10,
                  "minimum": 0,
                  "type": "number"
                },
                "widthMm": {
                  "description": "Trim width, millimetres.",
                  "maximum": 400,
                  "minimum": 20,
                  "type": "number"
                }
              },
              "required": [
                "widthMm",
                "heightMm"
              ],
              "type": "object"
            },
            "ingredients": {
              "items": {
                "additionalProperties": false,
                "properties": {
                  "allergen": {
                    "description": "Emphasised in the ingredient list and fed into the allergen-statement/scan checks.",
                    "type": "boolean"
                  },
                  "text": {
                    "maxLength": 120,
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "text",
                  "allergen"
                ],
                "type": "object"
              },
              "maxItems": 200,
              "type": "array"
            },
            "nutrition": {
              "additionalProperties": false,
              "properties": {
                "addedSugarsG": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "basis": {
                  "enum": [
                    "100g",
                    "100ml",
                    "serving"
                  ],
                  "type": "string"
                },
                "carbohydrateG": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "cholesterolMg": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "energyKcal": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "energyKj": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "fatG": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "fibreG": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "proteinG": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "saltG": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "saturatesG": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "servingSize": {
                  "maxLength": 40,
                  "minLength": 1,
                  "type": "string"
                },
                "sodiumMg": {
                  "maximum": 100000,
                  "minimum": 0,
                  "type": "number"
                },
                "sugarsG": {
                  "maximum": 100000,
   

This page as JSON