> ## Documentation Index
> Fetch the complete documentation index at: https://moengage-docs-limits-messaging.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload a Coupon File to the Coupon List

> After you create a coupon list, you must add coupons to the list to be distributed through campaigns. If a coupon list has been running for some time, it may be running low after serving several campaigns.

Using this API, you can replenish an older list or populate a new list by providing the URL of a file containing the coupons, thereby enabling their distribution through various campaigns. These coupons can be provided through a file, and the API requires the URL where your coupon file is hosted.


<Note>
  **Information**

  Upon API request, file processing begins, and the file status will be **PENDING** by default.

  * For convenience, you can set up a callback URL to trigger when the file's processing is completed.
  * You can check the processing status using the [Fetch a Coupon File API](https://www.moengage.com/docs/api/coupon-files/fetch-a-coupon-file-from-coupon-list) to get the status separately.
</Note>

#### Rate Limit

You can upload:

* 5 coupon files to a coupon list per minute or
* 50 coupon files to a coupon list per day

**Note:**

* **Payload size limit**: 64 MB for manual uploads or 100 MB for URL uploads.
* **Additional limits**: The maximum number of coupons per coupon list is 100 million.


## OpenAPI

````yaml /api/coupons/coupons.yaml post /coupon-list/{coupon_list_id}/files
openapi: 3.0.3
info:
  title: Coupon List API 🏷️
  description: >
    API for managing coupon lists within the MoEngage system. This includes
    creating, fetching, updating, activating, archiving lists, uploading coupon
    files, managing files, and generating usage reports.

    Authentication is via Basic Auth using your **Workspace ID** as username and
    an **API Key** as password.
  version: '1.0'
servers:
  - url: https://api-{dc}.moengage.com/v1
    description: >-
      The MoEngage Coupon Management API endpoint. The **X** in the URL is
      replaced by the data center number (e.g., 01, 02, 03).
    variables:
      dc:
        default: '01'
        description: >-
          The ‘dc’ in the API Endpoint URL refers to the MoEngage Data Center
          (DC). MoEngage hosts each customer in a different DC. You can find
          your DC number and replace the value of ‘dc’ in the URL by referring
          to the DC and API endpoint mapping
          [here](/api/introduction#data-centers). Your MoEngage Data Center (DC)
          can be 01, 02, 03, 04, 05, 06, or 101.
security:
  - basicAuth: []
tags:
  - name: Coupon Lists
    description: >-
      Operations related to defining, managing status (active/archive), and
      modifying coupon list metadata.
  - name: Coupon Files
    description: >-
      Operations related to uploading coupon codes via files and
      checking/managing file processing status.
  - name: Reports
    description: Operations related to generating usage reports for coupon lists.
paths:
  /coupon-list/{coupon_list_id}/files:
    post:
      tags:
        - Coupon Files
      summary: Upload a Coupon File to the Coupon List
      description: >
        After you create a coupon list, you must add coupons to the list to be
        distributed through campaigns. If a coupon list has been running for
        some time, it may be running low after serving several campaigns.


        Using this API, you can replenish an older list or populate a new list
        by providing the URL of a file containing the coupons, thereby enabling
        their distribution through various campaigns. These coupons can be
        provided through a file, and the API requires the URL where your coupon
        file is hosted.
      operationId: uploadCouponFile
      parameters:
        - $ref: '#/components/parameters/AppKeyHeader'
        - $ref: '#/components/parameters/CouponListIdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadCouponFileRequest'
              properties:
                name:
                  description: This field consists of the file name of the coupon list.
                file_url:
                  description: This field consists of the file path of the coupon list.
                file_url_auth_username:
                  type: string
                  description: This field consists of the coupon file username.
                file_url_auth_password:
                  type: string
                  description: This field consists of the coupon file password.
                created_by:
                  description: >-
                    This field consists of the name of the subscriber who
                    uploaded the coupon file.
                callback_url:
                  description: This field consists of the coupon file callback URL.
            examples: {}
      responses:
        '201':
          description: >
            Success

            The request was successful, and the coupon URL upload request was
            accepted.


            **Note**: The status of the URL upload is always PENDING.
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    description: This field contains the coupon file name.
                  file_url:
                    type: string
                    description: This field consists of the file path of the coupon list.
                  created_by:
                    type: string
                    description: >-
                      This field consists of the name of the subscriber who
                      uploaded the coupon file.
                  status:
                    type: string
                    description: >
                      Once the coupon URL upload request is accepted, the
                      response displays the following status:

                      * PENDING - The URL is waiting for approval.


                      **Note:** To know the status of the coupon upload, you
                      need to trigger the **Fetch a Coupon File API**.
                  coupons_list_id:
                    type: string
                    description: >-
                      This field contains the coupon list ID that you have
                      requested to upload the coupon file to.
                  _id:
                    type: string
                    description: This field contains the coupon file ID.
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalid_json:
                  summary: Invalid JSON
                  value:
                    error:
                      code: invalid-request
                      message: >-
                        The requested JSON is incorrect. Please verify and try
                        again.
                empty_file_url:
                  summary: Empty File URL
                  value:
                    error:
                      code: invalid-request
                      message: >-
                        The 'file_url' can not be empty. Please provide the
                        coupon file url and try again.
                multiple_file_urls:
                  summary: Multiple File URLs
                  value:
                    error:
                      code: invalid-request
                      message: >-
                        Multiple file urls are not permitted. Please select one
                        file url and try again.
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: request-unauthenticated
                  message: >-
                    Your request is unauthorized. Please verify your credentials
                    and try again.
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: request-forbidden
                  message: >-
                    Your account does not have access to the Coupon Management
                    features. Please contact the MoEngage team for further
                    assistance.
        '429':
          description: >
            Too Many Requests - The rate limit for the API has been exceeded.


            The following headers are returned in case of rate-limit breach:

            * `x-ratelimit-limit` (integer): The maximum number of requests that
            the consumer is permitted to make in a given time window.

            * `x-ratelimit-remaining` (integer): The number of requests
            remaining in the current rate limit window.

            * `x-ratelimit-reset` (integer): The time at which the current rate
            limit window resets in UTC epoch seconds.
          headers:
            x-ratelimit-limit:
              schema:
                type: integer
              description: >-
                The maximum number of requests that the consumer is permitted to
                make in a given time window.
            x-ratelimit-remaining:
              schema:
                type: integer
              description: >-
                The number of requests remaining in the current rate limit
                window.
            x-ratelimit-reset:
              schema:
                type: integer
              description: >-
                The time at which the current rate limit window resets in UTC
                epoch seconds.
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: unexpected-error
                  message: >-
                    Something went wrong with your request. Please contact the
                    MoEngage team for further assistance.
components:
  parameters:
    AppKeyHeader:
      name: MOE-APPKEY
      in: header
      required: true
      description: >
        This is the Workspace ID of your MoEngage account that must be passed
        with the request. You can find it in the MoEngage dashboard at
        **Settings** > **Account** > **APIs** > **Workspace ID (earlier app
        id)**.
      schema:
        type: string
    CouponListIdPath:
      name: coupon_list_id
      in: path
      required: true
      description: The unique identifier for the coupon list.
      schema:
        type: string
  schemas:
    UploadCouponFileRequest:
      type: object
      required:
        - file_url
      properties:
        name:
          type: string
        file_url:
          type: string
          format: url
        file_url_auth_username:
          type: string
        file_url_auth_password:
          type: string
        created_by:
          type: string
        callback_url:
          type: string
          format: url
    ErrorResponse:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/Error'
    Error:
      type: object
      properties:
        code:
          type: string
          description: >-
            Each error codes are unique and serve as a shorthand representation
            for the type of error, providing a quick reference that can be used
            to diagnose, troubleshoot, and address the problem based on a
            predefined set of error conditions.
        message:
          type: string
          description: >-
            Along with the error code, a detailed message is also provided in
            the response, describing the specifics of the request failure and
            the nature of the error.
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >
        Authentication is done via Basic Auth. This requires a base64-encoded
        string of your credentials in the format 'username:password'.


        - **Username**: Use your MoEngage workspace ID (also known as the App
        ID). You can find it in the MoEngage dashboard at **Settings** >
        **Account** > **APIs** > **Workspace ID (earlier app id)**.

        - **Password**: Use your API Key, which you can find within the
        **Campaign report/Business events/Custom templates/Catalog API/Inform
        Report** tile.


        For more information on authentication and getting your credentials,
        refer
        [here](https://www.moengage.com/docs/api/introduction#getting-your-credentials).

````