---
title: "Reveal contact details (time-budgeted)"
method: POST
path: "/v1/contact-details/reveal"
tags: ["Contact details"]
---

# Reveal contact details (time-budgeted)

`POST /v1/contact-details/reveal`

## Request

- Base URL: `https://api.fiber.ai`
- URL: `https://api.fiber.ai/v1/contact-details/reveal`
- Auth: none declared

Return a person's work email, personal email, and/or phone number, guaranteed to finish within your specified time window. You can pick how deep in our 'waterfall' we go; higher depths increase yield but will cost more. This is a beta endpoint, but we recommend trying it over the other contact reveal endpoints.

<span>⚡ <strong>Rate limit:</strong> 120 requests per 1 minute</span>

<span>💰 <strong>Cost:</strong> Only delivered items are billed — nothing delivered means nothing charged. Prices by depth:<br />• instant — 1 credit(s) per email type, 1 if phone numbers are delivered.<br />• quick — 1 credit(s) per email type, 2 if phone numbers are delivered.<br />• medium — flat bundle: 5 credit(s) for emails + phone, 3 all emails, 2 work email only, 2 personal email only, 3 phone only, 5 work email + phone, 5 personal email + phone.&nbsp;<span title="Pricing shown is default pricing. Actual pricing may vary.">ⓘ</span></span>

<span>⏱ <strong>Recommended timeout:</strong> 90 seconds&nbsp;<span title="Recommended timeout: set your HTTP client timeout to at least 90 seconds for this endpoint.">ⓘ</span></span>

## Request body

- union
  - object
    - `apiKey` string, required: Your Fiber API key
    - `linkedinUrl` string, required: The person's LinkedIn identifier. Accepts a full LinkedIn profile URL (e.g. 'https://www.linkedin.com/in/williamhgates/'), a bare slug (e.g. 'williamhgates'), a Sales Navigator URN (e.g. 'ACwAAA-001MBbIvJon'), or a numeric LinkedIn user ID (e.g. '443105112').
    - `enrichmentType` object: Which email and phone types to look for.
      - `getWorkEmails` boolean
      - `getPersonalEmails` boolean
      - `getPhoneNumbers` boolean
    - `timeBudgetMs` integer, nullable: How long this call may run, in milliseconds. Omit to use the default for the chosen depth.
    - `company` union: Optional current company of the person. When provided, work emails whose domain does not match this company are returned in unmatchedWorkEmails instead of emails. Set identifier to 'linkedinUrl', 'linkedinSlug', 'linkedinOrgId', or 'domain' and provide the corresponding value.
      - object
        - `identifier` 'linkedinUrl', required
        - `value` string, required: LinkedIn company URL (e.g. 'https://www.linkedin.com/company/openai').
      - object
        - `identifier` 'linkedinSlug', required
        - `value` string, required: LinkedIn company slug (e.g. 'openai').
      - object
        - `identifier` 'linkedinOrgId', required
        - `value` string, required: LinkedIn numeric organization ID (e.g. '11130470').
      - object
        - `identifier` 'domain', required
        - `value` string, required: Company website domain (e.g. 'openai.com').
    - `depth` 'instant', required: Stored contact details only — no deliverability check. Waits 10 seconds when timeBudgetMs is omitted. Priced by this choice and what is delivered, not by how long the lookup takes.
  - object
    - `apiKey` string, required: Your Fiber API key
    - `linkedinUrl` string, required: The person's LinkedIn identifier. Accepts a full LinkedIn profile URL (e.g. 'https://www.linkedin.com/in/williamhgates/'), a bare slug (e.g. 'williamhgates'), a Sales Navigator URN (e.g. 'ACwAAA-001MBbIvJon'), or a numeric LinkedIn user ID (e.g. '443105112').
    - `enrichmentType` object: Which email and phone types to look for.
      - `getWorkEmails` boolean
      - `getPersonalEmails` boolean
      - `getPhoneNumbers` boolean
    - `timeBudgetMs` integer, nullable: How long this call may run, in milliseconds. Omit to use the default for the chosen depth.
    - `company` union: Optional current company of the person. When provided, work emails whose domain does not match this company are returned in unmatchedWorkEmails instead of emails. Set identifier to 'linkedinUrl', 'linkedinSlug', 'linkedinOrgId', or 'domain' and provide the corresponding value.
      - object
        - `identifier` 'linkedinUrl', required
        - `value` string, required: LinkedIn company URL (e.g. 'https://www.linkedin.com/company/openai').
      - object
        - `identifier` 'linkedinSlug', required
        - `value` string, required: LinkedIn company slug (e.g. 'openai').
      - object
        - `identifier` 'linkedinOrgId', required
        - `value` string, required: LinkedIn numeric organization ID (e.g. '11130470').
      - object
        - `identifier` 'domain', required
        - `value` string, required: Company website domain (e.g. 'openai.com').
    - `depth` 'quick', required: Stored contact details plus a live search. Waits 30 seconds when timeBudgetMs is omitted. Priced by this choice and what is delivered, not by how long the lookup takes.
    - `validateEmails` boolean: Whether to check email addresses for deliverability before returning them.
  - object
    - `apiKey` string, required: Your Fiber API key
    - `linkedinUrl` string, required: The person's LinkedIn identifier. Accepts a full LinkedIn profile URL (e.g. 'https://www.linkedin.com/in/williamhgates/'), a bare slug (e.g. 'williamhgates'), a Sales Navigator URN (e.g. 'ACwAAA-001MBbIvJon'), or a numeric LinkedIn user ID (e.g. '443105112').
    - `enrichmentType` object: Which email and phone types to look for.
      - `getWorkEmails` boolean
      - `getPersonalEmails` boolean
      - `getPhoneNumbers` boolean
    - `timeBudgetMs` integer, nullable: How long this call may run, in milliseconds. Omit to use the default for the chosen depth.
    - `company` union: Optional current company of the person. When provided, work emails whose domain does not match this company are returned in unmatchedWorkEmails instead of emails. Set identifier to 'linkedinUrl', 'linkedinSlug', 'linkedinOrgId', or 'domain' and provide the corresponding value.
      - object
        - `identifier` 'linkedinUrl', required
        - `value` string, required: LinkedIn company URL (e.g. 'https://www.linkedin.com/company/openai').
      - object
        - `identifier` 'linkedinSlug', required
        - `value` string, required: LinkedIn company slug (e.g. 'openai').
      - object
        - `identifier` 'linkedinOrgId', required
        - `value` string, required: LinkedIn numeric organization ID (e.g. '11130470').
      - object
        - `identifier` 'domain', required
        - `value` string, required: Company website domain (e.g. 'openai.com').
    - `depth` 'medium', required: Stored contact details plus the broadest live search. Waits 90 seconds when timeBudgetMs is omitted. Priced by this choice and what is delivered, not by how long the lookup takes.
    - `validateEmails` boolean: Whether to check email addresses for deliverability before returning them.

## Response `200`

Default Response

- object
  - `output` object, required
    - `profile` object, required
      - `name` string, nullable: The person's full name. Null when unavailable.
      - `emails` object[], required
        - `email` string, required
        - `type` 'work' | 'personal', required: Whether this address is a work email or a personal email.
        - `status` 'valid' | 'risky' | 'unknown' | 'invalid', required: Deliverability of this address. Only `valid` has passed a deliverability check.
      - `unmatchedWorkEmails` object[]: Work emails whose domain does not match the person's current company (or the company you specified). Not included in emails; present only when at least one was found.
        - `email` string, required
        - `type` 'work' | 'personal', required: Whether this address is a work email or a personal email.
        - `status` 'valid' | 'risky' | 'unknown' | 'invalid', required: Deliverability of this address. Only `valid` has passed a deliverability check.
      - `phoneNumbers` object[], required
        - `number` string, required: The phone number.
        - `type` 'mobile' | 'other', required: Whether this number is a mobile number.
      - `linkedinUrl` string, nullable: Public LinkedIn profile URL. Null when none is available.
  - `chargeInfo` union, required
    - object: Credits were charged immediately for this operation
      - `method` 'charged-now', required
      - `creditsCharged` number, required
      - `lowCreditAlert` object, nullable: Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required: URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required: Human-readable credits warning.
        - `availableCredits` number, required: Number of credits remaining in the current billing period.
    - object: Credits will be charged after the operation completes
      - `method` 'charging-later', required
      - `message` string, required
      - `lowCreditAlert` object, nullable: Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required: URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required: Human-readable credits warning.
        - `availableCredits` number, required: Number of credits remaining in the current billing period.
    - object: Credits that were charged for an asynchronous operation
      - `method` 'charged-for-async-process', required
      - `creditsCharged` number, required
      - `message` string, required
      - `lowCreditAlert` object, nullable: Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required: URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required: Human-readable credits warning.
        - `availableCredits` number, required: Number of credits remaining in the current billing period.
    - object: No credits were charged for this operation
      - `method` 'free', required
      - `message` string, required
      - `lowCreditAlert` object, nullable: Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required: URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required: Human-readable credits warning.
        - `availableCredits` number, required: Number of credits remaining in the current billing period.
    - object: Credits were refunded for this operation
      - `method` 'credits-refunded', required
      - `creditsRefunded` number, required
      - `message` string, required
      - `lowCreditAlert` object, nullable: Contains a link to get more credits, a warning message, and the remaining credit count.
        - `getMoreCreditsUrl` string, uri, required: URL to top up credits or restart billing cycle to get fresh credits.
        - `message` string, required: Human-readable credits warning.
        - `availableCredits` number, required: Number of credits remaining in the current billing period.
  - `warnings` object[], nullable: Warnings about extraneous fields in request
    - `field` string, required: Full path to extraneous field (e.g., 'searchParams.ExtraField')
    - `message` string, required: Warning message
  - `advice` string[], nullable: Tips, recommendations, and suggestions for using this API effectively.

## Other responses

- `400`: Default Response
- `401`: Default Response
- `402`: Default Response
- `403`: Default Response
- `404`: Default Response
- `422`: Default Response
- `429`: Default Response
- `500`: Default Response
- `503`: Default Response

## Changes

- **2026-10-27** `a15af2897f6b`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/fiber/apis/fiber-ai-api/changes/v1/contact-details/reveal/post.md)

---

[API](https://skmtc.dev/fiber/apis/fiber-ai-api.md) - [All operations](https://skmtc.dev/fiber/apis/fiber-ai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fiber/apis/fiber-ai-api/revisions/d8237cb5c35e?raw)
