Nyne.ai API Get API key
Person APIs

OSINT API for Person Investigations

Runs an autonomous OSINT investigation across public sources and reconciles everything it finds into a single person report: identity, aliases, usernames, emails, phones, social accounts (including when an account was created and last seen active, where that is known), employment and education history, locations, websites, public content, public records, corporate roles, adverse findings, breach exposure, images, and wallets. Sections with no findings are omitted. Requires at least one direct identifier (email, phone, social_media_url, username, or domain), or a name together with a company or city. mode selects how hard the agent works the search (shallow, medium by default, or deep) and therefore what it costs; the retired depth parameter is rejected with 400 rather than silently downgraded. A search keeps running server-side for up to 30 minutes, so poll about every 10 seconds or supply a callback_url. This endpoint is disabled by default for every account - see Access below before you integrate it.

Access required - not enabled by default

OSINT Deep Search is off by default on every account, so there is nothing to test until it is switched on for yours: submits return 403 PRODUCT_NOT_AVAILABLE and the playground below stays disabled. Request access and we will enable it for your workspace, then the same API key you already use starts working here.

Request access
POST https://api.nyne.ai/person/osint API key Access required Request access

Manual credentials take precedence over your account key.

Overview

OSINT Deep Search runs an autonomous investigation across public sources and reconciles the findings into a single person report, for investigation, due-diligence, and trust-and-safety work. It is disabled by default on every account and enabled on request.

Best for

  • Due diligence and fraud investigations
  • Mapping the full digital footprint of a person
  • Trust and safety case work

Returns

  • A reconciled person report with confidence scores
  • Social accounts with account-lifecycle context
  • Public records, adverse findings, and breach exposure

Implementation guide

Request access first

OSINT is off by default on every account: submits return 403 PRODUCT_NOT_AVAILABLE until it is enabled, so request access before you build against it.

Pick a search mode

The mode parameter (shallow, medium, deep) sets how hard the agent works the search and what the request costs; medium is the default when it is omitted.

Collect the report

A search runs for up to 30 minutes server-side, so poll the submit path with the request_id about every 10 seconds, or supply a callback_url for webhook delivery.

Parameters

email string optional
Email identifier. Validated for format.
phone string optional
Phone identifier. Separators are stripped; 7-15 digits with an optional leading +.
social_media_url string | array optional
A LinkedIn, Twitter/X, Instagram, or Facebook profile URL, or an array of up to 3 such URLs (one per platform). Other hosts are rejected with 400.
0 / 3
username string optional
A handle to pivot from, resolved across platforms.
domain string optional
A domain tied to the subject, e.g. a personal site or an employer domain.
name string optional
Full name. Requires company or city when used without a direct identifier.
company string optional
Employer; pairs with name for name-based search.
city string optional
City; pairs with name. Truncated to 100 chars.
mode string optional
Search effort tier, and what the request costs: shallow, medium (default), or deep. Case-insensitive; any other value returns 400. See Credit usage for the per-tier price.
callback_url string optional
If set, the completed result is POSTed here when the job finishes. Must be a valid HTTP(S) URL on an allowed host when a callback allow-list is configured.

Retrieving the result

This endpoint is asynchronous. A successful submit returns a request_id while the job runs in the background. Poll the same path with a GET request - same authentication headers - passing the request_id and any endpoint-specific page values shown below as query parameters:

Loading your API credentials...

Each poll returns the job's current status; once it is completed the payload carries the result shown under Responses. Polling an unknown or expired request_id returns 404 request_not_found.

Status Meaning
queued · processing · pending The job is still running - keep polling.
completed The job finished; the payload carries the result and completed: true.
failed Terminal - the job could not complete; the error field explains why.

Poll every few seconds at first, backing off for long-running jobs. Polling is free - status checks never burn credits.

Prefer push delivery?
Supply the optional callback_url parameter and the completed payload is POSTed to your endpoint when the job finishes - no polling required. Delivery is retried up to 5 times with exponential backoff (1s, 5s, 15s, 1m, 5m) and a 30-second timeout per attempt; respond with a 2xx status to acknowledge receipt.

Credit usage

Credits are charged based on the matched configuration. The listed cost is the per-result unit price.

Feature Credits Notes
OSINT Deep Search (medium) 100 Default mode - charged once, when a report with data is delivered
Shallow mode 50 Charged instead of the default when mode is shallow
Deep mode 150 Charged instead of the default when mode is deep
Heads up
Empty results do not burn credits.

Responses

200 Status poll result - returns the current request status, plus the report or error once terminal
202 Request queued - poll the status endpoint (or wait for the callback) with the returned request_id
400 INVALID_PARAMETERS - malformed JSON, no usable identifier, an unsupported social URL, an invalid mode, or the retired depth parameter
401 Missing or invalid API credentials
402 insufficient_credits - not enough credits for the requested mode
403 PRODUCT_NOT_AVAILABLE - OSINT is not enabled for this account (request access), or ACCESS_DENIED when the request_id belongs to another API key
404 NOT_FOUND - no matching request for this request_id
429 RATE_LIMIT_EXCEEDED
500 INTERNAL_ERROR - request failed unexpectedly
502 UPSTREAM_UNAVAILABLE - the OSINT service could not start or track the search
503 SERVICE_UNAVAILABLE - the endpoint is temporarily unavailable

A newly queued submit returns 202 Accepted. It contains the polling identifier, not the result:

{
  "success": true,
  "data": {
    "request_id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4_1717000000_4271",
    "status": "processing",
    "message": "OSINT deep search request submitted. Use GET with request_id to check status.",
    "created_on": "2026-01-15T10:45:02"
  },
  "timestamp": "2026-01-01T00:00:00"
}

A successful terminal poll returns 200 with the completed payload:

{
  "success": true,
  "data": {
    "request_id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4_1717000000_4271",
    "status": "completed",
    "completed": true,
    "created_on": "2026-01-15T10:45:02",
    "completed_on": "2026-01-15T10:52:31",
    "result": {
      "identity": {
        "name": "Jane Doe",
        "kind": "person",
        "labels": [
          "product leadership"
        ],
        "confidence": 0.92,
        "identifiers": [
          {
            "value": "jane.doe@acme.com",
            "confidence": 0.95,
            "best": true
          }
        ]
      },
      "aliases": [
        {
          "value": "Jane A. Doe",
          "kind": "legal",
          "confidence": 0.71
        }
      ],
      "usernames": [
        {
          "value": "janedoe",
          "platform": "github",
          "url": "https://github.com/janedoe",
          "confidence": 0.88
        }
      ],
      "emails": [
        {
          "value": "jane.doe@acme.com",
          "kind": "work",
          "verified": true,
          "confidence": 0.95
        }
      ],
      "phones": [
        {
          "value": "+15551234567",
          "kind": "mobile",
          "verified": false,
          "confidence": 0.62
        }
      ],
      "social_profiles": [
        {
          "platform": "linkedin",
          "url": "https://linkedin.com/in/janedoe",
          "username": "janedoe",
          "display_name": "Jane Doe",
          "follower_count": 4200,
          "confidence": 0.93,
          "first_seen": "2026-01-15T10:47:10Z",
          "last_seen": "2026-01-15T10:47:10Z",
          "usage": {
            "created_at": "2011-03-08T00:00:00Z",
            "last_seen_at": "2026-01-10T00:00:00Z"
          },
          "registered": true,
          "verified": false,
          "platform_variables": {
            "headline": "VP of Product at Acme"
          }
        }
      ],
      "employment_history": [
        {
          "company": "Acme",
          "title": "VP of Product",
          "start_date": "2023-04",
          "current": true,
          "confidence": 0.9
        }
      ],
      "education_history": [
        {
          "institution": "State University",
          "degree": "BSc",
          "field": "Computer Science",
          "confidence": 0.7
        }
      ],
      "locations": [
        {
          "city": "Austin",
          "region": "TX",
          "country": "US",
          "current": true,
          "confidence": 0.81
        }
      ],
      "websites": [
        {
          "url": "https://janedoe.dev",
          "title": "Jane Doe",
          "domain": "janedoe.dev",
          "confidence": 0.76
        }
      ],
      "public_content": [
        {
          "title": "Jane Doe on shipping AI products",
          "url": "https://example.com/interview",
          "description": "Interview covering product strategy at Acme.",
          "published_at": "2025-11-02T00:00:00Z",
          "confidence": 0.65
        }
      ],
      "breaches": [
        {
          "breach_name": "ExampleForum",
          "date": "2019-05-01",
          "exposed_fields": [
            "email",
            "password_hash"
          ],
          "confidence": 0.8
        }
      ],
      "confidence": 0.88
    }
  },
  "timestamp": "2026-01-01T00:00:00"
}