import { Table } from "docs-ui"

export const metadata = {
  title: `Application Method`,
}

# {metadata.title}

In this guide, you'll learn what an application method is in the Promotion Module.

## What is an Application Method?

The [ApplicationMethod data model](/references/promotion/models/ApplicationMethod) defines how a promotion is applied. It has the following properties that determine its behavior:

<Table>
  <Table.Header>
    <Table.Row>
      <Table.HeaderCell>
      
      Property
      
      </Table.HeaderCell>
      <Table.HeaderCell>
      
      Purpose
      
      </Table.HeaderCell>
      <Table.HeaderCell>
      
      Possible Values
      
      </Table.HeaderCell>
    </Table.Row>
  </Table.Header>
  <Table.Body>
    <Table.Row>
      <Table.Cell>

      `type`

      </Table.Cell>
      <Table.Cell>

      Does the promotion discount a fixed amount or a percentage?

      </Table.Cell>
      <Table.Cell>

      `fixed`, `percentage`

      </Table.Cell>
    </Table.Row>
    <Table.Row>
      <Table.Cell>

      `target_type`

      </Table.Cell>
      <Table.Cell>

      Is the promotion applied to a cart item, shipping method, or the entire order?

      </Table.Cell>
      <Table.Cell>

      `items`, `shipping_methods`, `order`

      </Table.Cell>
    </Table.Row>
    <Table.Row>
      <Table.Cell>

      `allocation`

      </Table.Cell>
      <Table.Cell>

      Is the discounted amount applied to each item or split between the applicable items?

      </Table.Cell>
      <Table.Cell>

      `each`, `across`

      </Table.Cell>
    </Table.Row>
  </Table.Body>
</Table>

## Target Promotion Rules

When the promotion is applied to a cart item or a shipping method (in other words, when `target_type` is `items` or `shipping_methods`), you can restrict which items/shipping methods the promotion is applied to.

The `ApplicationMethod` data model has a collection of [PromotionRule](/references/promotion/models/PromotionRule) records to restrict which items or shipping methods the promotion applies to. The `target_rules` property in the `ApplicationMethod` represents this relation.

![A diagram showcasing the target_rules relation between the ApplicationMethod and PromotionRule data models](https://res.cloudinary.com/dza7lstvk/image/upload/v1709898273/Medusa%20Resources/application-method-target-rules_hqaymz.jpg)

In this example, the promotion is only applied to product variants in the cart that have the SKU `SHIRT`.

---

## Buy Promotion Rules

When the promotion’s type is `buyget`, you must specify the “buy X” condition. For example, a cart must have two shirts before the promotion can be applied.

The application method has a collection of `PromotionRule` items to define the “buy X” rule. The `buy_rules` property in the `ApplicationMethod` represents this relation.

![A diagram showcasing the buy_rules relation between the ApplicationMethod and PromotionRule data models](https://res.cloudinary.com/dza7lstvk/image/upload/v1709898453/Medusa%20Resources/application-method-buy-rules_djjuhw.jpg)

In this example, the cart must have two product variants with the SKU `SHIRT` for the promotion to be applied.