Skip to content
Recued
Menu
← Back to recipes

PandaDoc document closure watcher

by recued-core v1

Scheduled adopter for PandaDoc document closure rows seeded by send-pandadoc-document-with-closure. It lists only Recued-originated document watches, re-reads a bounded batch of document from PandaDoc, and closes the shared row when PandaDoc reports a terminal status or an approval-complete status that needs the owner to send again. It can notify the owner on completion or exception status, but it never sends documents, sends reminders, changes recipients, configures auto-reminders or auto-expiration, creates webhooks, downloads files, deletes documents, transfers ownership, or calls arbitrary PandaDoc endpoints.

Complete workflow

Workflow pack for Recued-sent PandaDoc documents. It composes the PandaDoc capability pack with a closure ledger: send one draft or approved document through the existing PandaDoc approval gate, persist only the document/template linkage in data.shared, and let a scheduled watcher re-read that exact document until PandaDoc reports completion, exception, or an approval-complete state that needs the owner to send again. This pack does not duplicate PandaDoc auto reminders, manual reminders, auto-expiration, webhook administration, or general document status dashboards; it adds Recued-visible closure state for documents Recued sent.

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

PandaDoc document closure watcher
This recipe Background automation

Scheduled adopter for PandaDoc document closure rows seeded by send-pandadoc-document-with-closure. It lists only Recued-originated document watches, re-reads a bounded batch of document from PandaDoc, and closes the shared row when PandaDoc reports a terminal status or an approval-complete status that needs the owner to send again. It can notify the owner on completion or exception status, but it never sends documents, sends reminders, changes recipients, configures auto-reminders or auto-expiration, creates webhooks, downloads files, deletes documents, transfers ownership, or calls arbitrary PandaDoc endpoints.

pandadoccontractsesignaturedocument
by recued-core pinned v1

Workflow origin for the PandaDoc document closure loop. It reads one document's status and details for context, sends that draft document through recued-core.pandadoc.document.send with owner-provided subject/message, and when the send succeeds it seeds durable data.shared closure state for pandadoc-document-closure-watcher. It uses user-configured deterministic copy rather than AI and does not create documents, edit recipients, send reminders, configure auto-reminders or auto-expiration, open embedded sessions, configure webhooks, download files, delete, transfer ownership, or call arbitrary PandaDoc endpoints.

pandadoccontractsesignaturesend
by recued-core pinned v1

Read-only PandaDoc document brief. It reads one document's status and detailed evidence through recued-core.pandadoc, then asks the AI summarizer for recipient state, approval/payment context, pricing and metadata signals, risks, and next steps. It never sends, downloads, deletes, creates sessions, edits recipients, moves folders, or mutates the document.

pandadoccontractsdocument-reviewesignature
by recued-core pinned v1

Low-frequency timeout role for recued-core/pandadoc-document-closure. It moves a bounded batch of expired rows from active to timed_out, deletes the active copy only after the durable timeout write succeeds, and notifies the owner once per batch.

pandadocwatchertimeoutowner-review
by recued-core pinned v1

Owner-visible list/close role for recued-core/pandadoc-document-closure. It lists bounded active, timed-out, and closed rows. Supplying a timed-out or closed key deletes only that exact terminal row; active watches cannot be deleted here.

pandadocwatcherreviewclose
by recued-core pinned v1
View pack details, dependencies, and permissions →
How it works 101 steps

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

Data fetch
shared_document_watches ?
Process (100 steps)
now date_add
Add 0 days to
watch_rows filter
Filter by condition
watch_rows_with_document filter
Filter by condition
never_checked_watch_rows filter
Filter by condition
checked_watch_rows filter
Filter by condition
checked_watch_rows_oldest_first sort
Sort by value.last_checked_at
fair_watch_rows flatten
Flatten nested lists in
candidate_rows slice
Take a subset of
batch_count count
Count items in candidate rows
candidate_count count
Count items in watch rows with document
has_candidate compare
Check if candidate rows has data
has_connection compare
Check if setting pandadoc has data
skip_status_read any
Check if any of the conditions are true
batch_context_envelopes merge
Combine objects together
batch_contexts map
Extract from each item
status ?
skip: step.skip_status_read equal true
status_live_batch_context pick
Keep only specific fields from
status_batch_context_envelopes merge
Combine objects together
status_batch_contexts map
Extract from each item
live_status default
Apply default
live_status_live_batch_context pick
Keep only specific fields from
live_status_batch_context_envelopes merge
Combine objects together
live_status_batch_contexts map
Extract from each item
live_status_norm lowercase
Convert item live status to lowercase
live_status_norm_live_batch_context pick
Keep only specific fields from
live_status_norm_batch_context_envelopes merge
Combine objects together
live_status_norm_batch_contexts map
Extract from each item
terminal_status compare
Check if item live status norm is one of setting terminal statuses
terminal_status_live_batch_context pick
Keep only specific fields from
terminal_status_batch_context_envelopes merge
Combine objects together
terminal_status_batch_contexts map
Extract from each item
needs_owner_review compare
Check if item live status norm is one of setting owner review statuses
needs_owner_review_live_batch_context pick
Keep only specific fields from
needs_owner_review_batch_context_envelopes merge
Combine objects together
needs_owner_review_batch_contexts map
Extract from each item
resend_required compare
Check if item live status norm is one of setting resend required statuses
resend_required_live_batch_context pick
Keep only specific fields from
resend_required_batch_context_envelopes merge
Combine objects together
resend_required_batch_contexts map
Extract from each item
actionable_status any
Check if any of the conditions are true
actionable_status_live_batch_context pick
Keep only specific fields from
actionable_status_batch_context_envelopes merge
Combine objects together
actionable_status_batch_contexts map
Extract from each item
closed_status ternary
Apply ternary
closed_status_live_batch_context pick
Keep only specific fields from
closed_status_batch_context_envelopes merge
Combine objects together
closed_status_batch_contexts map
Extract from each item
owner_action_review ternary
Apply ternary
owner_action_review_live_batch_context pick
Keep only specific fields from
owner_action_review_batch_context_envelopes merge
Combine objects together
owner_action_review_batch_contexts map
Extract from each item
owner_action_final ternary
Apply ternary
owner_action_final_live_batch_context pick
Keep only specific fields from
owner_action_final_batch_context_envelopes merge
Combine objects together
owner_action_final_batch_contexts map
Extract from each item
skip_close any
Check if any of the conditions are true
skip_close_live_batch_context pick
Keep only specific fields from
skip_close_batch_context_envelopes merge
Combine objects together
skip_close_batch_contexts map
Extract from each item
closed_watch_key replace
Replace text in item watch key
closed_watch_key_live_batch_context pick
Keep only specific fields from
closed_watch_key_batch_context_envelopes merge
Combine objects together
closed_watch_key_batch_contexts map
Extract from each item
close_watch ?
skip: item.skip_close equal true
close_watch_live_batch_context pick
Keep only specific fields from
close_watch_batch_context_envelopes merge
Combine objects together
close_watch_batch_contexts map
Extract from each item
delete_closed_active_watch ?
skip: item.close_watch.ok not_equal true
delete_closed_active_watch_live_batch_context pick
Keep only specific fields from
delete_closed_active_watch_batch_context_envelopes merge
Combine objects together
delete_closed_active_watch_batch_contexts map
Extract from each item
notify_enabled compare
Check if setting notify when terminal equals true
notify_enabled_live_batch_context pick
Keep only specific fields from
notify_enabled_batch_context_envelopes merge
Combine objects together
notify_enabled_batch_contexts map
Extract from each item
status_should_notify compare
Check if item live status norm is one of setting notify statuses
status_should_notify_live_batch_context pick
Keep only specific fields from
status_should_notify_batch_context_envelopes merge
Combine objects together
status_should_notify_batch_contexts map
Extract from each item
should_notify all
Check if all conditions are true
should_notify_live_batch_context pick
Keep only specific fields from
should_notify_batch_context_envelopes merge
Combine objects together
should_notify_batch_contexts map
Extract from each item
notify_owner ?
skip: item.should_notify not_equal true
notify_owner_live_batch_context pick
Keep only specific fields from
notify_owner_batch_context_envelopes merge
Combine objects together
notify_owner_batch_contexts map
Extract from each item
refreshed_watch_value merge
Combine objects together
skip: item.delete_closed_active_watch.ok equal true
refreshed_watch_value_live_batch_context pick
Keep only specific fields from
refreshed_watch_value_batch_context_envelopes merge
Combine objects together
refreshed_watch_value_batch_contexts map
Extract from each item
refresh_active_watch ?
skip: item.delete_closed_active_watch.ok equal true
refresh_active_watch_live_batch_context pick
Keep only specific fields from
refresh_active_watch_batch_context_envelopes merge
Combine objects together
refresh_active_watch_batch_contexts map
Extract from each item
closed_batch_rows filter
Filter by condition
refreshed_batch_rows filter
Filter by condition
closed_batch_count count
Count items in closed batch rows
refreshed_batch_count count
Count items in refreshed batch rows
summary to_summary
Format results as a summary card
Settings 8 configurable

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

channels setting = in_app
pandadoc setting =
batch limit setting = 5
notify statuses setting = document.completed,document.paid,document.declined,document.voided,document.error,document.rejected,document.approved,completed,paid,declined,voided,error,rejected,approved
terminal statuses setting = document.completed,document.paid,document.declined,document.voided,document.error,document.rejected,completed,paid,declined,voided,error,rejected
notify when terminal setting = true
owner review statuses setting = document.declined,document.voided,document.error,document.rejected,document.approved,declined,voided,error,rejected,approved
resend required statuses setting = document.approved,approved

Trust & control

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

Where it runs

Device + server Runs on your device (browser) or your server.

Permissions it requires

Send notificationsRead your Pandadoc connection
Declared by the recipe — Recued grants these at install, where you review them before approving.

Data it touches

Warehousedata.shared

About

Tags

pandadoc pandadoccontractsesignaturedocumentclosurestatusnotificationclosed-loopstate:pandadoc-document-closure-watcherpack:pandadoc-document-closure

Details

101 steps 8 configurable settings recipe_id: pandadoc-document-closure-watcher