Verify email deliverability before sending campaigns or workflow messages through the GHL MCP server. This quick-start covers authentication, submitting verification requests, and interpreting results to protect your sender reputation.
Prerequisites
Before verifying your first email address, confirm you have:
- A GoHighLevel sub-account with email sending configured
- Access to Settings > Integrations > Private Integrations in the sub-account
- A REST client such as Postman, Insomnia, or
curlin your terminal - Your sub-account’s
locationId(found under Settings > Business Profile) - At least one email address to verify (use a known-good address for your first test)
Email verification helps prevent bounces, protect your domain reputation, and keep your sending infrastructure healthy.
Set Up Authentication
Email Verification endpoints require a Private Integration Token (PIT) with the emails scope.
Navigate to Settings > Integrations > Private Integrations in your sub-account. Click Create New Integration and name it “Email Verification Bot.” Under Scopes, enable the emails scope. This grants access to email verification and related email operations.
Click Save and copy the generated token. Store it securely. Include Authorization: Bearer {your-pit-token} in every request along with Content-Type: application/json and Version: 2021-07-28.
Set your base URL to https://services.leadconnectorhq.com. All endpoints below are relative to that base.
Make Your First Call
Submit an email for verification using a POST request:
POST /emails/verify
Authorization: Bearer {your-pit-token}
Content-Type: application/json
Version: 2021-07-28
{
"locationId": "your-location-id",
"email": "[email protected]"
}
The email field accepts a single email address to verify. The API checks the address against multiple validation layers: syntax validation, domain MX record lookup, mailbox existence, and disposable email detection.
For bulk verification workflows, loop through your contact list and send one verification request per email. Implement a short delay between calls to stay within rate limits. Store results alongside contact records for filtering before campaign sends.
Handle the Response
A successful call returns a 200 status with the verification result:
{
"email": "[email protected]",
"status": "valid",
"reason": "accepted_email",
"isDeliverable": true,
"isFreeProvider": false,
"isDisposable": false
}
Key fields to check: status indicates the overall result (valid, invalid, risky, or unknown). The isDeliverable boolean gives a direct send/no-send signal. The isDisposable flag catches throwaway email services. The reason field provides specifics like "accepted_email", "rejected_email", or "invalid_domain".
Common error codes: 401 means your token is invalid or the emails scope is missing. 400 means the email format is malformed. 422 indicates the email could not be processed, often due to a timeout on the receiving server.
Test Your Setup
Validate your integration with these checks:
- Verify a known-good email and confirm the response shows
"status": "valid"and"isDeliverable": true - Verify a known-bad email (like
[email protected]) and confirm it returns"invalid" - Test a disposable email from a service like Mailinator and confirm
"isDisposable": true - Check a free provider (Gmail, Yahoo) and verify the
isFreeProviderflag is accurate - Submit a malformed address (missing @ symbol) and confirm you receive a
400error
Build verification into your contact import pipeline. Flag undeliverable addresses before they enter your email workflows to prevent bounces and protect your sending domain.
Next Steps
Read the full Email Verification Guide for advanced patterns including batch verification and list cleaning strategies. From here, explore Contact CRUD for updating contact records with verification results, and Workflow Lister for auditing which workflows send emails to unverified addresses.