Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.strandai.com/llms.txt

Use this file to discover all available pages before exploring further.

Strand AI applies a time-to-live (TTL) policy to uploaded slides and the marker predictions derived from them. The policy is configurable per organization and overridable per sample.

Org-default retention

Every org has a default retention window (in days) set by an admin. When you upload a slide, its expires_at is computed once as created_at + default_retention_days and stored on the sample. The setting is off by default — samples live indefinitely until an admin sets a policy.
Changing the org policy retroactively recomputes expires_at on samples that are still on the org default. It does not touch samples you have explicitly pinned.

The archive → delete lifecycle

A nightly job sweeps the platform and does two things:
  1. Auto-archive samples whose expires_at < now(). Archived samples are hidden from the active list but still queryable from the Archived tab on /samples.
  2. Hard-delete archived samples whose archived_at is older than 7 days. This deletes the underlying GCS blobs, marker predictions, and run rows — financial records (credit transactions, usage logs) are preserved with the sample reference nulled.
The 7-day window is your grace period to restore a sample if it shouldn’t have aged out.

Per-sample overrides

You can override the org default on any sample you can edit (sample creator, org owner/admin, or Strand admin). Two modes:
  • Pin to a specific dateexpires_at is set to your chosen date and tagged source = 'override'.
  • Pin indefinitelyexpires_at is cleared but the sample is tagged source = 'override' so future org-policy changes don’t touch it.
Reverting to the org default is a third explicit mode (useOrgDefault: true) — it recomputes expires_at from the current policy and tags the sample source = 'org_default' again.

Restoring an archived sample

From /samples?view=archived, click Restore on any archived sample within the 7-day grace window. Restoring:
  • Clears archived_at.
  • Bumps expires_at to at least 30 days from now so the reaper doesn’t immediately re-archive it.
  • Writes a sample_restore row to the retention history.
Samples past the 7-day grace are gone — restore is not available.

Permissions

ActionAllowed for
Change org default retentionStrand admins (via /admin)
Override / pin a single sampleSample creator · org owner/admin · Strand admin
Bulk override (≤ 500)Sample creator · org owner/admin · Strand admin
Restore from archiveSample creator · org owner/admin · Strand admin

API examples

# Pin a sample indefinitely.
curl -X PATCH "https://app.strandai.com/api/v1/samples/$SAMPLE_ID/retention" \
  -H "Authorization: Bearer $STRAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"pin": true, "reason": "Active research project"}'

# Bulk: pin 50 samples to a fixed date.
curl -X PATCH "https://app.strandai.com/api/v1/samples/retention" \
  -H "Authorization: Bearer $STRAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"sampleIds": ["...", "..."], "expiresAt": "2026-12-31T00:00:00Z"}'

# Restore an archived sample within the 7-day grace.
curl -X POST "https://app.strandai.com/api/v1/samples/$SAMPLE_ID/restore" \
  -H "Authorization: Bearer $STRAND_API_KEY"

Email notifications

Two retention-related emails are sent (both opt-out under Account → Email preferences):
  • Weekly digest — Mondays at 13:00 UTC. One email per org owner/admin listing samples that expire in the next 7 days.
  • Policy-change notice — sent whenever an admin shortens the org retention policy in a way that creates near-term expiries (< 30 days). Goes to every org member so they can pin samples they need to keep.