Suger Billing API
Access to Billing resources, such as addon, invoice, payment, etc.
Access to Billing resources, such as addon, invoice, payment, etc.
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/suger-billing-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:
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 Billing API
version: '1.0'
servers:
- url: https://api.suger.cloud
tags:
- description: Access to Billing resources, such as addon, invoice, payment, etc.
name: Billing
paths:
/org/{orgId}/addon:
get:
description: List all addon templates
operationId: ListAddons
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- 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/BillingAddon'
type: array
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: internal error
security:
- APIKeyAuth: []
summary: List Addons
tags:
- Billing
post:
description: Create an addon template
operationId: CreateAddon
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/CreateAndUpdateAddonParams'
description: CreateAndUpdateAddonParams
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BillingAddon'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: internal error
security:
- APIKeyAuth: []
summary: Create Addon
tags:
- Billing
x-codegen-request-body-name: data
/org/{orgId}/addon/{addonId}:
delete:
description: Soft delete an addon template
operationId: DeleteAddon
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Addon ID
explode: false
in: path
name: addonId
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
'500':
content:
application/json:
schema:
type: string
description: internal error
security:
- APIKeyAuth: []
summary: Delete Addon
tags:
- Billing
get:
description: Get an addon template
operationId: GetAddon
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Addon ID
explode: false
in: path
name: addonId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BillingAddon'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: internal error
security:
- APIKeyAuth: []
summary: Get Addon
tags:
- Billing
patch:
description: Update an addon template
operationId: UpdateAddon
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Addon ID
explode: false
in: path
name: addonId
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAndUpdateAddonParams'
description: CreateAndUpdateAddonParams
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BillingAddon'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: internal error
security:
- APIKeyAuth: []
summary: Update Addon
tags:
- Billing
x-codegen-request-body-name: data
/org/{orgId}/buyer/{buyerId}/paymentTransaction/{paymentTransactionId}/refund:
get:
description: list refunds of the payment transactions.
operationId: ListRefundOfPaymentTransaction
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Buyer ID
explode: false
in: path
name: buyerId
required: true
schema:
type: string
style: simple
- description: Payment transaction ID
explode: false
in: path
name: paymentTransactionId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/BillingPaymentTransaction'
type: array
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: List Refunds.
tags:
- Billing
post:
description: create refund on the payment transaction, support partial refunds multiple times.
operationId: CreateRefund
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Buyer ID
explode: false
in: path
name: buyerId
required: true
schema:
type: string
style: simple
- description: Payment transaction ID
explode: false
in: path
name: paymentTransactionId
required: true
schema:
type: string
style: simple
- description: Refund amount
explode: true
in: query
name: amount
required: true
schema:
type: number
style: form
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BillingPaymentTransaction'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: Create Refund.
tags:
- Billing
/org/{orgId}/invoice:
get:
description: List invoices with pagination and filter by status (optional)
operationId: ListInvoices
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Optional, filter by the entitlement ID
explode: true
in: query
name: entitlementId
required: false
schema:
type: string
style: form
- description: Optional, filter by the given buyer ID
explode: true
in: query
name: buyerId
required: false
schema:
type: string
style: form
- description: Optional, filter by invoice status as filter, if not provided, all status invoices are returned
explode: true
in: query
name: status
required: false
schema:
enum:
- DRAFT
- FINALIZED
- CANCELED
- DELETED
- ''
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/BillingInvoice'
type: array
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: Internal error
security:
- APIKeyAuth: []
summary: List Invoices
tags:
- Billing
/org/{orgId}/invoice/{invoiceId}:
get:
description: Get the invoice by ID
operationId: GetInvoice
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Invoice ID
explode: false
in: path
name: invoiceId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BillingInvoice'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: Get Invoice
tags:
- Billing
/org/{orgId}/invoice/{invoiceId}/info:
patch:
description: Update a draft invoice. Only DueDate, OverallDiscount, and Memo can be updated.
operationId: UpdateInvoiceInfo
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Invoice ID
explode: false
in: path
name: invoiceId
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateInvoiceInfoRequest'
description: Update Invoice Info Request Params
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BillingInvoiceInfo'
description: Updated Invoice info
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: Update Invoice Info
tags:
- Billing
x-codegen-request-body-name: data
/org/{orgId}/invoice/{invoiceId}/issue:
patch:
description: Issue the invoice immediately. It can be used for manual issue or reissue invoice.
operationId: IssueInvoice
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Invoice ID
explode: false
in: path
name: invoiceId
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
items:
type: string
type: array
description: List of Contact IDs
required: false
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BillingInvoice'
description: the issued Invoice
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: Issue Invoice
tags:
- Billing
x-codegen-request-body-name: contactIds
/org/{orgId}/invoice/{invoiceId}/pay:
patch:
description: Initiate the payment for the invoice immediately. It can be used for manual payment or retry payment.
operationId: PayInvoice
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Invoice ID
explode: false
in: path
name: invoiceId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BillingInvoice'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: Pay Invoice
tags:
- Billing
/org/{orgId}/invoice/{invoiceId}/preview:
get:
description: Returns the preview HTML content of the invoice issued email.
operationId: PreviewInvoiceEmail
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Invoice ID
explode: false
in: path
name: invoiceId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
text/html:
schema:
type: string
description: HTML content of the invoice issued email
'400':
content:
text/html:
schema:
type: string
description: Bad request error
'500':
content:
text/html:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: Preview Invoice Email
tags:
- Billing
/org/{orgId}/invoice/{invoiceId}/void:
patch:
description: Void the invoice. It can be used for manual void or cancel the invoice.
operationId: VoidInvoice
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Invoice ID
explode: false
in: path
name: invoiceId
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/BillingInvoice'
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: Void Invoice
tags:
- Billing
/org/{orgId}/paymentTransaction:
get:
description: List payment transactions with pagination and filters
operationId: ListPaymentTransactions
parameters:
- description: Organization ID
explode: false
in: path
name: orgId
required: true
schema:
type: string
style: simple
- description: Optional, filter by the given buyer ID
explode: true
in: query
name: buyerId
required: false
schema:
type: string
style: form
- description: Optional, filter by the given entitlement ID
explode: true
in: query
name: entitlementId
required: false
schema:
type: string
style: form
- description: Optional, filter by the given invoice ID
explode: true
in: query
name: invoiceId
required: false
schema:
type: string
style: form
- description: Optional, filter by status
explode: true
in: query
name: status
required: false
schema:
enum:
- PENDING
- PROCESSING
- SUCCESS
- FAILED
type: string
style: form
- description: Optional, filter by transaction type
explode: true
in: query
name: type
required: false
schema:
enum:
- CHARGE
- REFUND
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/BillingPaymentTransaction'
type: array
description: OK
'400':
content:
application/json:
schema:
type: string
description: Bad request error
'500':
content:
application/json:
schema:
type: string
description: Internal server error
security:
- APIKeyAuth: []
summary: List Payment Transactions
tags:
- Billing
components:
schemas:
StripeRefundDestinationDetails:
properties:
card:
$ref: '#/components/schemas/StripeRefundDestinationDetailsCard'
type:
description: The type of transaction-specific details of the payment method used in the refund (e.g., `card`). An additional hash is included on `destination_details` with a name matching this value. It contains information specific to the refund transaction.
type: string
us_bank_transfer:
$ref: '#/components/schemas/StripeRefundDestinationDetailsUSBankTransfer'
type: object
StripePaymentIntentStatus:
enum:
- requires_payment_method
- requires_confirmation
- requires_action
- processing
- requires_capture
- canceled
- succeeded
type: string
x-enum-varnames:
- StripePaymentIntentStatus_RequiresPaymentMethod
- StripePaymentIntentStatus_RequiresConfirmation
- StripePaymentIntentStatus_RequiresAction
- StripePaymentIntentStatus_Processing
- StripePaymentIntentStatus_RequiresCapture
- StripePaymentIntentStatus_Canceled
- StripePaymentIntentStatus_Succeeded
StripeBalanceTransaction:
properties:
amount:
description: Gross amount of this transaction (in cents (or local equivalent)). A positive value represents funds charged to another party, and a negative value represents funds sent to another party.
type: integer
available_on:
description: The date that the transaction's net funds become available in the Stripe balance.
type: integer
chargeId:
description: ID of the charge which the balance transaction comes from.
type: string
created:
description: Time at which the object was created. Measured in seconds since the Unix epoch.
type: integer
description:
description: An arbitrary string attached to the object. Often useful for displaying to users.
type: string
exchange_rate:
description: If applicable, this transaction uses an exchange rate. If money converts from currency A to currency B, then the `amount` in currency A, multipled by the `exchange_rate`, equals the `amount` in currency B. For example, if you charge a customer 10.00 EUR, the PaymentIntent's `amount` is `1000` and `currency` is `eur`. If this converts to 12.34 USD in your Stripe account, the BalanceTransaction's `amount` is `1234`, its `currency` is `usd`, and the `exchange_rate` is `1.234`.
type: number
fee:
description: Fees (in cents (or local equivalent)) paid for this transaction. Represented as a positive integer when assessed.
type: integer
fee_details:
description: Detailed breakdown of fees (in cents (or local equivalent)) paid for this transaction.
items:
$ref: '#/components/schemas/StripeBalanceTransactionFeeDetail'
type: array
id:
description: Unique identifier for the object.
type: string
net:
description: Net impact to a Stripe balance (in cents (or local equivalent)). A positive value represents incrementing a Stripe balance, and a negative value decrementing a Stripe balance. You can calculate the net impact of a transaction on a balance by `amount` - `fee`
type: integer
status:
description: The transaction's net funds status in the Stripe balance, which are either `available` or `pending`.
type: string
type:
description: 'Transaction type: `adjustment`, `advance`, `advance_funding`, `anticipation_repayment`, `application_fee`, `application_fee_refund`, `charge`, `climate_order_purchase`, `climate_order_refund`, `connect_collection_transfer`, `contribution`, `issuing_authorization_hold`, `issuing_authorization_release`, `issuing_dispute`, `issuing_transaction`, `obligation_outbound`, `obligation_reversal_inbound`, `payment`, `payment_failure_refund`, `payment_network_reserve_hold`, `payment_network_reserve_release`, `payment_refund`, `payment_reversal`, `payment_unreconciled`, `payout`, `payout_cancel`, `payout_failure`, `refund`, `refund_failure`, `reserve_transaction`, `reserved_funds`, `stripe_fee`, `stripe_fx_fee`, `tax_fee`, `topup`, `topup_reversal`, `transfer`, `transfer_cancel`, `transfer_failure`, or `transfer_refund`. Learn more about [balance transaction types and what they represent](https://stripe.com/docs/reports/balance-transaction-types). To classify transactions for accounting purposes, consider `reporting_category` instead.'
type: string
type: object
InvoiceAddFixedFee:
example:
reason: reason
quantity: 0
endDate: 2000-01-23 04:56:07+00:00
rate: 6.027456183070403
startDate: 2000-01-23 04:56:07+00:00
properties:
endDate:
format: date-time
type: string
quantity:
type: integer
rate:
type: number
reason:
type: string
startDate:
format: date-time
type: string
type: object
Partner:
enum:
- ''
- ADYEN
- ALIBABA
- AWS
- AWS_CHINA
- AZURE
- CHARGEBEE
- DATABRICKS
- DOCUSIGN
- GCP
- GOOGLE
- HUBSPOT
- INTUIT
- LAGO
- MARKETO
- METRONOME
- MICROSOFT
- ORACLE
- ORB
- REDHAT
- SALESFORCE
- SLACK
- SNOWFLAKE
- STRIPE
- ZOHO
type: string
x-enum-varnames:
- Partner_UNKNOWN
- Partner_ADYEN
- Partner_ALIBABA
- Partner_AWS
- Partner_AWS_CHINA
- Partner_AZURE
- Partner_CHARGEBEE
- Partner_DATABRICKS
- Partner_DOCUSIGN
- Partner_GCP
- Partner_GOOGLE
- Partner_HUBSPOT
- Partner_INTUIT
- Partner_LAGO
- Partner_MARKETO
- Partner_METRONOME
- Partner_MICROSOFT
- Partner_ORACLE
- Partner_ORB
- Partner_REDHAT
- Partner_SALESFORCE
- Partner_SLACK
- Partner_SNOWFLAKE
- Partner_STRIPE
- Partner_ZOHO
InvoiceAdjustDiscountByDimension:
example:
reason: reason
dimensionKey: dimensionKey
discount:
discountType: PERCENTAGE
value: 1.4658129805029452
properties:
dimensionKey:
type: string
discount:
$ref: '#/components/schemas/BillingDiscount'
reason:
type: string
type: object
BillingAddon:
example:
organizationID: organizationID
creationTime: 2000-01-23 04:56:07+00:00
name: name
description: description
id: id
info:
amount: 0.8008281904610115
lastUpdateTime: 2000-01-23 04:56:07+00:00
status: ACTIVE
properties:
creationTime:
format: date-time
type: string
description:
description: Description of the addon
maxLength: 300
type: string
id:
maxLength: 36
type: string
info:
$ref: '#/components/schemas/BillingAddonInfo'
lastUpdateTime:
format: date-time
type: string
name:
description: Name of the addon, e.g. "Support Plan"
maxLength: 50
minLength: 4
type: string
organizationID:
type: string
status:
$ref: '#/components/schemas/BillingAddonStatus'
type: object
BillingPaymentInstallmentDetail:
example:
amount: 1.4894159098541704
description: description
chargeOn: 2000-01-23 04:56:07+00:00
properties:
amount:
type: number
chargeOn:
format: date-time
type: string
description:
type: string
type: object
BillingAddonStatus:
enum:
- ACTIVE
- DELETED
type: string
x-enum-varnames:
- BillingAddonStatus_ACTIVE
- BillingAddonStatus_DELETED
BillingPaymentStatus:
enum:
- PENDING
- PROCESSING
- SUCCESS
- FAILED
type: string
x-enum-varnames:
- BillingPaymentStatus_PENDING
- BillingPaymentStatus_PROCESSING
- BillingPaymentStatus_SUCCESS
- BillingPaymentStatus_FAILED
StripeDispute:
example:
paymentIntentId: paymentIntentId
reason: reason
amount: 6
is_charge_refundable: true
livemode: true
chargeId: chargeId
created: 1
id: id
status: status
properties:
amount:
description: Disputed amount. Usually the amount of the charge, but it can differ (usually because of currency fluctuation or because only part of the order is disputed).
type: integer
chargeId:
description: ID of the charge that's disputed.
type: string
created:
description: Time at which the object was created. Measured in seconds since the Unix epoch.
type: integer
id:
description: Unique identifier for the object.
type: string
is_charge_refundable:
description: If true, it's still possible to refund the disputed payment. After the payment has been fully refunded, no further funds are withdrawn from your Stripe account as a result of this dispute.
type: boolean
livemode:
description: Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
type: boolean
paymentIntentId:
description: ID of the PaymentIntent that's disputed.
type: string
reason:
description: Reason given by cardholder for dispute. Possible values are `bank_cannot_process`, `check_returned`, `credit_not_processed`, `customer_initiated`, `debit_not_authorized`, `duplicate`, `fraudulent`, `general`, `incorrect_account_details`, `insufficient_funds`, `product_not_received`, `product_unacceptable`, `subscription_canceled`, or `unrecognized`. Learn more about [dispute reasons](https://stripe.com/docs/disputes/categories).
type: string
status:
description: Current status of dispute. Possible values are `warning_needs_response`, `warning_under_review`, `warning_closed`, `needs_response`, `under_review`, `won`, or `lost`.
type: string
type: object
BillingAddonRecord:
example:
amount: 0.8008281904610115
name: name
description: description
chargeOn: 2000-01-23 04:56:07+00:00
id: id
properties:
amount:
type: number
chargeOn:
format: date-time
type: string
description:
type: string
id:
type: string
name:
type: string
type: object
# --- truncated at 32 KB (63 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/suger/refs/heads/main/openapi/suger-billing-api-openapi.yml