> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create coupon

> Create a percentage or fixed-amount discount coupon, with validity dates and per-branch scope.

<ParamField path="app_id" type="string" required>
  Your store ID in Jelou Shop.
</ParamField>

<ParamField body="code" type="string" required>
  Code the customer enters at checkout (max. 255 characters).
</ParamField>

<ParamField body="name" type="string" required>
  Internal coupon name (max. 255 characters).
</ParamField>

<ParamField body="description" type="string">
  Optional coupon description (max. 1000 characters).
</ParamField>

<ParamField body="discount_type" type="string" required>
  Discount type. Values: `percentage` or `value` (fixed amount).
</ParamField>

<ParamField body="discount_value" type="number" required>
  Discount value. For `percentage` it is a value between `0` and `100`; for `value` it is a fixed amount in the store currency.
</ParamField>

<ParamField body="status" type="boolean" default="true">
  Whether the coupon is active. An inactive coupon cannot be applied.
</ParamField>

<ParamField body="valid_from" type="string">
  Validity start date/time (ISO 8601). If omitted, the coupon is valid from creation.
</ParamField>

<ParamField body="valid_until" type="string">
  Validity end date/time (ISO 8601). Must be equal to or later than `valid_from`. If omitted, it never expires.
</ParamField>

<ParamField body="max_uses" type="integer">
  Total usage limit for the coupon (minimum `1`). If omitted, usage is unlimited.
</ParamField>

<ParamField body="once_per_client" type="boolean" default="false">
  If `true`, each customer can use the coupon only once.
</ParamField>

<ParamField body="applies_to_all_branches" type="boolean" default="false">
  If `true`, the coupon applies to all branches and `branches` is ignored. If `false`, it only applies to the branches listed in `branches`.
</ParamField>

<ParamField body="branches" type="object[]">
  Branches where the coupon applies (only when `applies_to_all_branches` is `false`).

  <Expandable title="Properties of each branch">
    <ParamField body="id" type="string" required>
      Branch UUID. Must belong to the same store.
    </ParamField>

    <ParamField body="max_uses" type="integer">
      Usage limit for the coupon in that branch (minimum `1`). If omitted, it is unlimited in that branch.
    </ParamField>

    <ParamField body="status" type="boolean" default="true">
      Whether the coupon is active in that branch.
    </ParamField>
  </Expandable>
</ParamField>

<Note>
  The `code` must be unique within its branch scope. You cannot create two coupons with the same code if they share a branch (or if either applies to all branches). A `percentage` discount cannot exceed `100`.
</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://gateway.jelou.ai/ecommerce/v2/apps/{app_id}/coupons" \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "code": "BLACKFRIDAY25",
      "name": "Black Friday 25%",
      "description": "25% off the entire store",
      "discount_type": "percentage",
      "discount_value": 25,
      "status": true,
      "valid_from": "2026-11-25T00:00:00Z",
      "valid_until": "2026-11-30T23:59:59Z",
      "max_uses": 100,
      "once_per_client": true,
      "applies_to_all_branches": true
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 201 Created theme={null}
  {
    "data": {
      "id": "9e3f2c1a-8b7d-4e6f-a5c4-d3b2a1e0f9c8",
      "app_id": "1c2d3e4f-5a6b-7c8d-9e0f-1a2b3c4d5e6f",
      "code": "BLACKFRIDAY25",
      "name": "Black Friday 25%",
      "description": "25% off the entire store",
      "discount_type": "percentage",
      "discount_value": "25.000000",
      "status": true,
      "valid_from": "2026-11-25T00:00:00.000000Z",
      "valid_until": "2026-11-30T23:59:59.000000Z",
      "max_uses": 100,
      "once_per_client": true,
      "applies_to_all_branches": true,
      "state": "scheduled",
      "created_at": "2026-07-02T15:30:00.000000Z",
      "updated_at": "2026-07-02T15:30:00.000000Z"
    }
  }
  ```
</ResponseExample>

<Tip>
  **Per-branch coupon:** send `applies_to_all_branches: false` and a `branches` list. Each branch can have its own `max_uses` and `status`.

  ```json theme={null}
  {
    "code": "CENTRO20",
    "name": "Downtown 20%",
    "discount_type": "percentage",
    "discount_value": 20,
    "applies_to_all_branches": false,
    "branches": [
      { "id": "1a2b3c4d-...", "max_uses": 50, "status": true }
    ]
  }
  ```
</Tip>
