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

# Modules

> Every module and whether your account can use it

Lists every module with its current state and whether your account can use it. Use it to check access before calling a lookup: a lookup for a module your plan does not include is refused with `403 ACCESS_DENIED`.

## Headers

<ParamField header="X-API-KEY" type="string" required>
  Your API key.
</ParamField>

## Usage

Does not count as a lookup.

Needs the `osint:read` scope.

## Example request

<RequestExample>
  ```bash cURL theme={null}
  curl "https://www.osintcat.net/api/modules" \
       -H "X-API-KEY: YOUR_API_KEY"
  ```

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

  url = "https://www.osintcat.net/api/modules"
  headers = {"X-API-KEY": "YOUR_API_KEY"}

  response = requests.get(url, headers=headers, timeout=60)
  print(response.status_code, response.json())
  ```

  ```javascript Node.js theme={null}
  const response = await fetch("https://www.osintcat.net/api/modules", {
    headers: { "X-API-KEY": "YOUR_API_KEY" },
  });
  console.log(response.status, await response.json());
  ```

  ```php PHP theme={null}
  <?php
  $curl = curl_init("https://www.osintcat.net/api/modules");
  curl_setopt_array($curl, [
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_HTTPHEADER => ["X-API-KEY: YOUR_API_KEY"],
  ]);
  $response = curl_exec($curl);
  $status = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
  curl_close($curl);
  echo $status . " " . $response;
  ```

  ```go Go theme={null}
  package main

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

  func main() {
      req, _ := http.NewRequest("GET", "https://www.osintcat.net/api/modules", nil)
      req.Header.Set("X-API-KEY", "YOUR_API_KEY")
      resp, err := http.DefaultClient.Do(req)
      if err != nil {
          panic(err)
      }
      defer resp.Body.Close()
      body, _ := io.ReadAll(resp.Body)
      fmt.Println(resp.StatusCode, string(body))
  }
  ```
</RequestExample>

## Response

<ResponseField name="modules" type="array">
  One entry per module.

  <Expandable title="properties">
    <ResponseField name="id" type="string">
      Module id.
    </ResponseField>

    <ResponseField name="name" type="string">
      Display name.
    </ResponseField>

    <ResponseField name="category" type="string">
      Category it is listed under.
    </ResponseField>

    <ResponseField name="enabled" type="boolean">
      Whether the module is switched on.
    </ResponseField>

    <ResponseField name="access_level" type="string">
      `public`, `beta`, `staff` or `nobody`.
    </ResponseField>

    <ResponseField name="allowed_plans" type="array">
      Plans the module is limited to (empty: all plans).
    </ResponseField>

    <ResponseField name="accessible" type="boolean">
      Whether your account can use it right now.
    </ResponseField>

    <ResponseField name="locked" type="boolean">
      Shown, but not usable on your plan.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="user" type="object">
  Your plan as the access check sees it.

  <Expandable title="properties">
    <ResponseField name="plan" type="string">
      Plan id.
    </ResponseField>

    <ResponseField name="role" type="string">
      Account role.
    </ResponseField>

    <ResponseField name="beta_access" type="boolean">
      Whether the account has beta access.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "modules": [
      {
        "id": "universal-breach-search",
        "name": "Universal Breach Search",
        "category": "Breach Data",
        "enabled": true,
        "access_level": "public",
        "allowed_plans": [],
        "accessible": true,
        "locked": false
      }
    ],
    "user": {
      "plan": "investigator",
      "role": "user",
      "beta_access": false
    }
  }
  ```
</ResponseExample>

## Errors

| Status | Error | When |
| - | - | - |
| 401 | `Unauthorized` | Missing or unknown key. |

See [Errors](/api-reference/introduction#errors) for the responses every endpoint can return.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.