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/paigo-offerings-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:
title: Paigo Customers Offerings API
description: "\nFor developer documentation of the platform, please visit https://docs.paigo.tech.\n\n## Authentication\nPaigo API supports **bearer token** as the authentication method.\nSteps to set up authentication:\n1. Sign up with Paigo platform and get **client id** and **client secret**.\n2. Make a POST request to the auth endpoint `https://auth.paigo.tech/oauth/token` with the following body:\n```json\n{\n audience: 'https://qnonyh1pc7.execute-api.us-east-1.amazonaws.com',\n grant_type: 'client_credentials',\n client_id: <your client id>,\n client_secret: <your client secret>\n}\n```\nAdditionally verify that the following headers are set by the client you are using: \n```json\n{\n \"Content-Type\": \"application/json\"\n}\n```\n\n3. Use the access token in the response to make requests to the Paigo API. Here is an example of the response: \n```json \n{\n access_token: <your access token>,\n expires_in: 86400,\n token_type: 'Bearer' \n}\n```\n4. To use Paigo API, add in the header of your request:\n```json\n{\n Authorization: \"Bearer <your access token>\"\n}\n```\n\n## API Endpoints\nPaigo API has the following endpoint:\n- Production Environment API: `https://api.prod.paigo.tech`\n "
version: v1.10
contact: {}
servers:
- url: https://api.prod.paigo.tech
description: Product Environment API
tags:
- name: Offerings
description: Manage offerings in Paigo.
paths:
/offerings:
get:
operationId: Get all Offerings
summary: ''
description: List all offerings created in this account
parameters: []
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ReadOfferingResponseDTO'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/BasicResponseDTO'
tags:
- Offerings
security:
- bearer: []
post:
operationId: Create an offering
summary: ''
description: Create an offering
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOfferingDTO'
responses:
'201':
description: Offering Created
content:
application/json:
schema:
$ref: '#/components/schemas/CreateOfferingResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/BasicResponseDTO'
tags:
- Offerings
security:
- bearer: []
/offerings/{offeringId}:
get:
operationId: Get an offering by ID
summary: ''
description: Find an offering
parameters:
- name: offeringId
required: true
in: path
description: 'The unique identifier assigned by Paigo.<br><br> Example: `22372d1d-1c0c-40e0-8167-af0b4f5c82f6`'
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ReadOfferingResponseDTO'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/BasicResponseDTO'
'404':
description: Offering Not Found
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message
example: 'Offering with ID: 807867e0-26ca-4831-846b-a670224db055 not found'
error:
type: string
description: The error name
example: Not Found
statusCode:
type: number
description: The HTTP status code
example: 404
externalDocs:
description: MDN Documentation Reference
url: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404
example:
message: 'Offering with ID: 807867e0-26ca-4831-846b-a670224db055 not found'
error: Not Found
statusCode: 404
required:
- message
- error
- statusCode
tags:
- Offerings
security:
- bearer: []
put:
operationId: Update an offering
summary: ''
description: Update an offering
parameters:
- name: offeringId
required: true
in: path
description: 'The unique identifier assigned by Paigo.<br><br> Example: `22372d1d-1c0c-40e0-8167-af0b4f5c82f6`'
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateOfferingDto'
responses:
'200':
description: Offering Updated
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateOfferingResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/BasicResponseDTO'
'404':
description: Offering Not Found
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message
example: 'Offering with ID: 807867e0-26ca-4831-846b-a670224db055 not found'
error:
type: string
description: The error name
example: Not Found
statusCode:
type: number
description: The HTTP status code
example: 404
externalDocs:
description: MDN Documentation Reference
url: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404
example:
message: 'Offering with ID: 807867e0-26ca-4831-846b-a670224db055 not found'
error: Not Found
statusCode: 404
required:
- message
- error
- statusCode
tags:
- Offerings
security:
- bearer: []
delete:
operationId: Delete an offering
summary: ''
description: Delete an offering
parameters:
- name: offeringId
required: true
in: path
description: 'The unique identifier assigned by Paigo.<br><br> Example: `22372d1d-1c0c-40e0-8167-af0b4f5c82f6`'
schema:
type: string
responses:
'200':
description: Offering Deleted
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteOfferingResponse'
'404':
description: Offering Not Found
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message
example: 'Offering with ID: 807867e0-26ca-4831-846b-a670224db055 not found'
error:
type: string
description: The error name
example: Not Found
statusCode:
type: number
description: The HTTP status code
example: 404
externalDocs:
description: MDN Documentation Reference
url: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404
example:
message: 'Offering with ID: 807867e0-26ca-4831-846b-a670224db055 not found'
error: Not Found
statusCode: 404
required:
- message
- error
- statusCode
'409':
description: Conflict - Can't delete Offering
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: An error message containing the reason why the offering cannot be deleted.<br><br> Offerings cannot be deleted if they are in use by active customers.
example: 'Cannot delete offering when they are attached to customers, remove customers from offerings before deleting. Current customerIds using the offering:: 80ddb121-e3d2-4d28-891d-704532c6649d'
tags:
- Offerings
security:
- bearer: []
components:
schemas:
KafkaDeploymentParametersDto:
type: object
properties:
securityMechanism:
type: string
externalDocs:
url: https://docs.confluent.io/platform/current/kafka/authentication_sasl/authentication_sasl_plain.html#sasl-plain-overview
example: PLAIN
description: 'The security protocol to use when connecting to the Kafka cluster. Defaults to `PLAIN`. Note this is not PLAINTEXT. PLAIN is the SASL_PLAIN protocol. <br><br> Example: `"PLAIN"`'
username:
type: string
description: 'The username to use when connecting to the Kafka cluster. <br><br> Example: `"admin"`'
example: admin
password:
type: string
description: 'The password to use when connecting to the Kafka cluster. <br><br> Example: `"hunter2"`'
example: hunter2
bootstrapServerEndpoint:
type: string
description: 'The endpoint of the Kafka cluster to connect to. <br><br> Example: `"kafka.paigo.tech"`'
example: kafka.paigo.tech
topic:
type: string
description: 'The topic to subscribe to. <br><br> Example: `"test-topic"`'
example: '"test-topic"'
dlqTopic:
type: string
description: 'The DLQ topic to write to when a message fails to be processed. <br><br> Example: `"dlq-topic"`'
example: '"dlq-topic"'
required:
- securityMechanism
- username
- password
- bootstrapServerEndpoint
- topic
- dlqTopic
TimeBasedConsumptionUnit:
type: object
properties:
unit:
enum:
- second
- minute
- hour
- day
type: string
description: A unit of time for a dimension of type time-based
examples:
- second
- minute
- hour
- day
type:
type: string
enum:
- time
description: A string that indicates the type of consumption unit
required:
- unit
- type
DimensionOverridesDto:
type: object
properties:
dimensionId:
type: string
description: 'The Id of the dimension that is being overridden.
<br><br>
Example: `"6a8fb855-206c-4226-8695-daf67352e7ee"`'
example: 6a8fb855-206c-4226-8695-daf67352e7ee
consumptionPrice:
type: string
description: 'The price of the dimension. Must be a valid number.
<br><br>
Example: `"10.00"`'
example: '10.00'
tiers:
type: array
items:
$ref: '#/components/schemas/DimensionTierDto'
tiersGroupByMetadata:
type: array
items:
$ref: '#/components/schemas/DimensionTiersGroupByMetadataDto'
required:
- dimensionId
DimensionTiersGroupByMetadataDto:
type: object
properties:
metadataGroups:
type: object
description: 'The metadata groups to group the tiers by. A collection of key value pairs. metadata groups are used alongside the usage passed in to define more accurately how to break up price and usage for a dimension.
<br><br>
Example: `{ "instanceType": "t3.medium", "region": "us-east-1", "deployment": "production"}`'
tiers:
type: array
items:
$ref: '#/components/schemas/DimensionTierDto'
required:
- metadataGroups
- tiers
ReadOfferingResponseData:
type: object
properties:
offeringVisibility:
description: 'The visibility of the offering, specifically if its private or public.
Public offerings are designed to be shared among customers.
Private offerings are typically used for enterprise deals which contain discounts or prepaid credits.
<br><br>
Example: `"private"`'
example: private
enum:
- private
- public
type: string
default: public
offeringType:
type: string
description: 'The type of offering.
<br> • `usage-based` - The offering is a pure usage-based offering, or pay-as-you-go. Customers on this plan will be billed precisely based on consumption.
<br> • `subscription` - The offering is a fixed subscription. Customer will be billed on a fixed price.
Example `"subscription"`'
enum:
- usage-based
- subscription
default: usage-based
example: subscription
externalDocs:
description: Read more about the different offering types
url: https://docs.paigo.tech/model-pricing-and-package/pricing-modeling-guide
billingCycle:
description: 'The time frame when an automatic bill should be sent leave empty for no automated billing
<br><br>
Example `"monthly"`'
example: monthly
enum:
- monthly
- annualToDate
- topUp
type: string
default: monthly
currency:
description: 'The supported currency for the offering. USD is currently supported. Customers can override the currency for their account.
However all offerings are denoted in USD.
<br><br>
Example `"USD"`'
example: USD
enum:
- USD
- EUR
- CNY
type: string
dimensionOverrides:
description: Overrides for the offering. Applies specific overrides to the dimensions associated with the offering. These effect the price of each dimension on the offering.
type: array
items:
$ref: '#/components/schemas/DimensionOverridesDto'
offeringId:
type: string
description: 'Unique identifier assigned by Paigo.
<br><br>
Example: `539b7f74-3832-474e-a955-6d69c5df12d0`'
example: 539b7f74-3832-474e-a955-6d69c5df12d0
dimensions:
description: The list of dimensions attached to the offering.
type: array
items:
$ref: '#/components/schemas/ReadDimensionResponseData'
prepaidCredit:
type: string
description: 'Prepaid credit amount to be deducted as part of the bill payments. Only numerical string is allowed.
<br><br>Example: `"20.00"` for $20.00.'
example: '20.00'
minimumCharge:
type:
- string
- 'null'
description: 'A minimum charge to be billed to the customer in the event that the customer''s bill is less than the minimum charge. Only on usage based offerings. Only numerical strings are allowed, must be greater than zero.
<br><br>Example: `"32.00"` for $32.00.'
example: '32.00'
topUpAmount:
type: string
description: 'The amount to top up the account by. Only positive number string is allowed. Required if `billingCycle` is `topUp`.
<br><br>
Example: `"20.00"` for $20.00.'
example: '20.00'
topUpThreshold:
type: string
description: 'The threshold at which the account should be topped up. Only positive number string is allowed. Between 0 and 1.
If not provided the default value will be 0.2 or 20%. Meaning that when the account balance reaches 20% of the the top up amount, the account will be
topped up, and the end customer charged.
<br><br>
Example: `"0.2"` for 20%.'
example: '0.2'
subscriptionPrice:
type: number
description: 'The price of the subscription.
Only positive number string is allowed.
Only required if `offeringType` is `subscription`.
<br><br>
Example: `20.00` for $20.00.'
example: 20
freeTrialLength:
type: string
description: 'The length of time for a free trial. This is a number of days.
Only positive number string is allowed.
<br><br>
Example: `"1"` for 1 day or 1 billing cycle depending on the offeringType.'
example: '1'
offeringName:
type: string
description: 'A friendly, human-readable name for the offering.
<br><br>
Example `"Entperise Plan"`'
example: Entperise Plan
metadata:
type: object
description: 'An optional key-value map of additional metadata to associate with the offerings.
such as environment, purpose, owner, developer, contract number,
or any arbitrary data to be associated with this usage record. Additionally, if `null` is passed for any value in the metadata object it will be removed.
To entirely remove the metadata object, pass null to the metadata field.
<br><br>
Example `{"environment": "staging", "purpose": "proof-of-concept", "owner": "John Doe", "workspaceId": null}`
<br><br>
In the above example, the `workspaceId` metadata key will be removed from the dimension. To remove all fields pass the following.
<br><br>
Example `"metadata": null`'
required:
- offeringId
- dimensions
- offeringName
ReadMeasurementResponseData:
type: object
properties:
measurementMode:
type: string
enum:
- infrastructureBased
- agentBased
- datastoreBased
example: infrastructureBased
description: The measurement method. See <a href="https://docs.paigo.tech/measure-usage-and-collect-data/measure-and-collect-usage-data-at-production-scale">Measure and Collect Usage Data at Production Scale</a> for more information. <br><br> Example `"agentBased"`
measurementConfiguration:
description: Configuration for the measurement method.
oneOf:
- $ref: '#/components/schemas/InfrastructureAccessInformation'
- $ref: '#/components/schemas/AgentAccessInformation'
- $ref: '#/components/schemas/DatastoreAccessInformationResponse'
measurementName:
type: string
description: 'The human readable name of the measurement
<br><br>
Example `"EBS Usage"`'
example: EBS Usage
measurementId:
type: string
description: 'Unique identifier assigned by Paigo.
<br><br>
Example `"de388932-a7e1-11ed-afa1-0242ac120002"`'
example: de388932-a7e1-11ed-afa1-0242ac120002
required:
- measurementMode
- measurementConfiguration
- measurementId
InfrastructureAccessInformation:
type: object
properties:
iamRoleArn:
type: string
description: 'The IAM role created by SaaS business and can be by Paigo AWS account to measure usage.
<br><br>
Example `"arn:aws:iam::214826386939:role/paigo-scraper"`'
example: arn:aws:iam::214826386939:role/paigo-scraper
externalId:
type: string
description: 'The Optional ExternalId associated with the IAM role.
<br><br>
Example `"123456789"`'
example: '123456789'
externalDocs:
description: Read more about why externalIds are important
url: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html
cloudPlatform:
type: string
enum:
- aws
example: aws
description: Cloud infrastructure platform <br><br> Example `"aws"`
region:
type: string
description: 'Supported region of the infrastructure
Example `"us-east-1"`'
example: us-east-1
resourceType:
type: string
enum:
- ebssnapshot
- ebs
- k8spod
- ec2
- ec2egress
- usageData
example: ebs
description: Underlying resource type which Paigo measures usage for. <br><br> Example `"ec2"`
required:
- iamRoleArn
- cloudPlatform
- region
- resourceType
AgentAccessInformation:
type: object
properties:
iamRoleArn:
type: string
description: 'The IAM role created by SaaS business and can be by Paigo AWS account to measure usage.
<br><br>
Example `"arn:aws:iam::214826386939:role/paigo-scraper"`'
example: arn:aws:iam::214826386939:role/paigo-scraper
externalId:
type: string
description: 'The Optional ExternalId associated with the IAM role.
<br><br>
Example `"123456789"`'
example: '123456789'
externalDocs:
description: Read more about why externalIds are important
url: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html
hostingPlatform:
type: string
enum:
- k8spod
example: k8spod
description: Hosting platform of SaaS application
required:
- iamRoleArn
- hostingPlatform
DeleteOfferingResponse:
type: object
properties:
message:
type: string
description: A human readable message describing the outcome of the operation
example: This is a sample API message. The exact message may vary based on the API behavior
offeringId:
type: string
description: The Unique ID defining the offering document
example: 539b7f74-3832-474e-a955-6d69c5df12d0
required:
- message
- offeringId
BasicResponseDTO:
type: object
properties:
message:
type: string
description: A human readable message describing the outcome of the operation
example: This is a sample API message. The exact message may vary based on the API behavior
required:
- message
CountBasedConsumptionUnit:
type: object
properties:
unit:
type: string
enum:
- count-based
description: A dimensionless unit for a dimension of type count-based
examples:
- count-based
type:
type: string
enum:
- count
description: A string that indicates the type of consumption unit
required:
- unit
- type
DimensionTierDto:
type: object
properties:
tierName:
type: string
description: 'The name of the tier as it would appear on the invoice. If Tier name is not included, no `tierName` will be displayed on the invoice, and it will follow the default line item naming standard. See: https://docs.paigo.tech/invoicing-and-payment/issue-invoice/automatic-line-item-formatting
<br><br>
Example: `"Tier 1"`'
example: Tier 1
upperBound:
type: string
description: 'The upper limit of the tier, inclusive. If the upperBound is set to "inf", it must have the highest `tierPosition`. Additionally, the `upperBound` must be a multiple of the `usageIncrement`
on the dimension. For example, if the `usageIncrement` is 100, the `upperBound` must be 100, 200, 300, etc. The `upperBound` cannot overlap with previous tiers, so tier 1''s `upperBound` must be smaller than tier 2''s.
<br><br>
Example: `"100"`'
example: '100'
unitPrice:
type: string
description: 'The unit price of the tier.
<br><br>
Example: `"10"`'
example: '10'
tierPosition:
type: string
description: 'The position of the tier. The first tier must have a `tierPosition` of 1, the second tier must have a `tierPosition` of 2, etc. Order of the tiers is determined by the `tierPosition`.
<br><br>
Example: `"1"`'
example: '1'
required:
- upperBound
- tierPosition
DatastoreAccessInformationResponse:
type: object
properties:
platform:
description: Underlying resource type which paigo connects to. <br><br> Example `"s3"`
enum:
- s3
- kafka
type: string
examples:
- s3
consumerDeploymentParameters:
description: The access information and configuration for deploying a datastore consumer by Paigo. Use this field in a case where Paigo is deploying a consumer and you want to provide the access information for the datastore.
oneOf:
- $ref: '#/components/schemas/KafkaDeploymentParametersDto'
ingestion:
type: string
description: The Ingestion endpioint for data to be dropped off at.
dlq:
type: string
description: The DLQ endpoint for data which has failed to be processed.
iamRoleArn:
type: string
description: The IAM role associated with the endpoints for access management
externalId:
type: string
description: The externalId associated with the endpoints
region:
type: string
description: The region associated with the endpoints, defaults to `us-east-1`
accountId:
type: string
description: 'The Unqiue ID for your cloud account.
<br><br>
Example `"623673123435"`'
example: '623673123435'
required:
- platform
- ingestion
- dlq
ReadDimensionResponseData:
type: object
properties:
dimensionName:
type: string
description: 'A friendly, human-readable name for the dimension.
<br><br>
Example `"API Call"`'
examples:
- API Call
- CPU Hours
- Provisioned Capacity
consumptionUnit:
description: 'Consumption unit of the dimension.
Paigo supports three types of consumption units: count-based, time-based, and data-based.
Supported values for each consumption unit type are listed below. <br>
- count: `"count-based"` <br>
- time-based: `"second"`, `"minute"`, `"hour"`, `"day"` <br>
- data-based: `"byte"`, `"kilobyte"`, `"megabyte"`, `"gigabyte"` <br>
This field accepts a JSON object with the following schema: <br>
```
{ "type": "typeName", "unit": "unitName" }
```
<br><br>
Example: <br>
`{ "type": "count", "unit": "count-based" }` <br>
`{ "type": "time", "unit": "hour" }` <br>
`{ "type": "data", "unit": "byte" }` <br>'
oneOf:
- $ref: '#/components/schemas/CountBasedConsumptionUnit'
- $ref: '#/components/schemas/TimeBasedConsumptionUnit'
- $ref: '#/components/schemas/DatabasedConsumptionUnit'
usageIncrement:
type: string
description: 'The minimum increment for usage amount.
As an example, if usage increment is 1 Hour job execution time,
then 1 Hour and 5 Minutes execution time may be calculated as 1 Hour or 2 Hours,
depending on the rounding algorithm field of the dimension.
<br><br>
Example `1`'
example: '24'
externalDocs:
description: See how usage increment is used in the billing process
url: https://docs.paigo.tech/model-pricing-and-package/define-product-metrics#understand-how-billing-aggregation-works
usageEntitlement:
description: 'Used with Subscription Tier Offering type. <br>
SaaS customers subscribed to a subscription tier are entitled to use the amount of product
with regard to the dimension up to the value specified in this field.
For example, a subscription tier may entitle subscribers to make up to 1,000,000 API requests.'
oneOf:
- type: number
description: The number of units that the customer is entitled to use, must be greater than or equal to 0
example: 1000000
- type: string
format: inf
description: The customer is entitled to use the product's dimension without any limit
example: inf
examples:
- inf
- 1000000
aggregationInterval:
description: Time interval to aggregate dimension usage data for billing. <br><br>
enum:
- none
- hour
- day
- month
type: string
example: hour
default: hour
externalDocs:
description: See how aggregation interval is used in the billing process
url: https://docs.paigo.tech/model-pricing-and-package/define-product-metrics#understand-how-billing-aggregation-works
aggregationMethod:
description: 'The algorithm to aggregate raw usage data for billing.
<br><br>'
enum:
- sum
- max
- min
- count
- average
- last
type: string
example: sum
default: max
externalDocs:
description: See how aggregation method is used in the billing process
url: https://docs.paigo.tech/model-pricing-and-package/define-product-metrics#understand-how-billing-aggregation-works
dimensionId:
type: string
description: The unique ID for a dimension
example: 8a7b5f91-3b85-4cf4-8585-dcdf17f49004
measurement:
description: The measurement attached to the dimension
allOf:
- $ref: '#/components/schemas/ReadMeasurementResponseData'
rounding:
type: string
description: 'The rounding algorithm that is used to calculate the amount of usage increment.
Ceiling algorithm rounds up, floor algorithm rounds down, the round algrogrithm rounds to the nearest whole integer rounding half away from zero.
As an example, if usage increment is 1 Hour job execution time,
then 1 Hour and 5 Minutes execution time may be calculated as 2 Hours for ceiling algorithm, 1 Hour for floor algorithm, and 1 Hour for round algorithm.
depending on the rounding algorithm field of the dimension.
<br><br>'
enum:
- round
- floor
- ceiling
overageAllowed:
type: string
description: 'Used with Subscription Tier Offering type. <br>
When the usage entitlement is specified,
this field decides if allowing SaaS customers to use more than entitled amount of the product dimension.'
enum:
# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/paigo/refs/heads/main/openapi/paigo-offerings-api-openapi.yml