FullEnrich Contact Enrichment API

Submit up to 100 contacts per request for bulk waterfall enrichment by first name, last name, and company domain or company name (LinkedIn URL optional), then poll or receive a webhook to retrieve the most probable work email, personal email, and mobile phone plus full enrichment status.

OpenAPI Specification

fullenrich-openapi.yml Raw ↑
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