Documentation Index
Fetch the complete documentation index at: https://gtmapis.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Validation Result Categories
GTMAPIs returns one of 5 possible validation results. Each result has specific meaning and recommended action.
Result Types Overview
valid
Personal email, mailbox verifiedCharged: ✅ 1 credit
valid_role_based
Generic business inboxCharged: 🆓 FREE
risky
Catch-all domain, unverifiableCharged: 🆓 FREE
invalid
Doesn’t exist or syntax errorCharged: 🆓 FREE
unknown
Can’t verify due to restrictionsCharged: 🆓 FREE
1. Valid (Personal Email)
Result: valid
Meaning: Real personal email that passed all 4 validation layers
Validation Status:
- ✅ Syntax: Valid RFC 5322 format
- ✅ DNS: MX records found
- ✅ SMTP: Mailbox verified
- ✅ Catch-All: Not a catch-all domain
- ✅ Role-Based: Not a generic inbox
Example Response:
{
"email": "john@company.com",
"result": "valid",
"reason": "",
"is_role_based": false,
"is_free_provider": false,
"is_catch_all": false,
"b2b_outbound_quality": "high",
"credits_charged": 1,
"charge_reason": "Valid personal email with high B2B outbound quality"
}
Recommended Action: ✅ USE IN CAMPAIGNS
B2B Outbound Value: 🟢 High
- Highest deliverability
- Best engagement rates
- Direct access to individual
- Worth the credit charge
2. Valid Role-Based
Result: valid_role_based
Meaning: Valid email but it’s a generic business inbox
Validation Status:
- ✅ Syntax: Valid format
- ✅ DNS: MX records found
- ✅ SMTP: Mailbox exists
- ⚠️ Role-Based: Generic inbox (info@, support@, etc.)
Common Patterns:
info@, contact@, hello@, support@, help@, sales@,
marketing@, admin@, office@, team@, hr@, careers@
Example Response:
{
"email": "info@company.com",
"result": "valid_role_based",
"reason": "Role-based email address",
"is_role_based": true,
"role_type": "information",
"b2b_outbound_quality": "low",
"credits_charged": 0,
"charge_reason": "Role-based email - free for low B2B value"
}
Recommended Action: ⚠️ USE WITH CAUTION
B2B Outbound Value: 🟡 Low
- Deliverable but shared inbox
- Lower engagement (3-5x worse than personal)
- Multiple people may see it (or none)
- Higher spam report risk
- Good for: Company inquiries, not cold outreach
3. Risky (Catch-All)
Result: risky
Meaning: Domain accepts all emails (can’t verify specific mailbox)
Validation Status:
- ✅ Syntax: Valid format
- ✅ DNS: MX records found
- ⚠️ SMTP: Server accepts everything
- ❌ Catch-All: Detected catch-all configuration
Detection:
# Server accepts random addresses
RCPT TO: <definitely_not_real_8473626@domain.com>
250 OK # ← This means catch-all
Example Response:
{
"email": "anyone@catchall.com",
"result": "risky",
"reason": "Catch-all domain detected",
"is_catch_all": true,
"catch_all_confidence": "high",
"b2b_outbound_quality": "none",
"credits_charged": 0,
"charge_reason": "Catch-all domain - cannot verify individual mailbox"
}
Recommended Action: ❌ AVOID IN CAMPAIGNS
B2B Outbound Value: 🔴 None
- Unknown if mailbox actually exists
- High bounce risk in practice
- Damages sender reputation
- Could be spam trap
- May accept but not deliver
Confidence Levels:
high - Very likely catch-all (avoid completely)
medium - Possibly catch-all (use with caution)
low - Uncertain (test with small batch first)
4. Invalid
Result: invalid
Meaning: Email doesn’t exist or has syntax errors
Common Reasons:
Syntax Errors
{
"email": "invalid@",
"result": "invalid",
"reason": "Invalid email format",
"validation_layer": "syntax"
}
No DNS Records
{
"email": "john@fakeemail123notreal.com",
"result": "invalid",
"reason": "Domain has no MX records",
"validation_layer": "dns"
}
Mailbox Doesn’t Exist
{
"email": "notreal@gmail.com",
"result": "invalid",
"reason": "Mailbox does not exist (SMTP 550)",
"validation_layer": "smtp",
"smtp_response": "550 5.1.1 User unknown"
}
Recommended Action: ❌ REMOVE FROM LIST
B2B Outbound Value: 🔴 None
- Will hard bounce
- Damages sender reputation
- Wastes sending credits
- No chance of delivery
5. Unknown
Result: unknown
Meaning: Unable to verify due to server restrictions
Common Causes:
Greylisting
{
"email": "john@greylisted.com",
"result": "unknown",
"reason": "Temporary rejection - greylisting (SMTP 451)",
"smtp_response": "451 4.7.1 Greylisting in action, please try again"
}
SMTP Restrictions
{
"email": "john@restrictive.com",
"result": "unknown",
"reason": "SMTP verification not permitted",
"smtp_response": "550 5.7.1 Recipient verification not allowed"
}
Timeout
{
"email": "john@slowserver.com",
"result": "unknown",
"reason": "SMTP connection timeout after 5 seconds"
}
Recommended Action: ⚠️ PROCEED WITH CAUTION
B2B Outbound Value: 🟡 Unknown
- Domain exists (passed DNS)
- Mailbox status uncertain
- May deliver successfully
- Test with small batch first
- Monitor bounce rates
Result Distribution Examples
High-Quality B2B List
valid (personal): 60% ✅ Charged
valid_role_based: 20% 🆓 Free
risky (catch-all): 10% 🆓 Free
invalid: 8% 🆓 Free
unknown: 2% 🆓 Free
Low-Quality Scraped List
valid (personal): 15% ✅ Charged
valid_role_based: 30% 🆓 Free
risky (catch-all): 25% 🆓 Free
invalid: 25% 🆓 Free
unknown: 5% 🆓 Free
Decision Matrix
| Result | Deliverable? | Credits | Use in Campaigns? |
|---|
valid | ✅ Yes | 1 | ✅ Primary target |
valid_role_based | ✅ Yes | 0 | ⚠️ Secondary (low priority) |
risky | ❓ Unknown | 0 | ❌ Avoid |
invalid | ❌ No | 0 | ❌ Remove |
unknown | ❓ Maybe | 0 | ⚠️ Test carefully |
Filtering Recommendations
For Maximum Deliverability
// Only use valid personal emails
results.filter(r => r.result === 'valid')
For Budget Campaigns
// Use valid + role-based (accepting lower engagement)
results.filter(r =>
r.result === 'valid' ||
r.result === 'valid_role_based'
)
For List Cleaning
// Remove definite invalids and risky
const toRemove = results.filter(r =>
r.result === 'invalid' ||
r.result === 'risky'
)
API Response Schema
interface ValidationResult {
// Core fields
email: string;
result: 'valid' | 'valid_role_based' | 'risky' | 'invalid' | 'unknown';
reason: string;
// Detection flags
is_role_based: boolean;
is_free_provider: boolean;
is_catch_all: boolean;
// B2B quality
b2b_outbound_quality: 'high' | 'low' | 'none';
// Credits
credits_charged: 0 | 1;
charge_reason: string;
// Optional details
role_type?: string;
catch_all_confidence?: 'high' | 'medium' | 'low';
validation_layer?: 'syntax' | 'dns' | 'smtp' | 'catchall';
smtp_response?: string;
}
Next Steps
B2B Quality Scoring
Understand quality levels in depth
API Reference
Start validating emails