FullEnrich Reverse Email Lookup API
Resolve a person and company from an email address in bulk, then retrieve the identified profile and contact information by the reverse lookup's enrichment_id.
Resolve a person and company from an email address in bulk, then retrieve the identified profile and contact information by the reverse lookup's enrichment_id.
openapi: 3.0.3
info:
title: FullEnrich API
description: >-
FullEnrich finds verified B2B business emails and mobile phone numbers by
running a waterfall across 15+ data vendors. Submit contacts by first name,
last name and company (domain or company name) — optionally with a LinkedIn
URL — for bulk enrichment, then retrieve results by polling or via webhook.
Credits are only consumed when data is found.
termsOfService: https://fullenrich.com/terms
contact:
name: FullEnrich Support
url: https://docs.fullenrich.com
version: '2.0'
servers:
- url: https://app.fullenrich.com/api/v2
description: FullEnrich production API
security:
- bearerAuth: []
tags:
- name: Contact Enrichment
description: Submit contacts for waterfall enrichment and retrieve results.
- name: Reverse Email Lookup
description: Resolve a person and company from an email address.
- name: Account
description: Workspace credit balance and API key checks.
paths:
/contact/enrich/bulk:
post:
operationId: startBulkEnrichment
tags:
- Contact Enrichment
summary: Start a bulk contact enrichment
description: >-
Submit up to 100 contacts for waterfall enrichment. Each contact needs
first_name and last_name plus either domain or company_name, or a
linkedin_url. Returns an enrichment_id used to retrieve results.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BulkEnrichmentRequest'
responses:
'200':
description: Enrichment job accepted.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrichmentAccepted'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'429':
$ref: '#/components/responses/RateLimited'
get:
operationId: getBulkEnrichmentByQuery
tags:
- Contact Enrichment
summary: Get bulk enrichment results by enrichment id
description: >-
Retrieve the results of a bulk enrichment. The enrichment_id may be
supplied as a path segment (/contact/enrich/bulk/{enrichment_id}) or as
a query parameter, depending on client convention.
parameters:
- name: enrichment_id
in: query
required: true
description: The enrichment_id returned when the enrichment was started.
schema:
type: string
format: uuid
- name: forceResults
in: query
required: false
description: Return partial results even if the enrichment is not finished.
schema:
type: boolean
default: false
responses:
'200':
description: Enrichment results.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrichmentResult'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
/contact/enrich/bulk/{enrichment_id}:
get:
operationId: getBulkEnrichment
tags:
- Contact Enrichment
summary: Get bulk enrichment results
description: >-
Retrieve the results of a bulk enrichment by its enrichment_id. The
response includes the run status, credits consumed, and per-contact
enriched contact info and profile data.
parameters:
- name: enrichment_id
in: path
required: true
description: The unique identifier returned when the enrichment was started.
schema:
type: string
format: uuid
- name: forceResults
in: query
required: false
description: Return partial results even if the enrichment is not finished.
schema:
type: boolean
default: false
responses:
'200':
description: Enrichment results.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrichmentResult'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
/contact/reverse/email/bulk:
post:
operationId: startReverseEmailLookup
tags:
- Reverse Email Lookup
summary: Start a bulk reverse email lookup
description: >-
Resolve a person and company from one or more email addresses. Returns
an enrichment_id used to retrieve results.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ReverseEmailRequest'
responses:
'200':
description: Reverse lookup accepted.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrichmentAccepted'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
get:
operationId: getReverseEmailLookup
tags:
- Reverse Email Lookup
summary: Get reverse email lookup results
description: Retrieve the result of a reverse email lookup by its enrichment_id.
parameters:
- name: enrichment_id
in: query
required: true
description: The enrichment_id returned when the reverse lookup was started.
schema:
type: string
format: uuid
responses:
'200':
description: Reverse lookup results.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrichmentResult'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
/account/credits:
get:
operationId: getAccountCredits
tags:
- Account
summary: Get workspace credit balance
description: Returns the current balance of credits available in your workspace.
responses:
'200':
description: Current credit balance.
content:
application/json:
schema:
$ref: '#/components/schemas/AccountCredits'
'401':
$ref: '#/components/responses/Unauthorized'
/account/keys/verify:
get:
operationId: verifyApiKey
tags:
- Account
summary: Verify API key
description: Validates that the supplied API key is active.
responses:
'200':
description: API key status.
content:
application/json:
schema:
$ref: '#/components/schemas/KeyVerification'
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: >-
Pass your API key from the FullEnrich dashboard as a Bearer token in the
Authorization header: `Authorization: Bearer YOUR_API_KEY`.
responses:
BadRequest:
description: Bad request or enrichment still in progress.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Authorization failed (missing header or invalid API key).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
PaymentRequired:
description: Payment required (insufficient credits).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Enrichment id not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
RateLimited:
description: Rate limit exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
BulkEnrichmentRequest:
type: object
required:
- name
- data
properties:
name:
type: string
description: A readable identifier for this enrichment, visible in your dashboard.
example: My enrichment batch
webhook_url:
type: string
format: uri
description: URL that receives a POST when the enrichment finishes, lacks credits, or is canceled.
example: https://example.com/webhooks/fullenrich
webhook_events:
type: object
description: Optional per-event webhook URLs.
properties:
contact_finished:
type: string
format: uri
description: URL called as each individual contact finishes.
data:
type: array
description: Up to 100 contacts to enrich.
maxItems: 100
items:
$ref: '#/components/schemas/ContactInput'
ContactInput:
type: object
description: >-
A contact to enrich. Provide first_name and last_name plus either domain
or company_name, or provide a linkedin_url.
properties:
first_name:
type: string
example: John
last_name:
type: string
example: Doe
domain:
type: string
description: Company website domain.
example: acme.com
company_name:
type: string
example: Acme Inc
linkedin_url:
type: string
format: uri
description: LinkedIn profile URL to improve email and phone match rates.
example: https://www.linkedin.com/in/johndoe
enrich_fields:
type: array
description: Which data types to retrieve.
items:
type: string
enum:
- contact.work_emails
- contact.personal_emails
- contact.phones
example:
- contact.work_emails
- contact.phones
custom:
type: object
description: >-
Reference data (e.g. CRM IDs) echoed back in the result. String
values only; max 10 keys, up to 100 chars per value.
additionalProperties:
type: string
ReverseEmailRequest:
type: object
required:
- name
- data
properties:
name:
type: string
description: A readable identifier for this reverse lookup.
webhook_url:
type: string
format: uri
data:
type: array
maxItems: 100
items:
type: object
required:
- email
properties:
email:
type: string
format: email
example: john.doe@acme.com
custom:
type: object
additionalProperties:
type: string
EnrichmentAccepted:
type: object
properties:
enrichment_id:
type: string
format: uuid
example: 2db5ea61-1752-42cf-8ea1-ab1da060cd0a
EnrichmentResult:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
status:
type: string
enum:
- CREATED
- IN_PROGRESS
- CANCELED
- CREDITS_INSUFFICIENT
- FINISHED
- RATE_LIMIT
- UNKNOWN
cost:
type: object
properties:
credits:
type: integer
description: Total credits consumed by this enrichment.
data:
type: array
items:
$ref: '#/components/schemas/EnrichedContact'
EnrichedContact:
type: object
properties:
input:
type: object
properties:
first_name:
type: string
last_name:
type: string
full_name:
type: string
company_domain:
type: string
company_name:
type: string
professional_network_url:
type: string
custom:
type: object
description: The custom object supplied in the request, echoed back unchanged.
additionalProperties:
type: string
contact_info:
$ref: '#/components/schemas/ContactInfo'
profile:
$ref: '#/components/schemas/Profile'
ContactInfo:
type: object
properties:
most_probable_work_email:
$ref: '#/components/schemas/EmailResult'
most_probable_personal_email:
$ref: '#/components/schemas/EmailResult'
most_probable_phone:
$ref: '#/components/schemas/PhoneResult'
work_emails:
type: array
items:
$ref: '#/components/schemas/EmailResult'
personal_emails:
type: array
items:
$ref: '#/components/schemas/EmailResult'
phones:
type: array
items:
$ref: '#/components/schemas/PhoneResult'
EmailResult:
type: object
properties:
email:
type: string
format: email
status:
type: string
enum:
- DELIVERABLE
- HIGH_PROBABILITY
- CATCH_ALL
- INVALID
- INVALID_DOMAIN
PhoneResult:
type: object
properties:
number:
type: string
description: Phone number in E.164 format.
example: '+14155552671'
region:
type: string
description: ISO country code for the number.
example: US
Profile:
type: object
properties:
id:
type: string
format: uuid
full_name:
type: string
first_name:
type: string
last_name:
type: string
location:
type: object
properties:
country:
type: string
country_code:
type: string
city:
type: string
region:
type: string
social_profiles:
type: object
properties:
professional_network:
type: object
properties:
id:
type: integer
url:
type: string
handle:
type: string
connection_count:
type: integer
skills:
type: array
items:
type: string
employment:
type: object
properties:
current:
$ref: '#/components/schemas/Employment'
all:
type: array
items:
$ref: '#/components/schemas/Employment'
Employment:
type: object
properties:
title:
type: string
is_current:
type: boolean
start_at:
type: string
format: date-time
end_at:
type: string
format: date-time
company:
type: object
properties:
name:
type: string
domain:
type: string
AccountCredits:
type: object
properties:
credits:
type: integer
description: Current credit balance available in the workspace.
example: 4820
KeyVerification:
type: object
properties:
valid:
type: boolean
example: true
Error:
type: object
properties:
code:
type: string
example: error.unauthorized
message:
type: string
example: Invalid API key