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

# Troubleshoot common ErynoaGroup issues

> Step-by-step guidance for resolving common ErynoaGroup problems including authentication errors, rate limits, webhook failures, and connection timeouts.

This page covers the most common issues encountered when using ErynoaGroup and how to resolve them. If your issue isn't listed here, contact support with your request ID (`X-Request-ID` response header) for faster diagnosis.

## Authentication errors

### 401 Unauthorized

A `401` response means your API key is missing, malformed, or invalid.

**Check:**

1. The `Authorization` header is present and formatted as `Bearer YOUR_API_KEY`
2. Your API key is correct — copy it fresh from **Settings → API Keys** if unsure
3. The key hasn't been revoked (check the dashboard — revoked keys show a red status)
4. You're using the right key for the right environment (`sk_test_` for sandbox, `sk_live_` for production)

```bash theme={null}
# Correct format
curl -H "Authorization: Bearer sk_live_abc123..."

# Incorrect — missing "Bearer"
curl -H "Authorization: sk_live_abc123..."
```

### 403 Forbidden

A `403` means your key exists but lacks permission for the operation.

**Check:**

1. The key's scope — `read`-scoped keys cannot create or modify resources
2. Any IP allowlist configured on the key — requests from unlisted IPs are rejected

To fix: create a new key with the appropriate scope (e.g., `write`) from **Settings → API Keys**.

## Rate limit errors

### 429 Too Many Requests

You've exceeded your rate limit for the current window.

**Resolution:**

1. Check the `Retry-After` header in the response — it tells you exactly how long to wait
2. Implement exponential backoff in your client
3. Reduce request frequency or batch operations where possible
4. Upgrade your plan for higher limits

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

def api_call_with_retry(url, headers, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers)
        if response.status_code == 429:
            retry_after = int(response.headers.get("Retry-After", 2 ** attempt))
            time.sleep(retry_after)
            continue
        return response
    raise Exception("Max retries exceeded")
```

## Webhook delivery failures

### Endpoint not receiving events

**Check:**

1. Your endpoint URL is publicly accessible (not `localhost` or a private IP)
2. The endpoint accepts `POST` requests
3. The endpoint responds with `200 OK` within 10 seconds
4. The correct event types are selected in **Webhooks → Edit**

Test reachability:

```bash theme={null}
curl -X POST https://your-endpoint.com/webhook \
  -H "Content-Type: application/json" \
  -d '{"test": true}'
```

### Signature verification failing

If your HMAC verification is failing:

1. Ensure you're hashing the **raw request body** (not parsed JSON)
2. Check that you're using the correct webhook secret from your dashboard
3. Confirm you're comparing the full signature string, not just a prefix

```python theme={null}
import hmac, hashlib

def verify_signature(raw_body: bytes, secret: str, received_sig: str) -> bool:
    computed = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(computed, received_sig)
```

### Re-delivering failed events

If a webhook delivery failed and you want to retry it:

1. Go to **Webhooks → Delivery Logs** in your dashboard
2. Find the failed delivery
3. Click **Re-deliver** to trigger a new attempt

## Connection & timeout issues

### Request timeouts

If requests are timing out before completing:

1. Check [status.erynoa.group](https://status.erynoa.group) for any ongoing incidents
2. Increase your HTTP client's timeout setting (recommend at least 30 seconds)
3. For long-running operations, use the asynchronous API pattern — submit a job and poll for completion

### Slow responses

Occasional slowdowns can occur during high traffic. Steps to diagnose:

1. Check the `X-Request-ID` header in the response and note it for support
2. Check the [ErynoaGroup status page](https://status.erynoa.group) for performance notices
3. If persistent, contact support with the affected request IDs and timestamps

## Getting help

If you can't resolve an issue with this guide:

* **Email support:** Include your request ID (`X-Request-ID`), the full error response, and steps to reproduce
* **Dashboard logs:** Check **API Logs** and **Webhook Logs** in your dashboard for detailed event history
* **Status page:** Check [status.erynoa.group](https://status.erynoa.group) for real-time platform status
