# 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.