A product which starts without a person at the keyboard, such as a scheduled task, a pipeline or a container, can not answer the two questions it asks at its first start: whether the licence agreement is accepted, and who the user is. These environment variables answer both in advance. Every one has a command-line option with the same effect, described below. The following environment variables are available on all platforms and products which run on Invantive Producer, including the add-ins for Microsoft Excel, Word and Outlook, which have no command line: - `INVANTIVE_ACCEPT_LICENSE`: the code of the licence variant whose agreement is accepted. Without it the agreement is accepted in the Agreement window or in the agreement menu. Available from release 27.0. - `INVANTIVE_PERSON_FIRST_NAME`: the first name of the user, used when the stored first name is missing or not acceptable. Available from release 27.0. - `INVANTIVE_PERSON_LAST_NAME`: the last name of the user, used when the stored last name is missing or not acceptable. Available from release 27.0. - `INVANTIVE_PERSON_PHONE_WORK_NUMBER`: the work phone number of the user, used when the stored number is missing or not acceptable. Available from release 27.0. A value is only used where the product would otherwise ask. A run which gives none behaves as before: a product without a console ends with `itgenuty727`, "The license was not accepted before running in headless mode", or with one of the messages about the personal information, `itgenutz239`, `itgenuty691` to `itgenuty694` and `itgenuty709` to `itgenuty711`. The licence key can be supplied by file and the agreement by variable, which keeps the key out of the pipeline definition. The key is supplied as described in [[License Service]]; reading a key never accepts an agreement: ``` INVANTIVE_LICENSE_FILE_PATH=/run/secrets/invantive.licx INVANTIVE_ACCEPT_LICENSE=<variant code> ``` The agreement is accepted under the following rules: - The code has to equal the variant of the licence key in use. A different code, for instance because the agreement changed since the pipeline was written, accepts nothing. - A run with a different code reports `itgenlhr047`, "The license key is of variant 'A' and the option names variant 'B', so the agreement is not accepted.", and ends as a run without the variable does. The message names the variant of the key, which is the value to use once the agreement of that variant has been read. - The value has no wildcard and no "latest". Naming the variant is what makes the acceptance one of that agreement: when the agreement changes to another variant, a pipeline which still names the old one stops until somebody has read the new agreement and changed the value. - The licence key has to be valid. A key without a valid licence accepts nothing. - An agreement which is accepted already, in the variant of the key, is left as it is: nothing is written and no event is raised. A container whose configuration folder is lost at every start accepts again at every start, and each acceptance raises its event. - A blank value counts as no value. - Invantive Data Access Point has no agreement window and therefore has no variable for it. The personal information is used under the following rules: - A value replaces only a part which is missing or not acceptable in the settings. A name or number which is acceptable already is never replaced. - A value has to pass the same check as one typed in the window. The products refuse a placeholder such as `Doe` or `test` as last name and a phone number which is no number, so an example for a run uses `John Smith`. A refused value is not stored, and the run ends on the message of the missing part as before. - The person is the one who answers for the run, such as the owner of the integration, with a work phone number which reaches them. That is a decision of the licensee: the product does not relax the check for a run without a window. - No value gives consent for personal information, because it is data about a person. There is therefore no variable which accepts the personal information as a whole. The command-line options with the same effect are the following. The command line wins from the environment variable, for each value separately, and a difference between the two is traced as the warning `itgenlhr050`: - `/acceptlicense` or `/accept-license`: the code of the licence variant to accept. - `/personfirstname` or `/person-first-name`: the first name. - `/personlastname` or `/person-last-name`: the last name. - `/personphonework` or `/person-phone-work`: the work phone number. - [[Invantive Data Hub/Command Line Options|Invantive Data Hub]] reads the options with a colon between the name and the value, as for its other arguments, and in the first spelling only. - [[Invantive Query Tool/Command Line Options|Invantive Query Tool]], [[Invantive Studio/Command Line Options|Invantive Studio]], [[Invantive Runtime/Command Line Options|Invantive Runtime]], [[Invantive Data Loader/Command Line Options|Invantive Data Loader]], [[Invantive Estate/Command Line Options|Invantive Estate]] and [[Invantive Business/Command Line Options|Invantive Business]] read them as `/name=value` and list them in their usage. - [[Invantive Query Tool Multi-Platform/Command Line Options|Invantive Query Tool Multi-Platform]] and the other multi-platform products read them as `/name:value`, `/name=value` or `--name=value` and list them in their usage. The report of the state asks the product what is left to answer, without answering it: - `/licenseinfo` or `/license-info`: write the state of the licence, the agreement and the personal information as JSON to the standard output and end with exit code 0, without a database, a statement or a window. It is read-only: it accepts nothing, asks nothing and changes no setting. Available from release 27.0. - `licenseKey`: whether a key was found, `origin` as one of `CommandLine`, `Environment`, `File` or `UserSettings`, whether it is `valid`, and the `problem` when it is not. The key itself is never written. - `license`: the `contractCode`, the `variantCode`, whether the variant is `variantKnownToThisRelease`, `expirationDateUtc` and `isTrial`. - `agreement`: the `variantCode`, the `title`, the full `text` and `textDigestSha256` of the agreement of the key, whether it is `accepted`, and when, in which variant and `acceptedVia`. The value to name in `/acceptlicense` is the `variantCode`, once the `text` has been read. The member `requested` holds what the command line or the environment asks to accept and whether it `matchesVariant`. - `person`: whether the first name, the last name and the work phone number are acceptable, as `firstNameAcceptable`, `lastNameAcceptable` and `phoneWorkNumberAcceptable`, and `via`. The values themselves are not written. - A product without a valid key reports `present` and `valid` as `false` and leaves `license` and the text of the agreement empty. On the 27.0 line the report names the key from the command line or from the user settings only, and every variant of a valid key counts as known. The report is written with the opening brace and the comma at the start of the line. The following example shows an agreement which is accepted already, with the text of the agreement shortened: ```json { "schema": 1 , "product": "Invantive Data Hub Multi-Platform (27.0.51-PROD+6395)" , "licenseKey": { "present": true , "origin": "UserSettings" , "valid": true , "problem": null } , "license": { "contractCode": "L123456789" , "variantCode": "<variant code>" , "variantKnownToThisRelease": true , "expirationDateUtc": null , "isTrial": false } , "agreement": { "variantCode": "<variant code>" , "title": "Software Subscription" , "text": "Subscription Agreement ..." , "textDigestSha256": "ed6ab446954af7f12c8d841ca32e1783aa729a42c88f3164cd9a8aeef5bf643a" , "accepted": true , "acceptedVariantCode": "<variant code>" , "acceptedAtUtc": "2026-08-23T10:18:46Z" , "acceptedVia": "interactive" , "requested": { "channel": null , "value": null , "matchesVariant": false } } , "person": { "firstNameAcceptable": true , "lastNameAcceptable": true , "phoneWorkNumberAcceptable": true , "via": null } } ``` The report is meant for a person, a script or an AI agent which has to know which variant to name and whether anything is left to answer. Reading the agreement is not accepting it: the person who configures the run decides to name the variant. The settings files record how each answer was given, next to the answer itself: - `LicenseAcceptedVia` in `product-installation-user.settings.json`, next to `DateTimeLicenseAcceptedUtc` and `LastAcceptedLicenseVariantCode`. - `PersonInformationVia` in `user.settings.json`, next to the name and the phone number. It tells how the last of the three values changed; setting a value to what it already is does not change it. - Both hold one of `interactive`, `command-line` or `environment`: entered by a person in a window or in the text menu, given as an option, or given as an environment variable. - An empty value means the answer was recorded before these properties existed, which was always interactive. An acceptance by option or variable raises the event `itgenlic164`, the event which an acceptance in the Agreement window raises as well. These data are added to the time, the variant, and the title and text of the agreement which the event always holds: - `invantive-producer-agreement-accepted-via`: `command-line` or `environment`. - `invantive-producer-agreement-accepted-switch-value`: the value which was given. - `invantive-producer-agreement-accepted-text-digest`: the SHA-256 digest of the text of the agreement, in lower case hexadecimal. - `invantive-producer-agreement-accepted-contract`: the licence contract code of the key, such as `L123456789`. - `invantive-producer-agreement-accepted-product`: the product and its version. The run writes `itgenlhr049` to the trace when it accepts and `itgenlhr048` when the variant differs. An acceptance in the Agreement window records `interactive` in the settings and does not carry the additions above. The licence variant is no personal data. The first name, last name and phone number are, which has the following consequences: - A value on the command line is visible in the list of processes of the host and in the shell history. An environment variable is visible to whoever can inspect the process or the container. Prefer the environment variable for a person, and a secret store for the environment of a container. - The run writes no personal value to the trace when it takes one from the command line or the environment, and Invantive Data Hub keeps the values of these options out of its trace of the command line. The settings of the person themselves report a change of a value at debug level, as they always did, and the settings keep that change with its old and new value for seven days, so keep a trace at that level and the settings files as personal data. - The licence key is not touched by any of this and is never written to the trace.