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

# Quickstart

> From zero to your first authenticated request in under five minutes.

## 1. Create an API key

1. Sign in to your FlowEstate organization at [panel.flowestate.app](https://panel.flowestate.app).
2. Navigate to **Settings → API Keys**.
3. Click **New API key**, give it a descriptive name (e.g. `make-lead-ingest`), and select the scopes you need. Most "send leads from a form" use cases only need `leads:write`.
4. Copy the key — it starts with `fe_k_`. <Warning>The full key is shown only once. If you lose it, revoke it and create a new one.</Warning>

## 2. Test the key

The `/me` endpoint requires no scope and is the safest sanity check:

<CodeGroup>
  ```bash curl theme={null}
  curl https://panel.flowestate.app/api/v1/me \
    -H "Authorization: Bearer fe_k_your_key_here"
  ```

  ```js Node.js theme={null}
  const res = await fetch("https://panel.flowestate.app/api/v1/me", {
    headers: { Authorization: "Bearer fe_k_your_key_here" },
  });
  console.log(await res.json());
  ```

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

  res = requests.get(
      "https://panel.flowestate.app/api/v1/me",
      headers={"Authorization": "Bearer fe_k_your_key_here"},
  )
  print(res.json())
  ```
</CodeGroup>

You should see your organization name and the scopes attached to the key:

```json theme={null}
{
  "organization": { "id": "org_...", "name": "Acme Realty", "slug": "acme-realty" },
  "auth": { "type": "api_key", "scopes": ["leads:write"], "clientId": null, "userId": null }
}
```

## 3. Create your first lead

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://panel.flowestate.app/api/v1/leads \
    -H "Authorization: Bearer fe_k_your_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "firstName": "Ada",
      "lastName": "Lovelace",
      "email": "ada@example.com",
      "source": "website"
    }'
  ```

  ```js Node.js theme={null}
  const res = await fetch("https://panel.flowestate.app/api/v1/leads", {
    method: "POST",
    headers: {
      Authorization: "Bearer fe_k_your_key_here",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      firstName: "Ada",
      lastName: "Lovelace",
      email: "ada@example.com",
      source: "website",
    }),
  });
  console.log(await res.json());
  ```

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

  res = requests.post(
      "https://panel.flowestate.app/api/v1/leads",
      headers={
          "Authorization": "Bearer fe_k_your_key_here",
          "Content-Type": "application/json",
      },
      json={
          "firstName": "Ada",
          "lastName": "Lovelace",
          "email": "ada@example.com",
          "source": "website",
      },
  )
  print(res.json())
  ```
</CodeGroup>

A `201 Created` response with the new lead's `id` means everything is wired correctly. Open the **Leads** view in your dashboard — Ada should be there.

<Note>At least one of `email` or `phone` is required. Empty strings are treated as missing. See [Create a lead](/api-reference/leads#create-a-lead) for the full payload.</Note>

## 4. Next steps

* [Authenticate properly](/authentication) and understand [scopes](/scopes).
* Learn how [errors](/errors) and [rate limits](/rate-limits) surface in responses.
* Subscribe to [webhooks](/webhooks) so your other systems react when something changes inside FlowEstate.
