openapi: 3.0.3 info: title: Tabs Platform Catalog Invoices API description: 'The Tabs Platform API is the public REST API for Tabs (tabs.inc), an AI-native revenue automation platform for B2B companies that unifies billing, collections, ASC 606 revenue recognition, and reporting on top of a contract-driven data model. The API exposes the core Tabs data model - customers, contracts, items, revenue categories, obligations, invoices, payments, usage events, and performance obligations - so contract, billing, and revenue data can flow into the rest of the finance stack (ERP, CRM, payment, and tax systems). You can push customers, contracts, obligations, and usage into Tabs, and pull invoices, payments, recognized revenue, ARR, and cash-forecast reporting back out. NOTE ON ENDPOINT SHAPES: Tabs publishes public developer documentation at docs.tabsplatform.com describing the data model, authentication, and the documented resource groups and operations (list/create/get/update/delete per resource, invoice actions and PDF download, obligation and performance- obligation management, recognized-revenue upsert, ARR and cash-forecast reports, usage events). The base URL (https://api.tabsplatform.com) and Authorization-header API-key auth are confirmed from those docs. The exact request/response path strings below are MODELED on standard REST conventions consistent with the documented operations, because Tabs does not publish a downloadable OpenAPI file or literal path strings in its public docs as of the review date. Verify concrete paths and schemas against the live console reference before use.' version: '1.0' contact: name: Tabs url: https://tabs.inc x-endpointsModeled: true servers: - url: https://api.tabsplatform.com description: Tabs Platform production API security: - apiKeyAuth: [] tags: - name: Invoices description: Itemized requests for payment derived from obligations, with actions and PDF export. paths: /customers/{customerId}/invoices: parameters: - $ref: '#/components/parameters/CustomerId' get: operationId: listCustomerInvoices tags: - Invoices summary: List invoices for a customer responses: '200': description: A list of invoices for the customer. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Invoice' '401': $ref: '#/components/responses/Unauthorized' /invoices: get: operationId: listInvoices tags: - Invoices summary: List invoices responses: '200': description: A list of invoices. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Invoice' '401': $ref: '#/components/responses/Unauthorized' /invoices/{invoiceId}: parameters: - $ref: '#/components/parameters/InvoiceId' get: operationId: getInvoice tags: - Invoices summary: Get an invoice responses: '200': description: The requested invoice. content: application/json: schema: $ref: '#/components/schemas/Invoice' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateInvoice tags: - Invoices summary: Update an invoice description: Update invoice metadata such as PO number, memo, and external IDs. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Invoice' responses: '200': description: The updated invoice. content: application/json: schema: $ref: '#/components/schemas/Invoice' '401': $ref: '#/components/responses/Unauthorized' /invoices/{invoiceId}/pdf: parameters: - $ref: '#/components/parameters/InvoiceId' get: operationId: downloadInvoicePdf tags: - Invoices summary: Download an invoice PDF responses: '200': description: The invoice PDF. content: application/pdf: schema: type: string format: binary '401': $ref: '#/components/responses/Unauthorized' /invoices/{invoiceId}/actions: parameters: - $ref: '#/components/parameters/InvoiceId' post: operationId: performInvoiceAction tags: - Invoices summary: Perform an action on an invoice description: Perform a lifecycle action on an invoice, such as finalize, send, void, or mark paid. requestBody: required: true content: application/json: schema: type: object properties: action: type: string enum: - finalize - send - void - mark_paid responses: '200': description: The updated invoice. content: application/json: schema: $ref: '#/components/schemas/Invoice' '401': $ref: '#/components/responses/Unauthorized' components: responses: Unauthorized: description: Missing or invalid API key. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: InvoiceLineItem: type: object properties: id: type: string obligationId: type: string description: type: string quantity: type: number amount: type: number salesTax: type: number Error: type: object properties: error: type: string message: type: string Invoice: type: object properties: id: type: string customerId: type: string contractId: type: string status: type: string poNumber: type: string memo: type: string dueDate: type: string format: date total: type: number currency: type: string lineItems: type: array items: $ref: '#/components/schemas/InvoiceLineItem' parameters: InvoiceId: name: invoiceId in: path required: true schema: type: string CustomerId: name: customerId in: path required: true schema: type: string securitySchemes: apiKeyAuth: type: apiKey in: header name: Authorization description: 'API key passed directly in the Authorization header (Authorization: YOUR_API_KEY). Keys are created in the Developers section of the Tabs app and require administrator privileges.'