Developer API
Query the index
from your code
JSON over HTTPS. One key, your tier, your tokens. Every feature of the console — search, reveal, exports, saved queries — is an API call.
Authentication
API key (recommended for automation)
Send your 64-character key in the X-API-KEY header with every request. Keys are created in the console: Profile → API keys. A key inherits your permission tier and token balance — requests are billed exactly like console usage.
curl -X POST https://taynopis.com/secure/api/search \
-H "X-API-KEY: <your-64-char-key>" \
-H "Content-Type: application/json" \
-d '{"filters": {"full_domain": "example.com"}, "page_size": 100}'
Session cookie (browser/console)
The same endpoints power the web console. Calls from an authenticated browser session are accepted without an API key.
Endpoints
/secure/api/search
Search records
The core endpoint. Returns a page of records matching your filters. Fields you have not paid to reveal come back masked (▇▇▇▇) together with per-field reveal prices.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
filters |
object | {} | Filter map — see the Filters reference below. |
page_size |
int | 100 | Records per page (max 1000 for JSON). |
page_number |
int | 1 | 1-based page number. |
limit |
int | 10000 | Max records addressable by paging and the total counter (max 10000). count_capped=true in the response means there are more matches than limit. |
exclude_unknown_sources |
bool | false | Drop records from unknown/unparsed sources. |
Request
curl -X POST /secure/api/search \
-H "X-API-KEY: $KEY" -H "Content-Type: application/json" \
-d '{
"filters": {
"full_domain": "accounts.google.com",
"!domain_tld": ["cn"],
"adddate_text": {"gte": "2026-09-01"}
},
"page_size": 3,
"page_number": 1,
"exclude_unknown_sources": false
}'
Response 200
{
"count": 10000,
"count_capped": true,
"limit": 10000,
"results": [
{
"adddate": "2026-09-07T19:43:28",
"recordhash": "014012e391bf",
"recordhash_full": "014012e391bfcd64a493adf9ffe110f2…",
"url": "https://accounts.google.com/*********************",
"username": "▇▇▇▇▇▇▇▇",
"password": "▇▇▇▇▇▇▇▇",
"logpath": "8BF0E7D63802E9AD4893C6FA6262EE3A",
"soft": "0",
"stealer_family": "Raccoon v2",
"stealerid": 5,
"reveal_price": {"username": 20, "password": 10, "url": 40}
}
],
"page_size": 3,
"offset": 0,
"searchtime": 0.03,
"tokens_spent": 4,
"token_balance": 49996
}
- Fields outside your permission tier are
null. countis exact up tolimit(default/max 10000);count_capped=truemeans the query matched more than that — refine filters for precision.- CSV export: add
?download_csv=trueand send form fielddatawith the same JSON (billing: 1 token/row).
/secure/api/reveal
Reveal record fields
Pay tokens to unmask specific fields of specific records (by recordhash_full). A revealed record stays open for your account forever — no double-charging.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
requests |
array | — | List of {"recordhash": "<full 64-char hash>", "field": "username"|"password"|"url"}. |
Request
curl -X POST /secure/api/reveal \
-H "X-API-KEY: $KEY" -H "Content-Type: application/json" \
-d '{
"requests": [
{"recordhash": "014012e391bfcd64…ac6", "field": "username"},
{"recordhash": "014012e391bfcd64…ac6", "field": "password"}
]
}'
Response 200
{
"revealed": {
"014012e391bfcd64…ac6": {
"username": "[email protected]",
"password": "Hunter2summer"
}
},
"spent": 26,
"balance": 49970,
"errors": []
}
- Already-revealed fields are returned for free and not charged again.
- Requests for fields outside your tier are filtered out.
- On insufficient balance nothing is charged and an error is returned.
/secure/api/export_estimate
Estimate export cost
Calculate how many tokens opening all hidden fields in an export would cost — before spending anything.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
filters |
object | {} | Same filter map as search. |
Request
curl -X POST /secure/api/export_estimate \
-H "X-API-KEY: $KEY" -H "Content-Type: application/json" \
-d '{"filters": {"full_domain": "accounts.google.com"}}'
Response 200
{
"records": 10000,
"hidden_fields": {"password": 9132, "url": 10000, "username": 9715},
"tokens_to_open": 746700,
"tokens_available": 999517,
"enough": true
}
/secure/api/filters_help
Filter value suggestions
Autocomplete helper: returns the most frequent values for a filter field that also match the current filters.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
search |
string | "" | Partial value to narrow suggestions. |
filters |
object | {} | Context filters (same format as search). |
Request
curl -X POST /secure/api/filters_help \
-H "X-API-KEY: $KEY" -H "Content-Type: application/json" \
-d '{"search": "goo", "filters": {"domain_tld": "com"}}'
Response 200
[
{"key": "accounts.google.com", "doc_count": 48122},
{"key": "google.com", "doc_count": 21018},
{"key": "docs.google.com", "doc_count": 9107}
]
/secure/api/saved_searches
Saved searches
Persist and list reusable queries. The console saves automatically — the same store is available via API.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
(POST) filters, page_size, page_number |
— | — | Query snapshot to save. |
(GET) — |
— | — | Returns the list of saved searches. |
Request
# save
curl -X POST /secure/api/saved_searches \
-H "X-API-KEY: $KEY" -H "Content-Type: application/json" \
-d '{"filters": {"full_domain": "example.com"}, "page_size": 100, "page_number": 1}'
# list
curl /secure/api/saved_searches -H "X-API-KEY: $KEY"
Response 200
[
{"id": 12, "filters": {"full_domain": "example.com"},
"page_size": 100, "page_number": 1, "created_at": "2026-09-13T19:40:41Z"}
]
- Single item:
GET/DELETE /secure/api/saved_searches/<id>.
/secure/api/delrecord
Delete a record
Removes a document from the index by id. Admin permission (delrec) required.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
id |
string | — | Document _id (equals full recordhash). |
Request
curl -X POST /secure/api/delrecord \
-H "X-API-KEY: $ADMIN_KEY" -H "Content-Type: application/json" \
-d '{"id": "014012e391bfcd64a493adf9ffe110f2…"}'
Response 200
{
"msg": "Document 014012e3… deleted. success:4, failed:0"
}
- The id is returned in search results as
idfor admin-tier keys.
Filters reference
Filters are a flat JSON object passed to search, export_estimate
and filters_help. Arrays mean OR; prefix a key with ! to exclude.
| Key | Type | Description |
|---|---|---|
full_domain |
string | string[] | Full domain, e.g. accounts.google.com. Wildcards: *.example.com. |
domain_main |
string | string[] | Main domain label without TLD, e.g. google. |
domain_tld |
string | string[] | TLD, e.g. com. |
full_domain_parts |
string | string[] | Any subdomain parts, e.g. accounts matches accounts.*. |
subdomain1..9 |
string | Specific subdomain level (1 = closest to main domain). |
protocol |
string | string[] | http, https, ftp… |
domain_port |
string | Port if present in the URL. |
domain_host_ipaddress |
string | Host IP address if the URL uses one. |
stealerid |
int | int[] | Stealer family id (4=RedLine, 5=Raccoon v2, 7=RisePro, 12=Taurus… — see the Family column in the console). |
username |
string | Login/username (requires loginview). |
username_email_domain |
string | E-mail domain part of the username (requires loginview). |
username_login |
string | E-mail local part (requires loginview). |
password |
string | Exact password match (requires passview). |
url_full |
string | Full URL (requires urlview). |
url_path / url_path_array |
string | string[] | URL path or its segments (requires urlview). |
url_path_args / url_path_args_array |
string | string[] | Query string / its params (requires urlview). |
logpath / logpath_full |
string | Source log path (requires logpathview; displayed as MD5 fingerprint). |
adddate_text |
{gte, lte} | Date range: {"gte": "2026-09-01", "lte": "2026-09-08"}. |
!<any filter> |
same | Prefix a filter with ! to exclude values: "!domain_tld": ["ru", "cn"]. |
query |
string | Query-language string, combined with the filters: tld:com AND main:google, user:@gmail.com, wildcards url:*.example.com, date>=2026-09-01, AND OR NOT ( ); a bare word = domain OR username. Parsed and compiled server-side. |
__domains__ |
string[] | UI domain-chips: restrict to your verified domains. Validated server-side. |
Errors & limits
| HTTP / shape | Meaning |
|---|---|
401 | Missing/invalid API key or session. |
403 | Endpoint outside your permission tier (e.g. reveal without passview). |
400 | Malformed request body (see error field). |
402-like | {"error": "Insufficient tokens…", "tokens_required", "tokens_available"} — nothing charged. |
429 | Rate limit exceeded — retry after pause. |
- API keys are limited by your plan (requests/minute).
- Every search request costs 1 token + 1 token per returned record; failures cost nothing.
- Revealing values costs ~1 token per character (see Reveal endpoint).