> AffiliateOS Help Center. Index of every article for AI tools: https://www.affiliateos.ai/help/llms.txt

# Daily caps: why an offer leaves the feed mid-day

Offers and the feed · For publishers, networks · Updated 30 October 2026
Web version: https://www.affiliateos.ai/help/offers/daily-caps

Many offers take only so many new users a day. When an offer's daily [cap](https://www.affiliateos.ai/glossary#cap) fills, or its budget runs out, we take it off your Offer API list so no one taps a dead end. It comes back on its own when it can take users again, usually at the next daily reset.

## What happens when a cap fills

- **The Offer API list leaves it out.** The list only holds offers that can take a new user now. No parameter brings a full offer back sooner.
- **The Offers page keeps it, marked.** In the portal the row stays, with **Capped for today** and when it reopens, such as **Reopens at midnight EDT**. Its button reads **View offer** instead of **Get offer**, and the offer's page holds the tracking link back and points to **Run it now: open copies of this offer**. If we don't know when the cap resets, the offer is hidden instead.
- **Another copy may take its row.** If the same app is listed more than once, the best open copy shows in its place. See [How we pick which copy of an offer you see](https://www.affiliateos.ai/help/offers/which-copy-you-see).
- **Old links stop before the advertiser.** When we know an offer is full, a tap from a card you saved earlier doesn't reach a store page that can't credit it. The player lands on one of our pages, such as "This offer has ended" or "Download a game", that tells them to go back and pick another offer.
- **Players who already started carry on.** A cap counts new users, so the first step uses it up and later steps don't. Steps from players who started before the cap filled still post back.

## Example

Harbor Blocks, an iPhone game, takes a set number of new players a day, and its cap resets at midnight Eastern time.

| Time | What happens |
|---|---|
| 9:00 AM | Harbor Blocks is on Pebble Rewards' list with `cap: 12`. |
| 11:20 AM | The last new player of the day installs. Its `cap` reaches 0 and it leaves the Offer API list. |
| 11:25 AM | Pebble Rewards checks its saved cards, gets `available: false` for Harbor Blocks and hides the card. |
| 2:06 PM | A player who installed at 10:40 AM reaches level 10. That step still posts back. |
| Midnight | The cap resets. Harbor Blocks is back on the list. |

Example. Times and numbers are made up.

## Read the cap fields

Rows carry these fields when we report caps on the API. Offers without a known limit return them as `null`.

| Field | Meaning |
|---|---|
| `cap` | New users the offer can still take from you today. `0` means no new starts where we enforce the limit (see below). `null` means no known limit, not unlimited. |
| `capEventName` | The step that uses up the cap, usually the first one. |
| `capTimezone` | The cap's time zone, or `null` when unknown. |
| `capResetsAt` | The next midnight in that time zone, as a UTC timestamp. It's when the count resets, not a promise the offer returns. |

On some offers `cap` is only an estimate across everyone, and taps still go through at `0`. Use `available`, below, to decide whether to show a card.

If part of an offer's cap is set aside for one publisher, the `cap` every other publisher sees already leaves that part out. When what's left reaches 0, the offer is unavailable and its link refuses new taps until the set-aside part is used or the US Eastern day ends.

If your account has its own daily limit on an offer, set by us or by the network you work with, `cap` counts down from that limit instead.

## Check saved cards before you show them

If you keep offer cards between calls, ask which are still open:

```bash
curl -G "https://affiliateos.xyz/publisher/offers/availability" \
  --data-urlencode "ids=aff_7c2e91b04d3a,aff_51d0c3e8a9f2" \
  -H "x-api-key: $AFFILIATEOS_KEY"
```

```json
{
  "status": "success",
  "data": {
    "offers": [
      {
        "id": "aff_7c2e91b04d3a",
        "available": false,
        "cap": 0,
        "capResetsAt": "2026-10-31T04:00:00.000Z"
      },
      {
        "id": "aff_51d0c3e8a9f2",
        "available": true,
        "cap": null,
        "capResetsAt": null
      }
    ],
    "checkedAt": "2026-10-30T15:25:00.000Z"
  }
}
```

Example: Pebble Rewards' 11:25 AM check, Harbor Blocks first. IDs and times are made up.

- Send up to 100 IDs a call, comma-separated.
- Hide a card when `available` is `false`. Read `available`, not `cap`: an offer can report `cap: 0` for display and still be open.
- An ID that's unknown to your account reads `available: false`.
- Don't bring a card back because `capResetsAt` has passed. Bring it back when a new check says `available: true`.

> **A cap counts new users, not steps.** Only the step that starts a user, usually the install or the sign-up, uses the cap. Later steps for players who already started never use it, and they still post back after the offer is full.

## Get an email when it happens

Open [**Email alerts**](https://www.affiliateos.ai/help/offers/email-alerts) in the portal. **Offer stopped** emails you when an offer you earn on stops being available and stays gone for 15 minutes, 1 hour or 4 hours, right away or in the daily summary; tick **Also tell me when it comes back** to hear when it returns. **Payout or cap changes**, with **Include daily cap changes** ticked, emails you when an offer's daily cap changes.

## For networks

The Network API leaves full offers out the same way, and `GET /network-api/offers/availability?ids=` answers the same question with your network's `ak_` key. On offers that support it, you can also set a **Daily cap** for each of your publishers when you assign them the offer in your network dashboard.
