Siro Billing Graph API

The Billing Graph API from Siro — 10 operation(s) for billing graph.

Operations 14

POST /v1/billing-graph/accounts Create a billing account
GET /v1/billing-graph/me/organization-billing-accounts List organization billing links
GET /v1/billing-graph/me/accounts List billing accounts visible to the caller
GET /v1/billing-graph/accounts/{id} Get a billing account
PATCH /v1/billing-graph/accounts/{id} Update a billing account
DELETE /v1/billing-graph/accounts/{id} Cancel a billing account
POST /v1/billing-graph/accounts/{id}/reactivate Reactivate a billing account
PUT /v1/billing-graph/accounts/{id}/organizations/{organizationId} Link an organization to a billing account
DELETE /v1/billing-graph/accounts/{id}/organizations/{organizationId} Detach an organization from a billing account
GET /v1/billing-graph/me/team-billing-accounts List team billing links
PUT /v1/billing-graph/accounts/{id}/teams/{siroTeamId} Link a team to a billing account
DELETE /v1/billing-graph/accounts/{id}/teams/{siroTeamId} Detach a team from a billing account
GET /v1/billing-graph/organizations/{organizationId}/seats Get seat summary for an organization
GET /v1/billing-graph/teams/{siroTeamId}/seats Get seat summary for a team

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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/siro-billing-graph-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

siro-billing-graph-api-openapi.yml Raw ↑
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