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

# Quickstart

> Make your first Raptor Comply API call in under five minutes. List your facilities with curl, Node.js, or Python using your API key.

> Make your first Raptor Comply API call in under five minutes. List your facilities with curl, Node.js, or Python using your API key.

This guide walks you through making your first Raptor Comply API call - listing the facilities in your organization. You'll be up and running in under five minutes.

Before you start, make sure you have your API key. If you haven't generated one yet, see [Authentication](/authentication) to get it from your Organization Admin.

<Steps>
  <Step title="Set your API key">
    Visit the **Settings page ([https://app.raptorcomply.com/settings](https://app.raptorcomply.com/settings))** in Raptor Comply. Note: only Organization Admins can access this page. Export your API key as an environment variable. This keeps your credential out of your code and command history.

    ```bash theme={null} theme={null}
    export RAPTOR_COMPLY_API_KEY=rc_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    ```

    Replace the placeholder with your actual API key. Every example in this guide reads from this variable.
  </Step>

  <Step title="List your facilities">
    Send a `GET` request to `/facilities`. Pick the language you're working in:

    <CodeGroup>
      ```bash curl theme={null} theme={null}
      curl https://api.raptormaps.com/facilities \
        -H "X-API-Key: $RAPTOR_COMPLY_API_KEY"
      ```

      ```javascript Node.js theme={null} theme={null}
      const response = await fetch("https://api.raptormaps.com/facilities", {
        headers: {
          "X-API-Key": process.env.RAPTOR_COMPLY_API_KEY,
        },
      });

      if (!response.ok) {
        const error = await response.json();
        throw new Error(`${error.error}: ${error.message}`);
      }

      const facilities = await response.json();
      console.log(facilities);
      ```

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

      response = requests.get(
          "https://api.raptormaps.com/facilities",
          headers={
              "X-API-Key": os.environ["RAPTOR_COMPLY_API_KEY"],
          },
      )
      response.raise_for_status()
      facilities = response.json()
      ```
    </CodeGroup>
  </Step>

  <Step title="Inspect the response">
    A successful `200 OK` response returns a JSON array of the facilities your API key has access to:

    ```json theme={null} theme={null}
    [
      {
        "id": "fac_01HXY...",
        "name": "South Plant Substation"
      },
      {
        "id": "fac_01HXZ...",
        "name": "North Field Switching Station"
      }
    ]
    ```

    Each object includes a stable `id` you can use to fetch that facility's detail record, drill into its associated cyber systems, or scope subsequent queries. Hold on to these IDs, you'll use them throughout your integration.
  </Step>

  <Step title="Next steps">
    Now that you can list facilities, here are the natural next moves:

    * **Drill into a facility's cyber systems.** Use a facility `id` to query `GET /cyber-systems` and see the CIP-classified systems associated with that location.
    * **Create a cyber asset.** `POST /cyber-assets` supports full asset creation, use this to push new assets from your CMDB into Raptor Comply. See the [Cyber Assets reference](/api-reference/cyber-assets) for the full request schema.
    * **Set up a continuous sync.** If you're building a recurring integration between Raptor Comply and a CMDB or CMMS, see the [CMDB sync guide](/guides/sync-cmdb) for a recommended pattern using the full cyber asset CRUD surface.
  </Step>
</Steps>

<Note>
  If you receive a `401 Unauthorized` response, double-check that the `X-API-Key` header is present in your request and that your API key has not expired. See [Authentication](/authentication) for the full list of error shapes and how to resolve each one.
</Note>
