LogiHash Documentation

Form and API reference

This page documents the current behavior of the Try platform form and API demo: all supported fields, allowed values, required rules, and practical constraints for production-ready T-Code generation.

LogiHash supports exactly three languages: English (en), German (de), and French (fr). That applies to the console, this documentation, and the EN/DE/FR label-translation fields in forms and APIs—no other locales are offered.

Cryptographic signing keys used for T-Code verification are rotated on a 90-day cycle.

Important creator rule

Creator identity (name, address, logo) is stored in your organisation profile and applied automatically by the API. Display options and per-T-Code fields are sent in each generate request body.

Platform security

  • Cryptographic key pairs used in LogiHash are rotated on a 90-day cycle.
  • Passwords must be at least 12 characters and include at least one lowercase letter (a–z), one uppercase letter (A–Z), one digit (0–9), and at least one special character from this set: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
  • LogiHash console login requires two-factor authentication (2FA). Browser sessions end after 20 minutes without user interaction; you are signed out if you do not interact with the application during that time.

T-Code form fields (GUI Interface)

Creator NameRequired

Allowed: Non-empty text

Notes: Creator identity for the issuing entity.

Address (Street, House Number, Postal Code, City, optional State, Country)Required

Allowed: Street, house number, postal code, city, and country are required non-empty text; state is optional

Notes: State / province is optional and omitted from formatted addresses when empty.

Object TypeRequired

Allowed: Preset: ID Card, Contract, Invoice, Certificate, Diploma, Permit, Badge, Ticket, Voucher, Warranty, Membership, or custom text

Notes: Custom mode via "Other": enter a default name (required). Optionally enable EN/DE/FR translations — empty translation fields fall back to the default name when scanning.

T-Code LabelRequired

Allowed: Non-empty text (max 200 characters)

Notes: Required creator-side label for identifying this T-Code in your dashboard. Stored in plain meta.json, not encrypted.

Validity (Valid for / Valid until)Required

Allowed: GUI: duration presets or fixed YYYY-MM-DD date (minimum today in Anywhere on Earth)

Default: 1 year from today (Valid for preset → { "for_years": 1 })

Notes: In the GUI, choose Valid for (duration) or Valid until (fixed date). The API receives a single validity object with exactly one key. Fixed dates use Anywhere on Earth (AoE, UTC−12) end-of-day semantics.

Creator's Logo (optional)Optional

Allowed: Image upload (PNG, JPG/JPEG, WebP, SVG as base64 data URL), max 2 MB

Notes: Click to upload logo (max 2MB).

Linked DocumentOptional

Allowed: Accepted types: pdf, doc/docx, xml, xls/xlsx, ppt/pptx, PNG, JPG/JPEG, WebP, SVG (max 10MB)

Notes: Supports optional label and optional EN/DE/FR label translations.

Additional Custom FieldsRequired

Allowed: At least 4 entries, each with non-empty label and value

Notes: Extra rows allowed; translation toggle supports EN/DE/FR per row.

Download FormatRequired

Allowed: PNG | JPG | JPEG | WebP | SVG

Default: PNG (GUI); png (API example)

Notes: Equivalent to API field output_image_format.

T-Code display options in GUI interface

The GUI supports the same visual controls reflected in display_options for API usage. Use this section to keep rendered T-Codes visually consistent across channels.

T-Code colorRequired

Allowed: black, logihash blue, navy, darkGreen, maroon, purple, darkGray, brown

Default: black (maps to #000000 in API)

Notes: These map to fixed hex values used by the API and GUI validator.

T-Code backgroundRequired

Allowed: transparent | white

Default: transparent

Notes: Transparent is ideal for overlay usage; white is print-friendly on noisy backgrounds.

Scan text enabledRequired

Allowed: true | false

Default: true

Notes: Toggles the sentence shown above or below the code.

Scan text contentRequired

Allowed: Default sentence or custom sentence

Default: “Scan to verify with the LogiHash App” (when not using custom text)

Notes: Custom mode uses your own sentence instead of the default.

Scan text positionRequired

Allowed: above | below

Default: below

Notes: Controls where the sentence appears relative to the T-Code.

Scan text alignmentRequired

Allowed: left | center | right

Default: center

Notes: Text alignment inside the generated image block.

Scan text colorRequired

Allowed: Same palette as T-Code color

Default: black

Notes: GUI and API both enforce the same allowed color set.

App buttonsRequired

Allowed: enabled true|false, style filled|outlined, color from palette

Default: enabled false; when enabled: style filled, color black

Notes: Adds in-image app-action buttons for branded visual style.

Generate API request

API base endpoint: https://api.logihash.com

Generate path: /api/v1/tcode/generate Verify/Retrieve path: /api/v1/tcode/verify-retrieve

Fields sent in the POST body for each T-Code you generate (including display_options).

object_typeRequiredstring

Allowed: Non-empty string (default name for custom types)

Notes: Usually matches one of form object types. For custom types, optionally include enable_object_type_translations (boolean) and object_type_translations.en/de/fr — empty translation fields fall back to object_type when scanning.

tcode_labelRequiredstring

Allowed: Non-empty string (max 200 characters)

Notes: Required creator-side label for dashboard identification. Stored in plain meta.json, not encrypted.

validityRequiredobject

Allowed: Object with exactly one key

Default: { "for_years": 1 }

Notes: Required. Send exactly one of: { "until_date": "YYYY-MM-DD" } or { "for_days"|"for_weeks"|"for_months"|"for_years": positive integer }. until_date uses Anywhere on Earth (AoE, UTC−12) end-of-calendar-day semantics.

output_image_formatRequiredstring

Allowed: png | jpg | jpeg | webp | svg

Default: png

Notes: Selects output image format for generated T-Code.

custom_fieldsRequiredarray

Allowed: Minimum 4 items; each item needs non-empty label + value

Notes: Rows can also include optional translations.

display_options.tcode_backgroundRequiredstring

Allowed: transparent | white

Default: transparent

Notes: Background style of T-Code.

display_options.tcode_colorRequiredstring

Allowed: #000000, #30acfd, #1e3a5f, #166534, #7f1d1d, #581c87, #374151, #78350f

Default: #000000

Notes: Only these hex values are accepted.

display_options.scan_text.enabledRequiredboolean

Allowed: true | false

Default: true

Notes: Turns the scan sentence on or off in the generated image.

display_options.scan_text.positionRequiredstring

Allowed: above | below

Default: below

Notes: Placement of scan message.

display_options.scan_text.alignmentRequiredstring

Allowed: left | center | right

Default: center

Notes: Horizontal alignment of scan message.

display_options.scan_text.use_customRequiredboolean

Allowed: true | false

Default: false

Notes: When false, the platform default sentence is used (see GUI scan text content).

display_options.scan_text.custom_textRequiredstring | null

Allowed: null or custom text

Default: null

Notes: Set to null when use_custom is false.

display_options.scan_text.colorRequiredstring

Allowed: #000000, #30acfd, #1e3a5f, #166534, #7f1d1d, #581c87, #374151, #78350f

Default: #000000

Notes: Scan line color in the generated image.

display_options.app_buttons.enabledRequiredboolean

Allowed: true | false

Default: false

Notes: Toggles app buttons in the generated image.

display_options.app_buttons.colorRequiredstring

Allowed: #000000, #30acfd, #1e3a5f, #166534, #7f1d1d, #581c87, #374151, #78350f

Default: #000000

Notes: Button color from the fixed palette.

display_options.app_buttons.styleRequiredstring

Allowed: filled | outlined

Default: filled

Notes: Button rendering style in generated image.

linked_documentOptionalobject

Allowed: If present, requires file_name + mime_type + data_base64; optional label, enable_label_translations, label_translations.en/de/fr

Notes: Encrypted attachment metadata and content.

Stored organisation data (console profile)

Configured once under Organisation settings in the tenant console. The server applies creator name, address, and logo automatically when your API key identifies the organisation.

creator_nameRequiredstring

Allowed: Non-empty

Notes: Stored in your organisation profile (tenant console → API). Applied automatically — do not send on every generate request.

addressRequiredobject

Allowed: Must include street, house_number, postal_code, city, and country as non-empty strings; state is optional

Notes: Stored in your organisation profile. Applied automatically with creator_name.

logoOptionalstring

Allowed: data URL only: image/png, image/jpeg, image/webp, image/svg+xml; maximum decoded size 2 MB

Notes: Optional image stored in your organisation profile. Applied automatically when configured.

T-Code display options in API interface

This is the dedicated display_options object used in API requests.

display_options.tcode_backgroundRequiredstring

Allowed: transparent | white

Default: transparent

Notes: Background style of generated T-Code.

display_options.tcode_colorRequiredstring

Allowed: #000000, #30acfd, #1e3a5f, #166534, #7f1d1d, #581c87, #374151, #78350f

Default: #000000

Notes: Only this fixed color set is accepted.

display_options.scan_text.enabledRequiredboolean

Allowed: true | false

Default: true

Notes: Turns scan sentence on or off.

display_options.scan_text.positionRequiredstring

Allowed: above | below

Default: below

Notes: Placement of scan text relative to T-Code.

display_options.scan_text.alignmentRequiredstring

Allowed: left | center | right

Default: center

Notes: Text alignment within the image block.

display_options.scan_text.use_customRequiredboolean

Allowed: true | false

Default: false

Notes: Enables custom sentence mode.

display_options.scan_text.custom_textRequiredstring | null

Allowed: null or custom text

Default: null

Notes: When custom mode is off, use null.

display_options.scan_text.colorRequiredstring

Allowed: #000000, #30acfd, #1e3a5f, #166534, #7f1d1d, #581c87, #374151, #78350f

Default: #000000

Notes: Uses the same fixed color palette.

display_options.app_buttons.enabledRequiredboolean

Allowed: true | false

Default: false

Notes: Toggles app buttons in generated image.

display_options.app_buttons.colorRequiredstring

Allowed: #000000, #30acfd, #1e3a5f, #166534, #7f1d1d, #581c87, #374151, #78350f

Default: #000000

Notes: Button color from fixed palette.

display_options.app_buttons.styleRequiredstring

Allowed: filled | outlined

Default: filled

Notes: Rendering style for app buttons.

How to place T-Code on a document

Option 1: API-driven workflow

  • Send a generate request with metadata, custom fields, and display options.
  • Receive the generated T-Code value and image format output.
  • Embed the returned code/image into your own document pipeline.
  • Use your own rendering rules for page position and size in your backend or DMS.

Option 2: GUI document upload workflow

  • Upload your document in the GUI interface.
  • Select T-Code position (preset corner/center or custom coordinates where available).
  • Set size and opacity/visibility style for the placed code.
  • Choose page scope: all pages, selected pages, range, odd/even, first/last (mode dependent).
  • Generate and download the final document with T-Code already embedded.

Valid API request examples

Each generate call uses your API credentials, loads organisation defaults from the console, and sends only per-T-Code fields in the JSON body.

Authentication headers

  • Authorization: Bearer <API_KEY>API credential for the caller.
  • X-Client-ID: <CLIENT_ID>Client identifier for the caller.
  • Content-Type: application/jsonRequest body is JSON.
  • Accept: application/jsonResponse should be JSON.

Stored organisation data (console profile)

Example profile stored for your organisation. You do not send this JSON on every generate request.

{
  "creator_name": "Trustec Valley",
  "address": {
    "street": "Bahnhofstrasse",
    "house_number": "1A",
    "postal_code": "8001",
    "city": "Zurich",
    "country": "CH"
  },
  "logo": "data:image/png;base64,<stored-in-console>"
}

Generate: /api/v1/tcode/generate

Send these fields in the POST body, including display_options for each T-Code. Creator name, address, and logo come from your stored organisation profile.

1) Minimal valid generate request (defaults)

{
  "object_type": "Invoice",
  "tcode_label": "INV-2026-0001",
  "validity": {
    "until_date": "2027-04-09"
  },
  "output_image_format": "png",
  "display_options": {
    "tcode_background": "transparent",
    "tcode_color": "#000000",
    "scan_text": {
      "enabled": true,
      "position": "below",
      "alignment": "center",
      "use_custom": false,
      "custom_text": null,
      "color": "#000000"
    },
    "app_buttons": {
      "enabled": false,
      "color": "#000000",
      "style": "filled"
    }
  },
  "custom_fields": [
    {
      "label": "Invoice No",
      "value": "INV-2026-0001"
    },
    {
      "label": "Customer",
      "value": "ACME Europe"
    },
    {
      "label": "Amount",
      "value": "CHF 4,250.00"
    },
    {
      "label": "Currency",
      "value": "CHF"
    }
  ]
}

2) Generate request with custom scan text and app buttons

{
  "object_type": "Certificate",
  "tcode_label": "CERT-2026-55",
  "validity": {
    "for_years": 1
  },
  "output_image_format": "webp",
  "display_options": {
    "tcode_background": "white",
    "tcode_color": "#1e3a5f",
    "scan_text": {
      "enabled": true,
      "position": "above",
      "alignment": "left",
      "use_custom": true,
      "custom_text": "Scan to verify this certificate",
      "color": "#1e3a5f"
    },
    "app_buttons": {
      "enabled": true,
      "color": "#30acfd",
      "style": "outlined"
    }
  },
  "custom_fields": [
    {
      "label": "Certificate ID",
      "value": "CERT-2026-55"
    },
    {
      "label": "Issued To",
      "value": "Jane Doe"
    },
    {
      "label": "Program",
      "value": "Advanced Compliance"
    },
    {
      "label": "Hours",
      "value": "24"
    }
  ]
}

3) Generate request with linked document + label translations

{
  "object_type": "Contract",
  "tcode_label": "CTR-10-2026",
  "validity": {
    "until_date": "2027-10-15"
  },
  "output_image_format": "svg",
  "display_options": {
    "tcode_background": "transparent",
    "tcode_color": "#000000",
    "scan_text": {
      "enabled": true,
      "position": "below",
      "alignment": "center",
      "use_custom": false,
      "custom_text": null,
      "color": "#000000"
    },
    "app_buttons": {
      "enabled": false,
      "color": "#000000",
      "style": "filled"
    }
  },
  "custom_fields": [
    {
      "label": "Contract No",
      "value": "CTR-10-2026"
    },
    {
      "label": "Counterparty",
      "value": "Northwind AG"
    },
    {
      "label": "Region",
      "value": "DACH"
    },
    {
      "label": "Signed At",
      "value": "2026-10-15"
    }
  ],
  "linked_document": {
    "file_name": "contract.pdf",
    "mime_type": "application/pdf",
    "data_base64": "<base64-encoded-file-content>",
    "label": "Original Contract",
    "enable_label_translations": true,
    "label_translations": {
      "en": "Original Contract",
      "de": "Originalvertrag",
      "fr": "Contrat original"
    }
  }
}

Verify: /api/v1/tcode/verify-retrieve

1) Verify using compact verification value (recommended)

{
  "verification_value": "<134-char header value: version+creator_id+db_entry_id+kid+policy_flags+header_signature>"
}

2) Verify a scanned value from printed material

{
  "verification_value": "01TRYLH01A12B34C56D78E90F1KIDEXAMPLE00000000010Fh4Z8m8tN8qQ2fQ1fR9...<truncated>"
}