zpl.tools
Host status and queries

^HV - Host Verification

Sends the contents of a numbered field back to the host as the label is processed.

^HV is the one command in this group that reads the label rather than the printer. It takes a numbered field out of the current format and returns that field's data over the link. An optional prefix and suffix let the host find it in the stream. An applicator or a verifier uses it to confirm what reached the media, because the reply carries the data the printer used, not the data the host sent.

Syntax

^HV#,n,h,t,m

Support

Recognised, deliberately skippedparsed: none · state: none · rendered: none

Accepted and skipped, because it configures the printer rather than the label. It cannot change the rendered output, and Labelary skips it too.

Echoes a field's data over the printer's link, which is how an applicator verifies a printed field. It draws nothing itself, so the label does not change. It also depends on ^FN, which is planned: the parser reads numbered fields but does not yet fill them from a stored format. The renderer does not parse this command. It reports IGNORED_COMMAND at info severity, which does not reach X-Warnings. Labelary is also silent, so the rendered label is identical in both engines. — not pinned by a test

Labelary renders this command.

Parameters

#Field numberoptional · integer

Which numbered field to echo. It matches the number given to the field by ^FN, ^RT or ^RF.

Default
0
Accepted range
0 to 9999
Invalid value
not documented, and we have not measured it. The renderer does not parse or measure this command.
Test coverage
No test at the minimum, maximum or one step outside the range.
nBytes returnedoptional · integer

How many bytes of the field's data to send. The printer truncates longer data to this length.

Default
64
Accepted range
1 to 256 bytes
Invalid value
not documented, and we have not measured it. The renderer does not parse or measure this command.
Test coverage
No test at the minimum, maximum or one step outside the range.
hPrefixoptional · text

Text sent before the field data, so the host can find the start of the reply. The guide limits it to 3072 bytes.

Default
none
Accepted range
0 to 3072 bytes
Invalid value
not documented, and we have not measured it. The renderer does not parse or measure this command. The reference states no default; an omitted argument sends nothing.
Test coverage
No test at the minimum, maximum or one step outside the range.
tSuffixoptional · text

Text sent after the field data, so the host can find the end of the reply.

Default
none
Invalid value
not documented, and we have not measured it. The renderer does not parse or measure this command. The reference states no default; an omitted argument sends nothing.
Test coverage
mReply frequencyoptional · one of a set

Whether the data goes out once per label definition or once per label printed, which differ when ^PQ or ^SN multiply the count.

Default
F
Invalid value
not documented, and we have not measured it. The renderer does not parse or measure this command.
Test coverage
No documented value is exercised by a test (F, L).
F
Once per label definition processed (default)
L
Once per label printed

Behavior

The field number comes from elsewhere in the format, from ^FN, ^RT or ^RF. ^HV therefore always pairs with a numbered field, and a number that matches nothing returns nothing.

^HV does not draw and does not suppress. The field it names prints exactly as it prints without ^HV. Measured against Labelary on 2026-07-30: ^FO50,50^A0N,40,40^FN1^FDSERIAL123^FS with ^HV1,10 after it prints SERIAL123 on the label, and the ^HV changes nothing on the page.

The two arguments that shape the reply have no visible effect either. n truncates the data to a byte count, so the printer reports a longer field short and prints it in full, which confuses a verifier that compares the two. m decides whether the reply comes once per label definition or once per printed label, and the two differ only when ^PQ or ^SN turn one definition into several labels.

None of that happens here. A render request has no link to send the data on. The renderer ignores the command, and the page is exactly what the fields draw. It reports IGNORED_COMMAND at info severity, which does not reach X-Warnings. Labelary is also silent. Render the label to see what a format resolves a field to, because no side channel exists.

Differences from the specification

Labelary against the ZPL II guide

Where Labelary — our compatibility target — behaves differently from the printed specification.

  • Labelary documents five arguments. The 2006 guide's format line is ^HV#,n,h, only three, and describes no suffix and no reply-frequency argument. Only Labelary and later firmware document t and m. — not pinned by a test

Example

Field 1 prints and is nominated for verification. Only the printing part has any effect on the output.

^XA
^FO50,50^A0N,40,40^FN1^FDSERIAL123^FS
^HV1,10,SERIAL:,>,F
^XZ

Open in viewer