Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.sixtyfour.ai/llms.txt

Use this file to discover all available pages before exploring further.

Use case

Discover phone numbers for leads for sales outreach, CRM enrichment, or lead qualification.

Endpoint

POST https://api.sixtyfour.ai/find-phone

API Reference

See the full request/response schema and parameters in the API Reference.

Pricing

See Credits & Pricing Guide for credit costs.

Errors

For error responses (400, 403, 422, etc.), see Handling Errors.

Sync usage

curl -X POST "https://api.sixtyfour.ai/find-phone" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "lead": {
      "name": "Sarah Johnson",
      "company": "TechCorp Inc",
      "linkedin_url": "https://linkedin.com/in/sarahjohnson"
    }
  }'

Async pattern

For production workflows, use /find-phone-async to submit a job and poll for results. This avoids long-lived HTTP connections and lets you parallelize many lookups without blocking your client. The flow is:
  1. SubmitPOST /find-phone-async with the same body as the sync endpoint. Response includes a task_id.
  2. PollGET /job-status/{task_id} until status is completed, failed, or cancelled.
  3. Read result — When completed, the discovered phone numbers are in the result field, in the same shape as the sync response.
The async start endpoint returns uppercase RUNNING. Subsequent /job-status/{task_id} calls return lowercase statuses. charge_amount is returned in cents, not credits.

Polling example

import requests
import time

response = requests.post(
    "https://api.sixtyfour.ai/find-phone-async",
    headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={
        "lead": {
            "name": "Sarah Johnson",
            "company": "TechCorp Inc",
            "linkedin_url": "https://linkedin.com/in/sarahjohnson"
        }
    }
)
response.raise_for_status()
task_id = response.json()["task_id"]

while True:
    status = requests.get(
        f"https://api.sixtyfour.ai/job-status/{task_id}",
        headers={"x-api-key": "YOUR_API_KEY"}
    ).json()

    if status["status"] == "completed":
        results = status["result"]
        break
    if status["status"] in ("failed", "cancelled"):
        raise RuntimeError(f"Job {status['status']}: {status.get('error', 'Unknown error')}")

    time.sleep(5)

Webhook callback

Pass a webhook_url to receive the result via HTTP POST instead of polling. The signed payload, retry behavior, and verification steps are documented in Outgoing Webhooks.
POST /find-phone-async
{
  "lead": {
    "name": "Sarah Johnson",
    "company": "TechCorp Inc",
    "linkedin_url": "https://linkedin.com/in/sarahjohnson"
  },
  "webhook_url": "https://your-server.com/webhooks/sixtyfour"
}

Bulk processing

Use /find-phone-bulk (sync) or /find-phone-bulk-async (async) to process up to 100 leads in a single call. Both accept a leads array and the same providers and webhook_url fields as the single-lead endpoints.

Bulk sync

Returns 200 OK with results once every lead is processed. Best for small batches where you want a single round-trip.
curl -X POST "https://api.sixtyfour.ai/find-phone-bulk" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "leads": [
      {
        "name": "Sarah Johnson",
        "company": "TechCorp Inc",
        "linkedin_url": "https://linkedin.com/in/sarahjohnson"
      },
      {
        "name": "John Doe",
        "company": "Example Corp",
        "linkedin_url": "https://linkedin.com/in/johndoe"
      }
    ]
  }'

Bulk async

Submit a batch, get back a task_id, then poll /job-status/{task_id} (or set webhook_url to receive a callback). Recommended for batches of more than a handful of leads, or when you don’t want to hold a long-lived HTTP connection.
import requests
import time

response = requests.post(
    "https://api.sixtyfour.ai/find-phone-bulk-async",
    headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={
        "leads": [
            {
                "name": "Sarah Johnson",
                "company": "TechCorp Inc",
                "linkedin_url": "https://linkedin.com/in/sarahjohnson"
            },
            {
                "name": "John Doe",
                "company": "Example Corp",
                "linkedin_url": "https://linkedin.com/in/johndoe"
            }
        ]
    }
)
response.raise_for_status()
task_id = response.json()["task_id"]

while True:
    status = requests.get(
        f"https://api.sixtyfour.ai/job-status/{task_id}",
        headers={"x-api-key": "YOUR_API_KEY"}
    ).json()

    if status["status"] == "completed":
        results = status["result"]
        break
    if status["status"] in ("failed", "cancelled"):
        raise RuntimeError(f"Job {status['status']}: {status.get('error', 'Unknown error')}")

    time.sleep(10)