Recued
Menu
← Back to recipes

Start paid document fulfillment

by recued-core v21 14 views

Use “Start paid document fulfillment” in Recued. It carries out the named workflow using the connections and settings you choose.

Complete workflow

Paid Document Fulfillment 11 pinned recipes

Use Paid Document Fulfillment in Recued for transactional offer, paid workflow, form response, and payment. It includes 10 ready-to-run workflows and 4 related packs in one install.

You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.

Use “Start paid document fulfillment” in Recued. It carries out the named workflow using the connections and settings you choose.

pack:paid-document-fulfillmentform-response-templaterecipe-role:origindurable-coordinator
by recued-core pinned v21

Use “Reconcile document payments against Stripe” in Recued. Owner-attended payment sweep - the manual safety net under the webhook observer.

pack:paid-document-fulfillmentrecipe-role:reconcilerpayment-observerprovider-source-truth
by recued-core pinned v11

Use “Reconcile a paid document refund” in Recued. Owner-attended refund close for one order.

pack:paid-document-fulfillmentrecipe-role:reconcilerprovider-source-truthd-200
by recued-core pinned v3

Use “Inspect a paid document dispute” in Recued. Owner-attended read-only inspection binding one Stripe Dispute to one order.

pack:paid-document-fulfillmentrecipe-role:inspectorprovider-source-truthd-200
by recued-core pinned v3

Use “Generate paid document” in Recued. It carries out the named workflow using the connections and settings you choose.

pack:paid-document-fulfillmentrecipe-role:fulfillmentowner-attendedexact-artifact-generation
by recued-core pinned v9

Use “Review paid document artifacts” in Recued. It carries out the named workflow using the connections and settings you choose.

pack:paid-document-fulfillmentrecipe-role:reviewowner-attendedchat-exposed
by recued-core pinned v11
Show all 11 recipes

Use “Approve and deliver paid document” in Recued. It carries out the named workflow using the connections and settings you choose.

pack:paid-document-fulfillmentrecipe-role:deliveryowner-attendedexact-artifact-delivery
by recued-core pinned v10

Use “Reconcile paid document delivery” in Recued. Owner-attended mail-claim reconciliation for one order's two sends: the checkout-link mail (start) and the delivery mail (approve-deliver).

pack:paid-document-fulfillmentrecipe-role:reconcilermaild-200
by recued-core pinned v4

Use “Reject or cancel paid document” in Recued. It carries out the named workflow using the connections and settings you choose.

pack:paid-document-fulfillmentrecipe-role:actionowner-attendedmanual-user-only
by recued-core pinned v4

Use “Close and archive a paid document fulfillment” in Recued. Owner-attended close for one order that never took money: draft, pricing, awaiting payment (verified unpaid at Stripe by a fresh read of its own session), or expired moves to cancelled. A session the provider reports paid refuses loudly - run the payment sweep instead.

pack:paid-document-fulfillmentrecipe-role:reconcilerlifecycled-200
by recued-core pinned v4
View pack details, dependencies, and permissions →

One paid outcome, not an access tier

This is the inert entry template for the complete Paid Document Fulfillment pack. One owner-accepted form response can become one provider-verified payment, one reviewed PDF, and one governed delivery. The Marketplace install intent resolves to the full workflow pack or fails closed; it never installs this recipe alone and does not create a Seller access tier, customer token, entitlement, or usage row. It also creates no Seller outcome offer unless the saved recipe explicitly opts in and runs.

Configure before the first run

  1. After an owner accepts an intake response, open Data -> Form responses, select that response, and choose Automate this form.
  2. In Kitchen, choose Use installed workflow template, review the exact-form clone, and save it. The clone keeps the pack-owned shared-state namespace, records its fork provenance, and creates a paused trigger scoped to that one form.
  3. Configure the saved recipe before running or arming it: positive minor-unit price, currency, exact Stripe connection, exact notification-mail sender, owner-authored checkout-link subject/body, durable Markdown template file, Checkout success/cancel HTTPS URLs, expiry, product copy, and generation mode. The checkout body must retain [[checkout_url]]; both fields may use [[product_name]]. These closed placeholders are rendered deterministically and the exact subject is pinned before mail. AI never writes customer communications. To register the outcome in core Seller, also choose a stable local offer id and explicitly enable Register Seller outcome draft. Leave it disabled when the recipe should remain unlisted.
  4. Return to the accepted response in Data, choose Run this response, and review the routing context and configuration. If Seller registration is enabled, the run exact-validates an existing definition or creates one draft and attaches that still-unlinked offer to this exact saved recipe. It never activates the offer, edits its definition, redirects an existing recipe link, or copies transaction state into Seller. The normal run starts the first fulfillment manually without re-emitting acceptance. Continue through the payment-verification, generation, artifact-review, and governed-delivery surfaces below until the order is complete.
  5. Only after one manual fulfillment proves the configuration, open Automation and explicitly arm the saved exact-form trigger. Installing, upgrading, cloning, and saving never arm it or register a Seller offer.

Static generation remains the default. AI mode additionally needs a configured LLM gateway and a literal [[ai.draft]] placeholder in the pinned Markdown template. Model refusal, invalid output, or a missing placeholder leaves recoverable state and requires an explicit static retry; it never silently changes the selected mode.

Operate and recover

  • Seller orders show each order's durable phase, revision, artifact pins, and owner-actionable error copy.
  • Verify payments re-reads exact Stripe source truth and advances only complete-and-paid sessions.
  • Generate document source-checks the selected static/AI plan and creates bytes only from provider-verified paid or already-generating state.
  • Review artifacts presents hash-pinned PDFs and the source-checked approve, regenerate, reject, cancel, and delivery-recovery actions.
  • Reconcile delivery observes one already-fenced mail attempt. Missing or uncertain evidence never authorizes resend.

Seller is a core-owned surface: durable outcome offers use author-chosen stable local offer ids and fixed core.seller.* capabilities that any normally authorized recipe may compose against. This recipe supplies only offer content and fixed price; core stamps recipe provenance and creates only a draft. On the first opted-in transaction-free run, one core operation may attach an unlinked offer only to the exact executing creator recipe. That attachment is navigation only and grants no fulfillment or transaction authority. This pack, its publisher, and its version are Marketplace distribution provenance only, never Seller identity or authority. Payment, artifact, approval, delivery, and reconciliation authority remains inside the source-checked recipes and server capabilities.

How it works 182 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Data fetch
form_response ?
Process (181 steps)
submission_id default
Apply default
template_file ?
template_format_supported switch
Map template file mime type to one of: text/plain, text/markdown
template_format_guard guard
Stop if template format supported equals
visitor_email default
Apply default
has_visitor_email compare
Check if visitor email has data
now_iso date_add
Add 0 seconds to
now_ms date_parse
Parse now iso as a date
amount_minor_number to_number
Convert setting amount minor to a number
amount_minor_floor math
Calculate amount minor number floor
amount_minor_integer compare
Check if amount minor number equals amount minor floor
amount_minor_positive compare
Check if amount minor number is greater than 0
amount_minor_safe compare
Check if amount minor number is at most 9007199254740991
amount_minor_valid all
Check if all conditions are true
amount_minor_guard guard
Stop if amount minor valid equals
currency_supported switch
Map setting currency to one of: eur, gbp, usd
currency_guard guard
Stop if currency supported equals
checkout_expiry_hours_number to_number
Convert setting checkout expiry hours to a number
checkout_expiry_minimum compare
Check if checkout expiry hours number is at least 0.5
checkout_expiry_maximum compare
Check if checkout expiry hours number is at most 24
checkout_expiry_seconds_number math
Calculate checkout expiry hours number times 3600
checkout_expiry_seconds_floor math
Calculate checkout expiry seconds number floor
checkout_expiry_whole_seconds compare
Check if checkout expiry seconds number equals checkout expiry seconds floor
checkout_expiry_valid all
Check if all conditions are true
checkout_expiry_guard guard
Stop if checkout expiry valid equals
checkout_expiry_window_ms math
Calculate checkout expiry seconds floor times 1000
stripe_connection_name default
Apply default
stripe_connection_name_truncated truncate
Truncate stripe connection name to a max length
stripe_connection_name_present compare
Check if stripe connection name has data
stripe_connection_name_bounded compare
Check if stripe connection name equals stripe connection name truncated
checkout_success_url_https starts_with
Check if setting checkout success url starts with https://
checkout_success_url_truncated truncate
Truncate setting checkout success url to a max length
checkout_success_url_bounded compare
Check if setting checkout success url equals checkout success url truncated
checkout_cancel_url_https starts_with
Check if setting checkout cancel url starts with https://
checkout_cancel_url_truncated truncate
Truncate setting checkout cancel url to a max length
checkout_cancel_url_bounded compare
Check if setting checkout cancel url equals checkout cancel url truncated
checkout_product_name_trimmed trim
Trim whitespace from setting checkout product name
checkout_product_name_present compare
Check if checkout product name trimmed has data
checkout_product_name_truncated truncate
Truncate setting checkout product name to a max length
checkout_product_name_bounded compare
Check if setting checkout product name equals checkout product name truncated
checkout_product_name_has_open_placeholder compare
Check if checkout product name trimmed contains [[
checkout_product_name_has_close_placeholder compare
Check if checkout product name trimmed contains ]]
checkout_product_description_truncated truncate
Truncate setting checkout product description to a max length
checkout_product_description_bounded compare
Check if setting checkout product description equals checkout product description truncated
checkout_link_mail_subject_template trim
Trim whitespace from setting checkout link email subject
checkout_link_mail_subject_template_present compare
Check if checkout link mail subject template has data
checkout_link_mail_subject_template_truncated truncate
Truncate checkout link mail subject template to a max length
checkout_link_mail_subject_template_bounded compare
Check if checkout link mail subject template is one of checkout link mail subject template truncated
checkout_link_mail_subject_template_has_lf compare
Check if checkout link mail subject template contains
checkout_link_mail_subject_template_has_cr compare
Check if checkout link mail subject template contains
checkout_link_mail_subject_template_without_product replace
Replace text in checkout link mail subject template
checkout_link_mail_subject_template_has_unknown_open compare
Check if checkout link mail subject template without product contains [[
checkout_link_mail_subject_template_has_unknown_close compare
Check if checkout link mail subject template without product contains ]]
checkout_link_mail_body_template trim
Trim whitespace from setting checkout link email body
checkout_link_mail_body_template_present compare
Check if checkout link mail body template has data
checkout_link_mail_body_has_url_placeholder compare
Check if checkout link mail body template contains [[checkout_url]]
checkout_link_mail_body_template_truncated truncate
Truncate checkout link mail body template to a max length
checkout_link_mail_body_template_bounded compare
Check if checkout link mail body template is one of checkout link mail body template truncated
checkout_link_mail_body_template_without_product replace
Replace text in checkout link mail body template
checkout_link_mail_body_template_without_url replace
Replace text in checkout link mail body template without product
checkout_link_mail_body_template_has_unknown_open compare
Check if checkout link mail body template without url contains [[
checkout_link_mail_body_template_has_unknown_close compare
Check if checkout link mail body template without url contains ]]
checkout_link_mail_templates_preflight_valid all
Check if all conditions are true
checkout_link_mail_templates_preflight_guard guard
Stop if checkout link mail templates preflight valid equals
checkout_request_valid all
Check if all conditions are true
checkout_request_guard guard
Stop if checkout request valid equals
seller_offer_registration_enabled compare
Check if setting register seller offer equals true
seller_offer_id_trimmed trim
Trim whitespace from setting seller offer id
seller_offer_id_lowercase lowercase
Convert seller offer id trimmed to lowercase
seller_offer_id_truncated truncate
Truncate seller offer id trimmed to a max length
seller_offer_id_present compare
Check if seller offer id trimmed has data
seller_offer_id_bounded compare
Check if seller offer id trimmed equals seller offer id truncated
seller_offer_id_is_lowercase compare
Check if seller offer id trimmed equals seller offer id lowercase
seller_offer_display_name_truncated truncate
Truncate checkout product name trimmed to a max length
seller_offer_display_name_bounded compare
Check if checkout product name trimmed equals seller offer display name truncated
seller_offer_description_trimmed trim
Trim whitespace from setting checkout product description
seller_offer_currency uppercase
Convert setting currency to uppercase
seller_offer_registration_valid all
Check if all conditions are true
seller_offer_registration_guard guard
Stop if seller offer registration valid equals
skip: step.seller_offer_registration_enabled equal false
seller_offer_id_valid_for_order all
Check if all conditions are true
seller_offer_order_guard guard
Stop if seller offer id valid for order equals
skip: step.seller_offer_id_present equal false
seller_offer_get ?
skip: step.seller_offer_id_present equal false
seller_offer_missing compare
Check if seller offer get offer is missing
seller_offer_existing compare
Check if seller offer get offer exists
seller_offer_existing_kind_exact compare
Check if seller offer get offer kind equals document
seller_offer_existing_display_name_exact compare
Check if seller offer get offer display name equals checkout product name trimmed
seller_offer_existing_description_exact compare
Check if seller offer get offer description equals seller offer description trimmed
seller_offer_existing_pricing_exact compare
Check if seller offer get offer pricing kind equals fixed
seller_offer_existing_amount_exact compare
Check if seller offer get offer amount minor equals amount minor number
seller_offer_existing_currency_exact compare
Check if seller offer get offer currency equals seller offer currency
seller_offer_existing_fulfillment_unlinked compare
Check if seller offer get offer fulfillment recipe id is missing
seller_offer_existing_fulfillment_self compare
Check if seller offer get offer fulfillment recipe id equals meta recipe id
seller_offer_existing_fulfillment_valid any
Check if any of the conditions are true
seller_offer_existing_definition_valid all
Check if all conditions are true
seller_offer_registration_admitted any
Check if any of the conditions are true
seller_offer_definition_guard guard
Stop if seller offer registration admitted equals
skip: step.seller_offer_registration_enabled equal false
seller_offer_ensure_required all
Check if all conditions are true
seller_offer_ensure ?
skip: step.seller_offer_ensure_required equal false
seller_offer_fulfillment_link_missing any
Check if any of the conditions are true
seller_offer_fulfillment_attach_required all
Check if all conditions are true
seller_offer_fulfillment_attach ?
skip: step.seller_offer_fulfillment_attach_required equal false
defaults defaults
Apply defaults
offer_active all
Check if all conditions are true
offer_priced compare
Check if seller offer get offer amount minor exists
order_open_allowed all
Check if all conditions are true
order_open ?
skip: step.order_open_allowed equal false
order_opened compare
Check if order open order exists
order_currency_lower lowercase
Convert order open order currency to lowercase
order_has_no_session compare
Check if order open order provider session id is missing
checkout_expires_at_ms_raw math
Calculate now ms plus checkout expiry window ms
checkout_expires_at_seconds_raw math
Calculate checkout expires at ms raw divided by 1000
checkout_expires_at_seconds math
Calculate checkout expires at seconds raw floor
checkout_expires_at_ms math
Calculate checkout expires at seconds times 1000
checkout_create_allowed all
Check if all conditions are true
checkout_session_create ?
skip: step.checkout_create_allowed equal false
provider_session_id default
Apply default
provider_session_id_truncated truncate
Truncate provider session id to a max length
provider_session_id_bounded compare
Check if provider session id is one of provider session id truncated
provider_session_id_prefix starts_with
Check if provider session id starts with cs_
provider_session_id_valid all
Check if all conditions are true
provider_mode_matches compare
Check if checkout session create result mode equals payment
provider_client_reference_matches compare
Check if checkout session create result client reference id equals order open correlation client reference id
provider_metadata_matches compare
Check if checkout session create result metadata recued workflow key equals order open correlation session metadata order key
provider_amount_matches compare
Check if checkout session create result amount total equals order open order amount minor
provider_currency_matches compare
Check if checkout session create result currency equals order currency lower
provider_result_matches_request all
Check if all conditions are true
provider_result_guard guard
Stop if provider result matches request equals
skip: step.checkout_create_allowed equal false
attach_payment_allowed all
Check if all conditions are true
attach_payment ?
skip: step.attach_payment_allowed equal false
effective_session_id coalesce
Use the first available value from: order open order provider session id, checkout session create result id
effective_session_present compare
Check if effective session id has data
checkout_link_read_allowed all
Check if all conditions are true
checkout_link_session_read ?
skip: step.checkout_link_read_allowed equal false
checkout_link_provider_session_id default
Apply default
checkout_link_provider_session_id_truncated truncate
Truncate checkout link provider session id to a max length
checkout_link_provider_session_id_bounded compare
Check if checkout link provider session id is one of checkout link provider session id truncated
checkout_link_provider_session_id_prefix starts_with
Check if checkout link provider session id starts with cs_
checkout_link_provider_session_id_exact compare
Check if checkout link provider session id is one of effective session id
checkout_link_provider_status_open compare
Check if checkout link session read result status is one of open
checkout_link_provider_payment_unpaid compare
Check if checkout link session read result payment status is one of unpaid
checkout_link_provider_client_reference_exact compare
Check if checkout link session read result client reference id is one of order open correlation client reference id
checkout_link_provider_url default
Apply default
checkout_link_provider_url_trimmed trim
Trim whitespace from checkout link provider url
checkout_link_provider_url_trimmed_exact compare
Check if checkout link provider url is one of checkout link provider url trimmed
checkout_link_provider_url_https starts_with
Check if checkout link provider url starts with https://
checkout_link_provider_url_not_prefix_only compare
Check if checkout link provider url does not equal https://
checkout_link_provider_url_truncated truncate
Truncate checkout link provider url to a max length
checkout_link_provider_url_bounded compare
Check if checkout link provider url is one of checkout link provider url truncated
checkout_link_source_truth_valid all
Check if all conditions are true
checkout_link_source_truth_guard guard
Stop if checkout link source truth valid equals
skip: step.checkout_link_read_allowed equal false
checkout_link_sender_mail_name default
Apply default
checkout_link_sender_mail_truncated truncate
Truncate checkout link sender mail name to a max length
checkout_link_sender_mail_present compare
Check if checkout link sender mail name has data
checkout_link_sender_mail_bounded compare
Check if checkout link sender mail name is one of checkout link sender mail truncated
checkout_link_recipient_truncated truncate
Truncate visitor email to a max length
checkout_link_recipient_bounded compare
Check if visitor email is one of checkout link recipient truncated
checkout_link_mail_subject replace
Replace text in checkout link mail subject template
checkout_link_mail_subject_present compare
Check if checkout link mail subject has data
checkout_link_mail_subject_truncated truncate
Truncate checkout link mail subject to a max length
checkout_link_mail_subject_bounded compare
Check if checkout link mail subject is one of checkout link mail subject truncated
checkout_link_mail_subject_trimmed trim
Trim whitespace from checkout link mail subject
checkout_link_mail_subject_trimmed_exact compare
Check if checkout link mail subject is one of checkout link mail subject trimmed
checkout_link_mail_subject_has_open_placeholder compare
Check if checkout link mail subject contains [[
checkout_link_mail_subject_has_close_placeholder compare
Check if checkout link mail subject contains ]]
checkout_link_mail_subject_has_lf compare
Check if checkout link mail subject contains
checkout_link_mail_subject_has_cr compare
Check if checkout link mail subject contains
checkout_link_mail_subject_valid all
Check if all conditions are true
checkout_link_mail_body_with_product replace
Replace text in checkout link mail body template
checkout_link_mail_body replace
Replace text in checkout link mail body with product
checkout_link_mail_body_present compare
Check if checkout link mail body has data
checkout_link_mail_body_truncated truncate
Truncate checkout link mail body to a max length
checkout_link_mail_body_bounded compare
Check if checkout link mail body is one of checkout link mail body truncated
checkout_link_mail_body_has_open_placeholder compare
Check if checkout link mail body contains [[
checkout_link_mail_body_has_close_placeholder compare
Check if checkout link mail body contains ]]
checkout_link_mail_copy_valid all
Check if all conditions are true
checkout_link_mail_copy_guard guard
Stop if checkout link mail copy valid equals
skip: step.checkout_link_read_allowed equal false
checkout_link_reconciliation_id template
Generate text from a template
checkout_link_mail_send ?
skip: step.checkout_link_read_allowed equal false
checkout_link_mail_reconcile ?
skip: step.checkout_link_read_allowed equal false
current_state coalesce
Use the first available value from: attach payment order, order open order
coordinator_notice template
Generate text from a template
Settings 15 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

stripe setting =
currency setting = usd
sender mail setting =
amount minor setting = 5000
generation mode setting = static
seller offer id setting =
template file ref setting =
checkout cancel url setting = [object Object]
checkout success url setting = [object Object]
checkout expiry hours setting = 24
checkout product name setting = Prepared document
register seller offer setting = false
checkout link email body setting = Your prepared document request is ready for payment. Complete payment securely with Stripe: [[checkout_url]] Stripe controls this hosted checkout and its expiry. If you did not request this document, you can ignore this email.
checkout link email subject setting = Complete payment for your prepared document
checkout product description setting =

Trust & control

What installing this recipe would let it do. Recued grants these permissions at install — review them there before approving.

Data it touches

Warehousedata.filedata.form

About

Tags

pack:paid-document-fulfillmentform-response-templaterecipe-role:origindurable-coordinatorcheckout-createcheckout-link-mailcore.seller.orderd-200d-207

Details

182 steps 15 configurable settings recipe_id: start-paid-document-fulfillment