Operations & Compliance package

Policy attestation

A monthly campaign: employees confirm they have read the policies due for them, with reminders, escalation to compliance and an audit trail of attestations.

ScheduledIntermediate~15 min setupv1.0.0

About this package

What it does

Policy attestation runs your read-and-understood campaigns. On the first of each month it reads the Policies data table, picks the active policies whose next due date has arrived and lists active employees from your HR system.

Each employee gets their own Attest policy run with only the policies for their department plus the ones for everyone. They tick "I have read and understood" and attest, or raise a question; questions go to the compliance officer, who answers (the attestation goes back to the employee) or marks them exempt. Reminders go out before the due date, open requests escalate to the compliance officer after 10 days, and every attested policy is written to the Attestations table with the version and date. The policies' next due dates roll forward by their frequency and the compliance officer gets a campaign summary.

Adapt the Policies rows (audience is a department name or "all"), the HR system reference to your API, the schedule, and the reminder and escalation timings on the attestation step.

Scheduled

Monthly on day 1 at 08:00 (UTC). You can also start it any time from the Run dialog, the API or the CLI.

Runs on a schedule (daily, weekly, monthly) in your time zone.

The flow

Step by step

  1. 1

    Monthly campaign

    On the 1st the workflow lists the active policies whose next due date has arrived. If none are due it stops.

  2. 2

    Find the employees

    List active employees returns everyone in the HR system with their department and email.

  3. 3

    Match policies to people

    For each employee the due policies are filtered to their department plus "all"; an Attest policy run starts for anyone with at least one.

  4. 4

    Attest or ask

    The employee ticks "I have read and understood" and attests, or raises a question. Reminders go out and open tasks escalate to compliance after 10 days.

  5. 5

    Answer questions

    The compliance officer answers (the attestation returns to the employee) or marks the employee exempt for this campaign.

  6. 6

    Record and roll forward

    Each policy is recorded in the Attestations table, the employee gets a receipt, next due dates move on by the policy frequency and compliance gets a summary.

Monthly policy attestation — On the first of each month: finds the policies due for attestation, lists active employees from the HR system and starts an Attest policy run for every employee the policies apply to. The same canvas you get in the designer after installing.

Sub-workflow: Attest policy

One employee's attestation in a campaign: the employee confirms the policies that apply to them; questions go to the compliance officer; each attested policy is recorded.

Forms

Inputs and task forms

The inputs a caller passes when it starts a run, and the forms people complete when the process needs a decision.

Start inputs

Monthly policy attestation

Passed by the calling system

As of date as_of · dateYYYY-MM-DDOptional: run the campaign as if today were this date (YYYY-MM-DD). Empty = today.
Compliance email compliance_email · emailname@company.comWho receives the campaign summary
Compliance officer id compliance_officer_id · textOptional: user id of the compliance officer for questions (otherwise the one chosen on install)

User Task · Attest policy

Attest to policies

Read and attest: {{policy_names}}

I have read and understood these policies * acknowledged · boolean
Comments or questions comments · text
AttestI have a question

User Task · Attest policy

Answer policy question

Policy question from {{employee.name}} ({{campaign_id}})

Answer for the employee * answer · text
Exemption reason (if exempt) exemption_reason · text
AnsweredExempt

From your code

Start a run over the API

Every workflow can be started over REST, MCP or the CLI, whatever its trigger, with the sample input below. Runs start straight away on the published version; replace <workflow id> with the id the install created.

REST

shell
curl -X POST "$USERTASKS_URL/api/v1/workflows/start" \
  -H "Authorization: Bearer $USERTASKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workflow_id":"<workflow id>","variables":{"as_of":"2026-11-01","compliance_email":"compliance@example.com"}}'

CLI

shell
usertasks workflows inputs <workflow id>          # the start form: keys, types, required
usertasks workflows run <workflow id> --input as_of=2026-11-01 --input compliance_email=compliance@example.com --wait

What's included

8 assets, ready to adapt

TypeNameDetails
Email templateAttestation campaign startedSent to the compliance officer when the monthly campaign has gone out.
Email templatePolicy attestation receiptSent to the employee once their attestation is recorded.
Data tableAttestationsOne row per employee and policy attested in a campaign: the evidence trail for auditors.
Data tablePoliciesThe policies employees attest to: version, owner, document link, audience (a department or "all") and how often they are re-attested. Policies whose next due date has arrived are included in the monthly campaign.
IntegrationHR system
API referenceList active employeesGET /employees — Active employees from the HR system with department and work email.
WorkflowAttest policy16 steps — One employee's attestation in a campaign: the employee confirms the policies that apply to them; questions go to the compliance officer; each attested policy is recorded.
WorkflowMonthly policy attestation19 steps — On the first of each month: finds the policies due for attestation, lists active employees from the HR system and starts an Attest policy run for every employee the policies apply to.

Attestations · schema only

CampaignPolicy IDPolicyVersionEmployee IDEmployeeEmailDepartmentStatusAttested atComments

Policies · 7 sample rows

Policy IDPolicyVersionPolicy ownerDocument URLAudience (department or all)Attestation frequencyDays between attestationsNext dueActive

Requirements

What you connect it to

Credentials never travel in a package. The install wizard asks for what your environment must provide, or installs it incomplete until you finish setup.

Needs

  • Directory / HR system — An HR system or directory API that lists people and their status.
  • REST API — A REST API integration: set its base URL and credentials on install.
  • Assignees — People in your workspace to receive the User Tasks (picked on install).
  • Email — Email delivery configured for the instance (EMAIL_PROVIDER), used for notifications.

After installing

  1. HR system integration: set the base URL of your HR / directory API and an API token. List active employees expects GET /employees?status=active returning { data: [{ id, name, email, department }] }; adjust the path and response model in Integrations.
  2. Assignees: pick the default recipient for attestation tasks (used when an employee has no workspace user id; return workspace_user_id from the HR API, or map it, to send each task to the employee) and the compliance officer who answers questions and receives escalations.
  3. Edit the Policies rows: version, document link, audience (a department name as the HR system spells it, or "all"), frequency in days and next due date.
  4. Set compliance_email on the workflow to the inbox that receives the campaign summary, and change the schedule if your campaigns run on another day.
  5. Email: configure EMAIL_PROVIDER on the instance so summaries and receipts are delivered (the steps continue on error).

Asked for on install

  • Integration “HR system”Required

    • Tokenconfig.auth_config.token
    • Base urlconfig.base_urldefault https://hris.example.com/api· optional
  • Workflow “Attest policy” assigneesRequired

    • User for step “Attest to policies”nodes.5.config.assignee_id
    • User for step “Attest to policies”nodes.5.config.escalation_user_id
    • User for step “Answer policy question”nodes.7.config.assignee_id

Install

Install it in your workspace

Works on UserTasks cloud and on any self-hosted instance. Installing creates the assets above; nothing runs until you complete setup and start it.

In the app

  1. Download policy-attestation-1.0.0.utpkg.
  2. Open Automations → Packages and drag the file onto the page (or choose Import package). Browse gallery there lists every gallery package without downloading by hand.
  3. Pick the file. The wizard verifies the checksum, every file hash and the signature, and shows the readme.
  4. Review the changes (what is created) and the data rows.
  5. Fill in the requirements, or tick Keep incomplete and finish later with Complete setup.
  6. Done: the workflow is published and active once setup is complete.

With the CLI

shell
curl -fLO https://usertasks.com/gallery/policy-attestation-1.0.0.utpkg
usertasks packages inspect policy-attestation-1.0.0.utpkg       # offline: checksum, hashes, signature
usertasks packages install policy-attestation-1.0.0.utpkg --dry-run
usertasks packages install policy-attestation-1.0.0.utpkg       # prompts for each requirement
usertasks packages install policy-attestation-1.0.0.utpkg --keep-incomplete --yes   # in CI; finish with:
usertasks packages complete policy-attestation -f values.yaml

Verify the download

File SHA-256
630cffe6e62d50d65bec75636c5fe3ee8782840e2a62ca764078472d57f091a1
Package checksum (what is signed)
sha256:5914841d218c2e4f2c5bdbdaf20255c1b9a56cf404f82479f6a1e0df4657c9bd
Signer
Unsigned preview build — compare the SHA-256 above

shasum -a 256 policy-attestation-1.0.0.utpkg should print the file SHA-256. How gallery packages are signed.

Versions

Version 1.0.0

  1. v1.0.02026-10-26First release.

Installing a newer version upgrades in place: local credentials and requirement values are kept, and changes you made are flagged first. How packages work

More packages

Related

Browse the whole gallery