Skip to main content

The | request Filter

The | request filter is the recommended way to mark a variable for the multi-party signing flow. It registers the variable with the TemplateRequest system, assigns it to a specific requestee, supports a custom question and datatype, and produces the correct placeholder/render behavior across all three passes (unsigned → preview → final).

For the full flow walkthrough, see Multi-Party Signature & Variable Collection.

Quick Comparison

| ask| request
Who answers?The advocate running the interview.An external requestee via signing link.
When?Immediately, in the interview.When the requestee opens their personalized link.
Renders placeholder in unsigned?No — value is filled live.Yes — shows [ leaf_attribute_name ] or your custom placeholder; uploads use [ document upload ].
Document preview?n/aYes — requestee sees the preview render before signing.
Accepts question, subquestion, label, datatype, options?YesYes
fix_punctuation?YesYes
placeholder, expected_key?NoYes
Backward-compatible name?| catchall_question(...)| if_final (limited)

Reference: Keyword Arguments

KwargPurposeExample
questionQuestion text shown to the requestee. String, or dict keyed by language code.question="What is your citizenship?"
subquestionAdditional explanation below the question.subquestion="Choose the country on your passport"
labelField label.label="Full name"
datatypeAny Docassemble field type.datatype="area", datatype="radio", datatype="date"
optionsChoices for radio / dropdown / checkboxes.options=["Phone", "Email", "Text"]
placeholderText shown in unsigned renders. If omitted, the usual placeholder is [ leaf_attribute_name ]; uploads use [ document upload ].placeholder="[PLEASE SIGN]"
expected_keyRender key(s) for which the raw value is expected and returned. It is not a completion/answered-state flag; preview inclusion can bypass normal preview placeholders.expected_key=["final", "preview"]
fix_punctuationApply Docassemble punctuation repair to resolved string output. With `request, it runs only for the configured expected_key` render pass.

Examples by Datatype

Signature

{{ clients[0].signature | request }}
{{ advocate.signature | request }}

Text field

Citizenship: {{ clients[0].citizenship | request(question="What is your citizenship?") }}

Incident description:
{{ clients[0].incident_summary | request(question="Describe the incident", datatype="area") }}

Date

Date of incident: {{ clients[0].incident_date | request(question="When did this happen?", datatype="date") }}

Radio / dropdown

Preferred language:
{{ clients[0].preferred_language
| request(question="Preferred language", datatype="radio", options=["English", "Spanish"]) }}

Checkbox list

Services requested:
{{ clients[0].service_types
| request(
question="Which services do you need?",
datatype="checkboxes",
options=["Advice", "Limited Representation", "Full Representation"]
) }}

File upload (one file)

Photo of damage:
{{ clients[0].submitted_document_uploads[0]
| request(question="Upload a photo of the damaged property") }}

File upload (a list of named files)

After signing, please upload:
{{ clients[0].requested_documents["Pay stub 1"] | request(datatype="files") }}
{{ clients[0].requested_documents["Pay stub 2"] | request(datatype="files") }}

Boolean

Do you consent to electronic service?
{{ clients[0].esign_consent
| request(question="I agree to receive documents by email", datatype="yesno") }}

See Multi-Party Signing → Boolean | request Fields for how to consume a boolean | request in conditionals.

Punctuation Repair

Pass fix_punctuation=true to apply Docassemble's punctuation repair to resolved string output. This is useful when optional template text can leave awkward spacing or punctuation around an answer:

{{ clients[0].incident_summary
| request(question="Describe the incident", datatype="area", fix_punctuation=true) }}

{{ incident_summary | ask(fix_punctuation=true) }}

For | request, punctuation repair runs only on a resolved value in the configured expected_key pass (by default, final). Undefined values, placeholders, and non-string values are left unchanged.

Multilingual Prompts

Pass a dict keyed by language code. The current interview language is used; the first value in the dict is the fallback.

{{ clients[0].service_requested
| request(question={"en": "Do you want service?", "es": "Desea servicio?"}) }}

You can mix multilingual and plain-string kwargs:

{{ clients[0].incident_description
| request(
question={"en": "Describe the incident", "es": "Describa el incidente"},
subquestion="Include date, time, location, and all relevant details",
datatype="area"
) }}

How Variables Get Grouped

| request doesn't require you to declare who answers. The system routes to the variable's top-level root, meaning everything before the first dot:

VariableGoes to
clients[0].signature, clients[0].citizenshipThe first client.
spouse.signatureThe spouse requestee.
witnesses[0].signatureThe first witness.
advocate.signatureThe advocate.

You can use any ALIndividual as a requestee — the convention is to assign fields to specific individuals, not to a generic bucket.

Renders: Unsigned vs. Preview vs. Final

| request works correctly in all three render passes:

PassWhat the requestee seesWhen it happens
unsignedplaceholder value (e.g. [SIGNATURE]).Advocate-side preview before any request goes out.
previewAll currently defined requested values; undefined values are placeholders.When the requestee opens their link.
finalEvery value is filled.When the final, legally signed document is rendered.

Backward Compatibility

The legacy | if_final filter is still available — it only controls whether a value appears in the final render. It does not register variables for the signing flow, support document preview, or accept any kwargs.

| ask itself is the modern replacement for the older | catchall_question, | catchall_subquestion, | catchall_datatype, | catchall_options, and | catchall_complete filters. | ask(question="...", datatype="...") is equivalent to | catchall_question("...") | catchall_datatype("..."), just shorter.

Use | request and | ask for all new templates.

Further Reading