NAME

iabtcfv2 - CLI tool for GDPR IAB TCF v2 strings

SYNOPSIS

iabtcfv2 [options] <subcommand> [subcommand-options]

OPTIONS

--help, -h

Print a brief help message and exits.

--version, -V

Print the version and exits.

--man

Prints the manual page and exits.

SUBCOMMANDS

dump

Parses TC strings and outputs them as JSON.

validate

Validates TC strings against a vendor identity and a set of purpose lists, emitting one JSON record per string (or text lines with --text).

DUMP

Parses TC strings and outputs them as JSON.

Options

--pretty, -p

Output human-readable, indented JSON.

--json-array

Output a single JSON array containing all parsed objects.

--compact, -c

Output a compact JSON representation (lists of IDs instead of boolean maps).

--vendor-id, -v ID

Filter the output to only show data for a specific vendor ID.

--strict, -s

Enable strict specification validation. In this mode, the tool will fail if mandatory segments are missing (e.g., Disclosed Vendors in TCF v2.3).

--ignore-errors, -i

Do not output any JSON error object for failed strings.

--fail-fast, -f

Stop processing and exit the program immediately upon the first parse error.

--errors-to-stderr, -e

Output JSON error objects to STDERR instead of STDOUT.

--enable-warnings, -w

Emit human-readable warning messages on STDERR when a TC string fails to parse. Off by default; enable to get diagnostic context alongside the JSON error object.

--quiet, -q

Suppress all output on STDOUT. The exit code still reflects whether parsing succeeded, which is convenient for shell-style if iabtcfv2 dump -q "$tc" checks. Combine with --enable-warnings if you want diagnostics on STDERR.

Examples

# Dump a string to JSON line
iabtcfv2 dump CPi...AAA

# Dump multiple strings to a pretty-printed JSON array
iabtcfv2 dump --pretty --json-array CPi...AAA CPj...BBB

# Read from STDIN
cat strings.txt | iabtcfv2 dump --json-array

Short option bundling

Single-character flags can be bundled together after a single dash. The last option in the bundle may take a value as the next argument.

# Equivalent of `--pretty --ignore-errors`
iabtcfv2 dump -pi CPi...AAA

# Equivalent of `--compact --pretty`
iabtcfv2 dump -cp CPi...AAA

# Last bundled short can take a value: -p (pretty) + -v <id> (vendor-id)
iabtcfv2 dump -pv 284 CPi...AAA

# Long options accept the GNU `=value` form too
iabtcfv2 dump --vendor-id=284 CPi...AAA

Bundling does NOT support abbreviating long options (`--ver` is not accepted as a shortcut for `--version`); always use the full long-option name or its single-character short alias.

DOCKER USAGE

This tool is also available as a Docker image on Docker Hub.

Basic Usage

docker run --rm peczenyj/gdpr-iab-tcfv2 dump "CLcVDxRMWfGmWAVAHCENAXCkAKDAADnAABRgA5mdfCKZuYJez-NQm0TBMYA4oCAAGQYIAAAAAAEAIAEgAA"

Processing Streams (STDIN)

To process a stream of strings via pipe:

cat strings.txt | docker run -i --rm peczenyj/gdpr-iab-tcfv2 dump

To type strings manually:

docker run -it --rm peczenyj/gdpr-iab-tcfv2 dump

VALIDATE

Validates TC strings against a vendor identity and a set of declared purpose lists. The vendor must be allowed for every purpose in --consent-purposes on a consent basis, and for every purpose in --legitimate-interest-purposes on a legitimate-interest basis. Purposes listed in --flexible-purposes are checked using the GVL flexible-purpose semantics, with the default basis derived from which list also contains the purpose. See GDPR::IAB::TCFv2::Validator for the underlying rule engine.

By default the subcommand emits one JSON object per input TC string on STDOUT. With --text it emits one human-readable line per string instead.

Output shape

A successful validation produces:

{"tc_string":"CO...","vendor_id":32,"valid":true}

A failure in default (fail-fast) mode produces a singular reason:

{"tc_string":"CO...","vendor_id":32,"valid":false,
 "reason":"vendor 32 not allowed for purpose 1 (consent)"}

A failure in --all mode produces a plural reasons array:

{"tc_string":"CO...","vendor_id":32,"valid":false,
 "reasons":["...","..."]}

A parse error produces the same shape as the dump subcommand:

{"tc_string":"INVALID","error":"...","success":false}

Required options

--vendor-id, -v ID

The numeric vendor ID to validate against. Required.

Purpose options

Comma-separated list of purpose IDs that the vendor must be allowed to process on a consent basis.

--legitimate-interest-purposes, -L 1,2,3

Comma-separated list of purpose IDs that the vendor must be allowed to process on a legitimate interest basis.

--flexible-purposes, -F 1,2,3

Comma-separated list of purpose IDs that the vendor declared as flexible. Each ID listed here MUST also appear in either --consent-purposes or --legitimate-interest-purposes; the membership determines the default legal basis used for the flexible-purpose check.

Rule options

--check-disclosed-vendors, -d

Require the vendor to appear in the Disclosed Vendors segment when the TC string carries one. Off by default.

--strict, -s

Enable strict spec validation in the underlying parser (see dump --strict).

--min-policy-version, -m N

Reject TC strings whose Global Vendor List policy version is below N. Checked first, before any vendor- or purpose-level rules.

--all, -a

Accumulate every failing rule into a reasons array instead of short-circuiting on the first failure. The output JSON uses plural reasons (array) instead of singular reason (string).

Output options

--pretty, -p

Output human-readable, indented JSON.

--json-array

Output a single JSON array containing all validation records.

--text, -t

Output one human-readable line per TC string instead of JSON. Format:

OK     <tc>  vendor <id>
FAIL   <tc>  vendor <id>: <reason>
ERROR  <tc>: <parse error>

In --all mode, multi-reason failures span multiple indented lines. Mutually exclusive with --json-array.

--ignore-errors, -i

Skip parse errors silently (still bumps the exit code). Validation failures are still emitted.

--fail-fast, -f

Exit immediately on the first parse error or the first invalid TC string. Validation failures are emitted before exiting; parse errors are not (matches the dump contract).

--errors-to-stderr, -e

Route parse-error records to STDERR instead of STDOUT.

--enable-warnings, -w

Emit human-readable warning messages on STDERR when a TC string fails to parse. Off by default.

--quiet, -q

Suppress all output on STDOUT. The exit code still reflects validity, which is convenient for shell-style if iabtcfv2 validate -q -v 32 ... "$tc" checks.

Exit codes

  • 0 — every input TC string was parsed and validated cleanly.

  • 1 — at least one TC string failed validation or could not be parsed.

  • 2 — bad CLI usage (missing --vendor-id, incoherent purpose lists, mutually exclusive flags).

Examples

# Single string, fail-fast
iabtcfv2 validate -v 32 -C 1,3 -L 7 CO...AAA

# All reasons, pretty JSON, text-friendly
iabtcfv2 validate -av 32 -C 1,3 -L 7 -t CO...AAA

# Pipeline-friendly: just the exit code
if iabtcfv2 validate -q -v 32 -C 1,3 "$tc"; then ...

# Many strings as a single JSON array
iabtcfv2 validate -v 32 -C 1,3 --json-array CO...AAA CO...BBB

DESCRIPTION

iabtcfv2 is a command-line interface for the GDPR::IAB::TCFv2 library.

Warning: Name Change

Previous versions of this distribution (v0.300) included a standalone utility named iabtcf-dump. This has been unified into the iabtcfv2 tool using the dump subcommand.

BUGS

Report bugs and feature requests at https://github.com/peczenyj/GDPR-IAB-TCFv2/issues.