docs

Set up a brand from your assistant

Everything on the Brand tab, plus adding a brand and first-time setup, from Claude Code, any assistant that uses MCP, or the API.

You can do everything the Brand tab does without opening RecruitAffiliates.ai. This page lists each setting, the API operation that changes it, and the MCP tool that does the same job. MCP is the standard an assistant such as Claude Code uses to call our tools. The API and the tools run the same code the app runs. A change from your assistant looks exactly like one made on screen.

A key needs the finder:write scope to change anything, and finder:read to read. Make a key in Settings, API keys. Nothing on this page sends an email.

How a change works

Every tool that changes something answers twice. The first call comes back as a card: one plain sentence saying what will change, what it costs, and a preview_token. Nothing has changed yet.

Your assistant shows you the card. When you agree, it calls again with confirm: true and the token, and the change applies. Change one thing and the token fails.

On the API

The API has no card. Send the change and it applies at once, which is why a key with finder:write should only go to code you trust. Each answer carries an effect, the same sentence the app shows after a save, such as "Saved. Your next weekly search uses these."

What an answer looks like

Every answer from a tool opens with one sentence your assistant can read out. A short list of next steps ends it.

An agent names the brand on every call, so there is no "switch brand" step. Leave it out and the call uses your oldest brand. List your brands with GET /v1/finder/brands or recruit_brands.

Read the settings

WhatAPIMCP tool
Every setting in one readGET /v1/finder/brands/{id}/settingsrecruit_brand
Competitors, with how many matches name eachGET /v1/finder/brands/{id}/competitorsrecruit_competitors
Program page and its gradeGET /v1/finder/brands/{id}/program-pagerecruit_program_page
Goal and progressGET /v1/finder/brands/{id}/goalrecruit_goal
What rivals publish, and what the next lookup would costGET /v1/finder/brands/{id}/rival-termsrecruit_rival_terms
Changes your Not a fit answers madeGET /v1/finder/brands/{id}/changesrecruit_brand_changes

Change a setting

Each row is one job. All of these are free: they use no credits.

SettingAPI (POST)MCP toolWhen it takes effect
Summary, competitors, topics, who you want/v1/finder/brands/{id}recruit_update_brandTargeting re-sorts your matches before the call answers. The rest reaches the next weekly search.
Voice: who you sell to, proof, what to avoid, tone/v1/finder/brands/{id}/voicerecruit_set_voiceThe next email we write.
Sending: daily limit, signature, postal address/v1/finder/brands/{id}/sendingrecruit_set_sendingEvery email from now on.
Revenue: what a customer is worth, conversion/v1/finder/brands/{id}/revenuerecruit_set_revenueThe estimates on your pages.
The offer: rate, length, bonus, discount code/v1/finder/brands/{id}/offerrecruit_set_offerEvery new offer. Unsent drafts are rewritten. People who already said yes keep their terms.
Price and payout schedule/v1/finder/brands/{id}/price-payoutrecruit_set_price_payoutThe next emails.
Signup link/v1/finder/brands/{id}/signup-linkrecruit_set_signup_linkInvites to interested affiliates. Send an empty link to remove it.
Brand name/v1/finder/brands/{id}/namerecruit_rename_brandNew emails, and the name in the app.
Do you run an affiliate program/v1/finder/brands/{id}/programmerecruit_set_programmeWhether sites that link to you count as your affiliates.
What you sell/v1/finder/brands/{id}/business-typerecruit_set_business_typeThe next search.
Time zone/v1/finder/brands/{id}/timezonerecruit_set_timezoneSend windows and the morning email. It applies to every brand on the account.
Use my own website, on a store's sample brand/v1/finder/brands/{id}/own-websiterecruit_use_own_websiteRemoves the sample and its matches. A real brand is never removed.

Put an offer in with structured terms. For 30% for life:

{ "terms": { "rate": { "rate_type": "percent", "rate_bps": 3000 }, "duration": { "kind": "lifetime" } } }

A rate is in basis points: 100 basis points is 1%, so 3000 is 30%.

To preview what strict targeting would hide before you turn it on, use GET /v1/finder/brands/{id}/strict-mode-preview?target_countries=GB,US or recruit_preview_strict_mode. To put back a setting a Not a fit answer changed, use POST /v1/finder/brands/{id}/changes/{change_id}/restore or recruit_restore_change.

Competitors

Add one with a domain and a tier. Direct sells what you sell. Adjacent sells to your buyers. Platform is the affiliate software a rival runs on. You can hold 20 in all: 8 direct, 8 adjacent, 4 platforms.

JobAPIMCP tool
AddPOST /v1/finder/brands/{id}/competitorsrecruit_add_competitor
Remove, by domain or namePOST /v1/finder/brands/{id}/competitors/removerecruit_remove_competitor

A change reaches the next weekly search. Nothing is searched or charged on the spot.

People you already work with

These are your exclusions. A person on the list is never offered to you again, and never emailed.

JobAPIMCP tool
ListGET /v1/finder/exclusionsrecruit_exclusions
Add typed entriesPOST /v1/finder/exclusionsrecruit_add_exclusions
Paste a list: emails, sites, channel links, handlesPOST /v1/finder/exclusions/importrecruit_add_exclusions
Upload a CSVPOST /v1/finder/exclusions/uploadrecruit_add_exclusions
Remove oneDELETE /v1/finder/exclusions/{id}recruit_remove_exclusion
Remove everything you uploadedPOST /v1/finder/exclusions/remove-uploadedrecruit_clear_uploaded_exclusions
Add your AffiliateRail partnersPOST /v1/finder/exclusions/sync-partnersrecruit_sync_partners

Adding the same person twice is safe. Name the platform for a bare @name; we never guess it. A YouTube @handle counts as unresolved, since looking one up costs money. A Do not contact mark can't be removed this way, on purpose.

Program page, goal and brand

JobAPIMCP tool
Save the public program pagePOST /v1/finder/brands/{id}/program-pagerecruit_set_program_page
Set a goal, such as 5 new partners this monthPOST /v1/finder/brands/{id}/goalrecruit_set_goal
Clear the goalDELETE /v1/finder/brands/{id}/goalrecruit_clear_goal
Add another brandPOST /v1/finder/brandsrecruit_add_brand

Adding a brand copies the offer, targeting and voice of the brand you copy from, and starts its first search. Your plan sets how many brands you can have. At the limit the call is refused with brand_limit and nothing is written.

First-time setup

One call takes a blank account to a brand with its first search running. Give the domain and country, what it does, its competitors or topics, and the offer.

JobAPIMCP tool
See which setup steps are doneGET /v1/finder/setuprecruit_setup_guide
Set up, or fill in what is missingPOST /v1/finder/setuprecruit_setup_brand
Read the site and suggest competitorsPOST /v1/finder/brands/{id}/researchrecruit_research_brand

Send "dry_run": true to the API to see what a setup call would change without changing anything. Setup starts the first search once there is a competitor or topic to look for. The first search uses no credits.

Two calls spend our money, not your credits. Neither touches your credit balance. Each says the cost first.

  • Rival search terms (POST /v1/finder/brands/{id}/rival-terms, recruit_find_rival_terms). Reads each rival's affiliate program page so you can compare terms. With the lookup switched on, it also runs one Google search per rival, which costs up to a fraction of a cent each. The card, or the quote on the API's read, shows the most it can cost. The API refuses to run unless you send confirm_cost_cents at or above that quote.
  • Read the site (POST /v1/finder/brands/{id}/research, recruit_research_brand). Uses part of your trial's site-reading allowance, and a brand gets three runs.

Errors

CodeMeaningWhat to do
resource_missing (404)The brand, exclusion or change isn't on your account.List them and use an id from the list.
brand_limit (402)Your plan runs this many brands.Remove one, or change plan in the app.
quote_changed (409)The lookup's cost moved since you read it.Read the quote again and confirm the new number.
exclusion_protected (403)A Do not contact mark can't be removed this way.Leave it. It protects someone who asked not to be written to.
research_unavailable (409)Site reading isn't set up on this deployment.Fill the card in with POST /v1/finder/setup.
sandbox_real_row (403)A test key only changes sample data.Use a live key.

Was this page helpful?