Paid products API
The products API from Paid — 5 operation(s) for products.
The products API from Paid — 5 operation(s) for products.
openapi: 3.1.0
info:
title: API Reference agents products API
version: 1.0.0
servers:
- url: https://api.agentpaid.io/api/v1
description: Production
tags:
- name: products
paths:
/products:
get:
operationId: list
summary: List products
tags:
- products
parameters:
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: Success response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Product'
post:
operationId: create
summary: Create product
tags:
- products
parameters:
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'201':
description: Success response
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProductCreate'
/products/{productId}:
get:
operationId: get
summary: Get product by ID
tags:
- products
parameters:
- name: productId
in: path
required: true
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: Success response
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
put:
operationId: update
summary: Update product
tags:
- products
parameters:
- name: productId
in: path
required: true
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: Success response
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProductUpdate'
delete:
operationId: delete
summary: Delete product
tags:
- products
parameters:
- name: productId
in: path
required: true
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'204':
description: Success response
content:
application/json:
schema:
$ref: '#/components/schemas/products_delete_Response_204'
/products/external/{externalId}:
get:
operationId: get-by-external-id
summary: Get product by external ID
tags:
- products
parameters:
- name: externalId
in: path
required: true
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: Success response
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
put:
operationId: update-by-external-id
summary: Update product by external ID
tags:
- products
parameters:
- name: externalId
in: path
required: true
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: Success response
content:
application/json:
schema:
$ref: '#/components/schemas/Product'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProductUpdate'
delete:
operationId: delete-by-external-id
summary: Delete product by external ID
tags:
- products
parameters:
- name: externalId
in: path
required: true
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'204':
description: Success response
content:
application/json:
schema:
$ref: '#/components/schemas/products_deleteByExternalId_Response_204'
/products/:
get:
operationId: list-products
summary: List products
description: Get a list of products for the organization
tags:
- products
parameters:
- name: limit
in: query
required: false
schema:
type: integer
default: 10
- name: offset
in: query
required: false
schema:
type: integer
- name: name
in: query
description: Search by product name (case-insensitive, matches anywhere in the name).
required: false
schema:
type: string
- name: active
in: query
description: 'Filter by the product''s active flag: true or false.'
required: false
schema:
type: boolean
- name: archived
in: query
description: 'Filter by archived state: true returns only archived products, false only non-archived. Omit to include both.'
required: false
schema:
type: boolean
- name: Authorization
in: header
description: API Key authentication using Bearer token
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
schema:
$ref: '#/components/schemas/ProductListResponse'
'400':
description: '400'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: '403'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: '500'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
operationId: create-product
summary: Create a new product
description: Creates a new product for the organization
tags:
- products
parameters:
- name: Authorization
in: header
description: API Key authentication using Bearer token
required: true
schema:
type: string
responses:
'201':
description: '201'
content:
application/json:
schema:
$ref: '#/components/schemas/Product_2'
'400':
description: '400'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: '403'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: '500'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
requestBody:
description: Body
content:
application/json:
schema:
$ref: '#/components/schemas/CreateProductRequest'
/products/{id}:
get:
operationId: get-product-by-id
summary: Get product
description: Get a product by ID, including its product attributes with pricing details
tags:
- products
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: Authorization
in: header
description: API Key authentication using Bearer token
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
schema:
$ref: '#/components/schemas/ProductDetail'
'403':
description: '403'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: '404'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: '500'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
operationId: update-product-by-id
summary: Update product
description: Update a product by ID. Optionally upsert product attributes with pricing.
tags:
- products
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: Authorization
in: header
description: API Key authentication using Bearer token
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
schema:
$ref: '#/components/schemas/ProductDetail'
'400':
description: '400'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: '403'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: '404'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: '500'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
requestBody:
description: Body
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateProductRequest'
components:
schemas:
ProductPricingInputDiscriminatorMappingSeatBasedGraduatedBillingType:
type: string
enum:
- Advance
- Arrears
default: Advance
title: ProductPricingInputDiscriminatorMappingSeatBasedGraduatedBillingType
ProductPricingInputDiscriminatorMappingUsageVolumeSignalType:
type: string
enum:
- activity
- outcome
title: ProductPricingInputDiscriminatorMappingUsageVolumeSignalType
ProductPricingInputDiscriminatorMappingSeatBasedVolumeBillingFrequency:
type: string
enum:
- Monthly
- Quarterly
- Semi-Annually
- Annual
- Custom
title: ProductPricingInputDiscriminatorMappingSeatBasedVolumeBillingFrequency
PricingModelType:
type: string
enum:
- PerUnit
- VolumePricing
- GraduatedPricing
- PrepaidCredits
title: PricingModelType
ProductPricingInputDiscriminatorMappingUsageBracketedPrepaidCreditsBillingFrequency:
type: string
enum:
- Monthly
- Quarterly
- Semi-Annually
- Annual
- Custom
title: ProductPricingInputDiscriminatorMappingUsageBracketedPrepaidCreditsBillingFrequency
ProductPricingInputDiscriminatorMappingUsageVolumeBillingType:
type: string
enum:
- Advance
- Arrears
default: Arrears
title: ProductPricingInputDiscriminatorMappingUsageVolumeBillingType
ProductPricingInputDiscriminatorMappingUsageCostPlusBillingType:
type: string
enum:
- Advance
- Arrears
default: Arrears
title: ProductPricingInputDiscriminatorMappingUsageCostPlusBillingType
ProductPricingInputDiscriminatorMappingUsagePerUnitSignalType:
type: string
enum:
- activity
- outcome
title: ProductPricingInputDiscriminatorMappingUsagePerUnitSignalType
ProductType:
type: string
enum:
- agent
- product
- prepaidCreditBundle
description: The type of product
title: ProductType
ProductPricingInput:
oneOf:
- type: object
properties:
pricingType:
type: string
enum:
- RecurringPerUnit
description: 'Discriminator value: RecurringPerUnit'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingRecurringPerUnitBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingRecurringPerUnitBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductSimplePricePoint'
required:
- pricingType
- billingFrequency
- pricePoints
description: RecurringPerUnit variant
- type: object
properties:
pricingType:
type: string
enum:
- RecurringGraduated
description: 'Discriminator value: RecurringGraduated'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingRecurringGraduatedBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingRecurringGraduatedBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductTieredPricePoint'
required:
- pricingType
- billingFrequency
- pricePoints
description: RecurringGraduated variant
- type: object
properties:
pricingType:
type: string
enum:
- RecurringVolume
description: 'Discriminator value: RecurringVolume'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingRecurringVolumeBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingRecurringVolumeBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductTieredPricePoint'
required:
- pricingType
- billingFrequency
- pricePoints
description: RecurringVolume variant
- type: object
properties:
pricingType:
type: string
enum:
- RecurringPercentOfTotal
description: 'Discriminator value: RecurringPercentOfTotal'
percentageValue:
type: number
format: double
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingRecurringPercentOfTotalBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingRecurringPercentOfTotalBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductSimplePricePoint'
required:
- pricingType
- percentageValue
- billingFrequency
description: RecurringPercentOfTotal variant
- type: object
properties:
pricingType:
type: string
enum:
- UsagePerUnit
description: 'Discriminator value: UsagePerUnit'
eventName:
type: string
signalType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsagePerUnitSignalType'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsagePerUnitBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsagePerUnitBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductSimplePricePoint'
required:
- pricingType
- eventName
- pricePoints
description: UsagePerUnit variant
- type: object
properties:
pricingType:
type: string
enum:
- UsageGraduated
description: 'Discriminator value: UsageGraduated'
eventName:
type: string
signalType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageGraduatedSignalType'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageGraduatedBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageGraduatedBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductTieredPricePoint'
required:
- pricingType
- eventName
- pricePoints
description: UsageGraduated variant
- type: object
properties:
pricingType:
type: string
enum:
- UsageVolume
description: 'Discriminator value: UsageVolume'
eventName:
type: string
signalType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageVolumeSignalType'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageVolumeBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageVolumeBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductTieredPricePoint'
required:
- pricingType
- eventName
- pricePoints
description: UsageVolume variant
- type: object
properties:
pricingType:
type: string
enum:
- UsagePrepaidCredits
description: 'Discriminator value: UsagePrepaidCredits'
eventName:
type: string
signalType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsagePrepaidCreditsSignalType'
creditsCurrencyId:
type: string
creditCost:
type: number
format: double
unitValue:
type: number
format: double
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsagePrepaidCreditsBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsagePrepaidCreditsBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductSimplePricePoint'
required:
- pricingType
- eventName
- creditsCurrencyId
- creditCost
description: UsagePrepaidCredits variant
- type: object
properties:
pricingType:
type: string
enum:
- UsageBracketedPrepaidCredits
description: 'Discriminator value: UsageBracketedPrepaidCredits'
eventName:
type: string
signalType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageBracketedPrepaidCreditsSignalType'
creditsCurrencyId:
type: string
unitValue:
type: number
format: double
overageUnitPrice:
type: number
format: double
creditRolloverAmount:
type: number
format: double
pricingInput:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageBracketedPrepaidCreditsPricingInput'
creditUnitBrackets:
type: array
items:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageBracketedPrepaidCreditsCreditUnitBracketsItems'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageBracketedPrepaidCreditsBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageBracketedPrepaidCreditsBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductSimplePricePoint'
required:
- pricingType
- eventName
- pricingInput
- creditUnitBrackets
description: UsageBracketedPrepaidCredits variant
- type: object
properties:
pricingType:
type: string
enum:
- UsageCostPlus
description: 'Discriminator value: UsageCostPlus'
costPlusMultiplier:
type: number
format: double
signalType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageCostPlusSignalType'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageCostPlusBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingUsageCostPlusBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductSimplePricePoint'
required:
- pricingType
- costPlusMultiplier
description: UsageCostPlus variant
- type: object
properties:
pricingType:
type: string
enum:
- OneTimePerUnit
description: 'Discriminator value: OneTimePerUnit'
feeType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingOneTimePerUnitFeeType'
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingOneTimePerUnitBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductSimplePricePoint'
required:
- pricingType
- pricePoints
description: OneTimePerUnit variant
- type: object
properties:
pricingType:
type: string
enum:
- SeatBasedPerUnit
description: 'Discriminator value: SeatBasedPerUnit'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingSeatBasedPerUnitBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingSeatBasedPerUnitBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductSimplePricePoint'
required:
- pricingType
- billingFrequency
- pricePoints
description: SeatBasedPerUnit variant
- type: object
properties:
pricingType:
type: string
enum:
- SeatBasedGraduated
description: 'Discriminator value: SeatBasedGraduated'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingSeatBasedGraduatedBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingSeatBasedGraduatedBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductTieredPricePoint'
required:
- pricingType
- billingFrequency
- pricePoints
description: SeatBasedGraduated variant
- type: object
properties:
pricingType:
type: string
enum:
- SeatBasedVolume
description: 'Discriminator value: SeatBasedVolume'
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingSeatBasedVolumeBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingSeatBasedVolumeBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductTieredPricePoint'
required:
- pricingType
- billingFrequency
- pricePoints
description: SeatBasedVolume variant
- type: object
properties:
pricingType:
type: string
enum:
- SeatBasedPrepaidCredits
description: 'Discriminator value: SeatBasedPrepaidCredits'
creditsCurrencyId:
type: string
creditCost:
type: number
format: double
unitValue:
type: number
format: double
billingFrequency:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingSeatBasedPrepaidCreditsBillingFrequency'
billingFrequencyCustomMonths:
type: integer
billingType:
$ref: '#/components/schemas/ProductPricingInputDiscriminatorMappingSeatBasedPrepaidCreditsBillingType'
pricePoints:
type: array
items:
$ref: '#/components/schemas/ProductSimplePricePoint'
required:
- pricingType
- creditsCurrencyId
- creditCost
- billingFrequency
description: SeatBasedPrepaidCredits variant
discriminator:
propertyName: pricingType
title: ProductPricingInput
Product_2:
type: object
properties:
id:
type: string
name:
type: string
description:
type:
- string
- 'null'
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
active:
type: boolean
productCode:
type:
- string
- 'null'
externalId:
type:
- string
- 'null'
archivedAt:
type:
- string
- 'null'
format: date-time
metadata:
type:
- object
- 'null'
additionalProperties:
description: Any type
required:
- id
- name
- description
- createdAt
- updatedAt
- active
- productCode
- externalId
- archivedAt
- metadata
title: Product
ProductCreditBenefitOutput:
type: object
properties:
id:
type: string
creditsCurrencyId:
type:
- string
- 'null'
amount:
type: number
format: double
recipient:
type: string
isInfiniteTotal:
type: boolean
allocationCadence:
type: string
creditGrantTiming:
type:
- string
- 'null'
overageUnitPrice:
type:
- number
- 'null'
format: double
rolloverAmount:
type:
- number
- 'null'
format: double
rolloverDuration:
type:
- number
- 'null'
format: double
rolloverDurationUnit:
type:
- string
- 'null'
required:
- id
- creditsCurrencyId
- amount
- recipient
- isInfiniteTotal
- allocationCadence
title: ProductCreditBenefitOutput
Pagination:
type: object
properties:
limit:
type: integer
offset:
type: integer
total:
type: integer
hasMore:
type: boolean
required:
- limit
- offset
- total
- hasMore
title: Pagination
ProductPricingInputDiscriminatorMappingRecurringVolumeBillingType:
type: string
enum:
- Advance
- Arrears
default: Advance
title: ProductPricingInputDiscriminatorMappingRecurringVolumeBillingType
CreateProductRequest:
type: object
properties:
name:
type: string
description:
type:
- string
- 'null'
active:
type: boolean
default: false
productCode:
type:
- string
- 'null'
externalId:
type:
- string
- 'null'
metadata:
type:
- object
- 'null'
additionalProperties:
description: Any type
required:
- name
title: CreateProductRequest
ProductPricePointOutputTiersItems:
type: object
properties:
flatAmount:
type: number
format: double
index:
type: number
format: double
lowerBound:
type: number
format: double
number:
type: number
format: double
tierBillingType:
$ref: '#/components/schemas/ProductPricePointOutputTiersItemsTierBillingType'
unitAmount:
type: number
format: double
upperBound:
type: number
format: double
required:
- lowerBound
title: ProductPricePointOutputTiersItems
ProductPricingInputDiscriminatorMappingUsagePrepaidCreditsSignalType:
type: string
enum:
- activity
- outcome
title: ProductPricingInputDiscriminatorMappingUsagePrepaidCreditsSignalType
ProductCreditBenefitInput:
type: object
properties:
creditsCurrencyId:
type: string
amount:
type: number
format: double
recipient:
$ref: '#/components/schemas/ProductCreditBenefitInputRecipient'
isInfiniteTotal:
type: boolean
default: false
allocationCadence:
$ref: '#/components/schemas/ProductCreditBenefitInputAllocationCadence'
creditGrantTiming:
$ref: '#/components/schemas/ProductCreditBenefitInputCreditGrantTiming'
overageUnitPrice:
type:
- number
- 'null'
format: double
rolloverAmount:
type:
- number
- 'null'
format: double
rolloverDuration:
type:
- number
- 'null'
format: double
rolloverDurationUnit:
type:
- string
- 'null'
required:
- creditsCurrencyId
- amount
title: ProductCreditBenefitInput
ErrorResponse:
type: o
# --- truncated at 32 KB (53 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/paid/refs/heads/main/openapi/paid-products-api-openapi.yml