LaserData Billing API

Pricing, billing reports, invoices

OpenAPI Specification

laserdata-billing-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: LaserData Cloud Audit Account Billing API
  description: 'Tenant audit log and per-user activity feed.


    Public REST API for the LaserData Cloud audit service.


    ## Authentication


    Every endpoint accepts either of two auth methods:

    - **API key** (machine / CI / SDK): send in the `ld-api-key` header. Cannot be used on `GET /audit/users/activity` which is session-only.

    - **Session cookie** (browser / console): obtained from `POST /account/sign_in` on the control plane.


    Audit endpoints are read-only and replay-safe by definition.


    ## Pagination


    List endpoints return a `Paged<T>` body (`page`, `total_pages`, `total_results`, `items`) and a `link` header (RFC 8288) with `rel="first"`, `"prev"`, `"next"`, `"last"` when applicable.


    ## Errors


    Error responses follow RFC 7807 `application/problem+json` with `type`, `title`, `code`, `reason`, `instance`, `status`, `retryable`, and optional `field` / `field_issues`. `retryable` is `true` for 408, 425, 429, 500, 502, 503, 504.


    ## Response headers


    - `ld-request`: request ID. Include it when reporting issues.

    - `link`: pagination relations.

    - `retry-after`: wait hint on 429 / 503.'
  termsOfService: https://laserdata.com/terms
  contact:
    name: LaserData Support
    url: https://docs.laserdata.com
    email: support@laserdata.com
  license:
    name: Proprietary
  version: 0.0.66
  x-logo:
    url: https://assets.laserdata.com/laserdata_dark.png
    altText: LaserData
    href: https://laserdata.com
servers:
- url: https://api.laserdata.cloud
  description: Production
security:
- ld_api_key: []
- session_cookie: []
tags:
- name: Billing
  description: Pricing, billing reports, invoices
paths:
  /pricing:
    get:
      tags:
      - Billing
      summary: Get public pricing
      description: Returns public plan and pricing information without requiring authentication.
      operationId: get_pricing
      responses:
        '200':
          description: Public pricing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PricingResponse'
      security: []
  /tenants/{tenant_id}/billing/info:
    get:
      tags:
      - Billing
      summary: Get billing info
      description: Returns the tenant billing recipient profile used for invoicing.
      operationId: get_billing_info
      parameters:
      - name: tenant_id
        in: path
        description: Tenant identifier
        required: true
        schema:
          $ref: '#/components/schemas/TenantId'
      responses:
        '200':
          description: Tenant billing info
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingInfo'
        '403':
          description: Insufficient permissions
    put:
      tags:
      - Billing
      summary: Update billing info
      description: Updates the tenant billing recipient profile used for invoicing.
      operationId: update_billing_info
      parameters:
      - name: tenant_id
        in: path
        description: Tenant identifier
        required: true
        schema:
          $ref: '#/components/schemas/TenantId'
      requestBody:
        description: Billing recipient fields such as company, address, tax ID, email, and phone
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateBillingInfo'
        required: true
      responses:
        '204':
          description: Billing info updated
  /tenants/{tenant_id}/billing/invoices:
    get:
      tags:
      - Billing
      summary: List invoices
      description: Returns paged customer invoices for the tenant.
      operationId: get_invoices
      parameters:
      - name: tenant_id
        in: path
        description: Tenant identifier
        required: true
        schema:
          $ref: '#/components/schemas/TenantId'
      responses:
        '200':
          description: Paged invoices
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Paged_CustomerInvoiceInfo'
  /tenants/{tenant_id}/billing/invoices/{invoice_id}:
    get:
      tags:
      - Billing
      summary: Get invoice
      description: Returns full invoice details for one tenant invoice.
      operationId: get_invoice
      parameters:
      - name: tenant_id
        in: path
        description: Tenant identifier
        required: true
        schema:
          $ref: '#/components/schemas/TenantId'
      - name: invoice_id
        in: path
        description: Invoice identifier
        required: true
        schema:
          $ref: '#/components/schemas/InvoiceId'
      responses:
        '200':
          description: Invoice details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerInvoiceDetails'
  /tenants/{tenant_id}/billing/invoices/{invoice_id}/pdf:
    get:
      tags:
      - Billing
      summary: Download invoice PDF
      description: Downloads the rendered PDF file for one invoice.
      operationId: download_invoice_pdf
      parameters:
      - name: tenant_id
        in: path
        description: Tenant identifier
        required: true
        schema:
          $ref: '#/components/schemas/TenantId'
      - name: invoice_id
        in: path
        description: Invoice identifier
        required: true
        schema:
          $ref: '#/components/schemas/InvoiceId'
      responses:
        '200':
          description: Invoice PDF (application/pdf)
          content:
            application/pdf: {}
  /tenants/{tenant_id}/billing/reports:
    get:
      tags:
      - Billing
      summary: List billing reports
      description: Returns paged deployment billing reports for a tenant.
      operationId: get_billing_reports
      parameters:
      - name: tenant_id
        in: path
        description: Tenant identifier
        required: true
        schema:
          $ref: '#/components/schemas/TenantId'
      responses:
        '200':
          description: Paged billing reports
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Paged_BillingReportInfo'
  /tenants/{tenant_id}/billing/reports/{report_id}:
    get:
      tags:
      - Billing
      summary: Get billing report
      description: Returns one deployment billing report with detailed usage and pricing breakdown.
      operationId: get_billing_report
      parameters:
      - name: tenant_id
        in: path
        description: Tenant identifier
        required: true
        schema:
          $ref: '#/components/schemas/TenantId'
      - name: report_id
        in: path
        description: Deployment report identifier
        required: true
        schema:
          $ref: '#/components/schemas/DeploymentReportId'
      responses:
        '200':
          description: Billing report details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingReportDetails'
components:
  schemas:
    NvmeStorageProfile:
      type: object
      required:
      - rate_per_gb_month
      - tiers
      properties:
        rate_per_gb_month:
          type: string
        tiers:
          type: array
          items:
            $ref: '#/components/schemas/NvmeTier'
    CloudPricing:
      type: object
      required:
      - network
      - storage
      - compute
      - disk
      - transfer
      - overhead
      - telemetry
      properties:
        compute:
          $ref: '#/components/schemas/ComputePricing'
        disk:
          $ref: '#/components/schemas/DiskPricing'
        network:
          $ref: '#/components/schemas/NetworkPricing'
        overhead:
          $ref: '#/components/schemas/OverheadPricing'
        storage:
          $ref: '#/components/schemas/StoragePricing'
        telemetry:
          $ref: '#/components/schemas/TelemetryPricing'
        transfer:
          $ref: '#/components/schemas/TransferPricing'
    TopologySurcharge:
      type: object
      required:
      - single_az
      - multi_az
      properties:
        multi_az:
          type: string
        single_az:
          type: string
    TelemetryPricing:
      type: object
      required:
      - included_days
      - per_day
      properties:
        included_days:
          type: integer
          format: int32
          minimum: 0
        per_day:
          type: string
    Paged_BillingReportInfo:
      type: object
      required:
      - total_pages
      - total_results
      - page
      - items
      properties:
        items:
          type: array
          items:
            type: object
            required:
            - id
            - deployment_id
            - name
            - cloud
            - variant
            - from
            - to
            - total_cost
            - currency
            properties:
              cloud:
                $ref: '#/components/schemas/Cloud'
              currency:
                $ref: '#/components/schemas/Currency'
              deployment_id:
                $ref: '#/components/schemas/DeploymentId'
              from:
                type: string
                format: date-time
              id:
                $ref: '#/components/schemas/DeploymentReportId'
              name:
                type: string
              region:
                type:
                - string
                - 'null'
              tier:
                oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/DeploymentTier'
              to:
                type: string
                format: date-time
              total_cost:
                type: string
              variant:
                $ref: '#/components/schemas/DeploymentVariant'
            example:
              id: 7261845701661510000
              deployment_id: 7261845127892140000
              name: iggy-prod-01
              cloud: aws
              variant: managed
              tier: small
              region: us-east-1
              from: '2026-04-01T00:00:00Z'
              to: '2026-05-01T00:00:00Z'
              total_cost: '182.45'
              currency: USD
        page:
          type: integer
          format: int64
          example: 1
          minimum: 1
        total_pages:
          type: integer
          format: int64
          example: 4
          minimum: 0
        total_results:
          type: integer
          format: int64
          example: 137
          minimum: 0
    DataRetentionPricing:
      type: object
      required:
      - rate_per_gb_month
      - available
      properties:
        available:
          type: boolean
        rate_per_gb_month:
          type: string
    InvoiceId:
      type: integer
      format: int64
      example: 611298765432109068
      minimum: 0
    StoragePricing:
      type: object
      required:
      - network_disk
      - nvme_ssd
      properties:
        data_retention:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/DataRetentionPricing'
        network_disk:
          $ref: '#/components/schemas/StorageProfile'
        nvme_ssd:
          $ref: '#/components/schemas/NvmeStorageProfile'
    NvmeTier:
      type: object
      required:
      - storage_gb
      - label
      - min_throughput_mbps
      properties:
        label:
          type: string
        min_throughput_mbps:
          type: string
        storage_gb:
          type: integer
          format: int32
          minimum: 0
    CustomerInvoiceInfo:
      type: object
      required:
      - id
      - tenant_id
      - number
      - period_start
      - period_end
      - status
      - currency
      - total
      - created_at
      properties:
        created_at:
          type: string
          format: date-time
        currency:
          $ref: '#/components/schemas/Currency'
        division_id:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/DivisionId'
        id:
          $ref: '#/components/schemas/InvoiceId'
        number:
          type: string
        period_end:
          type: string
          format: date-time
        period_start:
          type: string
          format: date-time
        status:
          $ref: '#/components/schemas/InvoiceStatus'
        tenant_id:
          $ref: '#/components/schemas/TenantId'
        total:
          type: string
      example:
        id: 7261845776048540000
        tenant_id: 7261845022003200001
        division_id: 7261844974723780000
        number: INV-2026-000182
        period_start: '2026-04-01T00:00:00Z'
        period_end: '2026-05-01T00:00:00Z'
        status: approved
        currency: USD
        total: '182.45'
        created_at: '2026-05-02T10:00:00Z'
    CustomerInvoiceDetails:
      allOf:
      - $ref: '#/components/schemas/CustomerInvoiceInfo'
      - type: object
        required:
        - subtotal
        - line_items
        properties:
          billing_info: {}
          line_items:
            type: array
            items: {}
          notes:
            type:
            - string
            - 'null'
          paid_at:
            type:
            - string
            - 'null'
            format: date-time
          subtotal:
            type: string
          tax:
            type:
            - string
            - 'null'
    PricingResponse:
      type: object
      description: 'Top-level response: product config + per-cloud pricing.'
      required:
      - cluster
      properties:
        aws:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/CloudPricing'
        cluster:
          $ref: '#/components/schemas/ClusterConfig'
        gcp:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/CloudPricing'
    NetworkTier:
      type: object
      required:
      - rate_per_gb
      properties:
        max_gb_per_node:
          type:
          - integer
          - 'null'
          format: int64
          minimum: 0
        rate_per_gb:
          type: string
        up_to_mbps:
          type:
          - integer
          - 'null'
          format: int32
          minimum: 0
    DeploymentVariant:
      type: string
      enum:
      - managed
      - byoc
      - on_premise
    Paged_CustomerInvoiceInfo:
      type: object
      required:
      - total_pages
      - total_results
      - page
      - items
      properties:
        items:
          type: array
          items:
            type: object
            required:
            - id
            - tenant_id
            - number
            - period_start
            - period_end
            - status
            - currency
            - total
            - created_at
            properties:
              created_at:
                type: string
                format: date-time
              currency:
                $ref: '#/components/schemas/Currency'
              division_id:
                oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/DivisionId'
              id:
                $ref: '#/components/schemas/InvoiceId'
              number:
                type: string
              period_end:
                type: string
                format: date-time
              period_start:
                type: string
                format: date-time
              status:
                $ref: '#/components/schemas/InvoiceStatus'
              tenant_id:
                $ref: '#/components/schemas/TenantId'
              total:
                type: string
            example:
              id: 7261845776048540000
              tenant_id: 7261845022003200001
              division_id: 7261844974723780000
              number: INV-2026-000182
              period_start: '2026-04-01T00:00:00Z'
              period_end: '2026-05-01T00:00:00Z'
              status: approved
              currency: USD
              total: '182.45'
              created_at: '2026-05-02T10:00:00Z'
        page:
          type: integer
          format: int64
          example: 1
          minimum: 1
        total_pages:
          type: integer
          format: int64
          example: 4
          minimum: 0
        total_results:
          type: integer
          format: int64
          example: 137
          minimum: 0
    Currency:
      type: string
      enum:
      - USD
    StorageProfile:
      type: object
      required:
      - rate_per_gb_month
      - min_storage_gb
      - max_storage_gb
      - min_throughput_mbps
      properties:
        max_storage_gb:
          type: integer
          format: int32
          minimum: 0
        min_storage_gb:
          type: integer
          format: int32
          minimum: 0
        min_throughput_mbps:
          type: string
        rate_per_gb_month:
          type: string
    BillingInfo:
      type: object
      properties:
        address:
          type:
          - string
          - 'null'
        city:
          type:
          - string
          - 'null'
        company:
          type:
          - string
          - 'null'
        country:
          type:
          - string
          - 'null'
        email:
          type:
          - string
          - 'null'
        name:
          type:
          - string
          - 'null'
        phone:
          type:
          - string
          - 'null'
        postal_code:
          type:
          - string
          - 'null'
        state:
          type:
          - string
          - 'null'
        tax_id:
          type:
          - string
          - 'null'
    UpdateBillingInfo:
      allOf:
      - $ref: '#/components/schemas/BillingInfo'
    Cloud:
      type: string
      description: Supported managed cloud provider. Only `aws` and `gcp` are accepted on the public API.
      enum:
      - aws
      - gcp
      examples:
      - aws
    BillingReportDetails:
      allOf:
      - $ref: '#/components/schemas/BillingReportInfo'
      - type: object
        required:
        - compute_cost
        - storage_cost
        - network_cost
        - other_cost
        - telemetry_cost
        - data_retention_cost
        - platform_cost
        - total_network_in
        - total_network_out
        properties:
          compute_cost:
            type: string
          data_retention_cost:
            type: string
          network_cost:
            type: string
          other_cost:
            type: string
          platform_cost:
            type: string
          storage_cost:
            type: string
          telemetry_cost:
            type: string
          total_network_in:
            type: number
            format: double
          total_network_out:
            type: number
            format: double
    BillingReportInfo:
      type: object
      required:
      - id
      - deployment_id
      - name
      - cloud
      - variant
      - from
      - to
      - total_cost
      - currency
      properties:
        cloud:
          $ref: '#/components/schemas/Cloud'
        currency:
          $ref: '#/components/schemas/Currency'
        deployment_id:
          $ref: '#/components/schemas/DeploymentId'
        from:
          type: string
          format: date-time
        id:
          $ref: '#/components/schemas/DeploymentReportId'
        name:
          type: string
        region:
          type:
          - string
          - 'null'
        tier:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/DeploymentTier'
        to:
          type: string
          format: date-time
        total_cost:
          type: string
        variant:
          $ref: '#/components/schemas/DeploymentVariant'
      example:
        id: 7261845701661510000
        deployment_id: 7261845127892140000
        name: iggy-prod-01
        cloud: aws
        variant: managed
        tier: small
        region: us-east-1
        from: '2026-04-01T00:00:00Z'
        to: '2026-05-01T00:00:00Z'
        total_cost: '182.45'
        currency: USD
    TransferPricing:
      type: object
      required:
      - same_region_per_gb
      - cross_region_same_cloud_per_gb
      - cross_region_per_gb
      - cross_az_per_gb
      properties:
        cross_az_per_gb:
          type: string
        cross_region_per_gb:
          type: string
        cross_region_same_cloud_per_gb:
          type: string
        same_region_per_gb:
          type: string
    DiskPricing:
      type: object
      required:
      - raw_cost_per_gb
      - free_throughput_mbps
      - extra_throughput_cost_per_mbps
      - free_iops
      - extra_iops_cost
      - io_size_kb
      properties:
        extra_iops_cost:
          type: string
        extra_throughput_cost_per_mbps:
          type: string
        free_iops:
          type: integer
          format: int32
          minimum: 0
        free_throughput_mbps:
          type: integer
          format: int32
          minimum: 0
        io_size_kb:
          type: integer
          format: int32
          minimum: 0
        raw_cost_per_gb:
          type: string
    DeploymentTier:
      type: string
      enum:
      - free
      - small
      - medium
      - large
      - xlarge
      - 2xlarge
      - 4xlarge
      - 8xlarge
      - 16xlarge
    OverheadPricing:
      type: object
      required:
      - base_monthly
      - per_mbps
      properties:
        base_monthly:
          type: string
        per_mbps:
          type: string
    ComputePricing:
      type: object
      required:
      - network_disk_tiers
      - nvme_tiers
      properties:
        network_disk_tiers:
          type: array
          items:
            $ref: '#/components/schemas/ComputeTier'
        nvme_tiers:
          type: array
          items:
            $ref: '#/components/schemas/ComputeTier'
    DivisionId:
      type: integer
      format: int64
      example: 7261844974723780000
      minimum: 0
    InvoiceStatus:
      type: string
      enum:
      - draft
      - pending
      - approved
      - paid
      - failed
      - cancelled
      - refunded
      - partially_refunded
    DeploymentReportId:
      type: integer
      format: int64
      example: 611298765432109067
      minimum: 0
    TenantId:
      type: integer
      format: int64
      example: 7261845022003200001
      minimum: 0
    NetworkPricing:
      type: object
      required:
      - same_region
      - cross_region_same_cloud
      - cross_region
      - topology_surcharge_per_gb
      - throughput_to_gb_factor
      properties:
        cross_region:
          type: array
          items:
            $ref: '#/components/schemas/NetworkTier'
        cross_region_same_cloud:
          type: array
          items:
            $ref: '#/components/schemas/NetworkTier'
        same_region:
          type: array
          items:
            $ref: '#/components/schemas/NetworkTier'
        throughput_to_gb_factor:
          type: string
        topology_surcharge_per_gb:
          $ref: '#/components/schemas/TopologySurcharge'
    ClusterConfig:
      type: object
      required:
      - nodes
      - max_throughput_mbps_per_node
      properties:
        max_throughput_mbps_per_node:
          type: integer
          format: int32
          minimum: 0
        nodes:
          type: integer
          format: int32
          minimum: 0
    ComputeTier:
      type: object
      required:
      - tier
      - max_mbps
      - instance
      - monthly_cost
      properties:
        instance:
          type: string
        max_mbps:
          type: integer
          format: int32
          minimum: 0
        monthly_cost:
          type: string
        tier:
          type: string
    DeploymentId:
      type: integer
      format: int64
      example: 7261845127892140000
      minimum: 0
  securitySchemes:
    ld_api_key:
      type: apiKey
      in: header
      name: ld-api-key
      description: Tenant API key sent in the ld-api-key request header. Scoped to tenant-level audit reads. Cannot be used on user-scope endpoints (`/audit/users/activity`).
    session_cookie:
      type: apiKey
      in: cookie
      name: session
      description: Browser session cookie issued by POST /account/sign_in on core. Required for user-scope endpoints.
externalDocs:
  url: https://docs.laserdata.com
  description: LaserData Cloud documentation