---
title: "Reveal contact details (turbo)"
method: POST
path: "/v1/contact-details/turbo/sync"
tags: ["Contact details"]
---

# Reveal contact details (turbo)

`POST /v1/contact-details/turbo/sync`

Fastest synchronous contact reveal — optimized for speed at a higher credit cost. Uses a premium enrichment stack for the lowest possible latency. For a cheaper option with slightly longer response times, use the standard /contact-details/single endpoint. For maximum coverage (async, slower), use the /contact-details/exhaustive/start endpoint.

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

<span>💰 <strong>Cost:</strong> Pay only for the data you request:<br />• 7 credits for all phone numbers AND all emails<br />• 3 credits for work email only<br />• 3 credits for personal email only<br />• 5 credits for phone only<br />• 5 credits for all emails&nbsp;<span title="Pricing shown is default pricing. Actual pricing may vary. Partial reveals only bill for delivered data.">ⓘ</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

- 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 — The enrichment types to request. Credits are charged per selected type.
    - `getWorkEmails` boolean
    - `getPersonalEmails` boolean
    - `getPhoneNumbers` boolean
  - `patience` 'MINIMUM' | 'LOW' | 'MEDIUM' | 'HIGH' | 'EXTREME' | 'MAXIMUM' | 'null', nullable — How long to wait for email deliverability validation after a contact is found. Higher patience increases average response time but improves deliverability accuracy. MINIMUM is the least thorough bounce-detection option.
  - `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').

## Response `200`

Default Response

- object
  - `output` object, required
    - `profile` object, required
      - `name` string, nullable — The person's full name
      - `status` 'completed', required
      - `emails` object[], required
        - `email` string, required
        - `type` string, required
        - `status` 'valid' | 'risky' | 'unknown' | 'invalid' | 'null', nullable
      - `unmatchedWorkEmails` object[] — Work emails found for this person whose domain does not match the person's current company (or the company you specified). These are not included in emails. Present only when at least one such email was found.
        - `email` string, required
        - `type` string, required
        - `status` 'valid' | 'risky' | 'unknown' | 'invalid' | 'null', nullable
      - `phoneNumbers` object[], required
        - `number` string, required
        - `type` string, required
      - `success` boolean, required
      - `task_id` string, required
      - `linkedin_url` string, required
    - `done` boolean, required — Whether the enrichment is completed or not.
  - `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-09-23** `834164952caf` — 2 info
  - added the new optional request property `company`
  - added the optional property `output/profile/unmatchedWorkEmails` to the response with the `200` status
- **2026-08-19** `87ad9a3ecc4c` — 1 breaking, 3 warning, 17 info
  - the response property `output/profile/emails/items/status` became nullable for the status `200`
  - removed the optional property `output/profile/error` from the response with the `200` status
  - removed the optional property `output/profile/exhaustive` from the response with the `200` status
  - added the new `undefined` enum value to the `output/profile/emails/items/status` response property for the response status `200`
  - …17 more
- **2026-07-31** `4002aa81d4fb` — 2 breaking, 1 info
  - the response property `advice` became nullable for the status `200`
  - the response property `advice` became optional for the status `200`
  - the `advice` response's property default value `` was removed for the status `200`

[Change history](https://skmtc.dev/fiber/apis/fiber-ai-api/changes/v1/contact-details/turbo/sync/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/7f6ae6cff8b1?raw)
