Reference

Operations API Reference

The Operations API is the interface exposed by the in-account TierPilot Operator. It is the only channel through which storage-class changes happen. TierPilot's control plane is its primary caller, but the API is documented so you can audit it, call it from your own tooling, or build approval workflows around it.

Endpoint and authentication

The operator is a Lambda function URL (or API Gateway endpoint on Enterprise) in your account:

POST https://<operator-id>.lambda-url.<region>.on.aws/v1/<action>

Every request body is a signed envelope:

{
  "payload":   { ... },            // action-specific
  "nonce":     "b1f4...",          // single-use
  "expires_at": "2026-07-18T12:00:00Z",
  "signature": "ed25519:..."       // over payload + nonce + expiry
}

The operator verifies the Ed25519 signature against the public key installed with the stack, rejects expired or replayed nonces, and enforces your guardrails on every action regardless of what the payload requests.

POST /v1/plans — submit a transition plan

{
  "plan_id": "plan_2026_07_17_001",
  "transitions": [
    { "object_ref": "obj_9f3ba2e1c8", "target": "GLACIER_IR" },
    { "object_ref": "obj_44c1d0a7b2", "target": "DEEP_ARCHIVE" }
  ],
  "max_rps": 50
}

The operator resolves each object_ref to a key locally (using the in-account salt), drops any transition violating excluded prefixes or tier floors, and executes the rest as copy-in-place transitions at up to max_rps requests/second.

Response:

{ "plan_id": "plan_2026_07_17_001", "accepted": 2, "rejected": 0, "status": "executing" }

GET /v1/plans/:plan_id — plan status

{
  "plan_id": "plan_2026_07_17_001",
  "status": "completed",           // queued | executing | completed | partial | failed
  "executed": 7183411,
  "failed": 12,
  "skipped_guardrail": 3025,
  "started_at": "2026-07-17T02:10:11Z",
  "completed_at": "2026-07-17T09:44:02Z"
}

POST /v1/plans/:plan_id/cancel — halt execution

Stops issuing new transitions immediately. In-flight S3 calls complete; nothing is rolled back (transitions are individually safe and reversible by a later plan).

GET /v1/health — operator status

{ "version": "1.8.2", "salt_ok": true, "guardrails_loaded": true, "last_plan_at": "2026-07-17T02:10:11Z" }

Errors

CodeMeaning
401 invalid_signatureSignature verification failed.
409 replayed_nonceNonce already used; plan rejected.
410 expired_envelopeEnvelope past expires_at.
422 unknown_object_refToken not resolvable in this account.
429 rate_limitedOperator throttling to protect your S3 API limits.

Questions or a use case the API doesn't cover? Book a demo — the roadmap is driven by these conversations.