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.
- --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-warningsif you want diagnostics on STDERR.
Examples
# Dump a string to JSON line
iabtcfv2 dump CPi...AAA
# Dump multiple strings (one JSON object per line)
iabtcfv2 dump CPi...AAA CPj...BBB
# Read from STDIN
cat strings.txt | iabtcfv2 dump
# Pipe through `jq -s` if you need a single JSON array
cat strings.txt | iabtcfv2 dump | jq -s .
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
Purpose options
- --consent-purposes, -C 1,2,3
-
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-purposesor--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.
- --cmp-list PATH-OR-URL
-
Validate the
cmp_idembedded in each TC string against an IAB CMP registry snapshot. The argument is detected as a URL when it starts withhttp://orhttps://, otherwise it is treated as a local file path. Failures yield areasonmentioning the unknown or deleted CMP id.When the argument is a URL, the standard HTTP-proxy environment variables (
https_proxy,http_proxy,no_proxy) are honored automatically. - --cmp-list-network-ok
-
Required when --cmp-list is a URL. Without this flag, URL fetching is refused (mirrors the library's
network_ok => 1opt-in: fetching from an arbitrary URL is intentional, never accidental). Has no effect when --cmp-list is a file path. - --cmp-list-verify-ssl, --no-cmp-list-verify-ssl
-
Verify TLS certificates when fetching from an HTTPS URL. On by default; disable with --no-cmp-list-verify-ssl only when targeting a server with a self-signed or otherwise non-public-CA certificate. Has no effect when --cmp-list is a file path.
- --cmp-list-timeout SECONDS
-
Per-request timeout for the URL fetch, in seconds. Defaults to 30. Has no effect when --cmp-list is a file path.
- --all, -a
-
Accumulate every failing rule into a
reasonsarray instead of short-circuiting on the first failure. The output JSON uses pluralreasons(array) instead of singularreason(string).
Output options
- --pretty, -p
-
Output human-readable, indented JSON.
- --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.
- --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
dumpcontract). - --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, and when the --cmp-list registry snapshot is older than 28 days. 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, unreachable--cmp-listsource).
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 JSON Lines (one record per line); pipe through
# `jq -s` if you need a single JSON array.
iabtcfv2 validate -v 32 -C 1,3 CO...AAA CO...BBB
iabtcfv2 validate -v 32 -C 1,3 CO...AAA CO...BBB | jq -s .
# Reject TC strings that name an unknown or deleted CMP, using a
# local snapshot of the IAB CMP registry.
iabtcfv2 validate -v 32 --cmp-list /etc/iab/cmp-list.json CO...AAA
# Same, but fetching the registry over HTTPS through whatever
# proxy `https_proxy` points at.
iabtcfv2 validate -v 32 \
--cmp-list https://cmplist.consensu.org/v2/cmp-list.json \
--cmp-list-network-ok \
CO...AAA
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.