New field on POST /v1/send:attachments, a list of { filename, content (base64), contentType?, contentId?, disposition? }. Inline images use contentId and disposition: "inline".
Rolling out per Motor Block. A Motor Block that has not been moved to the new sending path answers 422 with code: "feature_not_enabled" and sends nothing, so a file is never silently dropped.
Same rules as SMTP. Your plan decides the number of files, the size per file, the total per message and the file types; every file is scanned for malware before the message is accepted; a refusal names the plan and the limit.
dryRun: true runs the same plan check without queueing anything and returns the refusal a real send would get.
A request body can be as large as the platform message capacity; above it the answer is 413 with error: "payload_too_large".