Forms commands

Reference for the `revenexx forms` commands — every subcommand with a runnable example.

Auto-generated. This page is generated from the revenexx CLI by tools/sync-cli-reference.mjs. Don't edit it by hand — your changes will be overwritten.

Every revenexx forms subcommand. The example shows the required arguments; the options table lists every flag the command accepts, with a ✓ marking required flags. Some flag names carry a -_ (e.g. --attribute-_values) — that is the exact token the CLI accepts, so copy them verbatim. Run revenexx forms <command> --help for the live options.

create

Bash
revenexx forms create \
    --name Price request \
    --slug price-request
FlagRequiredDescription
--name <name>What this form is called in the Cockpit's form list. Operator-facing only — the storefront never renders it, so renaming a form breaks no page.
--slug <slug>URL-safe identifier, unique per tenant. This is the name a storefront resolves a form by (\
--definition [definition...]The form itself: a FormKit schema, held as a flat ARRAY of nodes (it defaults to \
--metadata <metadata>Free-form metadata on the FORM, which this app neither reads nor writes: yours to key however an integration needs, stored and returned verbatim. (The metadata this app does write is on a SUBMISSION — see \
--settings <settings>Submit label, success message, per-form notify email, post-submit actions, translations — see the \
--status <status>Lifecycle. \

defaults

Bash
revenexx forms defaults

delete

Bash
revenexx forms delete \
    --id ''
FlagRequiredDescription
--id <id>The form, by id.

get

Bash
revenexx forms get \
    --id ''
FlagRequiredDescription
--id <id>The form, by id.

list

Bash
revenexx forms list
FlagRequiredDescription
--id <id>Filter to one form by id, which answers a one-row page rather than the row — \
--name <name>Filter to one form by its exact name. Whole-value equality and case-sensitive — there is no substring search on this API.
--slug <slug>Filter to one form by its slug — unique per tenant, so this is how a storefront resolves a form without knowing its id. \
--status <status>Filter to one lifecycle status. \
--created-at <created-at>Filter to forms created at EXACTLY this instant. Equality, not a range: a date alone matches only a row whose timestamp is exactly that, so it selects nothing for a whole day. To read by time, sort instead (\
--updated-at <updated-at>Filter to forms last written at EXACTLY this instant — the same equality-not-range caveat as \
--limit <limit>Page size. Default 50; a value above 200 is clamped to 200 rather than refused, and \
--offset <offset>How many matching rows to skip. Page N is \
--order <order>Sort by one column: 'column' | 'column.asc' | 'column.desc'. A bare column sorts ascending. Anything else is refused with 400.
--filter <column=value>Filter rows by column equality (repeatable).

submissions-create

Bash
revenexx forms submissions-create \
    --data '{ "key": "value" }' \
    --form-id ''
FlagRequiredDescription
--data <data>What the visitor typed — the substance of the submission, and the reason this row is the payload of \
--form-id <form-id>The form this submission was made against. It is resolved at insert, so an id no form in this tenant holds is a 404 and nothing is stored — a submission with no form is a lead nobody can read. Required on a create: it is the only thing that says which form was filled in.
--form-slug <form-slug>The form's slug as it stood when this submission arrived, copied onto the row: the inbox filters by form without a join, and a submission still says which form collected it after that form has been renamed. It does not outlive a DELETED form — the foreign key cascades and takes the submission with it. On a write the body's value WINS; omit it and the form's own slug is copied in. So: OPTIONAL — send it and it is stored as sent, even if it disagrees with the form; omit it and the form's own slug is filled in from \
--metadata <metadata>Free-form metadata, yours to key as an integration needs. The resolved notification recipient is merged OVER it at insert, so \
--source <source>Where the submission came from. The storefront sends the \
--status <status>Inbox triage. \

submissions-delete

Bash
revenexx forms submissions-delete \
    --id ''
FlagRequiredDescription
--id <id>The submission, by id.

submissions-get

Bash
revenexx forms submissions-get \
    --id ''
FlagRequiredDescription
--id <id>The submission, by id.

submissions-list

Bash
revenexx forms submissions-list
FlagRequiredDescription
--id <id>Filter to one submission by id, as a one-row page. \
--form-id <form-id>Filter to one form's inbox, by id — the reliable one, because it survives a rename of the slug.
--form-slug <form-slug>Filter to one form's inbox by slug — the denormalised copy, so neither a join nor a prior lookup of the form is needed.
--source <source>Filter to one origin, exactly as it was recorded — normally the page path the storefront sent. Whole-value equality, so it selects one page and not a prefix.
--status <status>Filter to one inbox status. \
--created-at <created-at>Filter to submissions that arrived at EXACTLY this instant. Equality, not a range, so this is not how a date span is read — sort (\
--updated-at <updated-at>Filter to submissions last written at EXACTLY this instant — the same equality-not-range caveat as \
--limit <limit>Page size. Default 50; a value above 200 is clamped to 200 rather than refused, and \
--offset <offset>How many matching rows to skip. Page N is \
--order <order>Sort by one column: 'column' | 'column.asc' | 'column.desc'. A bare column sorts ascending. Anything else is refused with 400.
--filter <column=value>Filter rows by column equality (repeatable).

submissions-prune

Bash
revenexx forms submissions-prune
FlagRequiredDescription
--dry-run [value]Default TRUE. Nothing is deleted until this is explicitly false.
--form-slug <form-slug>Narrow the sweep to one form.
--older-than-days <older-than-days>Age threshold. Omit to use the retention floor. A value BELOW the floor is raised to it — the setting is the floor, not a default, and the floor is the LONGEST submission_retention_days configured anywhere in the tenant (see the operation description).
--status <status>Narrow the sweep to one inbox status, e.g. 'spam'.

submissions-update

Bash
revenexx forms submissions-update \
    --id ''
FlagRequiredDescription
--id <id>The submission, by id.
--data <data>What the visitor typed — the substance of the submission, and the reason this row is the payload of \
--form-id <form-id>The form this submission was made against. It is resolved at insert, so an id no form in this tenant holds is a 404 and nothing is stored — a submission with no form is a lead nobody can read. Required on a create: it is the only thing that says which form was filled in.
--form-slug <form-slug>The form's slug as it stood when this submission arrived, copied onto the row: the inbox filters by form without a join, and a submission still says which form collected it after that form has been renamed. It does not outlive a DELETED form — the foreign key cascades and takes the submission with it. On a write the body's value WINS; omit it and the form's own slug is copied in. So: OPTIONAL — send it and it is stored as sent, even if it disagrees with the form; omit it and the form's own slug is filled in from \
--metadata <metadata>Free-form metadata, yours to key as an integration needs. The resolved notification recipient is merged OVER it at insert, so \
--source <source>Where the submission came from. The storefront sends the \
--status <status>Inbox triage. \

update

Bash
revenexx forms update \
    --id ''
FlagRequiredDescription
--id <id>The form, by id.
--definition [definition...]The form itself: a FormKit schema, held as a flat ARRAY of nodes (it defaults to \
--metadata <metadata>Free-form metadata on the FORM, which this app neither reads nor writes: yours to key however an integration needs, stored and returned verbatim. (The metadata this app does write is on a SUBMISSION — see \
--name <name>What this form is called in the Cockpit's form list. Operator-facing only — the storefront never renders it, so renaming a form breaks no page.
--settings <settings>Submit label, success message, per-form notify email, post-submit actions, translations — see the \
--slug <slug>URL-safe identifier, unique per tenant. This is the name a storefront resolves a form by (\
--status <status>Lifecycle. \

vocabularies-get

Bash
revenexx forms vocabularies-get \
    --name form-statuses
FlagRequiredDescription
--name <name>The vocabulary name — the part after the dot in the qualified id.

vocabularies-list

Bash
revenexx forms vocabularies-list
FlagRequiredDescription
--filter <column=value>Filter rows by column equality (repeatable).
Was this page helpful?