Octobat Coupons API

Create, list, retrieve, update, activate, deactivate, and delete coupons used to apply discounts to invoices and subscriptions.

OpenAPI Specification

octobat-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Octobat API
  description: >-
    Octobat is a billing, invoicing, and tax-compliance platform for online
    businesses. This OpenAPI document describes the public REST API at base URL
    https://apiv2.octobat.com. The API is Stripe-style: resource-oriented, form
    or JSON request bodies, and HTTP Basic authentication using your secret key
    as the username with an empty password (curl: -u sk_live_xxx:). Test-mode
    keys (sk_test_) and live-mode keys (sk_live_) select the environment.


    Endpoint provenance: paths marked "confirmed" are demonstrated directly in
    Octobat's own documentation (register-transactions and tax-calculation
    guides). The remaining CRUD and action paths are modeled from Octobat's
    official Ruby SDK (github.com/0ctobat/octobat-ruby), which derives resource
    URLs as the snake_cased, pluralized class name and uses POST to create,
    PATCH to update, GET to retrieve/list, and DELETE to remove. Request and
    response schemas are representative, not exhaustive; consult the live API
    reference at https://v2apidoc.octobat.com for full field-level detail.


    Operating status: Octobat was acquired by Mirakl in November 2021. The
    standalone marketing site now redirects to mirakl.com; docs.octobat.com and
    apiv2.octobat.com remain available to existing integrators.
  version: '2.0'
  contact:
    name: Octobat
    url: https://docs.octobat.com
    email: support@octobat.com
servers:
  - url: https://apiv2.octobat.com
    description: Octobat API v2 (production)
security:
  - basicAuth: []
tags:
  - name: Invoices
    description: Compliant invoices, their items, and lifecycle actions.
  - name: Credit Notes
    description: Compliant credit notes issued against invoices.
  - name: Transactions
    description: Payments registered against invoices for reconciliation and tax reporting.
  - name: Customers
    description: Customers and their billing / tax details.
  - name: Products
    description: Products and their tax categorization.
  - name: Tax Evidence
    description: Real-time tax determination for customers and carts / checkouts.
  - name: Coupons
    description: Discount coupons for invoices and subscriptions.
  - name: Subscriptions
    description: Recurring-billing subscriptions and metered usage.
  - name: Payouts
    description: Settlement payouts and their balance transactions.
paths:
  /invoices:
    get:
      operationId: listInvoices
      tags: [Invoices]
      summary: List invoices
      description: >-
        Lists invoices. Supports filtering by customer and by status, including
        due / unpaid invoices, via query parameters.
      parameters:
        - name: customer
          in: query
          required: false
          schema: { type: string }
          description: Filter by customer ID.
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum: [draft, confirmed, paid, due, uncollectible, cancelled]
          description: Filter by invoice status (use "due" for unpaid invoices).
        - name: limit
          in: query
          required: false
          schema: { type: integer, default: 10 }
      responses:
        '200':
          description: A list of invoices.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/InvoiceList' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    post:
      operationId: createInvoice
      tags: [Invoices]
      summary: Create an invoice
      description: Creates a new invoice for a customer. (Confirmed in Octobat docs.)
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/InvoiceCreate' }
      responses:
        '200':
          description: The created invoice.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Invoice' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /invoices/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get:
      operationId: retrieveInvoice
      tags: [Invoices]
      summary: Retrieve an invoice
      responses:
        '200':
          description: The requested invoice.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Invoice' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    patch:
      operationId: updateInvoice
      tags: [Invoices]
      summary: Update an invoice
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/InvoiceCreate' }
      responses:
        '200':
          description: The updated invoice.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Invoice' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    delete:
      operationId: deleteInvoice
      tags: [Invoices]
      summary: Delete an invoice
      responses:
        '200': { description: The invoice was deleted. }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /invoices/{id}/items:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    post:
      operationId: createInvoiceItem
      tags: [Invoices]
      summary: Add an item to an invoice
      description: >-
        Adds a line item to an invoice. Provide a tax_evidence ID (from the Tax
        Evidence API) or explicit tax parameters. (Confirmed in Octobat docs.)
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/InvoiceItemCreate' }
      responses:
        '200':
          description: The created invoice item.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Item' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /invoices/{id}/confirm:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    patch:
      operationId: confirmInvoice
      tags: [Invoices]
      summary: Confirm (finalize) an invoice
      description: >-
        Confirms an invoice, assigning it a sequential legal number and making
        it immutable. (Confirmed in Octobat docs.)
      responses:
        '200':
          description: The confirmed invoice.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Invoice' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /invoices/{id}/send:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    post:
      operationId: sendInvoice
      tags: [Invoices]
      summary: Send an invoice by email
      responses:
        '200':
          description: The invoice, after sending.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Invoice' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /invoices/{id}/set_payment_terms:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    patch:
      operationId: setInvoicePaymentTerms
      tags: [Invoices]
      summary: Set payment terms on an invoice
      responses:
        '200':
          description: The updated invoice.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Invoice' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /invoices/{id}/mark_uncollectible:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    patch:
      operationId: markInvoiceUncollectible
      tags: [Invoices]
      summary: Mark an invoice uncollectible
      responses:
        '200':
          description: The updated invoice.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Invoice' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /invoices/{id}/cancel:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    patch:
      operationId: cancelInvoice
      tags: [Invoices]
      summary: Cancel an invoice
      responses:
        '200':
          description: The cancelled invoice.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Invoice' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /invoices/{id}/cancel_and_replace:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    patch:
      operationId: cancelAndReplaceInvoice
      tags: [Invoices]
      summary: Cancel and replace an invoice
      responses:
        '200':
          description: The replacement invoice.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Invoice' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /invoices/pdf_export:
    post:
      operationId: exportInvoicesPdf
      tags: [Invoices]
      summary: Export invoices to PDF
      responses:
        '200': { description: Export accepted. }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /invoices/csv_export:
    post:
      operationId: exportInvoicesCsv
      tags: [Invoices]
      summary: Export invoices to CSV
      responses:
        '200': { description: Export accepted. }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /credit_notes:
    get:
      operationId: listCreditNotes
      tags: [Credit Notes]
      summary: List credit notes
      parameters:
        - name: customer
          in: query
          required: false
          schema: { type: string }
      responses:
        '200':
          description: A list of credit notes.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/CreditNoteList' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    post:
      operationId: createCreditNote
      tags: [Credit Notes]
      summary: Create a credit note
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                customer: { type: string }
                invoice: { type: string }
                currency: { type: string }
      responses:
        '200':
          description: The created credit note.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/CreditNote' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /credit_notes/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get:
      operationId: retrieveCreditNote
      tags: [Credit Notes]
      summary: Retrieve a credit note
      responses:
        '200':
          description: The requested credit note.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/CreditNote' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /transactions:
    get:
      operationId: listTransactions
      tags: [Transactions]
      summary: List transactions
      parameters:
        - name: customer
          in: query
          required: false
          schema: { type: string }
        - name: invoice
          in: query
          required: false
          schema: { type: string }
      responses:
        '200':
          description: A list of transactions.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TransactionList' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    post:
      operationId: createTransaction
      tags: [Transactions]
      summary: Register a transaction
      description: >-
        Registers a successful payment so Octobat can reconcile it with an
        invoice and drive tax reporting. (Confirmed in Octobat docs.)
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/TransactionCreate' }
      responses:
        '200':
          description: The created transaction.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Transaction' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /transactions/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get:
      operationId: retrieveTransaction
      tags: [Transactions]
      summary: Retrieve a transaction
      responses:
        '200':
          description: The requested transaction.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Transaction' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    patch:
      operationId: updateTransaction
      tags: [Transactions]
      summary: Update a transaction
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/TransactionCreate' }
      responses:
        '200':
          description: The updated transaction.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Transaction' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /transactions/csv_export:
    post:
      operationId: exportTransactionsCsv
      tags: [Transactions]
      summary: Export transactions to CSV
      responses:
        '200': { description: Export accepted. }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /customers:
    get:
      operationId: listCustomers
      tags: [Customers]
      summary: List customers
      responses:
        '200':
          description: A list of customers.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/CustomerList' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    post:
      operationId: createCustomer
      tags: [Customers]
      summary: Create a customer
      description: Creates a customer with billing and tax details. (Confirmed in Octobat docs.)
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/CustomerCreate' }
      responses:
        '200':
          description: The created customer.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Customer' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /customers/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get:
      operationId: retrieveCustomer
      tags: [Customers]
      summary: Retrieve a customer
      responses:
        '200':
          description: The requested customer.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Customer' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    patch:
      operationId: updateCustomer
      tags: [Customers]
      summary: Update a customer
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/CustomerCreate' }
      responses:
        '200':
          description: The updated customer.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Customer' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    delete:
      operationId: deleteCustomer
      tags: [Customers]
      summary: Delete a customer
      responses:
        '200': { description: The customer was deleted. }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /products:
    get:
      operationId: listProducts
      tags: [Products]
      summary: List products
      responses:
        '200':
          description: A list of products.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/ProductList' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    post:
      operationId: createProduct
      tags: [Products]
      summary: Create a product
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/ProductCreate' }
      responses:
        '200':
          description: The created product.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Product' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /products/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get:
      operationId: retrieveProduct
      tags: [Products]
      summary: Retrieve a product
      responses:
        '200':
          description: The requested product.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Product' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    patch:
      operationId: updateProduct
      tags: [Products]
      summary: Update a product
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/ProductCreate' }
      responses:
        '200':
          description: The updated product.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Product' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /tax_evidences:
    post:
      operationId: createTaxEvidence
      tags: [Tax Evidence]
      summary: Create a tax evidence for a registered customer
      description: >-
        Determines the applicable tax for a registered customer and returns a
        TaxEvidence with the applied rate and an ID to store with the order.
        (Confirmed in Octobat docs.)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [customer]
              properties:
                customer: { type: string, description: Octobat customer ID. }
                product_type: { type: string, description: Product type used for tax categorization. }
      responses:
        '200':
          description: The created tax evidence.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TaxEvidence' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /tax_evidence_requests:
    post:
      operationId: createTaxEvidenceRequest
      tags: [Tax Evidence]
      summary: Create a tax evidence request for a not-yet-registered buyer
      description: >-
        Calculates tax at cart / checkout time from a buyer's billing location,
        with optional B2B reverse-charge via a tax number. (Confirmed in Octobat
        docs.)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [customer_billing_address_country]
              properties:
                customer_billing_address_country: { type: string }
                customer_billing_address_zip: { type: string }
                customer_billing_address_city: { type: string }
                customer_tax_number: { type: string, description: For B2B reverse-charge validation. }
                product_type: { type: string }
      responses:
        '200':
          description: The created tax evidence request.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TaxEvidence' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /tax_evidence_requests/for_supplier:
    post:
      operationId: createTaxEvidenceRequestForSupplier
      tags: [Tax Evidence]
      summary: Create a supplier-side tax evidence request
      description: >-
        Supplier-oriented tax determination (for platform / marketplace
        self-billing and commission scenarios). Modeled from the Octobat Ruby
        SDK for_supplier action.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                supplier: { type: string }
                product_type: { type: string }
      responses:
        '200':
          description: The created supplier tax evidence request.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TaxEvidence' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /coupons:
    get:
      operationId: listCoupons
      tags: [Coupons]
      summary: List coupons
      responses:
        '200':
          description: A list of coupons.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/CouponList' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    post:
      operationId: createCoupon
      tags: [Coupons]
      summary: Create a coupon
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/CouponCreate' }
      responses:
        '200':
          description: The created coupon.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Coupon' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /coupons/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get:
      operationId: retrieveCoupon
      tags: [Coupons]
      summary: Retrieve a coupon
      responses:
        '200':
          description: The requested coupon.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Coupon' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    patch:
      operationId: updateCoupon
      tags: [Coupons]
      summary: Update a coupon
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/CouponCreate' }
      responses:
        '200':
          description: The updated coupon.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Coupon' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    delete:
      operationId: deleteCoupon
      tags: [Coupons]
      summary: Delete a coupon
      responses:
        '200': { description: The coupon was deleted. }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /coupons/{id}/activate:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    patch:
      operationId: activateCoupon
      tags: [Coupons]
      summary: Activate a coupon
      responses:
        '200':
          description: The activated coupon.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Coupon' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /coupons/{id}/unactivate:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    patch:
      operationId: deactivateCoupon
      tags: [Coupons]
      summary: Deactivate a coupon
      responses:
        '200':
          description: The deactivated coupon.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Coupon' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /subscriptions:
    get:
      operationId: listSubscriptions
      tags: [Subscriptions]
      summary: List subscriptions
      responses:
        '200':
          description: A list of subscriptions.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/SubscriptionList' }
        '401': { $ref: '#/components/responses/Unauthorized' }
    post:
      operationId: createSubscription
      tags: [Subscriptions]
      summary: Create a subscription
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                customer: { type: string }
                currency: { type: string }
      responses:
        '200':
          description: The created subscription.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Subscription' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /subscriptions/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get:
      operationId: retrieveSubscription
      tags: [Subscriptions]
      summary: Retrieve a subscription
      responses:
        '200':
          description: The requested subscription.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Subscription' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /usage_items:
    post:
      operationId: createUsageItem
      tags: [Subscriptions]
      summary: Record a usage item on a subscription
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [subscription]
              properties:
                subscription: { type: string }
                quantity: { type: integer }
      responses:
        '200':
          description: The created usage item.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id: { type: string }
                  object: { type: string, example: usage_item }
                  subscription: { type: string }
                  quantity: { type: integer }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /payouts:
    get:
      operationId: listPayouts
      tags: [Payouts]
      summary: List payouts
      responses:
        '200':
          description: A list of payouts.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/PayoutList' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /payouts/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get:
      operationId: retrievePayout
      tags: [Payouts]
      summary: Retrieve a payout
      responses:
        '200':
          description: The requested payout.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Payout' }
        '401': { $ref: '#/components/responses/Unauthorized' }
  /payouts/csv_export:
    post:
      operationId: exportPayoutsCsv
      tags: [Payouts]
      summary: Export payouts to CSV
      responses:
        '200': { description: Export accepted. }
        '401': { $ref: '#/components/responses/Unauthorized' }
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        HTTP Basic authentication. Use your Octobat secret key as the username
        and leave the password empty (curl: -u sk_live_xxx:). Use sk_test_ keys
        for test mode and sk_live_ keys for live mode.
  responses:
    Unauthorized:
      description: Authentication failed - missing or invalid secret key.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Error' }
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            type: { type: string, example: authentication_error }
            message: { type: string }
    CustomerCreate:
      type: object
      properties:
        name: { type: string }
        email: { type: string, format: email }
        billing_address_country: { type: string, description: ISO country code. }
        billing_address_zip: { type: string }
        billing_address_city: { type: string }
        tax_number: { type: string }
    Customer:
      allOf:
        - $ref: '#/components/schemas/CustomerCreate'
        - type: object
          properties:
            id: { type: string }
            object: { type: string, example: customer }
            created: { type: integer }
    CustomerList:
      type: object
      properties:
        object: { type: string, example: list }
        data:
          type: array
          items: { $ref: '#/components/schemas/Customer' }
    InvoiceCreate:
      type: object
      properties:
        customer: { type: string, description: Octobat customer ID. }
        currency: { type: string, example: EUR }
        description: { type: string }
    Invoice:
      type: object
      properties:
        id: { type: string }
        object: { type: string, example: invoice }
        customer: { type: string }
        currency: { type: string }
        status:
          type: string
          enum: [draft, confirmed, paid, due, uncollectible, cancelled]
        number: { type: string, description: Sequential legal number, assigned on confirm. }
        total: { type: integer }
        total_tax: { type: integer }
        description: { type: string }
        created: { type: integer }
    InvoiceList:
      type: object
      properties:
        object: { type: string, example: list }
        data:
          type: array
          items: { $ref: '#/components/schemas/Invoice' }
    InvoiceItemCreate:
      type: object
      properties:
        currency: { type: string }
        gross_amount: { type: integer }
        description: { type: string }
        tax_evidence: { type: string, description: Tax evidence ID from the Tax Evidence API. }
        tax: { type: string }
        tax_rate: { type: number }
        declare_in_region: { type: string }
        product_type: { type: string }
    Item:
      type: object
      properties:
        id: { type: string }
        object: { type: string, example: item }
        invoice: { type: string }
        gross_amount: { type: integer }
        description: { type: string }
    CreditNote:
      type: object
      properties:
        id: { type: string }
        object: { type: string, example: credit_note }
        customer: { type: string }
        invoice: { type: string }
        number: { type: string }
        currency: { type: string }
        total: { type: integer }
    CreditNoteList:
      type: object
      properties:
        object: { type: string, example: list }
        data:
          type: array
          items: { $ref: '#/components/schemas/CreditNote' }
    TransactionCreate:
      type: object
      properties:
        customer: { type: string }
        invoice: { type: string }
        payment_recipient: { type: string }
        currency: { type: string }
        amount: { type: integer }
        flow_type: { type: string }
        status: { type: string }
    Transaction:
      allOf:
        - $ref: '#/components/schemas/TransactionCreate'
        - type: object
          properties:
            id: { type: string }
            object: { type: string, example: transaction }
            created: { type: integer }
    TransactionList:
      type: object
      properties:
        object: { type: string, example: list }
        data:
          type: array
          items: { $ref: '#/components/schemas/Transaction' }
    ProductCreate:
      type: object
      properties:
        name: { type: string }
        product_type: { type: string, description: Drives tax categorization. }
        description: { type: string }
    Product:
      allOf:
        - $ref: '#/components/schemas/ProductCreate'
        - type: object
          properties:
            id: { type: string }
            object: { type: string, example: product }
    ProductList:
      type: object
      properties:
        object: { type: string, example: list }
        data:
          type: array
          items: { $ref: '#/components/schemas/Product' }
    TaxEvidence:
      type: object
      properties:
        id: { type: string }
        object: { type: string, example: tax_evidence }
        applied_rate: { type:

# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/octobat/refs/heads/main/openapi/octobat-openapi.yml