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

# Reducing Costs

> Spend less on the ChatAds API without sacrificing quality

ChatAds bills per request, but not all requests are created equal. Here's how to keep your costs down.

## Know What's Not Billable

Several response statuses are **free** — you're not charged when these fire:

| Status                   | Why It's Free                                                                         |
| ------------------------ | ------------------------------------------------------------------------------------- |
| `message_too_short`      | Under configured minimum words (default: 10) — no extraction attempted. REST API only |
| `message_too_long`       | Over configured maximum characters (default: 10,000) — rejected before processing     |
| `blocked_keyword`        | Hard stop keyword matched                                                             |
| `country_not_allowed`    | Country code outside the US and UK                                                    |
| `ip_country_not_allowed` | IP resolved to a country outside the US and UK                                        |
| `language_not_allowed`   | Non-English detected                                                                  |
| `catalog_not_enabled`    | Country/IP mapped to an Amazon marketplace your team hasn't enabled                   |

## Pass the `country` Parameter

If you know the user's country, pass it in the `country` parameter. ChatAds will reject traffic from outside the US and UK for free. Without it, ChatAds falls back to the `ip` parameter for geo-detection — and if neither is provided, it assumes US and processes the request, meaning you'll pay for a `no_offer` result on traffic that was never going to convert.

## Pass the `ip` Parameter

If you're serving international traffic, pass the user's IP address in the `ip` parameter. ChatAds will detect traffic from outside the US and UK and reject it for free. Without `ip` or `country`, ChatAds assumes US and processes the request — meaning you'll pay for a `no_offer` result on traffic that was never going to convert.

## Turn On Brand-Only Mode

When [Brand Only](/chatads_api/targeting#brand-only-mode) is enabled, ChatAds checks for brand-like words in the message before processing. If no brand is detected, the request returns early with status `no_brand_found`. This is **billed** like other processed requests.

**Pros:**

* Branded matches tend to convert better since users already have a product in mind
* Higher precision — only surfaces offers when a specific brand is mentioned

**Cons:**

* Lower fill rate — generic product mentions like "yoga mat" or "running shoes" won't match
* Misses opportunities where a generic term could have resolved to a popular product

If your traffic frequently mentions brands by name, this can improve conversion rates on the offers that do get through.

## Check `billed` in the Response

Every response includes a `data.billed` field. Use it to track how many of your requests are actually costing you money. If you see a high ratio of `billed: true` with `returned: 0`, review the tips above to reduce waste.

## Next Steps

<CardGroup cols={2}>
  <Card title="Targeting" icon="sliders" href="/chatads_api/targeting">
    Configure filters to reduce irrelevant matches
  </Card>

  <Card title="Why No Offers?" icon="circle-question" href="/guides/why-no-offers">
    Diagnose empty responses
  </Card>
</CardGroup>
