> ## Documentation Index
> Fetch the complete documentation index at: https://wiki.darknetsearch.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Pastes

> Search public paste sites for stolen data and credentials tied to your domain

Search public paste sites — the dumping grounds where stolen data, credential lists, and config files get shared. Run a query for your domain or a known credential and find out what is already public before someone else does.

This source is asynchronous. You submit a query and get back a `job_id`. The search runs in the background while you poll the detail endpoint. The same detail call returns the live `status` while the job runs and the full result set once it finishes.

All paths below are relative to the base URL `https://client-api.leak.center/api`. Send your token on every request:

```
Authorization: Bearer YOUR_ACCESS_TOKEN
```

<Steps>
  <Step title="Submit">
    [`paste-search-create`](https://client-api.leak.center/scalar-docs/#tag/paste-search/POST/service/paste-search-create/) submits a query and responds `202 Accepted`. The search is queued, not finished. Keep the returned `job_id`.

    ```bash theme={"dark"}
    curl -X POST 'https://client-api.leak.center/api/service/paste-search-create/' \
      -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
      -H 'Content-Type: application/json' \
      -d '{
        "query": "acme.com",
        "context_chars": 500,
        "unique_only": true,
        "include_google_search": true
      }'
    ```

    ```json theme={"dark"}
    {
      "job_id": "a1b2c3d4-0000-0000-0000-000000000000",
      "status": "pending",
      "message": "Search job created"
    }
    ```
  </Step>

  <Step title="Poll">
    [`paste-search-detail`](https://client-api.leak.center/scalar-docs/#tag/paste-search/GET/service/paste-search-detail/\{job_id}/) returns the current `status`. Poll it until `status` reaches a terminal value (`completed`). Use this same call to read results — see the next step.

    ```bash theme={"dark"}
    curl 'https://client-api.leak.center/api/service/paste-search-detail/a1b2c3d4-0000-0000-0000-000000000000/' \
      -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
    ```
  </Step>

  <Step title="Read">
    Once `status` is `completed`, [`paste-search-detail`](https://client-api.leak.center/scalar-docs/#tag/paste-search/GET/service/paste-search-detail/\{job_id}/) returns the `results` array plus paging and filter metadata. Page with `page` and `page_size`, and narrow the result set with the filters in the table below.

    ```bash theme={"dark"}
    curl 'https://client-api.leak.center/api/service/paste-search-detail/a1b2c3d4-0000-0000-0000-000000000000/?page=1&page_size=20&source=database&ordering=-date' \
      -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
    ```
  </Step>
</Steps>

### Request parameters

**Submit body** — `paste-search-create`:

| Parameter               | Type              | Required | Notes                                                                                    |
| ----------------------- | ----------------- | -------- | ---------------------------------------------------------------------------------------- |
| `query`                 | string            | Yes      | The search string. A domain (`acme.com`), email, password, hostname, or file name.       |
| `context_chars`         | integer           | No       | Characters of surrounding context returned in `text_preview`. Default `500`.             |
| `paste_site_ids`        | array of integers | No       | Limit the search to specific paste site IDs. Omit (or send `null`) to search every site. |
| `unique_only`           | boolean           | No       | Collapse duplicate pastes to one result each. Default `false`.                           |
| `include_google_search` | boolean           | No       | Also pull matching pastes surfaced through Google. Default `false`.                      |

**Detail query** — `paste-search-detail/{job_id}`:

| Parameter     | Type          | Required | Notes                                                                                                                 |
| ------------- | ------------- | -------- | --------------------------------------------------------------------------------------------------------------------- |
| `job_id`      | string (path) | Yes      | The UUID returned by submit.                                                                                          |
| `page`        | integer       | No       | Page number, 1-based.                                                                                                 |
| `page_size`   | integer       | No       | Results per page (max 100).                                                                                           |
| `source`      | string        | No       | Filter to `database` or `live`.                                                                                       |
| `site_name`   | string        | No       | Case-insensitive substring match on the paste site name.                                                              |
| `is_new`      | boolean       | No       | Filter to results flagged new by alerting.                                                                            |
| `search_text` | string        | No       | Full-text search within result titles and text previews.                                                              |
| `date_from`   | string (date) | No       | Only results from this date onward (ISO, e.g. `2026-01-01`).                                                          |
| `date_to`     | string (date) | No       | Only results up to this date (ISO, e.g. `2026-12-31`).                                                                |
| `author`      | string        | No       | Case-insensitive substring match on the paste author.                                                                 |
| `ordering`    | string        | No       | Sort field. Prefix with `-` for descending. Options: `date`, `-date`, `site_name`, `-site_name`, `author`, `-author`. |
| `org_id`      | string        | No       | For system-level users, target a subsidiary organization.                                                             |

### What comes back

The detail response is a job envelope wrapping a paged `results` array. Top-level fields:

* `job_id` — the search job UUID.
* `status` — job state. `completed` means results are ready.
* `error_message` — failure reason, or `null` on success.
* `query` — the query you submitted.
* `created_at`, `started_at`, `completed_at` — job lifecycle timestamps.
* `results` — array of paste matches (shape below).
* `total` — total matches across all pages.
* `page`, `page_size` — the current page and page size.
* `sites_matched` — number of distinct paste sites with a hit.
* `db_results` — count from the indexed database, or `null`.
* `live_results` — count from the live crawl, or `null`.
* `available_authors` — authors present in the result set, for building an `author` filter.
* `available_sites` — site names present in the result set, for building a `site_name` filter.

Each item in `results`:

* `id` — internal result ID, or `null`.
* `external_id` — the paste's ID on its source site, or `null`.
* `title` — the paste title, or `null`.
* `text_preview` — matched snippet with surrounding context, sized by `context_chars`.
* `author` — the paste author, or `null`.
* `date` — when the paste was published, or `null`.
* `site_name` — the paste site (e.g. a Pastebin-style host).
* `base_url` — the site's base URL, or `null`.
* `content_hash` — content fingerprint used for dedup, or `null`.
* `source` — `database` or `live`.
* `url` — direct link to the paste, or `null`.
* `is_new` — `true` if alerting flagged this as a new finding.

```json theme={"dark"}
{
  "job_id": "a1b2c3d4-0000-0000-0000-000000000000",
  "status": "completed",
  "error_message": null,
  "query": "acme.com",
  "created_at": "2026-06-22T09:14:02Z",
  "started_at": "2026-06-22T09:14:03Z",
  "completed_at": "2026-06-22T09:14:41Z",
  "results": [
    {
      "id": 88213,
      "external_id": "kQ7x2Lp9",
      "title": "acme corp dump",
      "text_preview": "...login: jsmith@acme.com  pass: Spring2026!  host: vpn.acme.com...",
      "author": "anon",
      "date": "2026-06-19T22:41:00Z",
      "site_name": "PasteDump",
      "base_url": "https://pastedump.example",
      "content_hash": "9f2b1c7e",
      "source": "database",
      "url": "https://pastedump.example/kQ7x2Lp9",
      "is_new": true
    }
  ],
  "total": 1,
  "page": 1,
  "page_size": 20,
  "sites_matched": 1,
  "db_results": 1,
  "live_results": 0,
  "available_authors": ["anon"],
  "available_sites": ["PasteDump"]
}
```

Submitting and reading paste searches costs no credits. Both endpoints are throttled per organization: `paste-search-create` allows 100 requests per day, and `paste-search-detail` allows 1000 per day — generous enough to poll a job to completion.

### What to do with the results

Treat any `text_preview` that exposes a live credential for your domain as an active exposure: rotate the password, force re-authentication, and check the source paste's `url` and `date` to scope the blast radius. Use `is_new` to spot fresh leaks since your last sweep and `available_sites` to see which paste hosts are carrying your data.
