# Redeem a coupon

Redeems a coupon.

Endpoint: POST /coupons-redemptions
Version: latest
Security: SecretApiKey, JWT, ApplicationJWT

## Request fields (application/json):

  - `couponId` (string)
    ID of the coupon.
    Example: "cpn_0YVCNKF81GD778N4YNVGDJK558"

  - `customerId` (string)
    ID of the customer resource.

  - `additionalRestrictions` (array) — one of (discriminator: type):
    Additional coupon redemption restrictions.
    - discounts-per-redemption:
      - `type` (string, required)
        Type of coupon restriction.
        Enum: "discounts-per-redemption"
      - `quantity` (integer, required)
        Permitted number of discounts per redemption.
    - maximum-order-amount:
      - `type` (string, required)
        Type of coupon restriction.
        Enum: "maximum-order-amount"
      - `amount` (number, required)
        Maximum order amount that is allowed to apply the coupon.
      - `currency` (string, required)
        Currency code in ISO 4217 format.
    - minimum-order-amount:
      - `type` (string, required)
        Type of coupon restriction.
        Enum: "minimum-order-amount"
      - `amount` (number, required)
        Minimum order quantity that is required to apply the coupon.
      - `currency` (string, required)
        Currency code in ISO 4217 format.
    - paid-by-time:
      - `type` (string, required)
        Type of coupon restriction.
        Enum: "paid-by-time"
      - `time` (string, required)
        Date and time when a coupon redemption is no longer valid, and the coupon is removed from unpaid invoices if applied.

> Note: This date-time cannot be changed.
    - restrict-to-invoices:
      - `type` (string, required)
        Type of coupon restriction.
        Enum: "restrict-to-invoices"
      - `invoiceIds` (array, required)
        Invoice IDs on which a coupon can be applied.
    - restrict-to-plans:
      - `type` (string, required)
        Type of coupon restriction.
        Enum: "restrict-to-plans"
      - `planIds` (array, required)
        Plan IDs on which a coupon can be applied.
      - `minimumQuantity` (integer)
        Minimum quantity that is required to apply the restriction and subsequent discount.
    - restrict-to-products:
      - `type` (string, required)
        Type of coupon restriction.
        Enum: "restrict-to-products"
      - `productIds` (array, required)
        Product IDs on which a coupon can be applied.
      - `minimumQuantity` (integer)
        Minimum quantity that is required to apply the restriction and subsequent discount.
    - restrict-to-subscriptions:
      - `type` (string, required)
        Type of coupon restriction.
        Enum: "restrict-to-subscriptions"
      - `subscriptionIds` (array, required)
        Subscription IDs on which a coupon can be applied.

## Response 401 fields (application/json):

  - `status` (integer)
    HTTP status code.

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

## Response 403 fields (application/json):

  - `status` (integer)
    HTTP status code.

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

## Response 422 fields (application/json):

  - `status` (integer)
    HTTP status code.

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

  - `invalidFields` (array)
    Invalid field details.

  - `invalidFields.field` (string)
    Name of the field.
Dot notation is used for nested object field names.

  - `invalidFields.message` (string)
    Message field.

## Response 429 fields (application/json):

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".
    Example: "about:blank"

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.
    Example: "Rate Limit Exceeded"

  - `status` (integer)
    HTTP status code.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.
    Example: "A request cannot be executed because the user has sent too many requests within a certain period of time"

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.


