Goal: the same mail flowing through the v3 API with better errors and features.

Step 1. Map the pieces: SMTP auth (username apikey, password the key) becomes a Bearer API key; X-SMTPAPI fields become JSON (categories, custom_args, asm, batch_id, send_at, ip_pool_name); MIME assembly becomes the content and attachments objects.

Step 2. Keep the same API key and scopes where possible so auth and reputation carry over; create a dedicated key for the new path if the SMTP credential is shared.

Step 3. Port one mail type first (e.g. password resets): send via the API in shadow mode or to seed addresses, and compare delivered events and content against the SMTP path.

Step 4. Move error handling to the API model: 202 means accepted, 4xx responses name the bad field, and 429/5xx are the only retryable cases.

Step 5. Cut traffic over stream by stream, watching deferral and bounce rates. Retire the SMTP credentials last.

Verify: per-stream delivered rates match or beat the SMTP baseline and error responses are actionable. Pitfall: assuming the API accepts the same 5,000-messages-per-connection batching model; the API is per-request, so chunk deliberately.