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

# List sources

> Sources tracked for your organization, with counts

```
GET https://app.gethuntd.com/api/v1/public/sources
```

Returns every source tracked for your organization. **Not paginated.** It accepts the
[date parameters](/public-api/conventions#date-filtering), which scope the counts.

## Request

<CodeGroup>
  ```bash cURL theme={null}
  curl https://app.gethuntd.com/api/v1/public/sources \
    -H "X-API-Key: hntd_abc12345_yoursecretkey"
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch('https://app.gethuntd.com/api/v1/public/sources', {
    headers: { 'X-API-Key': process.env.HUNTD_API_KEY }
  });
  const body = await res.json();
  ```

  ```python Python theme={null}
  import os
  import requests

  body = requests.get(
      'https://app.gethuntd.com/api/v1/public/sources',
      headers={'X-API-Key': os.environ['HUNTD_API_KEY']}
  ).json()
  ```
</CodeGroup>

## Response

```json theme={null}
{
  "success": true,
  "organization": "acme.com",
  "totals": { "people": 92070, "companies": 3866 },
  "sources": [
    {
      "source": "devin",
      "label": "Devin",
      "level": "user",
      "people": 95276,
      "users": 2637,
      "userCompanies": 239,
      "maintenance": false
    }
  ]
}
```

## Fields

<ResponseField name="organization" type="string">
  Your organization's domain.
</ResponseField>

<ResponseField name="totals" type="object">
  Organization-wide totals for the requested date window.

  <Expandable title="properties">
    <ResponseField name="people" type="integer">
      Total people checked.
    </ResponseField>

    <ResponseField name="companies" type="integer">
      Total companies checked.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="sources" type="array">
  One entry per tracked source.

  <Expandable title="properties">
    <ResponseField name="source" type="string">
      The slug to pass as `?source=` on other endpoints.
    </ResponseField>

    <ResponseField name="label" type="string">
      Human-readable name, suitable for display.
    </ResponseField>

    <ResponseField name="level" type="string">
      `user` — verified per person. `company` — verified only at account level.
    </ResponseField>

    <ResponseField name="people" type="integer">
      People **checked** against this source.
    </ResponseField>

    <ResponseField name="users" type="integer">
      Of those checked, how many are confirmed users.
    </ResponseField>

    <ResponseField name="userCompanies" type="integer">
      Companies with at least one confirmed user of this source.
    </ResponseField>

    <ResponseField name="maintenance" type="boolean">
      When `true`, the source is paused and all of its counts read `0`.
    </ResponseField>
  </Expandable>
</ResponseField>

<Note>
  `people` counts everyone we checked; `users` counts the subset who are confirmed users. The gap
  between them is expected, not an error.
</Note>

## Scoping counts by date

```bash theme={null}
# Counts covering only the last 30 UTC days
curl "https://app.gethuntd.com/api/v1/public/sources?discovered_days=30" \
  -H "X-API-Key: hntd_abc12345_yoursecretkey"
```

## Errors

Requesting a source your organization is not entitled to returns `403`:

```json theme={null}
{
  "success": false,
  "error": {
    "code": "SOURCE_NOT_ALLOWED",
    "message": "Your organization is not entitled to this source."
  }
}
```

See the [full error table](/public-api/conventions#error-codes).
