Skip to main content
BlobRouter v0.1 · Last updated: August 2026 · Architecture version: 2.0
This is the path of a single routed upload. BlobRouter never receives the file bytes.

Step by step

  1. upload() — SDK validates local options and starts the control-plane sequence.
  2. POST /v1/upload/init — Auth, plan checks, decrypt provider credentials, run routing engine, insert a pending file row, return { fileId, presignedUrl, provider, savedVsAws, routingWarning? }.
  3. route() — Deterministic. Hot prefers R2, archive prefers B2, cold uses the cost formula. Missing preferred provider → warn + fallback (never fail if any provider exists).
  4. Presigned URL — Minted with your credentials against your bucket.
  5. PUT — Client uploads directly to AWS / R2 / B2. Retries here are outside BlobRouter’s control; the SDK does not retry this PUT.
  6. POST /v1/upload/complete — SDK tells BlobRouter the PUT finished.
  7. HeadObject — API verifies the object exists at the expected size/key. Protects savings accuracy.
  8. Done — Status becomes active; a usage_events row records GB routed.

Failure points