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.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/keap-product-discounts-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.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
security:
- oauth2: []
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
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
ErrorDetails:
type: object
properties:
domain:
type: string
resource:
type: string
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
ListProductDiscountsResponse:
type: object
properties:
discounts:
type: array
items:
$ref: '#/components/schemas/ProductDiscount'
next_page_token:
type: string
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
Error:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
status:
type: string
details:
type: array
items:
$ref: '#/components/schemas/ErrorDetails'
securitySchemes:
oauth2:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://accounts.infusionsoft.com/app/oauth/authorize
tokenUrl: https://api.infusionsoft.com/token
scopes: {}