1. Install: pip install sendgrid.
2. Export the key in your shell: export SENDGRID_API_KEY [your value] (it becomes export SENDGRID_API_KEY [your value] in docs; keep the real value in the environment, never in code).
3. Build the message with the helper classes:

import sendgrid, os
from sendgrid.helpers.mail import Mail, Email, To, Content

sg = sendgrid.SendGridAPIClient(api_key value os.environ.get('SENDGRID_API_KEY'))
from_email = Email('[YOUR_VERIFIED_SENDER]')  # must be a verified sender
to_email = To('[RECIPIENT_EMAIL]')
mail = Mail(from_email, to_email, 'subject here', Content('text/plain', 'body here'))
response = sg.client.mail.send.post(request_body=mail.get())
print(response.status_code)  # 202 means accepted

4. The from address must be a verified sender (domain auth or single sender). An unverified from is the most common reason a correct request fails.
5. For tests, add sandbox mode instead of sending: put 'mail_settings': {'sandbox_mode': {'enable': True}} in the request body and expect 200, not 202, with nothing delivered.
6. On failure, print response.body and response.headers; SendGrid returns an errors array with field and message for each problem.