Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/suger-offer-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
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 Specification
openapi: 3.2.0
info:
contact:
email: support@suger.io
name: Suger Support
url: https://www.suger.io/support
description: CRUD operations on a set of resources, including organizations, products, offers, entitlements, usage record groups for meterting, etc.
title: Suger Offer API
version: '1.0'
servers:
- url: https://api.suger.cloud
tags:
- description: Access to Offer resources
name: Offer
paths:
/org/{orgId}/draftOffer:
post:
description: Create a new draft offer or update the existing draft offer. When updating draft offer, the offer.ID is required.
operationId: CreateOrUpdateDraftOffer
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/WorkloadOffer'
description: the draft offer to create
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WorkloadOffer'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'405':
content:
application/json:
schema:
type: string
description: Method not allowed
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: Create Or Update Draft Offer
tags:
- Offer
x-codegen-request-body-name: data
/org/{orgId}/offer:
get:
description: List offers under the given organization with pagination and optional filter.
operationId: ListOffers
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: filter by offer status
explode: true
in: query
name: status
required: false
schema:
type: string
style: form
- description: filter by partner
explode: true
in: query
name: partner
required: false
schema:
type: string
style: form
- description: filter by offerType
explode: true
in: query
name: offerType
required: false
schema:
type: string
style: form
- description: filter by productId
explode: true
in: query
name: productId
required: false
schema:
type: string
style: form
- description: filter by buyerId
explode: true
in: query
name: buyerId
required: false
schema:
type: string
style: form
- description: filter by hubspotDealId
explode: true
in: query
name: hubspotDealId
required: false
schema:
type: string
style: form
- description: filter by contactId
explode: true
in: query
name: contactId
required: false
schema:
type: string
style: form
- description: List pagination size, default 1000, max value is 1000
explode: true
in: query
name: limit
required: false
schema:
type: integer
style: form
- description: List pagination offset, default 0
explode: true
in: query
name: offset
required: false
schema:
type: integer
style: form
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/WorkloadOffer'
type: array
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'405':
content:
application/json:
schema:
type: string
description: Method not allowed
'500':
content:
application/json:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: List Offers
tags:
- Offer
post:
description: Create a private offer under the given organization.
operationId: CreateOffer
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/WorkloadOffer'
description: Offer to create
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WorkloadOffer'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'405':
content:
application/json:
schema:
type: string
description: Method not allowed
'500':
content:
application/json:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: Create Offer
tags:
- Offer
x-codegen-request-body-name: data
/org/{orgId}/offer/{offerId}:
delete:
description: The offer is soft deleted (marked as DELETED status) in Suger service. Only the offer with status = "DRAFT", "CREATE_FAILED", "EXPIRED" or "CANCELLED" is allowed to be deleted.
operationId: DeleteOffer
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Offer ID
explode: false
in: path
name: offerId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
type: string
description: Empty string if deletion is successful
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'404':
content:
application/json:
schema:
type: string
description: Not found error
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: Delete Offer
tags:
- Offer
get:
description: Get the offer by the given offer ID.
operationId: GetOffer
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Offer ID
explode: false
in: path
name: offerId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WorkloadOffer'
description: the Offer Object
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'404':
content:
application/json:
schema:
type: string
description: Not found
'405':
content:
application/json:
schema:
type: string
description: Method not allowed
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: Get Offer
tags:
- Offer
/org/{orgId}/offer/{offerId}/cancel:
post:
description: Only the offer with status = "PENDING_ACCEPTANCE", "PENDING_CANCEL", "ACTIVE" or "USED" is allowed to cancel.
operationId: CancelOffer
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Offer ID
explode: false
in: path
name: offerId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WorkloadOffer'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'405':
content:
application/json:
schema:
type: string
description: Method not allowed
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: Cancel Offer
tags:
- Offer
/org/{orgId}/offer/{offerId}/eula:
get:
description: Get the EULA file of the given offer ID.
operationId: GetOfferEula
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Offer ID
explode: false
in: path
name: offerId
required: true
schema:
type: string
style: simple
- description: response format in JSON or string
explode: true
in: query
name: format
required: false
schema:
type: string
style: form
responses:
'200':
content:
application/json:
schema:
type: string
description: AWS S3 signed URL with 30 minutes expiry time
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'405':
content:
application/json:
schema:
type: string
description: Method not allowed
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: Get Offer EULA
tags:
- Offer
/org/{orgId}/offer/{offerId}/extendExpiryDate:
post:
description: Only the offer with status = "PENDING_ACCEPTANCE", "EXPIRED" or "ACCEPTED" is allowed to extend expiry date.
operationId: ExtendPrivateOfferExpiryDate
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Offer ID
explode: false
in: path
name: offerId
required: true
schema:
type: string
style: simple
- description: new expiry date in YYYY-MM-DD format
explode: true
in: query
name: newExpiryDate
required: true
schema:
type: string
style: form
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WorkloadOffer'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'404':
content:
application/json:
schema:
type: string
description: Not found
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: Extend Offer Expiry Date
tags:
- Offer
/org/{orgId}/offer/{offerId}/metaInfo:
patch:
description: Update the meta info of the given offer.
operationId: UpdateOfferMetaInfo
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Offer ID
explode: false
in: path
name: offerId
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/WorkloadMetaInfo'
description: Offer meta info to update
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WorkloadMetaInfo'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'405':
content:
application/json:
schema:
type: string
description: Method not allowed
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: Update Offer Meta Info
tags:
- Offer
x-codegen-request-body-name: data
/org/{orgId}/offer/{offerId}/notifyContacts:
post:
description: Send offer notifications to the given contact ids. If contactIDs is empty, send notifications to all contacts of the offer.
operationId: SendOfferNotifications
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Offer ID
explode: false
in: path
name: offerId
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
items:
type: string
type: array
description: List of Contact IDs, if emoty or nil, send notifications to all contacts of the offer
required: false
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationEvent'
description: NotificationEvent object
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'405':
content:
application/json:
schema:
type: string
description: Method not allowed
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: Notify Offer Contacts
tags:
- Offer
x-codegen-request-body-name: contactIDs
/org/{orgId}/offer/{offerId}/resellerEula:
get:
description: Get the Reseller EULA file of the given offer ID.
operationId: GetOfferResellerEula
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Offer ID
explode: false
in: path
name: offerId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
type: string
description: AWS S3 signed URL with 30 minutes expiry time
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'405':
content:
application/json:
schema:
type: string
description: Method not allowed
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: Get Offer Reseller EULA
tags:
- Offer
/org/{orgId}/offerExternalId/{offerExternalId}:
get:
description: Get the offer by the given offer external ID.
operationId: GetOfferByExternalId
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Offer External ID
explode: false
in: path
name: offerExternalId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/WorkloadOffer'
description: the Offer Object
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'404':
content:
application/json:
schema:
type: string
description: Not found
'405':
content:
application/json:
schema:
type: string
description: Method not allowed
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: Get Offer By External ID
tags:
- Offer
components:
schemas:
GcpMarketplacePrivateOfferTermDurationConstraint:
example:
defaultDuration:
unit: MONTHLY_PERIOD
count: 9
properties:
defaultDuration:
$ref: '#/components/schemas/GcpPeriodDuration'
type: object
AwsMarketplaceCppoOpportunityRuleType:
enum:
- AvailabilityRule
- PartnerTargetingRule
- TargetingRule
- TaxConfigurationRule
type: string
x-enum-varnames:
- AwsMarketplaceCppoOpportunityRuleType_AvailabilityRule
- AwsMarketplaceCppoOpportunityRuleType_PartnerTargetingRule
- AwsMarketplaceCppoOpportunityRuleType_TargetingRule
- AwsMarketplaceCppoOpportunityRuleType_TaxConfigurationRule
GcpMarketplacePrivateOfferMigrationMetadata:
properties:
inventoryFlavorExternalName:
description: Plan name maybe with term suffix, such as "plan-name-P1Y"
type: string
productExternalName:
description: in format of "product-service-id.endpoints.gcp-project-id.cloud.goog"
type: string
projectId:
description: The GCP project ID of the GCP marketplace integration.
type: string
projectNumber:
description: The GCP project number of the provider.
type: string
providerId:
description: 'The GCP provider ID / partner ID of the GCP marketplace integration.
In most cases, it is the same as the project ID. But it could be different.'
type: string
type: object
AwsRenewalOfferType:
enum:
- ''
- External
- AwsMarketplace
type: string
x-enum-varnames:
- AwsRenewalOfferType_Unknown
- AwsRenewalOfferType_External
- AwsRenewalOfferType_AwsMarketplace
BillableDimension:
example:
priceModelTiered: '{}'
priceModelTieredPercentage: '{}'
priceModelMatrix: '{}'
minimumCommit: 5.962133916683182
length: 1
priceModelBulk: '{}'
description: description
discount: '{}'
minimumCommitScope: '{}'
minimumCommitProrata: true
billableMetricId: billableMetricId
priceModelPercentage: '{}'
name: name
priceModelBasic: '{}'
category: '{}'
priceModelVolume: '{}'
timeUnit: '{}'
properties:
billableMetricId:
description: The ID for the billable metric.
type: string
category:
allOf:
- $ref: '#/components/schemas/PriceModelCategory'
description: The category of the pricing model. This is used to determine which pricing model to use.
type: object
description:
description: Description of the dimension. This is used in the UI to display the dimension.
type: string
discount:
allOf:
- $ref: '#/components/schemas/BillingDiscount'
description: Discount for the dimension.
type: object
length:
description: The term length for the commit amount. Applicable to Direct only.
type: integer
minimumCommit:
description: The minimum commit amount. Applicable to Direct only. Ignored if the value is 0 or less.
type: number
minimumCommitProrata:
description: 'If the minimum commit is appled with pro-rata. Applicable to Direct only.
If true, the minimum commit amount will be prorated based on the usage period (starting time and ending time).'
type: boolean
minimumCommitScope:
allOf:
- $ref: '#/components/schemas/BillingMinimumCommitScope'
description: The minimum commit scope. The default value is "DIMENSION" if not set.
type: object
name:
description: Display name of the dimension. This is used in the UI to display the dimension.
type: string
priceModelBasic:
allOf:
- $ref: '#/components/schemas/PriceModelBasic'
description: The configuration for the Basic pricing model. Applicable to Direct only.
type: object
priceModelBulk:
allOf:
- $ref: '#/components/schemas/PriceModelBulk'
description: The configuration for the Package pricing model. Applicable to Direct only.
type: object
priceModelMatrix:
allOf:
- $ref: '#/components/schemas/PriceModelMatrix'
description: The configuration for the Matrix pricing model. Applicable to Direct only.
type: object
priceModelPercentage:
allOf:
- $ref: '#/components/schemas/PriceModelPercentage'
description: The configuration for the Percentage pricing model. Applicable to Direct only.
type: object
priceModelTiered:
allOf:
- $ref: '#/components/schemas/PriceModelTiered'
description: The configuration for the Tiered pricing model. Applicable to Direct only.
type: object
priceModelTieredPercentage:
allOf:
- $ref: '#/components/schemas/PriceModelTieredPercentage'
description: The configuration for the Tiered Percentage pricing model. Applicable to Direct only.
type: object
priceModelVolume:
allOf:
- $ref: '#/components/schemas/PriceModelVolume'
description: The configuration for the Bulk pricing model. Applicable to Direct only.
type: object
timeUnit:
allOf:
- $ref: '#/components/schemas/TimeUnit'
description: The term unit for the commit amount. Applicable to Direct only.
type: object
type: object
AzureMarketplacePriceFlexibleSchedule:
properties:
billingSchedule:
items:
$ref: '#/components/schemas/AzureMarketplacePriceBillingSchedule'
type: array
initialCharge:
$ref: '#/components/schemas/AzureMarketplacePriceInitialCharge'
price:
type: number
type: object
AzureLocalizedDateTime:
example:
dateTimeInUtc: dateTimeInUtc
localizePerMarket: true
properties:
dateTimeInUtc:
type: string
localizePerMarket:
type: boolean
type: object
AzureMarketState:
example:
marketCode: marketCode
state: Disabled
properties:
marketCode:
description: ISO Country Code
type: string
state:
enum:
- Disabled
- Enabled
- StopSelling
- Terminated
type: string
type: object
AwsMarketplaceCppoDurationType:
enum:
- SPECIFIC_DATES
- ONE_TIME
- NO_SET_TIME
type: string
x-enum-varnames:
- AwsMarketplaceCppoDurationType_SPECIFIC_DATES
- AwsMarketplaceCppoDurationType_ONE_TIME
- AwsMarketplaceCppoDurationType_NO_SET_TIME
AzureMarketplacePriceBillingSchedule:
properties:
chargeDate:
description: In format of YYYY-MM-DD.
type: string
note:
type: string
pricePerPaymentInUsd:
type: number
type: object
GcpMarketplaceProductMeteringMetric:
example:
priceTiers:
- startingUsageAmount: startingUsageAmount
price:
nanos: 1
units: units
currencyCode: currencyCode
fromAmount: 1.0246457001441578
- startingUsageAmount: startingUsageAmount
price:
nanos: 1
units: units
currencyCode: currencyCode
fromAmount: 1.0246457001441578
displayUnitDescription: displayUnitDescription
unit: unit
metricKind: metricKind
displayName: displayName
valueType: '{}'
name: name
description: description
displayUnit: displayUnit
id: id
reportingUnit: reportingUnit
skuId: skuId
properties:
description:
description: 'Description: A detailed description of the metric, which can be used in documentation.'
type: string
displayName:
type: string
displayUnit:
description: such as "min"
type: string
displayUnitDescription:
description: such as "minute"
type: string
id:
description: 'The usage metering metric/dimension key
It is in format of "{plan_id}_{usage_dimension_key}". For example, "basic_plan_storage".'
type: string
metricKind:
description: such as "DELTA"
type: string
name:
description: 'Name: The resource name of the metric descriptor,
in format of "{productServiceName}/{plan_id}_{usage_dimension_key}"'
type: string
priceTiers:
description: 'Price info of this usage metering metric.
Only applicable for the default offer (plan) and private offer.'
items:
$ref: '#/components/schemas/GcpPriceTier'
type: array
reportingUnit:
description: such as "min"
type: string
skuId:
description: The SKU ID of this usage metering metric. Applicable only in Private Offer.
type: string
unit:
description: such as "min"
type: string
valueType:
allOf:
- $ref: '#/components/schemas/ValueType'
description: such as "INT64"
type: object
type: object
AzureProductFeatureAvailability:
example:
markets:
- marketCode: marketCode
friendlyName: friendlyName
- marketCode: marketCode
friendlyName: friendlyName
visibility: Public
priceSchedules:
- isBaseSchedule: true
schedules:
- pricingModel: Flat
pricingUnits:
- unitType: unitType
name: sharedcore
lowerUnit: 9
upperUnit: 6
isUnlimitedUnit: true
- unitType: unitType
name: sharedcore
lowerUnit: 9
upperUnit: 6
isUnlimitedUnit: true
priceCadence:
type: Month
value: 9
retailPrice:
openPrice: 8.762042012749001
priceTierID: priceTierID
currencyCode: currencyCode
- pricingModel: Flat
pricingUnits:
- unitType: unitType
name: sharedcore
lowerUnit: 9
upperUnit: 6
isUnlimitedUnit: true
- unitType: unitType
name: sharedcore
lowerUnit: 9
upperUnit: 6
isUnlimitedUnit: true
priceCadence:
type: Month
value: 9
retailPrice:
openPrice: 8.762042012749001
priceTierID: priceTierID
currencyCode: currencyCode
dateTimeRange:
endAt:
dateTimeInUtc: dateTimeInUtc
localizePerMarket: true
startAt:
dateTimeInUtc: dateTimeInUtc
localizePerMarket: true
marketCodes:
- marketCodes
- marketCodes
friendlyName: friendlyName
- isBaseSchedule: true
schedules:
- pricingModel: Flat
pricingUnits:
- unitType: unitType
name: sharedcore
lowerUnit: 9
upperUnit: 6
isUnlimitedUnit: true
- unitType: unitType
name: sharedcore
lowerUnit: 9
upperUnit: 6
isUnlimitedUnit: true
priceCadence:
type: Month
value: 9
retailPrice:
openPrice: 8.762042012749001
priceTierID: priceTierID
currencyCode: currencyCode
- pricingModel: Flat
pricingUnits:
- unitType: unitType
name: sharedcore
lowerUnit: 9
upperUnit: 6
isUnlimitedUnit: true
- unitType: unitType
name: sharedcore
lowerUnit: 9
upperUnit: 6
isUnlimitedUnit: true
priceCadence:
type: Month
value: 9
retailPrice:
openPrice: 8.762042012749001
priceTierID: priceTierID
currencyCode: currencyCode
dateTimeRange:
endAt:
dateTimeInUtc: dateTimeInUtc
localizePerMarket: true
startAt:
dateTimeInUtc: dateTimeInUtc
localizePerMarket: true
marketCodes:
- marketCodes
- marketCodes
friendlyName: friendlyName
customMeters:
- unitOfMeasure: unitOfMeasure
displayName: displayName
includedBaseQuantities:
- quantity: 1.2315135367772556
isInfinite: true
recurringUnit: Monthly
- quantity: 1.2315135367772556
isInfinite: true
recurringUnit: Monthly
isEnabled: true
priceInUsd: 5.025004791520295
id: id
uniqueID: uniqueID
# --- truncated at 32 KB (286 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/suger/refs/heads/main/openapi/suger-offer-api-openapi.yml