Skip to main content

API Reference

The GTMAPIs REST API provides B2B data enrichment including email validation, email finder, LinkedIn company data, and people lookup.

Base URL

https://api.gtmapis.com

Authentication

All API requests require an API key in the X-API-Key header:
X-API-Key: gtm_test_your_key_here
See Authentication for details.

Available Endpoints

Email Validation

Email Finder

LinkedIn Company Data

People Data

Company Enrichment

Subscriptions & Billing

Monitoring

Rate Limits

  • Limit: 1000 requests per minute per API key
  • Bulk limit: 100 emails per request
  • Response header: X-RateLimit-Remaining
When you exceed the rate limit:
{
  "error": "Rate limit exceeded",
  "message": "You have exceeded the rate limit of 1000 requests per minute",
  "retry_after": 60
}

Request Format

All requests must include: Headers:
  • Content-Type: application/json
  • X-API-Key: gtm_test_your_key_here
Body: JSON with required fields

Response Format

All successful responses return HTTP 200 with JSON:
{
  "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"
}

Error Responses

400 Bad Request

Invalid request format or missing required fields:
{
  "error": "Bad Request",
  "message": "Email field is required"
}

401 Unauthorized

Missing or invalid API key:
{
  "error": "Unauthorized",
  "message": "Invalid API key"
}

429 Too Many Requests

Rate limit exceeded:
{
  "error": "Rate limit exceeded",
  "message": "You have exceeded the rate limit of 1000 requests per minute",
  "retry_after": 60
}

500 Internal Server Error

Unexpected server error:
{
  "error": "Internal Server Error",
  "message": "An unexpected error occurred"
}

Response Fields

FieldTypeDescription
emailstringThe validated email address
resultstringOne of: valid, valid_role_based, risky, invalid, unknown
reasonstringHuman-readable explanation of the result
is_role_basedbooleanWhether the email is a generic business inbox
is_free_providerbooleanWhether the domain is a free email provider (Gmail, Yahoo, etc.)
is_catch_allbooleanWhether the domain accepts all emails
catch_all_confidencestringConfidence level: high, medium, or low (only if catch-all)
b2b_outbound_qualitystringB2B value: high, low, or none
credits_chargedintegerCredits charged (0 or 1)
charge_reasonstringExplanation of credit charge
validation_layerstringLayer where validation stopped: syntax, dns, smtp, catchall
smtp_responsestringRaw SMTP server response (if applicable)

Client Libraries

JavaScript/TypeScript

const validateEmail = async (email) => {
  const response = await fetch('https://api.gtmapis.com/v1/validate', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.GTMAPIS_API_KEY
    },
    body: JSON.stringify({ email })
  });

  return await response.json();
};

Python

import requests
import os

def validate_email(email):
    response = requests.post(
        'https://api.gtmapis.com/v1/validate',
        headers={
            'Content-Type': 'application/json',
            'X-API-Key': os.environ.get('GTMAPIS_API_KEY')
        },
        json={'email': email}
    )
    return response.json()

Go

package main

import (
    "bytes"
    "encoding/json"
    "net/http"
    "os"
)

type ValidationRequest struct {
    Email string `json:"email"`
}

type ValidationResponse struct {
    Email              string `json:"email"`
    Result             string `json:"result"`
    B2BOutboundQuality string `json:"b2b_outbound_quality"`
    CreditsCharged     int    `json:"credits_charged"`
}

func validateEmail(email string) (*ValidationResponse, error) {
    body, _ := json.Marshal(ValidationRequest{Email: email})

    req, _ := http.NewRequest("POST", "https://api.gtmapis.com/v1/validate", bytes.NewBuffer(body))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("X-API-Key", os.Getenv("GTMAPIS_API_KEY"))

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    var result ValidationResponse
    json.NewDecoder(resp.Body).Decode(&result)
    return &result, nil
}

Next Steps