Keap Product Discounts API
Keap Product Discounts API — 7 operations across 4 paths on the Keap REST v2 contract, read from Keap's own published OpenAPI 3.1 document.
Keap Product Discounts API — 7 operations across 4 paths on the Keap REST v2 contract, read from Keap's own published OpenAPI 3.1 document.
openapi: 3.1.0
info:
title: Keap Product Discounts API
description: Keap Public API Documentation
termsOfService: https://www.thryv.com/terms-of-use
contact:
name: Keap
url: https://developer.keap.com/get-support
email: api.keap@thryv.com
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0
version: v2
servers:
- url: https://api.infusionsoft.com/crm
tags:
- name: Product Discounts
paths:
/rest/v2/discounts/products:
get:
tags:
- Product Discounts
summary: List all Product Discounts
description: Retrieves a list of Product Discounts
operationId: listProductDiscounts
parameters:
- name: filter
in: query
description: 'Filter to apply, allowed fields are:
- (Boolean) `apply_to_commissions`
- (DiscountType) `discount_type`: AMOUNT or PERCENT
- (Double) `discount_value`
- (String) `product_id`
You will need to apply the `==` operator to check the equality of one of the filters with your
searched
word, in the encoded form `%3D%3D`. For the filters listed above, here are some examples:
- `filter=apply_to_commissions%3D%3Dtrue`
- `filter=discount_type%3D%3DAMOUNT`
- `filter=discount_value%3D%3D10.0`
- `filter=product_id%3D%3D2`
- `filter=discount_type%3D%3DAMOUNT%3Bdiscount_value%3D%3D10.0`
'
required: false
schema:
type: string
- name: page_token
in: query
description: Page token
required: false
schema:
type: string
- name: order_by
in: query
description: 'Attribute and direction to order items.
One of the following fields:
- `apply_to_commissions`
- `discount_type`
- `discount_value`
- `id`
- `name`
- `product_id`
One of the following directions:
- `asc`
- `desc`'
required: false
schema:
type: string
- name: page_size
in: query
description: Total number of items to return per page
required: false
schema:
type: integer
format: int32
maximum: 1000
minimum: 0
example: 0
responses:
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'501':
description: Method Not Implemented
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'405':
description: Method Not Allowed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ListProductDiscountsResponse'
post:
tags:
- Product Discounts
summary: Create a Product Discount
description: Creates a Product Discount
operationId: createProductDiscount
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateProductDiscountRequest'
required: true
responses:
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'501':
description: Method Not Implemented
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'405':
description: Method Not Allowed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/ProductDiscount'
/rest/v2/discounts/products/{discount_id}/criteria:
post:
tags:
- Product Discounts
summary: Create a Product Discount Criteria
description: Creates a Product Discount Criteria
operationId: createProductDiscountCriteria
parameters:
- name: discount_id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateProductDiscountCriteria'
required: true
responses:
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'501':
description: Method Not Implemented
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'405':
description: Method Not Allowed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/DiscountCriteria'
/rest/v2/discounts/products/{discount_id}:
get:
tags:
- Product Discounts
summary: Retrieve a Product Discount
description: Retrieves a Product Discount
operationId: getProductDiscount
parameters:
- name: discount_id
in: path
required: true
schema:
type: string
responses:
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'501':
description: Method Not Implemented
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'405':
description: Method Not Allowed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProductDiscount'
delete:
tags:
- Product Discounts
summary: Delete a Product Discount
description: Deletes a specified Product Discount
operationId: deleteProductDiscount
parameters:
- name: discount_id
in: path
required: true
schema:
type: string
responses:
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'501':
description: Method Not Implemented
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'405':
description: Method Not Allowed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'204':
description: No Content
patch:
tags:
- Product Discounts
summary: Update a Product Discount
description: Updates a Product Discount
operationId: updateProductDiscount
parameters:
- name: discount_id
in: path
required: true
schema:
type: string
- name: update_mask
in: query
description: An optional list of properties to be updated. If set, only the provided properties
will be updated and others will be skipped.
required: false
schema:
type: array
items:
type: string
enum:
- name
- description
- apply_to_commissions
- discount_type
- discount_value
- product_id
- criteria
uniqueItems: true
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateProductDiscountRequest'
required: true
responses:
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'501':
description: Method Not Implemented
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'405':
description: Method Not Allowed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProductDiscount'
/rest/v2/discounts/products/{discount_id}/criteria/{criteria_id}:
delete:
tags:
- Product Discounts
summary: Delete a Product Discount Criteria
description: Deletes a specified Product Discount Criteria
operationId: deleteProductDiscountCriteria
parameters:
- name: discount_id
in: path
required: true
schema:
type: string
- name: criteria_id
in: path
required: true
schema:
type: string
responses:
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'501':
description: Method Not Implemented
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'405':
description: Method Not Allowed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'204':
description: No Content
components:
schemas:
CreateProductDiscountCriteria:
type: object
properties:
type:
type: string
description: 'Type of criteria: DATE_RANGE, PROMO_CODE, PRODUCT, SUBSCRIPTION_PLAN, or ORDER_TOTAL'
enum:
- DATE_RANGE
- PROMO_CODE
- PRODUCT
- SUBSCRIPTION_PLAN
- ORDER_TOTAL
example: DATE_RANGE
code:
type: string
description: Promotional code for PROMO_CODE criteria
example: SUMMER2024
range_start_time:
type: string
format: date-time
description: Start date/time for DATE_RANGE criteria (ISO-8601 format)
example: '2024-01-01T00:00:00Z'
range_end_time:
type: string
format: date-time
description: End date/time for DATE_RANGE criteria (ISO-8601 format)
example: '2024-12-31T23:59:59Z'
product_id:
type: string
description: Product ID for PRODUCT criteria
example: 456
product_quantity_min:
type: integer
format: int32
description: Minimum product quantity for PRODUCT criteria
example: 1
product_quantity_max:
type: integer
format: int32
description: Maximum product quantity for PRODUCT criteria
example: 10
plan_id:
type: string
description: Subscription plan ID for SUBSCRIPTION_PLAN criteria
example: 789
subscription_quantity:
type: integer
format: int32
description: Subscription quantity for SUBSCRIPTION_PLAN criteria
example: 1
total_amount:
type: number
format: double
description: Total amount threshold for ORDER_TOTAL criteria
example: 100.0
operator:
type: string
description: 'Comparison operator for ORDER_TOTAL criteria: LESS_THAN or GREATER_THAN'
enum:
- LESS_THAN
- GREATER_THAN
example: GREATER_THAN
CreateProductDiscountRequest:
type: object
properties:
name:
type: string
description: Name of the discount
example: Summer Sale 20% Off
description:
type: string
description: Description of the discount
example: 20% off on all summer products
criteria:
type: array
description: List of criteria that must be met for this discount to apply
items:
$ref: '#/components/schemas/CreateProductDiscountCriteria'
apply_to_commissions:
type: boolean
description: Whether to apply this discount to commission calculations
example: true
product_id:
type: string
description: ID of the product this discount applies to
example: 456
discount_type:
type: string
description: 'Type of discount: AMOUNT (fixed amount) or PERCENT (percentage)'
enum:
- AMOUNT
- PERCENT
example: PERCENT
discount_value:
type: number
format: double
description: Value of the discount (amount or percentage depending on discount_type)
example: 20.0
required:
- discount_type
- discount_value
- name
- product_id
DiscountCriteria:
type: object
properties:
type:
type: string
description: 'Type of criteria: DATE_RANGE, PROMO_CODE, PRODUCT, SUBSCRIPTION_PLAN, or ORDER_TOTAL'
enum:
- DATE_RANGE
- PROMO_CODE
- PRODUCT
- SUBSCRIPTION_PLAN
- ORDER_TOTAL
example: DATE_RANGE
code:
type: string
description: Promotional code for PROMO_CODE criteria
example: SUMMER2024
criteria_id:
type: string
description: Unique identifier for this criteria
example: 501
range_start_time:
type: string
format: date-time
description: Start date/time for DATE_RANGE criteria (ISO-8601 format)
example: '2024-01-01T00:00:00Z'
range_end_time:
type: string
format: date-time
description: End date/time for DATE_RANGE criteria (ISO-8601 format)
example: '2024-12-31T23:59:59Z'
product_id:
type: string
description: Product ID for PRODUCT criteria
example: 456
product_quantity_min:
type: integer
format: int32
description: Minimum product quantity for PRODUCT criteria
example: 1
product_quantity_max:
type: integer
format: int32
description: Maximum product quantity for PRODUCT criteria
example: 10
plan_id:
type: string
description: Subscription plan ID for SUBSCRIPTION_PLAN criteria
example: 789
subscription_quantity:
type: integer
format: int32
description: Subscription quantity for SUBSCRIPTION_PLAN criteria
example: 1
total_amount:
type: number
format: double
description: Total amount threshold for ORDER_TOTAL criteria
example: 100.0
operator:
type: string
description: 'Comparison operator for ORDER_TOTAL criteria: LESS_THAN or GREATER_THAN'
enum:
- LESS_THAN
- GREATER_THAN
example: GREATER_THAN
Error:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
status:
type: string
details:
type: array
items:
$ref: '#/components/schemas/ErrorDetails'
ErrorDetails:
type: object
properties:
domain:
type: string
resource:
type: string
ListProductDiscountsResponse:
type: object
properties:
discounts:
type: array
items:
$ref: '#/components/schemas/ProductDiscount'
next_page_token:
type: string
ProductDiscount:
type: object
properties:
id:
type: string
description: Unique identifier for this product discount
example: 101
name:
type: string
description: Name of the discount
example: Summer Sale 20% Off
description:
type: string
description: Description of the discount
example: 20% off on all summer products
criteria:
type: array
description: List of criteria that must be met for this discount to apply
items:
$ref: '#/components/schemas/DiscountCriteria'
apply_to_commissions:
type: boolean
description: Whether to apply this discount to commission calculations
example: true
product_id:
type: string
description: ID of the product this discount applies to
example: 456
discount_type:
type: string
description: 'Type of discount: AMOUNT (fixed amount) or PERCENT (percentage)'
enum:
- AMOUNT
- PERCENT
example: PERCENT
discount_value:
type: number
format: double
description: Value of the discount (amount or percentage depending on discount_type)
example: 20.0
UpdateProductDiscountCriteria:
type: object
properties:
code:
type: string
description: Promotional code for PROMO_CODE criteria
example: SUMMER2024
criteria_id:
type: string
description: Unique identifier for this criteria
example: 501
range_start_time:
type: string
format: date-time
description: Start date/time for DATE_RANGE criteria (ISO-8601 format)
example: '2024-01-01T00:00:00Z'
range_end_time:
type: string
format: date-time
description: End date/time for DATE_RANGE criteria (ISO-8601 format)
example: '2024-12-31T23:59:59Z'
product_id:
type: string
description: Product ID for PRODUCT criteria
example: 456
product_quantity_min:
type: integer
format: int32
description: Minimum product quantity for PRODUCT criteria
example: 1
product_quantity_max:
type: integer
format: int32
description: Maximum product quantity for PRODUCT criteria
example: 10
plan_id:
type: string
description: Subscription plan ID for SUBSCRIPTION_PLAN criteria
example: 789
subscription_quantity:
type: integer
format: int32
description: Subscription quantity for SUBSCRIPTION_PLAN criteria
example: 1
total_amount:
type: number
format: double
description: Total amount threshold for ORDER_TOTAL criteria
example: 100.0
operator:
type: string
description: 'Comparison operator for ORDER_TOTAL criteria: LESS_THAN or GREATER_THAN'
enum:
- LESS_THAN
- GREATER_THAN
example: GREATER_THAN
required:
- criteria_id
UpdateProductDiscountRequest:
type: object
properties:
name:
type: string
description: Name of the discount
example: Summer Sale 20% Off
description:
type: string
description: Description of the discount
example: 20% off on all summer products
criteria:
type: array
description: List of criteria that must be met for this discount to apply
items:
$ref: '#/components/schemas/UpdateProductDiscountCriteria'
apply_to_commissions:
type: boolean
description: Whether to apply this discount to commission calculations
example: true
product_id:
type: string
description: ID of the product this discount applies to
example: 456
discount_type:
type: string
description: 'Type of discount: AMOUNT (fixed amount) or PERCENT (percentage)'
enum:
- AMOUNT
- PERCENT
example: PERCENT
discount_value:
type: number
format: double
description: Value of the discount (amount or percentage depending on discount_type)
example: 20.0
securitySchemes:
oauth2:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://accounts.infusionsoft.com/app/oauth/authorize
tokenUrl: https://api.infusionsoft.com/token
scopes: {}
security:
- oauth2: []