New · Recurring plans

Define what should happen.
We'll tell you when it didn't.

Schedule recurring work — backups, audits, deploys, monitoring sweeps — against a set of assets. StrataDesk generates a ticket per asset on every run and watches for the integration to call back. If the callback doesn't arrive inside the grace window, the ticket lands on "missed" and you know which asset, on which run, didn't get done.

How it works

Three moving parts. The first one is the only thing your team configures.

1

Define a plan

Pick a ticket template, an asset selector (specific assets, by type, or by label), and a schedule (any rrule — FREQ=DAILY;BYHOUR=9, FREQ=WEEKLY;BYDAY=MO, whatever). Set how long you'll wait for the work to confirm done.

2

Tickets get generated

On each fire, StrataDesk creates one parent summary ticket plus one child per matched asset. Your existing integration script runs the work as it always has — backup, sync, audit, whatever.

3

Callbacks close the loop

The script POSTs back with a signed payload when each asset is done (or failed). Tickets resolve automatically. If a callback never arrives, the missed-callback sweeper flips the ticket so it shows up on dashboards and in monthly compliance reports.

Who uses this

Backup verification

Nightly backups across N customer databases. Each backup script POSTs back when its archive lands in S3. If one server skipped its window, the team sees it the next morning, not at the next disaster recovery drill.

Scheduled audits

Monthly compliance sweeps — patch level, AV signature, log retention. A ticket per server, evidence attached on callback, monthly PDF report ready for the customer.

Deploy pipelines

Weekly CI runs against a fleet of staging environments. The pipeline posts back per-env results; the ones that didn't run get sticky tickets nobody can close without explaining why.

Asset selectors that match what you actually have

Pick specific assets, or a whole type, or filter dynamically. Plans re-evaluate their selector on every run — add a server to your inventory and tomorrow's run picks it up automatically.

By type

{
  "asset_type_ids": [
    "<postgres-server-type-id>"
  ]
}

Every active asset of that type. Add a new Postgres server → next run includes it.

Specific assets

{
  "asset_ids": [
    "<asset-uuid-1>",
    "<asset-uuid-2>"
  ]
}

Hand-picked list when the selector logic is "these and only these".

The callback your script already knows how to send

One POST with a signed body when each unit of work finishes. Replay-safe via timestamp + idempotency key.

# In your backup script, after the upload succeeds:
TS=$(date +%s)
BODY=$(jq -cn --arg tid "$TICKET_ID" \
    '{ticket_id:$tid, event:"execution.succeeded", result:{duration_seconds:412, size_bytes:18723123}}')
SIG=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "$STRATADESK_HMAC_SECRET" -hex | awk '{print $2}')

curl -X POST https://your-tenant.stratadesk.io/api/v1/integrations/callback \
  -H "Authorization: Bearer $STRATADESK_TOKEN" \
  -H "X-Timestamp: $TS" \
  -H "X-Signature: $SIG" \
  -H "X-Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  --data "$BODY"

Read the full integration guide →

Monthly compliance reports

Every plan has a one-click monthly PDF report — totals, per-asset rollup, full ticket list with subject and creation date — formatted for handing to your customer. Title, intro, signature block and provider header are editable per plan, so a single template can drive different reports for different contracts.

Screenshot of the monthly report will land here once the pilot deployment is live.

Join the pilot

We're rolling out recurring plans with a small group of MSPs and internal IT teams. Drop your details and we'll set up a pilot tenant.