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