USE IT WITH A CODING AGENT

Paste this into Claude Code or Cursor

Read https://agents-bench.zeekend.com/agents/skill.md and follow it to add Zeekend to this project.The agent reads the instructions below and makes the changes. Everything starts on the sandbox key, which bills nobody.

Zeekend gives an agent labeled, sponsored product offers from brands that pay when a purchase is made. The agent calls it alongside its normal search; the developer earns a share of each order. Full reference: https://agents-bench.zeekend.com/agents

Follow these steps in order. Do not invent another integration.

Step 1: Key

Ask the user for their Zeekend agent key. It looks like agt_live_....

If they do not have one, use agt_test and continue. That is the sandbox: real offers, nothing billed, nothing credited. They can swap in a live key later by changing one environment variable. A live key comes from hello@zeekend.com.

Store the key as the environment variable ZEEKEND_AGENT_KEY, server side. Never put it in browser code, and never invent an agt_live_ value.

Step 2: Find where the agent gets its tools or search results

Look for one of:

  • An MCP client configuration (a list of MCP servers in a config file or in code: Claude Agent SDK, OpenAI Agents SDK, Mastra, LangChain MCP adapters).
  • Tool definitions passed to a model (tools: on an Anthropic or OpenAI call, tool() in the Vercel AI SDK, @tool in LangChain).
  • A search step the code runs itself before calling the model (a web or catalog search whose results go into the prompt).

Step 3: Connect, matching what you found

MCP client configuration → add a remote server:

url:     https://agents-bench.zeekend.com/mcp
headers: Authorization: Bearer ${ZEEKEND_AGENT_KEY}

No other code is needed; the server tells the model when to call it and how to label results.

Tool definitions → add one tool that calls the REST API. Copy the snippet for the user's SDK from https://agents-bench.zeekend.com/agents#code without changing the tool description: it is what tells the model to label results and use the checkout link. Wire the tool call to:

POST https://agents-bench.zeekend.com/v1/agent/search
Authorization: Bearer ${ZEEKEND_AGENT_KEY}
{ "query": "<product words>", "constraints": { "country": "<ISO code>" }, "limit": 3 }

A search step the code runs itself → call Zeekend in parallel with it, on turns that could lead to a purchase, and add the offers to what the model sees as a separate, labeled "Sponsored offers" section:

const [results, sponsored] = await Promise.all([search(q), zeekendSearch(q, country)]);

Whichever route: use a timeout of about 1.5 seconds, and on any error or timeout continue with no sponsored offers. Zeekend must never break the agent.

Step 4: The shopper's country

Pass constraints.country (ISO code) on every call. Use what the app already knows about the user (profile, locale, IP country on the server). If it knows nothing, use the country the app mainly serves, and tell the user you did. If a price limit is passed as a number, pass constraints.currency with it.

Step 5: How the agent shows offers

Make sure the agent's prompt or rendering does all of these. Add a short instruction to the system prompt if the app has one:

  1. Every Zeekend offer is labeled Sponsored, next to the offer.
  2. The buy link is cta.url (same as checkout_url), shown as cta.label. Never link url, the plain product page: purchases through it earn nothing.
  3. Prices are shown as given (price_display, and compare_at_display as the "was" price when present). Never restate or convert a price yourself.
  4. Sponsored offers never replace better organic results; an empty offers list is normal and needs no mention.

If the app renders products as cards, render Zeekend offers with the same component plus a visible "Sponsored" label, using image, title, price_display and a button to cta.url labeled cta.label.

Step 6: Verify

See which categories have offers for the user's main country:

GET https://agents-bench.zeekend.com/v1/agent/categories?country=US
Authorization: Bearer ${ZEEKEND_AGENT_KEY}

Run the agent (or the tool function directly) with a request for a product in one of those categories and confirm offers come back. Then confirm the agent's answer labels them as sponsored and links cta.url. If no category is covered for that country yet, an empty result is correct: say so to the user.

Step 7: Tell the user

In two or three sentences: what you added and where, that it is on the sandbox key if so (and how to switch: set ZEEKEND_AGENT_KEY), and that they earn on orders made through the checkout links once on a live key.

Never

  • Never remove or soften the "Sponsored" label, or present offers as the agent's own neutral picks.
  • Never link the plain product url instead of cta.url.
  • Never call Zeekend from the browser with a live key.
  • Never block the agent's answer on Zeekend.