---
title: "Update offer"
method: POST
path: "/api/v1/tools/update_offer"
tags: ["default"]
---

# Update offer

`POST /api/v1/tools/update_offer`

## Request

- Base URL: `https://www.affiliatespy.io`
- URL: `https://www.affiliatespy.io/api/v1/tools/update_offer`
- Auth: HTTP bearer

Change any of the project's offer fields (App settings, Your offer); fields you leave out keep their value. Strings: empty clears. Numbers: null clears. Saved through the same validation as the dashboard. Applies to the next email. Returns the stored offer.

## Request body

- object
  - `app_id` string, uuid: Project id from list_apps. Omit to use your most recently added project.
  - `brand_name` string: How the brand is named in every email.
  - `sender_name` string: Signs the emails. A person, not a mailbox name like affiliate.
  - `commission` string: One clause, e.g. "30% recurring commission with a 45-day cookie".
  - `signup_url` string: Affiliate signup link, sent in replies to sites that say yes, never in a first email.
  - `cookie_days` integer, nullable: How long a referred click stays yours.
  - `payout_notes` string: Payout timing, minimums and details the AI may quote in replies.
  - `assets_url` string: Banners and promo material, shared in replies.
  - `postal_address` string: Business postal address, required before live cold email.
  - `lead_with_rate` boolean: false: step 1 of the website lanes does not state the rate.
  - `ladder_start` number, nullable: Rate (%) the first offer makes. null: the commission line as written.
  - `ladder_step` number, nullable: Added (%) at each raise while a site does not reply, in the same thread.
  - `ladder_max` number, nullable: Highest rate (%); the last raise always offers it.
  - `nudge_days` integer, nullable: Days after the first email that the offer follows, in the same thread. Default 4.
  - `raise_every_days` integer, nullable: Days between raises, counted from the first email. Default 14.
  - `boost_points` number, nullable: Launch boost (%) added for a new affiliate's first boost_days days.
  - `boost_days` integer, nullable: How long the launch boost lasts.
  - `boost_everyone` boolean: Every affiliate who joins from now on gets the launch boost, not only sites you pitched. The server records when it was first turned on.
  - `market_rate` number, nullable: A re-pitch may say other programs pay up to this (%), never naming one.
  - `placement_deals` boolean: Accept paid placements as a last resort: the sequence's last step asks what a top spot costs.
  - `stats_window_hours` integer, nullable: Hours of recent conversions the program figures cover. Default 72.
  - `confirm` boolean: Set true after the user confirmed an action the guard flagged as hard to undo.

## Response `200`

The tool's JSON result (same payload the MCP tool returns).

- unknown

## Other responses

- `400`: Arguments failed validation; body lists the issues.
- `401`: Missing or invalid API key.
- `403`: Guarded tool with Unrestricted MCP off.
- `429`: Rate limited (60 requests per minute per key).

---

[API](https://skmtc.dev/affiliatespy/apis/affiliatespy-api.md) · [All operations](https://skmtc.dev/affiliatespy/apis/affiliatespy-api/llms.txt) · [OpenAPI document](https://skmtc.dev/affiliatespy/apis/affiliatespy-api/revisions/0300d370b356?raw)
