Siro Billing Graph API
The Billing Graph API from Siro — 10 operation(s) for billing graph.
The Billing Graph API from Siro — 10 operation(s) for billing graph.
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/siro-billing-graph-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:
version: 1.0.0
title: Swagger Billing Graph API
servers:
- url: https://api.siro.ai/
description: Siro API Gateway
tags:
- name: Billing Graph
paths:
/v1/billing-graph/accounts:
post:
summary: Create a billing account
description: Creates a new billing account for a payment-provider customer. The account's seat capacity is derived from the customer's active subscription line items at the time of creation. The subscription end date and term length are optional and must be supplied together. Returns 409 Conflict if a billing account already exists for the given customer identifier.
requestBody:
content:
application/json:
schema:
type: object
properties:
stripeCustomerId:
type: string
minLength: 1
description: Customer identifier from the payment provider used to look up subscription quantities.
example: cus_ExampleCustomerId
subscriptionEndDate:
type: string
format: date-time
description: Instant when the current billing contract or subscription period ends, in ISO 8601 format.
example: '2026-12-31T23:59:59.000Z'
subscriptionLengthInMonths:
type: integer
minimum: 1
description: Length of the billing term in whole months. Omit when not applicable.
example: 12
isDynamicAllocation:
type: boolean
description: Whether seat availability is computed from billing-account max seats instead of per-link seat allocation. Defaults to true when omitted.
example: true
required:
- stripeCustomerId
additionalProperties: false
responses:
'201':
description: Create a billing account
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
id:
type: string
format: uuid
description: Unique identifier assigned to the billing account record.
example: 550e8400-e29b-41d4-a716-446655440000
stripeCustomerId:
type: string
description: Customer identifier from the payment provider for this account.
example: cus_ExampleCustomerId
maxSeats:
type: integer
minimum: 0
description: Total purchased seats derived from active subscription line items.
example: 25
isDynamicAllocation:
type: boolean
description: Whether seat availability is computed from billing-account max seats instead of per-link seat allocation.
example: true
seatsUsed:
type: integer
minimum: 0
description: 'Seats currently used on this billing account: distinct billed users across every organization and team attached to the account.'
example: 5
seatsRemaining:
type: integer
description: 'Seats still available on this billing account: `maxSeats` minus the deduplicated count of users currently billed across every organization and team attached to the account.'
example: 20
subscriptionEndDate:
type:
- string
- 'null'
format: date-time
description: Contract or subscription end instant in ISO 8601 format, if provided.
example: '2026-12-31T23:59:59.000Z'
subscriptionLengthInMonths:
type:
- integer
- 'null'
minimum: 1
description: Billing term length in whole months, if provided.
example: 12
required:
- id
- stripeCustomerId
- maxSeats
- isDynamicAllocation
- seatsUsed
- seatsRemaining
- subscriptionEndDate
- subscriptionLengthInMonths
cursor:
anyOf:
- type: string
- type: number
- {}
pageSize:
type: number
limit:
type: number
total:
type:
- number
- 'null'
hasNextPage:
type: boolean
required:
- data
'400':
description: Bad Request - Invalid parameters
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Error message
required:
- error
'401':
description: Unauthorized - User not authenticated
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Authentication error message
required:
- error
'403':
description: Forbidden - User does not have access
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Authorization error message
required:
- error
'404':
description: Not Found - Resource not found
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Resource not found error message
required:
- error
'422':
description: Unprocessable Content - The request failed validation checks
content:
application/json:
schema:
type: object
properties:
issues:
type: array
items:
type: object
properties:
code:
type: string
expected:
type: string
received:
type: string
path:
type: array
items:
anyOf:
- type: string
- type: number
message:
type: string
required:
- code
- path
- message
name:
type: string
enum:
- ZodError
required:
- issues
- name
'500':
description: Internal Server Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Internal server error message
required:
- error
security:
- SiroAuthToken: []
tags:
- Billing Graph
/v1/billing-graph/me/organization-billing-accounts:
get:
summary: List organization billing links
description: 'Returns associations between organizations and billing accounts that the authenticated user is allowed to view. Only links to active billing accounts are included; cancelled billing accounts are omitted. Scope depends on the caller''s role: organization administrators see links for organizations they manage, including organizations reached through group administration where applicable. Users with full platform access may see all matching links.'
responses:
'200':
description: List organization billing links
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
items:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
description: Unique identifier for this organization–billing account association.
example: 550e8400-e29b-41d4-a716-446655440000
organizationId:
type: string
description: Identifier of the organization in this association.
example: org_ExampleOrganizationId
billingAccountId:
type: string
format: uuid
description: Identifier of the billing account in this association.
example: 550e8400-e29b-41d4-a716-446655440000
seatAllocation:
type: integer
minimum: 0
description: Number of seats from this billing account allocated to the organization.
example: 10
seatsUsed:
type: integer
minimum: 0
description: 'Seats currently used for this organization billing link: users currently billed against this organization.'
example: 6
seatsRemaining:
type: integer
description: 'Seats still available on the organization: `seatAllocation` minus the number of users currently billed against this organization.'
example: 4
organization:
type: object
properties:
id:
type: string
description: Organization identifier.
example: org_ExampleOrganizationId
name:
type:
- string
- 'null'
description: Organization display name, when available. May be null if not set or not yet available.
example: Acme Inc.
required:
- id
- name
description: Organization referenced by this association.
billingAccount:
type: object
properties:
id:
type: string
format: uuid
description: Billing account identifier.
example: 550e8400-e29b-41d4-a716-446655440000
stripeCustomerId:
type: string
description: Customer identifier from the payment provider linked to this billing account.
example: cus_ExampleCustomerId
maxSeats:
type: integer
minimum: 0
description: Maximum number of seats covered by this billing account.
example: 25
isDynamicAllocation:
type: boolean
description: Whether seat availability is computed from billing-account max seats instead of per-link seat allocation.
example: true
status:
type: string
enum:
- ACTIVE
- CANCELLED
description: Current lifecycle status of the billing account.
example: ACTIVE
isShared:
type: boolean
description: True when the billing account is linked to more than one entity (organizations and teams combined). False when linked to zero or one entity.
example: false
required:
- id
- stripeCustomerId
- maxSeats
- isDynamicAllocation
- status
description: Summary of the billing account linked to the organization.
required:
- id
- organizationId
- billingAccountId
- seatAllocation
- seatsUsed
- seatsRemaining
- organization
- billingAccount
description: Association between an organization and an active billing account, with related details. Cancelled billing accounts are not returned in this listing.
description: Associations matching the request scope and the caller's permissions.
required:
- items
cursor:
anyOf:
- type: string
- type: number
- {}
pageSize:
type: number
limit:
type: number
total:
type:
- number
- 'null'
hasNextPage:
type: boolean
required:
- data
'400':
description: Bad Request - Invalid parameters
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Error message
required:
- error
'401':
description: Unauthorized - User not authenticated
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Authentication error message
required:
- error
'403':
description: Forbidden - User does not have access
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Authorization error message
required:
- error
'404':
description: Not Found - Resource not found
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Resource not found error message
required:
- error
'422':
description: Unprocessable Content - The request failed validation checks
content:
application/json:
schema:
type: object
properties:
issues:
type: array
items:
type: object
properties:
code:
type: string
expected:
type: string
received:
type: string
path:
type: array
items:
anyOf:
- type: string
- type: number
message:
type: string
required:
- code
- path
- message
name:
type: string
enum:
- ZodError
required:
- issues
- name
'500':
description: Internal Server Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Internal server error message
required:
- error
security:
- SiroAuthToken: []
tags:
- Billing Graph
/v1/billing-graph/me/accounts:
get:
summary: List billing accounts visible to the caller
description: Returns billing accounts the authenticated user is allowed to view, paginated by an opaque cursor. Cancelled billing accounts are not returned.
parameters:
- schema:
type: integer
minimum: 1
maximum: 2000
default: 50
description: Maximum number of billing accounts to return on this page (1–2000, default 50).
example: 50
required: false
description: Maximum number of billing accounts to return on this page (1–2000, default 50).
name: limit
in: query
- schema:
type:
- string
- 'null'
format: uuid
description: Opaque cursor returned as `nextCursor` on the prior page. Omit for the first page.
example: 550e8400-e29b-41d4-a716-446655440000
required: false
description: Opaque cursor returned as `nextCursor` on the prior page. Omit for the first page.
name: cursor
in: query
- schema:
type: string
minLength: 1
description: Filter results to the billing account with this Stripe customer id. Returns at most one item.
example: cus_ExampleCustomerId
required: false
description: Filter results to the billing account with this Stripe customer id. Returns at most one item.
name: customerId
in: query
responses:
'200':
description: List billing accounts visible to the caller
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
items:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
description: Unique identifier assigned to the billing account record.
example: 550e8400-e29b-41d4-a716-446655440000
stripeCustomerId:
type: string
description: Customer identifier from the payment provider for this account.
example: cus_ExampleCustomerId
maxSeats:
type: integer
minimum: 0
description: Total purchased seats derived from active subscription line items.
example: 25
isDynamicAllocation:
type: boolean
description: Whether seat availability is computed from billing-account max seats instead of per-link seat allocation.
example: true
seatsUsed:
type: integer
minimum: 0
description: 'Seats currently used on this billing account: distinct billed users across every organization and team attached to the account.'
example: 5
seatsRemaining:
type: integer
description: 'Seats still available on this billing account: `maxSeats` minus the deduplicated count of users currently billed across every organization and team attached to the account.'
example: 20
status:
type: string
enum:
- ACTIVE
- CANCELLED
description: Current lifecycle status of the billing account.
example: ACTIVE
isShared:
type: boolean
description: True when the billing account is linked to more than one entity (organizations and teams combined). False when linked to zero or one entity.
example: false
subscriptionEndDate:
type:
- string
- 'null'
format: date-time
description: Contract or subscription end instant in ISO 8601 format, if provided.
example: '2026-12-31T23:59:59.000Z'
subscriptionLengthInMonths:
type:
- integer
- 'null'
minimum: 1
description: Billing term length in whole months, if provided.
example: 12
required:
- id
- stripeCustomerId
- maxSeats
- isDynamicAllocation
- seatsUsed
- seatsRemaining
- status
- subscriptionEndDate
- subscriptionLengthInMonths
description: Active billing accounts visible to the caller given their permissions.
nextCursor:
type:
- string
- 'null'
format: uuid
description: Cursor to pass back as `cursor` on the next request to fetch the following page. `null` when no more rows are available.
example: 550e8400-e29b-41d4-a716-446655440000
required:
- items
- nextCursor
cursor:
anyOf:
- type: string
- type: number
- {}
pageSize:
type: number
limit:
type: number
total:
type:
- number
- 'null'
hasNextPage:
type: boolean
required:
- data
'400':
description: Bad Request - Invalid parameters
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Error message
required:
- error
'401':
description: Unauthorized - User not authenticated
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Authentication error message
required:
- error
'403':
description: Forbidden - User does not have access
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Authorization error message
required:
- error
'404':
description: Not Found - Resource not found
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Resource not found error message
required:
- error
'422':
description: Unprocessable Content - The request failed validation checks
content:
application/json:
schema:
type: object
properties:
issues:
type: array
items:
type: object
properties:
code:
type: string
expected:
type: string
received:
type: string
path:
type: array
items:
anyOf:
- type: string
- type: number
message:
type: string
required:
- code
- path
- message
name:
type: string
enum:
- ZodError
required:
- issues
- name
'500':
description: Internal Server Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Internal server error message
required:
- error
security:
- SiroAuthToken: []
tags:
- Billing Graph
/v1/billing-graph/accounts/{id}:
get:
summary: Get a billing account
description: Returns the billing account identified by `id`.
parameters:
- schema:
type: string
format: uuid
description: Billing account id.
example: 550e8400-e29b-41d4-a716-446655440000
required: true
description: Billing account id.
name: id
in: path
responses:
'200':
description: Get a billing account
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
id:
type: string
format: uuid
description: Unique identifier assigned to the billing account record.
example: 550e8400-e29b-41d4-a716-446655440000
stripeCustomerId:
type: string
description: Customer identifier from the payment provider for this account.
example: cus_ExampleCustomerId
maxSeats:
type: integer
minimum: 0
description: Total purchased seats derived from active subscription line items.
example: 25
isDynamicAllocation:
type: boolean
description: Whether seat availability is computed from billing-account max seats instead of per-link seat allocation.
example: true
seatsUsed:
type: integer
minimum: 0
description: 'Seats currently used on this billing account: distinct billed users across every organization and team attached to the account.'
example: 5
seatsRemaining:
type: integer
description: 'Seats still available on this billing account: `maxSeats` minus the deduplicated count of users currently billed across every organization and team attached to the account.'
example: 20
status:
type: string
enum:
- ACTIVE
- CANCELLED
description: Current lifecycle status of the billing account.
example: ACTIVE
isShared:
type: boolean
description: True when the billing account is linked to more than one entity (organizations and teams combined). False when linked to zero or one entity.
example: false
subscriptionEndDate:
type:
- string
- 'null'
format: date-time
description: Contract or subscription end instant in ISO 8601 format, if provided.
example: '2026-12-31T23:59:59.000Z'
subscriptionLengthInMonths:
type:
- integer
- 'null'
minimum: 1
description: Billing term length in whole months, if provided.
example: 12
required:
- id
- stripeCustomerId
- maxSeats
- isDynamicAllocation
- seatsUsed
- seatsRemaining
- status
- subscriptionEndDate
- subscriptionLengthInMonths
cursor:
anyOf:
- type: string
- type: number
- {}
pageSize:
type: number
limit:
# --- truncated at 32 KB (102 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/siro/refs/heads/main/openapi/siro-billing-graph-api-openapi.yml