1. SDK → POST /v1/upload/init2. API → authenticate API key, load providers, run routing engine3. API → decrypt router credentials, mint presigned PUT URL (~1h)4. API → insert pending file + routing decision5. SDK → PUT bytes directly to provider6. SDK → POST /v1/upload/complete7. API → HeadObject verify on provider8. API → mark file active, record usage_events
1. Customer reviews recommendation2. Dashboard → POST .../recommendations/:id/approve { targetProvider }3. API → enqueue migration job (only after explicit approve)4. Worker → copy using router credentials5. Dashboard → GET /v1/scanner/migration/:id for status