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

# Quickstart

> Create a test key and make your first risk check.

## 1. Create a test key

Open **Dashboard > API keys**, choose the **Test** environment, and create a key.
The raw key is displayed once and begins with `sg_test_`.

<Warning>
  Store the key in a secret manager as soon as it is created. SignupBear stores a
  SHA-256 hash and cannot show the raw key again.
</Warning>

## 2. Add the key to your server

```bash theme={null}
SIGNUPBEAR_API_KEY=sg_test_replace_me
```

Do not prefix this value with `Bearer`; add that only in the HTTP header.

## 3. Check an email

<CodeGroup>
  ```bash cURL theme={null}
  curl https://signupbear.com/v1/check \
    --request POST \
    --header "Authorization: Bearer $SIGNUPBEAR_API_KEY" \
    --header "Content-Type: application/json" \
    --data '{"email":"low@signupbear.test"}'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch("https://signupbear.com/v1/check", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.SIGNUPBEAR_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ email: "low@signupbear.test" }),
  });

  const decision = await response.json();
  ```

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

  response = requests.post(
      "https://signupbear.com/v1/check",
      headers={
          "Authorization": f"Bearer {os.environ['SIGNUPBEAR_API_KEY']}",
          "Content-Type": "application/json",
      },
      json={"email": "low@signupbear.test"},
      timeout=5,
  )

  decision = response.json()
  ```
</CodeGroup>

## 4. Enforce the decision

```javascript theme={null}
if (!response.ok) {
  // Choose a deliberate fail-open or fail-closed policy for your product.
  throw new Error(`SignupBear failed: ${decision.request_id}`);
}

if (decision.recommended_action === "block") {
  return rejectSignup(decision.reasons);
}

if (decision.recommended_action === "review") {
  return holdForReview(decision.request_id);
}

return createAccount();
```

<Tip>
  Start with the deterministic addresses in [Test mode](/guides/test-mode), then
  switch to an `sg_live_` key when your error handling and monitoring are ready.
</Tip>
