Error Code Reference
Every ChatAds error includes a code, message, and optional details. Here’s how to resolve each one:Authentication Errors
UNAUTHORIZED (401)
UNAUTHORIZED (401)
INVALID_API_KEY (401)
INVALID_API_KEY (401)
Cause: API key is invalid or doesn’t exist.Solution:
- Verify your key starts with
cak_ - Check for typos in the API key
- Generate a new key at getchatads.com/settings/api-keys
- Typo in the API key
- Key was regenerated (old key no longer valid)
- Using a key from a different environment
API_KEY_DISABLED (403)
API_KEY_DISABLED (403)
Cause: The API key has been explicitly disabled.Solution:
Re-enable the key in the dashboard or generate a new one at getchatads.com/settings/api-keys.
Input Validation Errors
INVALID_INPUT (400)
INVALID_INPUT (400)
Cause: Request body is missing or malformed.Solution:Checklist:
-
Content-Type: application/jsonheader is set - Request body is valid JSON
-
messagefield is present and non-empty
MESSAGE_TOO_LONG (400)
MESSAGE_TOO_LONG (400)
Cause: Message exceeds 5000 characters.Response details:Solution:
Truncate or summarize the message. For long conversations, send only the relevant portion:
Content Restriction Errors
BLOCKED_KEYWORD (422)
BLOCKED_KEYWORD (422)
Cause: Message contains a keyword blocked by your team’s rules.Response details:Solution:
- Review blocked keywords at getchatads.com/settings/rules
- Remove the rule if blocking was unintended
- This request does NOT count against your quota
COUNTRY_NOT_ALLOWED (422)
COUNTRY_NOT_ALLOWED (422)
Cause: Request originated from a disallowed country.Response details:Solution:
- Review geo-restrictions in your team settings
- Pass the correct
countryparameter to override IP detection - This request does NOT count against your quota
Rate Limit Errors
DAILY_LIMIT_EXCEEDED (429)
DAILY_LIMIT_EXCEEDED (429)
Cause: Daily request limit reached.Response details:Solution:
- Wait until midnight UTC for reset
- Upgrade your plan for higher limits
- Check
Retry-Afterheader for seconds until reset
MONTHLY_LIMIT_EXCEEDED (429)
MONTHLY_LIMIT_EXCEEDED (429)
Cause: Monthly request limit reached (free tier only).Response details:Solution:
- Wait until the 1st of next month
- Upgrade to a paid plan (unlimited monthly)
Server Errors
INTERNAL_ERROR (500)
INTERNAL_ERROR (500)
Cause: Unexpected server error.Solution:
- Retry the request after a short delay
- If persistent, check chatads.statuspage.io for outages
- Contact chris@getchatads.com with your
request_id
REDIS_UNAVAILABLE (503)
REDIS_UNAVAILABLE (503)
Understanding the Response Status
Thedata.status field indicates the outcome of the request:
| Status | Meaning | When This Occurs |
|---|---|---|
"filled" | All requested offers were filled | returned == requested |
"partial_fill" | Some offers filled (multi-offer mode) | 0 < returned < requested |
"no_offers_found" | No offers available | returned == 0 (no keywords detected, no links found, or filtered) |
"internal_error" | Service failure | Timeout, service unavailable, or unexpected error |
The
offers array only contains offers with URLs. If the array is empty, check the status field to understand why no offers were returned.Common Integration Issues
No Matches Found
returned: 0 in response
Symptoms: API returns successfully but
data.returned is 0.Possible causes:-
No product detected - The message doesn’t contain a clear product reference
-
Intent score too low - Query filtered by intent threshold
- No affiliate available - Product identified but no affiliate link exists
-
Message too short - After sanitization (removing PII, URLs, blocked keywords), no words remain
- Use more specific product queries
- Check the
statusfield for specifics
Slow Response Times
API latency exceeds expectations
Expected latencies:
If consistently slow:
| Configuration | Typical Latency |
|---|---|
fast extraction + fast quality | 100-150ms |
thorough extraction + fast quality | 200-300ms |
thorough extraction + standard quality | ~1.4s |
thorough extraction + best quality | ~2.5s |
-
Use fast quality mode
- Check network latency - API is hosted on Fly.io (global regions)
- Cache responses - Same queries return same results
SDK Issues
SDK not working as expected
TypeScript SDK:Python SDK:Common issues:
- Not handling
data: nullwhenerroris present - Not checking
returned > 0before accessingoffers - Using wrong import path
Debug Checklist
When troubleshooting, work through this checklist:Log the request_id
Every response includes a unique ID for debugging:Include this when contacting support.