# Data Breach Search API

<span>Data Breach Search</span><span> NiamonX</span>

# API - Public Breaches Search (140+ Billion Records)

# 🧠 NiamonX API — **Public Breaches Search (140+ Billion Records)**

Comprehensive API documentation for searching public data breaches aggregated from 4,500+ sources.

---

## ⚠️ Important Notice

The **Public Breaches Search** API allows you to query a massive database of publicly available leaks (&gt;140 billion records).  
Use it **only** for legitimate purposes — such as verifying your own data or with explicit authorization.

> ❗ Abuse or publication of obtained data will lead to **account suspension** and **permanent API ban**.  
> Some results may contain outdated or incomplete data.

---

## 🧩 API Endpoint

**Main URL:**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-https%3A%2F%2Fdash.ni"><div class="overflow-y-auto p-4" dir="ltr">`POST https://dash.niamonx.io/api/v2/breaches_search`</div></div>**Headers:**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-content-type%3A-applic"><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attribute">Content-Type</span>: application/json<span class="hljs-attribute">X-API-Key</span>: YOUR_API_KEY`</div></div>**Body Example:**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--2"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```json
{ "query": "test@example.com" }
```

### Example Request via cURL

<div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs" id="bkmrk--3">  
</div>```bash
curl -X POST https://dash.niamonx.io/api/v2/breaches_search \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"query":"test@example.com"}'
```

---

## 🧭 Query Parameters

<div class="_tableContainer_1rjym_1" id="bkmrk-field-type-descripti"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1456" data-start="1270"><thead data-end="1310" data-start="1270"><tr data-end="1310" data-start="1270"><th data-col-size="sm" data-end="1278" data-start="1270">Field</th><th data-col-size="sm" data-end="1285" data-start="1278">Type</th><th data-col-size="md" data-end="1299" data-start="1285">Description</th><th data-col-size="sm" data-end="1310" data-start="1299">Example</th></tr></thead><tbody data-end="1456" data-start="1354"><tr data-end="1456" data-start="1354"><td data-col-size="sm" data-end="1364" data-start="1354">`query`</td><td data-col-size="sm" data-end="1375" data-start="1364">`string`</td><td data-col-size="md" data-end="1432" data-start="1375">Search term (email, phone, domain, IP, username, etc.)</td><td data-col-size="sm" data-end="1456" data-start="1432">`"example@mail.com"`</td></tr></tbody></table>

</div></div>### Supported Search Types

- Email: `john.doe@gmail.com`
- Login or Username: `nickname123`
- Domain: `domain.com`
- IP address: `1.1.1.1`
- Combo (e.g. “email password” or “name phone”)
- Full name, city, social ID

💡 **Tip:** If you get an empty response, try deleting one character from the query and repeat the request — it refreshes the search pipeline.

---

## ⚙️ Response Structure

### ✅ When Data Is Found

**HTTP 200**

```json
{
  "success": true,
  "data": {
    "query": "niamonx",
    "task_id": "50bab956-4a9c-4548-83ff-a0451be1b18e",
    "status": "ok",
    "detail": "file_downloaded",
    "meta": {
      "blocks_total": 3,
      "emails": ["test@niamonx.io"],
      "names": ["NiaMonx"],
      "first_seen": "2021-01-21T05:32:31+00:00",
      "last_seen": "2021-01-22T01:51:31+00:00"
    },
    "risk": {
      "score": 9,
      "level": "Low"
    },
    "blocks": [
      {
        "id": "p1",
        "title": "TestNia",
        "description": "In November 2021, the TestNia website...",
        "groups_normalized": [
          {
            "fields_map": {
              "email": "test@niamonx.io",
              "nick": "NiaMonx",
              "ip": "2800:***:9824"
            }
          }
        ]
      }
    ],
    "rate": {
      "remaining": 99,
      "reset_in_sec": 600
    },
    "cooldown_sec": 10
  }
}

```

---

### 🕳️ When No Results Found

**HTTP 200**

```json
{
  "success": true,
  "data": {
    "query": "not_found@niamonx.io",
    "status": "not_found",
    "detail": "no results found",
    "meta": { "blocks_total": 0 },
    "risk": { "score": 0, "level": "Low" }
  }
}

```

---

### 🔒 When Data Is Protected

**HTTP 200**

```json
{
  "success": true,
  "data": {
    "success": false,
    "error": "[NiamonX | DataGuard] This data has been removed and is no longer indexed by our search engine at the request of the copyright holder."
  }
}

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--8"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

## 📊 HTTP Status Codes

<div class="_tableContainer_1rjym_1" id="bkmrk-code-meaning-200-suc"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="3735" data-start="3385"><thead data-end="3403" data-start="3385"><tr data-end="3403" data-start="3385"><th data-col-size="sm" data-end="3392" data-start="3385">Code</th><th data-col-size="sm" data-end="3403" data-start="3392">Meaning</th></tr></thead><tbody data-end="3735" data-start="3424"><tr data-end="3465" data-start="3424"><td data-col-size="sm" data-end="3434" data-start="3424">**200**</td><td data-col-size="sm" data-end="3465" data-start="3434">Success — request processed</td></tr><tr data-end="3511" data-start="3466"><td data-col-size="sm" data-end="3476" data-start="3466">**400**</td><td data-col-size="sm" data-end="3511" data-start="3476">Invalid input or malformed body</td></tr><tr data-end="3552" data-start="3512"><td data-col-size="sm" data-end="3522" data-start="3512">**401**</td><td data-col-size="sm" data-end="3552" data-start="3522">Invalid or missing API key</td></tr><tr data-end="3597" data-start="3553"><td data-col-size="sm" data-end="3563" data-start="3553">**403**</td><td data-col-size="sm" data-end="3597" data-start="3563">Tool disabled for your account</td></tr><tr data-end="3649" data-start="3598"><td data-col-size="sm" data-end="3608" data-start="3598">**404**</td><td data-col-size="sm" data-end="3649" data-start="3608">Unknown endpoint or invalid tool name</td></tr><tr data-end="3689" data-start="3650"><td data-col-size="sm" data-end="3660" data-start="3650">**405**</td><td data-col-size="sm" data-end="3689" data-start="3660">Wrong method — use `POST`</td></tr><tr data-end="3735" data-start="3690"><td data-col-size="sm" data-end="3700" data-start="3690">**429**</td><td data-col-size="sm" data-end="3735" data-start="3700">Cooldown or daily limit reached</td></tr></tbody></table>

</div></div>---

## 🧱 Features Summary

- 🔍 **140+ billion** records
- 🌍 **4500+** aggregated sources
- 🔒 **Cryptographically protected** data
- 🧠 **Risk Indicator** (numeric + level)
- ⚡ **Cached results** for faster response
- 🧯 **Automatic data removal** for sensitive categories (bank/medical)

---

## 💻 Code Examples

### **1. Python (requests)**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--12"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">  
</div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```python
import requests

url = "https://dash.niamonx.io/api/v2/breaches_search"
headers = {
    "Content-Type": "application/json",
    "X-API-Key": "YOUR_API_KEY"
}
payload = { "query": "example@mail.com" }

response = requests.post(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())

```

---

### **2. JavaScript (Node.js / Axios)**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--14"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">  
</div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```javascript
import axios from "axios";

const API_KEY = "YOUR_API_KEY";
const url = "https://dash.niamonx.io/api/v2/breaches_search";

async function searchLeak(query) {
  try {
    const res = await axios.post(
      url,
      { query },
      {
        headers: {
          "Content-Type": "application/json",
          "X-API-Key": API_KEY
        }
      }
    );
    console.log(res.data);
  } catch (err) {
    console.error("Error:", err.response?.data || err.message);
  }
}

searchLeak("example@mail.com");

```

---

### **3. PHP (cURL)**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--16"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">  
</div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```php
<?php
$api_key = "YOUR_API_KEY";
$url = "https://dash.niamonx.io/api/v2/breaches_search";

$data = ["query" => "example@mail.com"];
$options = [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json",
    "X-API-Key: $api_key"
  ],
  CURLOPT_POSTFIELDS => json_encode($data)
];

$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>

```

---

### **4. Go (net/http)**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--18"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">  
</div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```go
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
)

func main() {
	apiKey := "YOUR_API_KEY"
	jsonBody := []byte(`{"query":"example@mail.com"}`)
	req, _ := http.NewRequest("POST", "https://dash.niamonx.io/api/v2/breaches_search", bytes.NewBuffer(jsonBody))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("X-API-Key", apiKey)

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	fmt.Println("Status:", resp.Status)
	fmt.Println(string(body))
}

```

---

## 🧠 Best Practices

- Wait **3 seconds** between requests to respect cooldown (anti-spam).
- Combine parameters intelligently:
    
    
    - `"email password"`
    - `"name phone"`
- Do not republish or share results publicly.
- If you detect compromised credentials — **change passwords immediately**.
- Sensitive datasets (bank cards, healthcare) are **automatically excluded**.

---

## 🧾 Summary

<div class="_tableContainer_1rjym_1" id="bkmrk-feature-description-"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="6954" data-start="6569"><thead data-end="6594" data-start="6569"><tr data-end="6594" data-start="6569"><th data-col-size="sm" data-end="6579" data-start="6569">Feature</th><th data-col-size="md" data-end="6594" data-start="6579">Description</th></tr></thead><tbody data-end="6954" data-start="6623"><tr data-end="6690" data-start="6623"><td data-col-size="sm" data-end="6638" data-start="6623">**Endpoint**</td><td data-col-size="md" data-end="6690" data-start="6638">`https://dash.niamonx.io/api/v2/breaches_search`</td></tr><tr data-end="6712" data-start="6691"><td data-col-size="sm" data-end="6704" data-start="6691">**Method**</td><td data-col-size="md" data-end="6712" data-start="6704">POST</td></tr><tr data-end="6749" data-start="6713"><td data-col-size="sm" data-end="6734" data-start="6713">**Authentication**</td><td data-col-size="md" data-end="6749" data-start="6734">`X-API-Key`</td></tr><tr data-end="6779" data-start="6750"><td data-col-size="sm" data-end="6765" data-start="6750">**Cooldown**</td><td data-col-size="md" data-end="6779" data-start="6765">3 seconds</td></tr><tr data-end="6831" data-start="6780"><td data-col-size="sm" data-end="6802" data-start="6780">**Rate Limit Info**</td><td data-col-size="md" data-end="6831" data-start="6802">Returned in `rate` object</td></tr><tr data-end="6897" data-start="6832"><td data-col-size="sm" data-end="6859" data-start="6832">**Data Types Supported**</td><td data-col-size="md" data-end="6897" data-start="6859">Email, phone, IP, domain, username</td></tr><tr data-end="6954" data-start="6898"><td data-col-size="sm" data-end="6920" data-start="6898">**Data Protection**</td><td data-col-size="md" data-end="6954" data-start="6920">SHA-256 &amp; DataGuard Compliance</td></tr></tbody></table>

</div></div>---

✅ **Now you can safely integrate the NiamonX Public Breaches API** into your OSINT tools, cybersecurity dashboards, or monitoring systems — with full ethical and legal compliance.

# ULP (Infostealer Logs) Public Breached ULP Search | NiamonX API

# 🧩 NiamonX API — **ULP (Infostealer Logs) Public Breached Search**

Comprehensive API documentation for searching **ULP datasets (URL · LOGIN · PASSWORD)** extracted from public infostealer logs and credential leaks.

---

## 🔍 What Is ULP?

**ULP** stands for **URL · LOGIN · PASSWORD** — a triple that represents evidence of compromised credentials captured in stealer logs or public leaks.

Each ULP record links:

- **URL:** the website or endpoint where the credential was used (e.g., `example.com/login`)
- **LOGIN:** the username or email associated with the site
- **PASSWORD:** the stolen or leaked password (masked by default for privacy)

This API enables you to search across massive datasets for specific entries by **email**, **username**, **domain**, **URL**, or **password**.

---

## ⚠️ Usage &amp; Ethics

By using this endpoint, you confirm that:

- You **own** the data or have explicit permission to process it.
- You will **not share** results publicly or misuse obtained data.
- You will **act responsibly** — change any compromised credentials and enable MFA.

All queries are **end-to-end encrypted**, and NiamonX **never logs or shares** search data.

---

## 🧠 Endpoint

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-https%3A%2F%2Fdash.ni"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST https://dash.niamonx.io/api/v2/ulp_search`</div></div>---

## 📥 Request Structure

### **Headers**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-content-type%3A-applic"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attribute">Content-Type</span>: application/json<span class="hljs-attribute">X-API-Key</span>: YOUR_API_KEY`</div></div>### **Body Example**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--4"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```bash
{ "action": "search", "value": "test@example.com", "type": "auto", "exact": true, "limit": 200 }
```

---

## ⚙️ Request Parameters

<div class="_tableContainer_1rjym_1" id="bkmrk-field-type-descripti"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="2151" data-start="1695"><thead data-end="1735" data-start="1695"><tr data-end="1735" data-start="1695"><th data-col-size="sm" data-end="1703" data-start="1695">Field</th><th data-col-size="sm" data-end="1710" data-start="1703">Type</th><th data-col-size="md" data-end="1724" data-start="1710">Description</th><th data-col-size="sm" data-end="1735" data-start="1724">Example</th></tr></thead><tbody data-end="2151" data-start="1779"><tr data-end="1838" data-start="1779"><td data-col-size="sm" data-end="1792" data-start="1779">**action**</td><td data-col-size="sm" data-end="1803" data-start="1792">`string`</td><td data-col-size="md" data-end="1824" data-start="1803">Must be `"search"`</td><td data-col-size="sm" data-end="1838" data-start="1824">`"search"`</td></tr><tr data-end="1935" data-start="1839"><td data-col-size="sm" data-end="1851" data-start="1839">**value**</td><td data-col-size="sm" data-end="1862" data-start="1851">`string`</td><td data-col-size="md" data-end="1914" data-start="1862">Your search query (email, domain, password, etc.)</td><td data-col-size="sm" data-end="1935" data-start="1914">`"user@mail.com"`</td></tr><tr data-end="1997" data-start="1936"><td data-col-size="sm" data-end="1947" data-start="1936">**type**</td><td data-col-size="sm" data-end="1958" data-start="1947">`string`</td><td data-col-size="md" data-end="1984" data-start="1958">Search type (see below)</td><td data-col-size="sm" data-end="1997" data-start="1984">`"email"`</td></tr><tr data-end="2084" data-start="1998"><td data-col-size="sm" data-end="2010" data-start="1998">**exact**</td><td data-col-size="sm" data-end="2022" data-start="2010">`boolean`</td><td data-col-size="md" data-end="2074" data-start="2022">Whether to match exactly (recommended for emails)</td><td data-col-size="sm" data-end="2084" data-start="2074">`true`</td></tr><tr data-end="2151" data-start="2085"><td data-col-size="sm" data-end="2097" data-start="2085">**limit**</td><td data-col-size="sm" data-end="2109" data-start="2097">`integer`</td><td data-col-size="md" data-end="2142" data-start="2109">Max number of records (1–1000)</td><td data-col-size="sm" data-end="2151" data-start="2142">`200`</td></tr></tbody></table>

</div></div>### Available `type` values:

- `auto` *(default)*
- `email`
- `username`
- `domain`
- `url`
- `password`

---

## 🧭 Example cURL Request

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--7"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```bash
curl -X POST https://dash.niamonx.io/api/v2/ulp_search \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"action":"search","value":"test@example.com","type":"auto","exact":true,"limit":200}'

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--8"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

## 🧾 Successful Response

**HTTP 200**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--10"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```json
{
  "success": true,
  "data": {
    "query": {
      "value": "test@niamonx.io",
      "type": "email",
      "exact": true,
      "limit": 200
    },
    "stats": {
      "total": 1,
      "unique_hosts": 1,
      "with_password": 1
    },
    "records": [
      {
        "id": "ac22b9424f8aab6011fb526c9798e7c3898652d4c7a6eb8c0253212d94a9fec4",
        "url": "niamonx.io/login/index",
        "host": "niamonx.io",
        "login": "test@niamonx.io",
        "pass": "NiaMon750H",
        "score": 8.840368
      }
    ],
    "status": "ok",
    "cached": false,
    "fetched_at": "2025-11-09T21:50:31+00:00",
    "api_timing_ms": 75
  }
}

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--11"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

## 🕳️ When Nothing Is Found

**HTTP 200**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--13"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```json
{
  "success": true,
  "data": {
    "query": {
      "value": "not_found",
      "type": "username",
      "exact": true,
      "limit": 200
    },
    "stats": {
      "total": 0,
      "unique_hosts": 0,
      "with_password": 0
    },
    "records": [],
    "status": "ok",
    "cached": false,
    "fetched_at": "2025-11-09T21:51:56+00:00",
    "api_timing_ms": 63
  }
}

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--14"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

## 🔒 Protected Data Response

**HTTP 200**

```json
{
  "success": true,
  "data": {
    "success": false,
    "error": "[NiamonX | DataGuard] This data has been removed and is no longer indexed by our search engine at the request of the copyright holder."
  }
}

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--16"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

## 📊 HTTP Status Codes

<div class="_tableContainer_1rjym_1" id="bkmrk-code-description-200"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="4365" data-start="3981"><thead data-end="4003" data-start="3981"><tr data-end="4003" data-start="3981"><th data-col-size="sm" data-end="3988" data-start="3981">Code</th><th data-col-size="md" data-end="4003" data-start="3988">Description</th></tr></thead><tbody data-end="4365" data-start="4028"><tr data-end="4069" data-start="4028"><td data-col-size="sm" data-end="4038" data-start="4028">**200**</td><td data-col-size="md" data-end="4069" data-start="4038">Success — request processed</td></tr><tr data-end="4118" data-start="4070"><td data-col-size="sm" data-end="4080" data-start="4070">**400**</td><td data-col-size="md" data-end="4118" data-start="4080">Invalid input or malformed request</td></tr><tr data-end="4159" data-start="4119"><td data-col-size="sm" data-end="4129" data-start="4119">**401**</td><td data-col-size="md" data-end="4159" data-start="4129">Invalid or missing API key</td></tr><tr data-end="4204" data-start="4160"><td data-col-size="sm" data-end="4170" data-start="4160">**403**</td><td data-col-size="md" data-end="4204" data-start="4170">Tool disabled for your account</td></tr><tr data-end="4251" data-start="4205"><td data-col-size="sm" data-end="4215" data-start="4205">**404**</td><td data-col-size="md" data-end="4251" data-start="4215">Unknown endpoint or invalid tool</td></tr><tr data-end="4296" data-start="4252"><td data-col-size="sm" data-end="4262" data-start="4252">**405**</td><td data-col-size="md" data-end="4296" data-start="4262">Wrong HTTP method (use `POST`)</td></tr><tr data-end="4365" data-start="4297"><td data-col-size="sm" data-end="4307" data-start="4297">**429**</td><td data-col-size="md" data-end="4365" data-start="4307">Cooldown or daily limit exceeded (ToolService message)</td></tr></tbody></table>

</div></div>---

## 💡 Tips &amp; Notes

- ⏳ **Limit:** up to 1000 results per request
- 🧯 **Cooldown:** few seconds between requests to prevent spam
- 🌍 **Domain search:** finds subdomains automatically
- 🧩 **Duplicate removal** and periodic reindexing ensure fresh results
- 🔁 If results seem incomplete, retry in several minutes for updated data

---

## 💻 Code Examples

### **1. Python (requests)**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--20"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```python
import requests
import json

url = "https://dash.niamonx.io/api/v2/ulp_search"
headers = {
    "Content-Type": "application/json",
    "X-API-Key": "YOUR_API_KEY"
}
payload = {
    "action": "search",
    "value": "test@example.com",
    "type": "auto",
    "exact": True,
    "limit": 200
}

response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(json.dumps(response.json(), indent=2))

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--21"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

### **2. JavaScript (Node.js / Axios)**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--23"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```javascript
import axios from "axios";

const API_KEY = "YOUR_API_KEY";
const url = "https://dash.niamonx.io/api/v2/ulp_search";

async function searchULP(query) {
  try {
    const res = await axios.post(
      url,
      {
        action: "search",
        value: query,
        type: "auto",
        exact: true,
        limit: 200
      },
      {
        headers: {
          "Content-Type": "application/json",
          "X-API-Key": API_KEY
        }
      }
    );
    console.log(JSON.stringify(res.data, null, 2));
  } catch (err) {
    console.error("Error:", err.response?.data || err.message);
  }
}

searchULP("test@example.com");

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--24"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

### **3. PHP (cURL)**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--26"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```php
<?php
$apiKey = "YOUR_API_KEY";
$url = "https://dash.niamonx.io/api/v2/ulp_search";

$data = [
  "action" => "search",
  "value" => "test@example.com",
  "type" => "auto",
  "exact" => true,
  "limit" => 200
];

$options = [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json",
    "X-API-Key: $apiKey"
  ],
  CURLOPT_POSTFIELDS => json_encode($data)
];

$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--27"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

### **4. Go (net/http)**

```go
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
)

func main() {
	apiKey := "YOUR_API_KEY"
	body := []byte(`{"action":"search","value":"test@example.com","type":"auto","exact":true,"limit":200}`)

	req, _ := http.NewRequest("POST", "https://dash.niamonx.io/api/v2/ulp_search", bytes.NewBuffer(body))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("X-API-Key", apiKey)

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	result, _ := io.ReadAll(resp.Body)
	fmt.Println("Status:", resp.Status)
	fmt.Println(string(result))
}

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--29"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

## 🧭 Summary

<div class="_tableContainer_1rjym_1" id="bkmrk-feature-description-"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="7719" data-start="7276"><thead data-end="7301" data-start="7276"><tr data-end="7301" data-start="7276"><th data-col-size="sm" data-end="7286" data-start="7276">Feature</th><th data-col-size="md" data-end="7301" data-start="7286">Description</th></tr></thead><tbody data-end="7719" data-start="7330"><tr data-end="7392" data-start="7330"><td data-col-size="sm" data-end="7345" data-start="7330">**Endpoint**</td><td data-col-size="md" data-end="7392" data-start="7345">`https://dash.niamonx.io/api/v2/ulp_search`</td></tr><tr data-end="7416" data-start="7393"><td data-col-size="sm" data-end="7406" data-start="7393">**Method**</td><td data-col-size="md" data-end="7416" data-start="7406">`POST`</td></tr><tr data-end="7450" data-start="7417"><td data-col-size="sm" data-end="7435" data-start="7417">**Auth Header**</td><td data-col-size="md" data-end="7450" data-start="7435">`X-API-Key`</td></tr><tr data-end="7485" data-start="7451"><td data-col-size="sm" data-end="7463" data-start="7451">**Limit**</td><td data-col-size="md" data-end="7485" data-start="7463">up to 1000 records</td></tr><tr data-end="7533" data-start="7486"><td data-col-size="sm" data-end="7501" data-start="7486">**Cooldown**</td><td data-col-size="md" data-end="7533" data-start="7501">Short delay between requests</td></tr><tr data-end="7595" data-start="7534"><td data-col-size="sm" data-end="7555" data-start="7534">**Sensitive Data**</td><td data-col-size="md" data-end="7595" data-start="7555">Passwords masked, removed on request</td></tr><tr data-end="7649" data-start="7596"><td data-col-size="sm" data-end="7611" data-start="7596">**Security**</td><td data-col-size="md" data-end="7649" data-start="7611">Encrypted E2E, DataGuard compliant</td></tr><tr data-end="7719" data-start="7650"><td data-col-size="sm" data-end="7668" data-start="7650">**Data Source**</td><td data-col-size="md" data-end="7719" data-start="7668">Public infostealer logs and breach repositories</td></tr></tbody></table>

</div></div>---

✅ **With the ULP API**, you can ethically and securely analyze exposure of credentials from public infostealer datasets — empowering your investigations, threat intelligence, and personal data protection workflows.

# PBS v2 | Public Breached Search V2 | NiamonX API

# 🔍 Public Breached Search V2 — NiamonX API Guide

The **Public Breached Search V2** endpoint allows you to search for publicly available breach records in the NiamonX secure data analysis system.  
It operates through a **private, encrypted channel** and uses a **minimal indexing model** to protect sensitive data.

Supported identifiers include:

- **Email**
- **Username**
- **Phone**
- **Hash**

All requests must be made securely and responsibly.  
**Never share or publish personal results** — doing so may violate data protection laws and lead to account suspension.

---

## 🧭 API Endpoint

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-https%3A%2F%2Fdash.ni"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST https://dash.niamonx.io/api/v2/breaches_s_v2`</div></div>### Headers:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-content-type%3A-applic"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-attribute">Content-Type</span>: application/json<span class="hljs-attribute">X-API-Key</span>: YOUR_API_KEY`</div></div>### Body:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```bash
{ "value": "test@example.com", "type": "auto" }
```

**Available types:**  
`auto`, `email`, `username`, `phone`, `hash`

---

## 💡 Description

This API searches **closed and anonymized datasets** for breached credential evidence.  
Decryption happens at the client level using your master key, ensuring full end-to-end security.

Additional features:

- Passwords are hidden by default (toggleable).
- Supports export to CSV/JSON.
- Local query history.
- Internal quotas are invisible to users.
- Misuse or unauthorized data searches may result in a ban.

---

## ✅ Example Successful Response

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--4"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```bash
{
  "success": true,
  "data": {
    "query": {
      "value": "test@niamonx.io",
      "type": "auto"
    },
    "stats": {
      "found": 2,
      "returned": 2,
      "with_passwords": 2,
      "unique_sources": 1,
      "earliest_month": null,
      "latest_month": null
    },
    "records": [
      {
        "source": {
          "name": "Stealer Logs",
          "breach_date": null,
          "unverified": 0,
          "passwordless": 0,
          "compilation": 1
        },
        "account": "test@niamonx.io",
        "email": "test@niamonx.io",
        "username": null,
        "phone": null,
        "hash": null,
        "password": "z8NiAmOn50H",
        "fields": [
          "password",
          "origin",
          "email"
        ]
      },
      {
        "source": {
          "name": "Stealer Logs",
          "breach_date": null,
          "unverified": 0,
          "passwordless": 0,
          "compilation": 1
        },
        "account": "test@niamonx.io",
        "email": "test@niamonx.io",
        "username": null,
        "phone": null,
        "hash": null,
        "password": "ViptraNiA!",
        "fields": [
          "password",
          "origin",
          "email"
        ]
      }
    ],
    "niamonx_success": true,
    "status": "ok",
    "fetched_at": "2025-11-09T22:04:00+00:00",
    "api_timing_ms": 146
  }
}

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--5"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

## ⚠️ Possible Outcomes

### No Matches Found

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--7"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```json
{
  "success": true,
  "data": {
    "success": false,
    "status": "error",
    "error": "HTTP 400",
    "query": {
      "value": "not_found",
      "type": "auto"
    }
  }
}

```

### DataGuard Protection

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--8"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```bash
{
  "success": true,
  "data": {
    "success": false,
    "error": "[NiamonX | DataGuard] This data has been removed and is no longer indexed by our search engine at the request of the copyright holder."
  }
}

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--9"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

## 🌐 HTTP Status Codes

<div class="_tableContainer_1rjym_1" id="bkmrk-code-meaning-200-%E2%9C%85-s"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="3714" data-start="3355"><thead data-end="3373" data-start="3355"><tr data-end="3373" data-start="3355"><th data-col-size="sm" data-end="3362" data-start="3355">Code</th><th data-col-size="md" data-end="3373" data-start="3362">Meaning</th></tr></thead><tbody data-end="3714" data-start="3394"><tr data-end="3449" data-start="3394"><td data-col-size="sm" data-end="3404" data-start="3394">**200**</td><td data-col-size="md" data-end="3449" data-start="3404">✅ Successful response (check data object)</td></tr><tr data-end="3496" data-start="3450"><td data-col-size="sm" data-end="3460" data-start="3450">**400**</td><td data-col-size="md" data-end="3496" data-start="3460">❌ Validation error in input data</td></tr><tr data-end="3540" data-start="3497"><td data-col-size="sm" data-end="3507" data-start="3497">**401**</td><td data-col-size="md" data-end="3540" data-start="3507">🚫 Invalid or missing API key</td></tr><tr data-end="3585" data-start="3541"><td data-col-size="sm" data-end="3551" data-start="3541">**403**</td><td data-col-size="md" data-end="3585" data-start="3551">⛔ Tool disabled or unavailable</td></tr><tr data-end="3618" data-start="3586"><td data-col-size="sm" data-end="3596" data-start="3586">**404**</td><td data-col-size="md" data-end="3618" data-start="3596">❓ Unknown endpoint</td></tr><tr data-end="3667" data-start="3619"><td data-col-size="sm" data-end="3629" data-start="3619">**405**</td><td data-col-size="md" data-end="3667" data-start="3629">⚙️ Method not allowed (use `POST`)</td></tr><tr data-end="3714" data-start="3668"><td data-col-size="sm" data-end="3678" data-start="3668">**429**</td><td data-col-size="md" data-end="3714" data-start="3678">⏳ Cooldown / daily limit reached</td></tr></tbody></table>

</div></div>---

## 🧩 Example Implementations

### 1. cURL

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--12"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```bash
curl -X POST https://dash.niamonx.io/api/v2/breaches_s_v2 \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"value":"test@example.com","type":"auto"}'

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--13"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

### 2. Python (using `requests`)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--15"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```python
import requests

url = "https://dash.niamonx.io/api/v2/breaches_s_v2"
headers = {
    "Content-Type": "application/json",
    "X-API-Key": "YOUR_API_KEY"
}
data = {
    "value": "test@example.com",
    "type": "auto"
}

response = requests.post(url, json=data, headers=headers)
print(response.json())

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--16"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

### 3. JavaScript (Node.js, using `axios`)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--18"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>```javascript
import axios from "axios";

const url = "https://dash.niamonx.io/api/v2/breaches_s_v2";
const headers = {
  "Content-Type": "application/json",
  "X-API-Key": "YOUR_API_KEY"
};

const data = {
  value: "test@example.com",
  type: "auto"
};

axios.post(url, data, { headers })
  .then(res => console.log(res.data))
  .catch(err => console.error(err.response?.data || err.message));

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--19"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

### 4. PHP

```php
<?php
$url = "https://dash.niamonx.io/api/v2/breaches_s_v2";
$headers = [
    "Content-Type: application/json",
    "X-API-Key: YOUR_API_KEY"
];
$body = json_encode([
    "value" => "test@example.com",
    "type" => "auto"
]);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--21"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

### 5. Go

```go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {
	url := "https://dash.niamonx.io/api/v2/breaches_s_v2"
	body := map[string]string{
		"value": "test@example.com",
		"type":  "auto",
	}
	jsonData, _ := json.Marshal(body)

	req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("X-API-Key", "YOUR_API_KEY")

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()

	respBody, _ := ioutil.ReadAll(resp.Body)
	fmt.Println(string(respBody))
}

```

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--23"><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>---

## 🛡️ Security Recommendations

- Keep your API key private; never hard-code it in shared repositories.
- Use HTTPS exclusively — no plain HTTP connections are allowed.
- If your key is compromised, revoke it immediately.
- Store credentials in environment variables or encrypted vaults.
- Do not reshare or republish search results publicly.

---

✅ **You’re all set!**  
With your **NiamonX API Key** and this **Public Breached Search V2** guide, you can perform encrypted and privacy-compliant breach lookups safely and efficiently.