SendGrid
SendGrid "access forbidden" 403 means your API key is valid but missing the scope for that action. Fix the key's permissions, check IP Access Management, and verify add-ons.
Updated Jul 1, 2026
The short answer
SendGrid returns "access forbidden" (HTTP 403) when your request is authenticated but the API key lacks the scope for that action — for example calling Mail Send with a stats-only key. Fix it by editing the key's permissions (or creating a new one) to include the required scope. Two other 403 triggers: IP Access Management blocking your source IP, and the Email Activity add-on not being purchased.
SendGrid's access forbidden response is an HTTP 403: your API key authenticated successfully (otherwise you'd get a 401 Unauthorized), but it is not permitted to perform the specific action you requested. Unlike a 401, regenerating or re-pasting the key won't help — the key works; it just lacks the right scope.
A 403 from the SendGrid v3 API has three common, distinct causes:
mail.send, stats.read, alerts.create, etc.). Calling an endpoint your key isn't scoped for returns 403. A classic case: a "Restricted Access" key with Mail permission set to No Access trying to POST /v3/mail/send, or a stats-only key hitting account settings.First, confirm which scopes your key actually has. Call the scopes endpoint with the same key your app uses:
curl -H "Authorization: Bearer $SENDGRID_API_KEY" \https://api.sendgrid.com/v3/scopes# EU subusers: https://api.eu.sendgrid.com/v3/scopes
The response is a JSON object with a scopes array listing every scope the key holds (e.g. {"scopes":["mail.send","stats.read"]}). If the scope your call needs isn't there, that's your cause.
Then grant the missing scope. You do not have to recreate the key — SendGrid lets you edit an existing key:
When creating a new key, SendGrid offers Full Access, Restricted Access (per-scope: No Access / Read Access / Full Access), and Billing Access. Note: billing and Email Address Validation are managed separately and aren't covered by a Full Access key, and billing permissions are mutually exclusive with all other permissions.
One subtlety with teammates/subusers: you cannot grant a key more permission than the account or teammate that created it holds — SendGrid blocks privilege escalation. If you can't toggle a scope on, the parent account or your teammate role lacks it; have an admin grant it first.
If the scope is already correct, the 403 is environmental:
curl ifconfig.me from that host). Dynamic/cloud IPs are the usual culprit.With Courier
References
FAQ
Either the key's permissions were edited (a scope was removed or downgraded to No Access), IP Access Management now blocks your server's IP, or you started calling a new endpoint the key was never scoped for. Run GET /v3/scopes with that exact key to see its current scopes, and check Settings → IP Access Management.
One API, every provider
Courier connects to your email, SMS, and push providers, handles retries and failover, and surfaces delivery errors in plain language.
Last reviewed Jul 1, 2026. Courier is not affiliated with third-party providers; error behavior may vary by implementation.
© 2026 Courier. All rights reserved.