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

# Authentication

> Authenticate requests to Parse API

# Authentication

Parse uses Bearer token authentication for all API requests.

## Getting Your API Key

1. Log in to your Pantherpulse dashboard
2. Navigate to **Settings** → **API Keys**
3. Click **Generate New Key**
4. Copy and store securely (you won't see it again)

## Using Your API Key

Include your API key in the `Authorization` header of every request:

```bash theme={null}
Authorization: Bearer YOUR_API_KEY
```

### Example

```bash theme={null}
curl -X POST https://parse.pantherpulse.ai/v1/extract/batch \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@statement.pdf" \
  -F "user_id=ppu_YOUR_USER_ID"
```

## Key Management

* Generate multiple keys for different applications
* Rotate keys regularly for security
* Delete unused keys from your dashboard
* Each key logs its access patterns
* Immediately revoke compromised keys

## Security Best Practices

* **Never commit API keys** to version control
* **Use environment variables** to store keys
* **Rotate keys regularly** if compromised
* **Restrict key usage** to specific IP addresses (available on Enterprise plans)
* Use separate keys for development and production

### Environment Variables

```bash theme={null}
# .env
PARSE_API_KEY=YOUR_API_KEY

# In your code
import os
api_key = os.getenv('PARSE_API_KEY')
```

## Rate Limiting

API requests are rate limited based on your plan:

| Plan         | Requests/min | Concurrent |
| ------------ | ------------ | ---------- |
| Starter      | 10           | 1          |
| Professional | 50           | 5          |
| Business     | 200          | 20         |

Rate limit headers in response:

```
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 8
X-RateLimit-Reset: 1697980800
```

## Errors

Invalid or missing API key returns:

```json theme={null}
{
  "error": "Unauthorized",
  "message": "Invalid API key",
  "code": "invalid_api_key"
}
```
