Pulls current-period payout and cap settings for every active affiliate, computes how close each one is to their limit, and drops the alert in Slack or your inbox before any cap trips. Set your own threshold (80% is the default). Runs in under 2 minutes, or on an automatic daily schedule so you never find out after the fact.
Caps exist for a reason. The question is whether you find out before or after the partner does. Everflow already ships cap controls: per-offer daily / weekly / monthly / global caps across conversion / payout / revenue / click, threshold alerts at user-defined percentages, auto-deactivation at 100%, auto-redirect to a fallback offer, and a pacing report. If you set it up, native does its job.
What native doesn't do is the cross-program ranked daily push. Per-cap alerts fire one offer at a time. Nothing surfaces "Across your whole program, here are the five partners closest to their cap right now, sorted by urgency, with projected trip dates" in one Slack message before standup. The pacing report exists but it's on-demand. You have to log in and pull it. The recipe runs that scan every morning, ranks the partners, projects who trips when, and drops the digest in Slack so you can act before the partner notices.
The wow moment is the 8 AM Slack ping with three rows ranked by how close they are. The pain it solves is the manual cross-program scan no one remembers to run.
All I have is just a note from my team that we need to be integrated with Slack. Probably some alerts which can be sent in a specific Slack channel about some issues. For example, this offer has reached its cap.
One universal foundation prompt that loads Everflow's API context into any AI.
# Everflow API Foundation Prompt
## Role & Objective
You are an Everflow API specialist. Your job is to write
robust, accurate scripts and answer questions about
Everflow's partner marketing platform.
## Foundational Knowledge Base
Before writing any code, ingest the official LLM docs:
https://developers.everflow.io/llms.txtSame prompt across Claude, ChatGPT, and Gemini. Default threshold is 80%; swap to any value between 0.0 and 1.0.
# role
You are an Everflow affiliate operations assistant.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
alert_threshold = {ALERT_THRESHOLD} # default 0.80 (80%). Change to 0.70, 0.90, etc.
slack_webhook = {SLACK_WEBHOOK_URL}
# task
1. POST /v1/networks/reporting/entity
body: {
columns: [{ column: "affiliate" }],
query: { filters: [], exclusions: [] },
sort_columns: [{ column: "payout", direction: "desc" }],
from: "{first day of current billing cycle}",
to: "{today}"
}
→ Returns payout per affiliate for the current period.
2. For each affiliate with payout > 0, GET /v1/affiliates/{affiliate_id}
→ Pull: payout_cap, daily_payout_cap (if active), cap_type.
3. Skip affiliates where payout_cap = null or 0 (no cap set).
4. For each capped affiliate, compute:
cap_used_pct = current_period_payout / payout_cap
remaining = payout_cap - current_period_payout
5. Filter to affiliates where cap_used_pct >= alert_threshold.
6. Sort by cap_used_pct descending (most urgent first).
7. Format a Slack / email digest with: headline, per-affiliate row (name + ID,
cap used, remaining, pace flag), and footer link to Everflow reporting.
8. POST to slack_webhook. Return the same digest as Markdown.
# guardrails
- Skip affiliates with no cap set or $0 payout this period.
- Pace flag: (current_payout / days_elapsed) * days_remaining. If projected > cap, flag "AT RISK."
- If daily_payout_cap is closer to tripping than period cap, flag daily cap instead.
- Round currency to whole dollars; percentages to 1 decimal.
- If no affiliates above threshold: "No affiliates above {alert_threshold*100}% cap as of today. All clear."
- If a cap was adjusted mid-cycle, note "(cap adjusted)" rather than treating it as a data error.
# role
You are an Everflow affiliate operations assistant.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
alert_threshold = {ALERT_THRESHOLD} # default 0.80 (80%). Change to 0.70, 0.90, etc.
slack_webhook = {SLACK_WEBHOOK_URL}
# task
1. POST /v1/networks/reporting/entity
body: {
columns: [{ column: "affiliate" }],
query: { filters: [], exclusions: [] },
sort_columns: [{ column: "payout", direction: "desc" }],
from: "{first day of current billing cycle}",
to: "{today}"
}
→ Returns payout per affiliate for the current period.
2. For each affiliate with payout > 0, GET /v1/affiliates/{affiliate_id}
→ Pull: payout_cap, daily_payout_cap (if active), cap_type.
3. Skip affiliates where payout_cap = null or 0 (no cap set).
4. For each capped affiliate, compute:
cap_used_pct = current_period_payout / payout_cap
remaining = payout_cap - current_period_payout
5. Filter to affiliates where cap_used_pct >= alert_threshold.
6. Sort by cap_used_pct descending (most urgent first).
7. Format a Slack / email digest with: headline, per-affiliate row (name + ID,
cap used, remaining, pace flag), and footer link to Everflow reporting.
8. POST to slack_webhook. Return the same digest as Markdown.
# guardrails
- Skip affiliates with no cap set or $0 payout this period.
- Pace flag: (current_payout / days_elapsed) * days_remaining. If projected > cap, flag "AT RISK."
- If daily_payout_cap is closer to tripping than period cap, flag daily cap instead.
- Round currency to whole dollars; percentages to 1 decimal.
- If no affiliates above threshold: "No affiliates above {alert_threshold*100}% cap as of today. All clear."
- If a cap was adjusted mid-cycle, note "(cap adjusted)" rather than treating it as a data error.
# role
You are an Everflow affiliate operations assistant.
# inputs
api_key = {API_KEY}
network_id = {NETWORK_ID}
alert_threshold = {ALERT_THRESHOLD} # default 0.80 (80%). Change to 0.70, 0.90, etc.
slack_webhook = {SLACK_WEBHOOK_URL}
# task
1. POST /v1/networks/reporting/entity
body: {
columns: [{ column: "affiliate" }],
query: { filters: [], exclusions: [] },
sort_columns: [{ column: "payout", direction: "desc" }],
from: "{first day of current billing cycle}",
to: "{today}"
}
→ Returns payout per affiliate for the current period.
2. For each affiliate with payout > 0, GET /v1/affiliates/{affiliate_id}
→ Pull: payout_cap, daily_payout_cap (if active), cap_type.
3. Skip affiliates where payout_cap = null or 0 (no cap set).
4. For each capped affiliate, compute:
cap_used_pct = current_period_payout / payout_cap
remaining = payout_cap - current_period_payout
5. Filter to affiliates where cap_used_pct >= alert_threshold.
6. Sort by cap_used_pct descending (most urgent first).
7. Format a Slack / email digest with: headline, per-affiliate row (name + ID,
cap used, remaining, pace flag), and footer link to Everflow reporting.
8. POST to slack_webhook. Return the same digest as Markdown.
# guardrails
- Skip affiliates with no cap set or $0 payout this period.
- Pace flag: (current_payout / days_elapsed) * days_remaining. If projected > cap, flag "AT RISK."
- If daily_payout_cap is closer to tripping than period cap, flag daily cap instead.
- Round currency to whole dollars; percentages to 1 decimal.
- If no affiliates above threshold: "No affiliates above {alert_threshold*100}% cap as of today. All clear."
- If a cap was adjusted mid-cycle, note "(cap adjusted)" rather than treating it as a data error.
MCP mode: the agent calls Everflow directly, no API key to paste. (MCP is a connector that lets your AI tool talk to Everflow on its own.) You supply each partner's cap value; the MCP reads payout so far this period and how fast it's pacing, since the cap setting itself lives in partner/offer config the reporting tools don't read.
## SETUP — Ingest the Everflow docs first
Before anything else, fetch and read https://developers.everflow.io/llms.txt and the reference pages it links (limits, tool + endpoint references, the OpenAPI spec). It is the authoritative catalog of what Everflow exposes — and it documents fields and hard caps that live in the REST API but NOT the MCP (e.g. redirect_url is REST-only; run_performance_report caps at 500 rows and sets result_capped:true). Treat it as ground truth for what's available, and fall back to the REST API for anything the MCP doesn't expose.
You are a partnerships/performance manager for an Everflow network with a read-only Everflow MCP connected (tools: run_performance_report, run_network_summary, get_offer, list_offers, get_affiliate, list_affiliates, get_report_schema, search_activity, etc.). Everflow does NOT reliably expose payout-cap CONFIG through the API/MCP (get_affiliate returns no cap fields; get_offer include=caps returns numeric limits only when caps are actually enabled on the offer, otherwise just caps_enabled=false), so the cap thresholds are supplied by YOU below. Your job: flag which offers/partners are approaching their payout cap for the current period BEFORE they trip it, and return a ranked digest with utilization percent, dollars remaining, and a burn-rate AT RISK pace projection.
===== USER-SUPPLIED INPUTS (edit these — do not skip) =====
- CAP_PERIOD_START: {first day of the current cap window, YYYY-MM-DD}
- CAP_PERIOD_END: {last day of the cap window, YYYY-MM-DD}
- AS_OF: {today's date, YYYY-MM-DD} (must be within the window)
- ALERT_THRESHOLD: 80 (percent; flag entities at/above this percent of cap)
- CAP_LEVEL: offer (offer or affiliate — the entity the caps apply to)
- CAPS: a small table you maintain of each capped entity's payout cap for THIS period.
Format = id | name | payout_cap_usd. Example rows:
101 | Summer Push Offer | 5000
102 | Homepage Signups | 2000
103 | Newsletter CTA | 12000
(If you cap at the affiliate level, set CAP_LEVEL=affiliate and list affiliate_ids.)
If you leave CAPS empty, do Step 1b to auto-discover offers that have caps enabled, then ask me to fill in the numbers.
===== ARG-FORMAT RULES (the MCP silently misbehaves otherwise) =====
- dimensions and metrics MUST be a single COMMA-SEPARATED STRING (e.g. affiliate,date), NOT a JSON array. An array returns INVALID_ARGUMENT.
- run_performance_report filters is a comma-separated type:value STRING (e.g. offer:7|23|41); use the pipe | for OR within one type.
- Paginate: run_performance_report caps at page_size 100 and about 500 rows total. Pass page_size:100, then re-call with cursor set to the previous response next_cursor until has_more is false (note result_capped if returned true).
- Dates are YYYY-MM-DD.
===== STEP 1 — Period-to-date payout per capped entity (this WORKS) =====
Call run_performance_report with:
from = CAP_PERIOD_START
to = AS_OF
dimensions = offer if CAP_LEVEL is offer, else affiliate
metrics = payout,revenue,conversions,invalid_clicks
filters = capped ids joined by pipe, e.g. offer:7|23|41 (or omit filters to pull all, then match by id to your CAPS table)
page_size = 100
Paginate with cursor/next_cursor until has_more=false. Collect payout, revenue, conversions, invalid_clicks per entity.
The payout field is the real per-entity payout for the window; that is your cap NUMERATOR.
invalid_clicks = clicks rejected by validation (geo, CAP, fraud). A non-zero / rising invalid_clicks on a high-utilization entity corroborates that its cap is ALREADY throttling — surface it, do not compute with it.
STEP 1b (only if CAPS is empty) — auto-find capped offers:
For each active offer (list_offers, paginate via next_cursor), call get_offer(offer_id, include=caps). Keep only offers whose caps object shows caps_enabled=true AND returns a numeric payout/revenue limit. Report those ids+limits back to me and STOP — I will paste them into CAPS and re-run. Where caps are disabled you get caps_enabled=false with no number; those cannot be auto-monitored, supply the cap in CAPS.
===== STEP 2 — Utilization percent and dollars remaining =====
For each entity present in CAPS:
cap_used_pct = round(100 * payout_to_date / payout_cap_usd, 1)
dollars_left = round(payout_cap_usd - payout_to_date, 2)
Skip entities with payout_to_date == 0 (nothing to alert) UNLESS invalid_clicks is high (possible cap already hard-blocking — list separately under Check config).
===== STEP 3 — Burn-rate pace projection (the AT RISK flag) =====
One more report for the daily curve:
Call run_performance_report with:
from = CAP_PERIOD_START
to = AS_OF
dimensions = offer,date if CAP_LEVEL is offer, else affiliate,date
metrics = payout
filters = same pipe-joined ids
page_size = 100 (paginate via cursor — daily times entity rows add up fast)
For each entity:
days_elapsed = AS_OF - CAP_PERIOD_START + 1
days_in_period = CAP_PERIOD_END - CAP_PERIOD_START + 1
avg_daily = payout_to_date / days_elapsed
projected_end = payout_to_date + avg_daily * (days_in_period - days_elapsed)
projected_pct = round(100 * projected_end / payout_cap_usd, 1)
Flag AT RISK if projected_pct >= 100 (on pace to blow the cap before period end), even if cap_used_pct is under threshold today. Optionally use the last-3-days daily payout instead of the whole-window average if traffic is accelerating (note which basis you used).
===== STEP 4 — Rank + filter =====
Keep entities where cap_used_pct >= ALERT_THRESHOLD OR projected_pct >= 100. Sort by cap_used_pct descending; pin AT RISK pace items near the top.
===== STEP 5 — Output digest (Markdown, ready to paste into Slack/email) =====
Return exactly this shape:
:rotating_light: Cap Alert — CAP_LEVEL entities at/above ALERT_THRESHOLD percent of payout cap
Period CAP_PERIOD_START to CAP_PERIOD_END · as of AS_OF · day days_elapsed/days_in_period
For each qualifying entity, one row:
• NAME (id ID) — CAP_USED_PCT percent used · $PAYOUT_TO_DATE of $PAYOUT_CAP_USD · $DOLLARS_LEFT left
pace to projected PROJECTED_PCT percent by CAP_PERIOD_END [AT RISK — on pace to exceed cap, if projected_pct>=100, else on track]
[sub-line only if invalid_clicks>0: INVALID_CLICKS clicks already rejected by validation (possible cap throttling)]
Footer:
N of TOTAL_CAPPED monitored CAP_LEVEL entities over threshold. Caps are manager-supplied (Everflow does not expose cap config via API). Verify limits in the Everflow UI: Offers, then the offer, then Caps.
If nothing is over threshold and nothing is AT RISK, say so plainly (All TOTAL_CAPPED monitored entities are pacing under ALERT_THRESHOLD percent; highest is NAME at X percent.).
===== DELIVERY + CAVEATS =====
The Everflow MCP is read-only and cannot POST to a Slack webhook. Return the digest as Markdown for me to paste, OR if you also have a Slack/webhook MCP or tool connected, hand the Markdown to that tool. Do not attempt to post via Everflow.
CAP CONFIG CAVEAT: Everflow does not expose payout-cap config via the API/MCP, so you supply the cap values above; the recipe reads only actual period-to-date payout against them. If payout comes back $0 for every capped entity, cap_used_pct is 0.0 and nothing alerts — point this at a network with real payout to see live utilization.Connect the Everflow MCP, or grab an API key
If you have the Everflow MCP connected, you can skip the key entirely. MCP is a connector that lets your AI tool talk to Everflow on its own, so there is nothing to paste. No MCP yet? Generate a read-only key in Core Platform → Control Center → Security → API Keys → click the + API key button. Read-only on Reporting is enough.
Set your alert threshold
Default is 80%: you'll get flagged on any affiliate who has used 80% or more of their current-period cap. Lower it to 70% for earlier warnings; raise it to 90% if you prefer tighter alerts.
Decide your notification channel
The prompt sends a Slack digest by default. Swap in an email address if you'd rather get it in your inbox.
Run the prompt
With MCP connected, just run the prompt as written. On the API tab, first replace {API_KEY}, {NETWORK_ID}, {ALERT_THRESHOLD} (default 0.80), and {SLACK_WEBHOOK_URL}, then run it.
Schedule it daily
Drop the prompt into Make, Zapier, or Google Apps Script and schedule it for 8 AM daily, so your team starts every day knowing where caps stand. Cap proximity moves fastest in the last week of a billing cycle, and a daily cadence catches that window.
80% is the standard starting point. It gives you roughly a week of lead time in a typical billing cycle, depending on your affiliate's send pace. If you run a high-volume program where partners can move from 80% to 100% in 48 hours, drop to 70%. If you prefer fewer alerts on slower partners, raise to 90%.
The prompt calculates each flagged affiliate's current daily average payout and projects it forward to the end of the billing cycle. If the projection exceeds the cap, they're flagged "AT RISK." If they're on track to finish under cap, it shows "On track." It's the difference between a partner at 85% who will coast to 92% by cycle end and a partner at 85% who will hit 100% in two days.
Yes. The guardrail checks for daily_payout_cap specifically. If a daily cap is closer to tripping than the period cap, the recipe flags the daily cap instead and notes it clearly in the output.
Native cap features acknowledged. Per-threshold alerts (50/75/90/100%), auto-deactivation, auto-redirect to fallback offer, in-platform pacing report, and partner-side notifications all exist today. The recipe doesn't replace any of them; it complements them with a cross-program ranked daily digest.
Pace-flag math is net-new. Native pacing shows current consumption. The recipe projects: "At this rate, partner X trips the weekly cap on Thursday." That projection (current pace × days remaining vs cap headroom) is the recipe's calculation, not a native feature.
What this recipe is NOT for: per-affiliate caps you've already wired native alerts on. If you have a Slack notification firing from Everflow native at 75% on Partner Y / Offer Z, you don't need the recipe to repeat it. The recipe earns its keep on programs with 20+ partners where setting up per-cap alerts for every combination isn't realistic.
Drop us the question you wish had a prompt. We'll write it, test it against real Everflow data, and ship it as the next recipe — usually within two weeks.
One Tuesday email. Latest industry news plus new recipes the day they ship. Unsubscribe in one click.
Share what's working with the Everflow API. Our team will reach out about details, timelines, and next steps.