# validate_promotion

Check if a promotion code is valid for a given order. Returns isValid, discount amount, and an error code/message if invalid. Use before applying to a checkout.

Agent View of the PolicyLayer registry record for `validate_promotion`. HTML page: https://policylayer.com/tools/io-favcrm-favcrm/validate-promotion

## Facts

- Tool: `validate_promotion`
- Server: FavCRM (`https://api.favcrm.io/mcp`) — https://policylayer.com/tools/io-favcrm-favcrm.md
- Homepage: https://github.com/favcrm/mcp
- Risk category: Read (Low risk)
- Registry record: grade F, identity unverified
- Server auth posture: open
- Server CORS policy: *
- Server rate-limited: no
- Parameters: 4 (3 required)
- Recommended policy verdict: Allowed

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `amount` | number | yes | Order subtotal in major units (dollars, not cents) |
| `channel` | string | yes | Where the promo is being applied |
| `accountId` | string | no | Customer account ID — used for per-customer usage limits |
| `promotionCode` | string | yes | The code customer entered |

Parameters from the server's own tool schema.

## Example call (MCP tools/call, JSON-RPC 2.0)

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "validate_promotion",
    "arguments": {
      "amount": 0,
      "channel": "<channel>",
      "promotionCode": "<promotionCode>"
    }
  }
}
```

## Why validate_promotion is rated Low

This tool queries the validity of a promotion code and returns information about it without creating, modifying, deleting, or executing any operations. It is purely a read operation used for validation before checkout. No financial transaction occurs until after checkout (if at all), and the tool itself does not move money or commit financial obligations—it merely validates eligibility.

From the tool's own definition: "Tool description states it 'Check[s] if a promotion code is valid' and 'Returns isValid, discount amount, and an error code/message if invalid.' The verb 'check' and 'returns' indicate data retrieval with no modification or side effects."

## Use case

AI agents call validate_promotion to retrieve information from FavCRM without modifying anything. It is typically the context-gathering step in research, monitoring, and reporting workflows, before the agent takes action elsewhere.

## Recommended policy (PolicyLayer)

Verdict: **Allowed**. Enforced by the PolicyLayer MCP gateway (https://policylayer.com/mcp-gateway) before a call reaches FavCRM:

```json
{
  "version": "1",
  "default": "deny",
  "tools": {
    "validate_promotion": {}
  }
}
```

## Other tools on FavCRM (219)

- `cancel_booking` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/cancel-booking.md
- `delete_account` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-account.md
- `delete_campaign` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-campaign.md
- `delete_category` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-category.md
- `delete_contact` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-contact.md
- `delete_custom_field` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-custom-field.md
- `delete_deal` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-deal.md
- `delete_invoice` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-invoice.md
- `delete_knowledge_document` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-knowledge-document.md
- `delete_post` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-post.md
- `delete_post_type` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-post-type.md
- `delete_post_type_field` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-post-type-field.md
- `delete_promotion` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-promotion.md
- `delete_segment` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-segment.md
- `delete_service_package` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-service-package.md
- `delete_tag` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-tag.md
- `delete_task` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/delete-task.md
- `remove_post_block` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/remove-post-block.md
- `void_invoice` — Destructive — https://policylayer.com/tools/io-favcrm-favcrm/void-invoice.md
- `execute_tool` — Execute — https://policylayer.com/tools/io-favcrm-favcrm/execute-tool.md
- `switch_company` — Execute — https://policylayer.com/tools/io-favcrm-favcrm/switch-company.md
- `cancel_subscription` — Financial — https://policylayer.com/tools/io-favcrm-favcrm/cancel-subscription.md
- `create_plan_upgrade_link` — Financial — https://policylayer.com/tools/io-favcrm-favcrm/create-plan-upgrade-link.md
- `create_subscription` — Financial — https://policylayer.com/tools/io-favcrm-favcrm/create-subscription.md
- `enrol_membership` — Financial — https://policylayer.com/tools/io-favcrm-favcrm/enrol-membership.md
- `record_invoice_payment` — Financial — https://policylayer.com/tools/io-favcrm-favcrm/record-invoice-payment.md
- `check_plan_operation` — Read — https://policylayer.com/tools/io-favcrm-favcrm/check-plan-operation.md
- `get_attachment_text` — Read — https://policylayer.com/tools/io-favcrm-favcrm/get-attachment-text.md
- `get_audit_log` — Read — https://policylayer.com/tools/io-favcrm-favcrm/get-audit-log.md
- `get_available_slots` — Read — https://policylayer.com/tools/io-favcrm-favcrm/get-available-slots.md
- …and 189 more: https://policylayer.com/tools/io-favcrm-favcrm.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=io-favcrm-favcrm · API: https://policylayer.com/registry/api · Policy library: https://policylayer.com/policies/io-favcrm-favcrm
