Skip to main content
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)
# 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
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:
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
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 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 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 for real-time platform status