# Discounts tools

> MCP tools for discounts: what each does, the key level it needs, the operation it runs and its input schema. Part of the MISSIN public API: call it with an…

An operation tool runs one API operation and takes its variables, so the operation's page says what each accepts. Two differences: the server fills in `workspaceId` and `updatedBy`, and `campaignId`, `partnerId`, `formId`, `discountCodeId`, `socialNetworkId`, `waitlistId`, `incentiveId`, `channelId` also take the record's name. A task tool chains several operations and is described here in full. Every tool's input schema, keyed by tool name: [discounts.schema.json](https://developer.missin.co.uk/mcp/tools/discounts.schema.json).

> **Warning:**
> Destructive: `bulk_remove_tag_from_workspace_discounts`, `delete_discount_code`, `remove_discount_placement`. An agent must say what it will change and wait for the merchant's yes before calling one.

## Task tools

### `save_discount_code`

**Access:** Write · **Kind:** task · **Toolset:** `core` · **Hints:** idempotent

Create a discount code, or update the one with this code or id. Updating takes only the fields to change; creating needs the whole body (code, title, aliased_codes, value_kind percent|amount with value_percent/value_amount, usage_limit, start_at, ends_at, status — null where there is none), and a missing field comes back as an error before anything is written. Makes one write, so it is all-or-nothing. Returns \{ id, created \}.

Try: “Make a 15% code SPRING15 that ends on 31 May.”

### Input schema

Input schema for `save_discount_code` (JSON, under the key "save_discount_code"): https://developer.missin.co.uk/mcp/tools/discounts.schema.json

## Operation tools

| Tool | Operation | Access | Toolset | Hints | What it does |
|---|---|---|---|---|---|
| `add_discount_placements` | [AddDiscountPlacements](https://developer.missin.co.uk/reference/discounts/add-discount-placements.md) | Write | `discounts` |  | Place discount codes on a store or email connection; the codes are pushed to the provider. |
| `bulk_remove_tag_from_workspace_discounts` | [BulkRemoveTagFromWorkspaceDiscounts](https://developer.missin.co.uk/reference/discounts/bulk-remove-tag-from-workspace-discounts.md) | Write | `discounts` | destructive | Remove a tag from every discount code in the workspace. Irreversible. |
| `bulk_rename_tag_across_workspace_discounts` | [BulkRenameTagAcrossWorkspaceDiscounts](https://developer.missin.co.uk/reference/discounts/bulk-rename-tag-across-workspace-discounts.md) | Write | `discounts` |  | Rename a tag on every discount code in the workspace. |
| `bulk_sync_discount_codes` | [BulkSyncDiscountCodes](https://developer.missin.co.uk/reference/discounts/bulk-sync-discount-codes.md) | Write | `discounts` |  | Re-push the selected discount codes to their providers. |
| `bulk_update_discount_code_status` | [BulkUpdateDiscountCodeStatus](https://developer.missin.co.uk/reference/discounts/bulk-update-discount-code-status.md) | Write | `discounts` |  | Set the status of many discount codes at once; each code is clamped to what it allows. |
| `create_discount_code` | [CreateDiscountCode](https://developer.missin.co.uk/reference/discounts/create-discount-code.md) | Write | `discounts` |  | Create a discount code and, with connectionId, place it on that store. |
| `delete_discount_code` | [DeleteDiscountCode](https://developer.missin.co.uk/reference/discounts/delete-discount-code.md) | Write | `discounts` | destructive | Delete a discount code here and at its providers. Irreversible. |
| `get_discount_campaigns` | [DiscountCampaigns](https://developer.missin.co.uk/reference/discounts/discount-campaigns.md) | Read | `discounts` | read-only, idempotent | List the campaigns a discount code is linked to. |
| `get_discount_changes` | [DiscountChanges](https://developer.missin.co.uk/reference/discounts/discount-changes.md) | Read | `discounts` | read-only, idempotent | Page through a discount code's change history and provider sync state. |
| `get_discount_code_alias_exists` | [DiscountCodeAliasExists](https://developer.missin.co.uk/reference/discounts/discount-code-alias-exists.md) | Read | `discounts` | read-only, idempotent | Check whether codes are already used as a code or alias in this workspace. |
| `get_discount_code_form_responses` | [DiscountCodeFormResponses](https://developer.missin.co.uk/reference/discounts/discount-code-form-responses.md) | Read | `discounts` | read-only, idempotent | Form responses that used one discount code. |
| `get_discount_code_orders` | [DiscountCodeOrders](https://developer.missin.co.uk/reference/discounts/discount-code-orders.md) | Read | `discounts` | read-only, idempotent | Page through orders that used one discount code, with revenue totals. |
| `get_discount_code_order_series` | [DiscountCodeOrderSeries](https://developer.missin.co.uk/reference/discounts/discount-code-order-series.md) | Read | `discounts` | read-only, idempotent | Daily order count and revenue series for one discount code. |
| `get_discount_code_partners` | [DiscountCodePartners](https://developer.missin.co.uk/reference/discounts/discount-code-partners.md) | Read | `discounts` | read-only, idempotent | The partner one discount code belongs to. |
| `get_discount_code_response_series` | [DiscountCodeResponseSeries](https://developer.missin.co.uk/reference/discounts/discount-code-response-series.md) | Read | `discounts` | read-only, idempotent | Daily form-response series for one discount code, total and attributed. |
| `get_discount_codes_aggregates_filtered` | [DiscountCodesAggregatesFiltered](https://developer.missin.co.uk/reference/discounts/discount-codes-aggregates-filtered.md) | Read | `discounts` | read-only, idempotent | Totals across the discount codes matching a filter: count, usage and value. |
| `list_discount_codes` | [DiscountCodesList](https://developer.missin.co.uk/reference/discounts/discount-codes-list.md) | Read | `core` | read-only, idempotent | List discount codes with filter, sort and offset paging: code, value, status, usage and tags. Totals and detail are off unless requested: set withTotal to true to include them. |
| `get_discount_code_tag_facets` | [DiscountCodeTagFacets](https://developer.missin.co.uk/reference/discounts/discount-code-tag-facets.md) | Read | `discounts` | read-only, idempotent | List discount tags with their colour and usage count. |
| `get_discount` | [DiscountDetail](https://developer.missin.co.uk/reference/discounts/discount-detail.md) | Read | `core` | read-only, idempotent | Get one discount code by id with orders, revenue, partner, placements and incentive rules. |
| `get_discount_placements_by_code` | [DiscountPlacementsByCode](https://developer.missin.co.uk/reference/discounts/discount-placements-by-code.md) | Read | `discounts` | read-only, idempotent | List where one discount code is placed (store, email platform) and each placement's sync state. |
| `get_discount_placement_targets` | [DiscountPlacementTargets](https://developer.missin.co.uk/reference/discounts/discount-placement-targets.md) | Read | `discounts` | read-only, idempotent | List the products and collections a discount code's placements target. |
| `remove_discount_placement` | [RemoveDiscountPlacement](https://developer.missin.co.uk/reference/discounts/remove-discount-placement.md) | Write | `discounts` | destructive | Remove a discount placement and delete it at the provider. Irreversible. |
| `resync_discount_placement` | [ResyncDiscountPlacement](https://developer.missin.co.uk/reference/discounts/resync-discount-placement.md) | Write | `discounts` |  | Re-queue a discount placement's push to its provider. |
| `search_placement_targets` | [SearchPlacementTargets](https://developer.missin.co.uk/reference/discounts/search-placement-targets.md) | Read | `discounts` | read-only, idempotent | Search a store connection's products or collections to target with a discount. |
| `set_discount_tag_color` | [SetDiscountTagColor](https://developer.missin.co.uk/reference/discounts/set-discount-tag-color.md) | Write | `discounts` | idempotent | Set a discount tag's colour. |
| `set_placement_targets` | [SetPlacementTargets](https://developer.missin.co.uk/reference/discounts/set-placement-targets.md) | Write | `discounts` | idempotent | Replace the products and collections a discount placement targets. |
| `sync_all_discount_codes` | [SyncAllDiscountCodes](https://developer.missin.co.uk/reference/discounts/sync-all-discount-codes.md) | Write | `discounts` |  | Re-push every discount code to its providers. |
| `update_discount_code` | [UpdateDiscountCode](https://developer.missin.co.uk/reference/discounts/update-discount-code.md) | Write | `discounts` |  | Update a discount code and push the change to its placements. |
| `update_discount_placement_child` | [UpdateDiscountPlacementChild](https://developer.missin.co.uk/reference/discounts/update-discount-placement-child.md) | Write | `discounts` |  | Edit the provider-specific fields of one discount placement. |
| `withdraw_discount_placement` | [WithdrawDiscountPlacement](https://developer.missin.co.uk/reference/discounts/withdraw-discount-placement.md) | Write | `discounts` |  | Withdraw a discount placement without deleting the code. |

Source: https://developer.missin.co.uk/mcp/tools/discounts
