openapi: 3.2.0 info: title: Coupon List API 🏷️ Coupon Lists 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. paths: /coupon-list: post: tags: - Coupon Lists summary: Create a Coupon List operationId: createCouponList description: 'This API creates single-use coupon codes. You can use this API to create and organize distinct lists for different coupon code categories. ' x-mint: content: "\n **Information**\n \n This API creates the coupon list with basic specifications only. The coupons should be added using [Upload the Coupons](https://www.moengage.com/docs/api/coupon-files/upload-a-coupon-file-to-the-coupon-list) API to this coupon list before utilizing it in campaigns.\n\n\n#### Rate Limit\nYou can create 100 coupon lists per day.\n" requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateCouponListRequest' responses: '201': description: 'Success Indicates that the request is successful and the coupon list creation request is accepted. ' content: application/json: schema: type: object properties: name: type: string description: This field consists of the unique name of the coupon list corresponding to a successful coupon list creation request. label: type: string description: This field consists of the label name for the coupon list corresponding to a successful coupon list creation request. expires_at: type: string description: This field consists of the expiry date of the coupon list in yyyy-mm-dd format corresponding to a successful coupon list creation request. created_by: type: string description: This field consists of the user name who created the coupon list corresponding to a successful coupon list creation request. email_alert_subscribers: type: array items: type: string description: This field consists of the email address of the coupon list subscriber corresponding to a successful coupon list creation request. alert_conditions: type: object description: This field consists of the alert conditions and the statuses specified while creating the coupon list. status: type: string description: Once the coupon list creation request is accepted, the list status will show ACTIVE. _id: type: string description: This field contains the unique ID corresponding to a successful coupon list creation request. This ID is used as a parameter for fetching, updating, or archiving coupon lists. example: name: Example Name label: Sample Label expires_at: '2024-10-31T18:29:00' created_by: John email_alert_subscribers: - john.doe@example.com alert_conditions: success_alert: true failure_alert: true expiry_alert: alert: true days_before: 1 coupon_shortage_alert: alert: true threshold_count: 10 status: ACTIVE _id: 6721d00eefc476c0f67e0d05 '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: duplicate_name: summary: Duplicate Name value: error: code: duplicate-coupon-list-name message: The coupon list name already exists. Please enter a unique name and try again. duplicate_label: summary: Duplicate Label value: error: code: duplicate-coupon-list-label message: The coupon list label already exists. Please enter a unique label and try again. missing_attributes: summary: Missing Attributes value: error: code: missing-mandatory-attributes message: Missing mandatory key. Please verify and try again. invalid_request: summary: Invalid Request value: error: code: invalid-request message: The requested JSON is incorrect. Please verify 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. get: tags: - Coupon Lists summary: Fetch All Coupon Lists operationId: fetchAllCouponLists description: 'This API fetches all created coupon lists in a specific workspace. By default, this API returns the coupon lists marked with an *ACTIVE* status. In return, it offers detailed specifications of the active coupon lists, respective configurations, statuses, expiry dates, and alert conditions, including on-time data on the total coupons added and those that are currently available. ' x-mint: content: "\n **Information**\n \n There is no request body or content to send for this request except for the headers and parameters.\n\n\n#### Rate Limit\nYou can fetch 10,000 coupon lists per day.\n" parameters: - $ref: '#/components/parameters/AppKeyHeader' - name: status in: query required: false description: 'This field contains an array of all the coupons with their respective attributes based on the following statuses you provide in the request parameter: * ACTIVE - to view only active coupon lists * ARCHIVED - to view only archived coupon lists * EXPIRED - to view only expired coupon lists **Note**: Not specifying any status will display all the existing coupon lists together. ' schema: type: string enum: - ACTIVE - ARCHIVED - EXPIRED responses: '200': description: 'Success Indicates that the request is successful and all the active and/or archived coupon lists are fetched. ' content: application/json: schema: type: object properties: data: type: array items: type: object properties: name: type: string description: This field consists of the unique name of the coupon list. label: type: string description: This field consists of the label name for the fetched coupon list. expires_at: type: string description: This field consists of the expiry date of the coupon list in yyyy-mm-dd format. status: type: string description: 'This field shows one of the following statuses of the fetched coupon list: * ACTIVE * EXPIRED * ARCHIVED ' total_coupons: type: integer description: This field consists of the total number of coupons in the coupon list. created_at: type: string description: This field consists of the date and time the coupon list was created. updated_at: type: string description: This field consists of the date and time of the most recent update to the coupon list. email_alert_subscribers: type: string description: This field consists of the email address of the coupon list subscriber. alert_conditions: type: object description: This field consists of the alert conditions and their statuses specified while creating the coupon list. available_coupons: type: integer description: This field consists of the available number of coupons in coupon list. personalization_snippet: type: string description: This field consists of the personalization snippet of the coupon list. created_by: type: string description: This field consists of the user name who created the fetched coupon list. _id: type: string description: This field contains the unique ID corresponding to a successful coupon list fetch request. This ID is also used to update and archive coupon lists. '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: bad-request message: Possible issues include duplicates, such as coupon list names, invalid data types, or missing mandatory attributes. '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: request-unauthenticated message: Your request is unauthorized. 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. Contact the MoEngage team for further assistance. '429': $ref: '#/components/responses/TooManyRequests' '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. /coupon-list/{coupon_list_id}: get: tags: - Coupon Lists summary: Fetch Coupon List Details operationId: fetchCouponList description: 'This API retrieves the specifications of a particular coupon list. It includes information such as configurations, statuses, expiry dates, and alert conditions with real-time counts of added and currently available coupons. Using this API, you can easily access and manage critical data about individual coupon lists. ' x-mint: content: "\n **Information**\n \n There is no request body or content to send for this request except for headers and parameters.\n\n\n#### Rate Limit\nYou can fetch 10000 coupon lists per day.\n" parameters: - $ref: '#/components/parameters/AppKeyHeader' - $ref: '#/components/parameters/CouponListIdPath' responses: '200': description: 'Success Indicates that the request is successful and the coupon list is fetched. ' content: application/json: schema: type: object properties: name: type: string description: This field consists of the unique name of the coupon list. label: type: string description: This field consists of the label name for the fetched coupon list. expires_at: type: string description: This field consists of the expiry date of the coupon list in yyyy-mm-dd format. status: type: string description: 'This field shows one of the following statuses of the fetched coupon list: * ACTIVE * EXPIRED * ARCHIVED ' total_coupons: type: integer description: This field consists of the total number of coupons in the coupon list. created_at: type: string description: This field consists of the date and time the coupon list was created. updated_at: type: string description: This field consists of the date and time of the most recent update to the coupon list. email_alert_subscribers: type: array items: type: string description: This field consists of the email address of the coupon list subscriber. alert_conditions: type: object description: This field consists of the alert conditions and their statuses specified while creating the coupon list. available_coupons: type: integer description: This field consists of the available number of coupons in coupon list. personalization_snippet: type: string description: This field consists of the personalization snippet of the coupon list. created_by: type: string description: This field consists of the user name who created the fetched coupon list. _id: type: string description: This field contains the unique ID corresponding to a successful coupon list fetch request. This ID is also used to update and archive coupon lists. example: name: signup coupons label: signup_coupons expires_at: '2024-10-26T18:29:00.000Z' status: ACTIVE total_coupons: 0 created_at: '2024-10-01T11:29:00.000Z' updated_at: '2024-10-01T11:39:00.000Z' email_alert_subscribers: - john.doe@example.com alert_conditions: success_alert: true failure_alert: true expiry_alert: alert: true days_before: 100 coupon_shortage_alert: alert: true threshold_count: 100 available_coupons: 0 personalization_snippet: '{{Coupons.CouponListName[signup_coupons]}}' created_by: test_user _id: '{{coupon_list_id}}' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: bad-request message: Possible issues include duplicates, such as coupon list names, invalid data types, or missing mandatory attributes. '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: request-unauthenticated message: Your request is unauthorized. 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. Contact the MoEngage team for further assistance. '429': $ref: '#/components/responses/TooManyRequests' '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. patch: tags: - Coupon Lists summary: Update a Coupon List operationId: updateCouponList description: 'This API modifies existing coupon lists within a defined workspace. It facilitates changes to specifications like list name, expiry date, and alert settings, thereby promoting efficient coupon operations management. ' x-mint: content: "\n **Information**\n \n This API reactivates the *ARCHIVED* or *EXPIRED* coupon list upon modification, provided the list has a future expiration date.\n\n\n#### Rate Limit\nYou can update 100 coupon lists per day.\n" parameters: - $ref: '#/components/parameters/AppKeyHeader' - $ref: '#/components/parameters/CouponListIdPath' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: This field contains the new name of the coupon list. expires_at: type: string format: date description: This field contains the new date of the coupon list in yyyy-mm-dd format. email_alert_subscribers: type: array items: type: string format: email description: This field consists of the new email address of the coupon list subscriber. The subscriber will receive all the alerts on the coupon list in the email provided in this field. alert_conditions: $ref: '#/components/schemas/AlertConditions' description: This object contains the updated details for the alert conditions. responses: '200': description: 'Success Indicates that the request is successful and the coupon list update request is accepted. ' content: application/json: schema: type: object properties: name: type: string description: This field consists of the updated name of the coupon list. label: type: string description: This field consists of the label name for the coupon list. expires_at: type: string description: This field contains the updated expiration date of the coupon list in yyyy-mm-dd format. status: type: string description: 'This field consists of the status of the coupon list. **Note:** You can only update active coupon lists. ' total_coupons: type: integer description: This field consists of the total number of coupons in the coupon list. created_at: type: string description: This field consists of the date and time the coupon list was created. updated_at: type: string description: This field consists of the date and time of the most recent update to the coupon list. email_alert_subscribers: type: string description: This field contains the subscriber's updated email address on the coupon list. alert_conditions: type: object description: This field consists of the updated alert conditions and the statuses specified for the coupon list. available_coupons: type: integer description: This field consists of the available number of coupons in coupon list. created_by: type: string description: This field consists of the user name who created the coupon list. _id: type: string description: This field contains the unique ID of the coupon list requested for update. This ID is used in the params to fetch and archive coupon lists. '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: duplicate_name: summary: Duplicate Name value: error: code: duplicate-coupon-list-name message: The coupon list name already exists. Please enter a unique name and try again. duplicate_label: summary: Duplicate Label value: error: code: duplicate-coupon-list-label message: The coupon list label already exists. Please enter a unique label and try again. missing_attributes: summary: Missing Attributes value: error: code: missing-mandatory-attributes message: Missing mandatory key ''. Please verify and try again. invalid_request: summary: Invalid Request value: error: code: invalid-request message: The requested JSON is incorrect. Please verify and try again. '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: request-unauthenticated message: Your request is unauthorized. 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. 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. /coupon-list/{coupon_list_id}/activate: put: tags: - Coupon Lists summary: Activate Coupon List operationId: activateCouponList description: 'This API reactivates archived coupon lists, provided the expiry date is in the future. ' x-mint: content: "\n **Information**\n \n * Only active coupon lists can be utilized in campaigns.\n * If you need to modify the expiry date and activate a coupon list, you must use the [Update a Coupon List API](#operation/updateCouponList).\n\n\n#### Rate Limit\nYou can activate 100 coupon lists per day.\n" parameters: - $ref: '#/components/parameters/AppKeyHeader' - $ref: '#/components/parameters/CouponListIdPath' requestBody: required: true content: application/json: schema: type: object required: - expires_at properties: expires_at: type: string format: date description: 'Add a new expiry date for the coupon list in yyyy-mm-dd format. **Note:** Your request could fail if the mandatory attributes are absent from your payload. ' responses: '204': description: 'Success (No content) Coupon list activation is successful. ' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: bad-request message: Possible issues include duplicates, such as coupon list names, invalid data types, or missing mandatory attributes. '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: request-unauthenticated message: Your request is unauthorized. 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. 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. /coupon-list/{coupon_list_id}/archive: put: tags: - Coupon Lists summary: Archive a Coupon List operationId: archiveCouponList description: 'This API transitions an active coupon list to an archived status. Upon archival, the coupon codes within the list are deleted. Consequently, any campaigns that were previously dependent on this list will no longer be able to utilize the dynamic coupon allocation. ' x-mint: content: "\n **Information**\n \n Verify the usage of a given coupon list in active or planned campaigns before archiving it.\n\n\n#### Rate Limit\nYou can archive 100 coupon lists per day.\n" parameters: - $ref: '#/components/parameters/AppKeyHeader' - $ref: '#/components/parameters/CouponListIdPath' responses: '204': description: 'Success (No content) The request is successful, and the coupon list is archived. ' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: code: bad-request message: Possible issues include duplicates, such as coupon list names, invalid data types, or missing mandatory attributes. '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. 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: schemas: AlertConditions: type: object description: Configuration for various alert triggers. properties: success_alert: type: boolean description: Indicates whether to send an alert on success. failure_alert: type: boolean description: Indicates whether to send an alert on failure. coupon_shortage_alert: type: object description: Configuration for the coupon shortage alert. properties: alert: type: boolean description: Indicates whether to enable the coupon shortage alert. threshold_count: type: integer description: The minimum count of coupons remaining to trigger the alert. expiry_alert: type: object description: Configuration for the expiry alert. properties: alert: type: boolean description: Indicates whether to enable the expiry alert. days_before: type: integer description: Number of days before expiry to trigger the alert. ErrorResponse: type: object properties: error: $ref: '#/components/schemas/Error' CreateCouponListRequest: type: object required: - name - label - expires_at - created_by properties: name: type: string description: This field consists of the coupon list's unique name. label: type: string description: This field consists of the label name for the coupon list. expires_at: type: string format: date description: This field consists of the date the coupon list expires in yyyy-mm-dd format. email_alert_subscribers: type: array items: type: string format: email description: This field consists of the email address of the coupon list subscriber. The subscriber will receive all the alerts on the coupon list in the email provided in this field. created_by: type: string description: This field consists of the user name who requests to create the coupon list. alert_conditions: $ref: '#/components/schemas/AlertConditions' description: This object contains the details and types of alert conditions. 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. responses: TooManyRequests: description: '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. parameters: CouponListIdPath: name: coupon_list_id in: path required: true description: The unique identifier for the coupon list. schema: type: string 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 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). '