# Tabba > Tabba does a company's financial controlling inside the accounting system the company already has. > Its Sales module (customers, products, invoices, recurring series, work registration, credit notes > and revenue recognition) is driven from the REST API, or handed to an AI client over MCP, where > every write is a plan first and is committed only when a person has approved it. - REST API base URL: https://www.tabba.io/api/v1 - MCP endpoint: https://www.tabba.io/api/mcp (OAuth only; the server is named `tabba`) - An API key is a `tba_…` bearer token for the REST API. An admin mints it under Settings, Developers, and it reaches one company. - The MCP endpoint takes no API key, and its OAuth consent needs a browser. A job that has none uses the REST API. - There is no sandbox: a key and a connection work on the company they are bound to. The documentation starts at https://www.tabba.io/developers, a page that leads a person to what is listed here. Every page of the documentation is served as Markdown at its own address plus `.md`. The links below are those addresses. Without the suffix, each is the page a person reads. ## AI clients Connect an agent over MCP - [Overview](https://www.tabba.io/developers/mcp.md): What the Tabba MCP server is, and what an agent can and cannot do with it. - [Connect claude.ai](https://www.tabba.io/developers/mcp/claude-ai.md): Add Tabba as a custom connector in claude.ai. - [Connect Claude Code](https://www.tabba.io/developers/mcp/claude-code.md): Add the Tabba MCP server to Claude Code and authenticate with OAuth. - [Connect ChatGPT](https://www.tabba.io/developers/mcp/chatgpt.md): Add Tabba to ChatGPT as a custom MCP connector. - [Connect Cursor](https://www.tabba.io/developers/mcp/cursor.md): Add the Tabba MCP server to Cursor, for one project or for your whole machine. - [Plan and commit](https://www.tabba.io/developers/mcp/propose-commit.md): Why no Tabba tool writes on its own, what a plan and its token are, and what the server holds a commit to. - [Auth and scopes](https://www.tabba.io/developers/mcp/auth.md): OAuth is the only MCP credential: the flow, the three scopes, the five roles, whose work an answer is about, and how access ends. ## REST API Build on the REST API - [Getting started](https://www.tabba.io/developers/api.md): Base URL, your first call, what a key reaches, and the no-sandbox note. - [Quickstart](https://www.tabba.io/developers/api/quickstart.md): From a key to recognised revenue, in curl, Node and Python. - [Authentication](https://www.tabba.io/developers/api/authentication.md): Key format, scope, the company a key is bound to, rotation. - [Accounting platforms](https://www.tabba.io/developers/api/platforms.md): One API over Dinero and e-conomic: what is identical, the fields that name a platform's own choice, and what a platform can refuse. - [external_id and idempotency](https://www.tabba.io/developers/api/external-id.md): Naming every record by your own key, and why a retried create makes nothing twice. - [Work registration](https://www.tabba.io/developers/api/work-registration.md): Setting a person's hours and completion on a line, as totals. - [Issuance and auto-send](https://www.tabba.io/developers/api/issuance.md): Issuing an invoice yourself or leaving it to the daily run, a booked invoice that was not delivered, and credit notes. - [Webhooks](https://www.tabba.io/developers/api/webhooks.md): Signed, at-least-once events for changes your integration did not make. - [Pagination](https://www.tabba.io/developers/api/pagination.md): Cursors, the order of a list, and following a list with updated_since. - [Errors](https://www.tabba.io/developers/api/errors.md): The error envelope, every code, what to retry, rate limits, and the versioning policy. ## API reference Every endpoint and every webhook event, generated from the OpenAPI document - [Overview](https://www.tabba.io/developers/reference.md): Every /api/v1 endpoint and every webhook event, generated from the OpenAPI document. - [Read the accrual entry of one customer for one month](https://www.tabba.io/developers/reference/accruals/getAccruals.md): `GET /accruals` - [Read the configuration of the company the key is bound to](https://www.tabba.io/developers/reference/config/getConfig.md): `GET /config` - [Credit an issued invoice](https://www.tabba.io/developers/reference/credit-notes/postCreditNotes.md): `POST /credit-notes` - [Delete a customer](https://www.tabba.io/developers/reference/customers/deleteCustomersRef.md): `DELETE /customers/{ref}` - [List the customers the company invoices](https://www.tabba.io/developers/reference/customers/getCustomers.md): `GET /customers` - [Read one customer](https://www.tabba.io/developers/reference/customers/getCustomersRef.md): `GET /customers/{ref}` - [Change the fields of a customer that the body states](https://www.tabba.io/developers/reference/customers/patchCustomersRef.md): `PATCH /customers/{ref}` - [Create a customer](https://www.tabba.io/developers/reference/customers/postCustomers.md): `POST /customers` - [Delete a draft invoice](https://www.tabba.io/developers/reference/invoices/deleteInvoicesRef.md): `DELETE /invoices/{ref}` - [List the invoices of the company](https://www.tabba.io/developers/reference/invoices/getInvoices.md): `GET /invoices` - [Read one invoice](https://www.tabba.io/developers/reference/invoices/getInvoicesRef.md): `GET /invoices/{ref}` - [List the credit notes booked against an invoice](https://www.tabba.io/developers/reference/invoices/getInvoicesRefCreditNotes.md): `GET /invoices/{ref}/credit-notes` - [Read the revenue recognition of one invoice](https://www.tabba.io/developers/reference/invoices/getInvoicesRefRecognition.md): `GET /invoices/{ref}/recognition` - [Create a draft invoice](https://www.tabba.io/developers/reference/invoices/postInvoices.md): `POST /invoices` - [Issue an invoice now](https://www.tabba.io/developers/reference/invoices/postInvoicesRefIssue.md): `POST /invoices/{ref}/issue` - [Replace a draft invoice](https://www.tabba.io/developers/reference/invoices/putInvoicesRef.md): `PUT /invoices/{ref}` - [Delete a product](https://www.tabba.io/developers/reference/products/deleteProductsRef.md): `DELETE /products/{ref}` - [List the products the company offers](https://www.tabba.io/developers/reference/products/getProducts.md): `GET /products` - [Read one product](https://www.tabba.io/developers/reference/products/getProductsRef.md): `GET /products/{ref}` - [Change the fields of a product that the body states](https://www.tabba.io/developers/reference/products/patchProductsRef.md): `PATCH /products/{ref}` - [Create a product](https://www.tabba.io/developers/reference/products/postProducts.md): `POST /products` - [Read the revenue recognition of one customer](https://www.tabba.io/developers/reference/recognition/getRecognition.md): `GET /recognition` - [Take a line of a recurring series away](https://www.tabba.io/developers/reference/recurring-series/deleteRecurringSeriesRefLinesLineRef.md): `DELETE /recurring-series/{ref}/lines/{lineRef}` - [List the recurring series of the company](https://www.tabba.io/developers/reference/recurring-series/getRecurringSeries.md): `GET /recurring-series` - [Read one recurring series](https://www.tabba.io/developers/reference/recurring-series/getRecurringSeriesRef.md): `GET /recurring-series/{ref}` - [List the occurrences of a recurring series](https://www.tabba.io/developers/reference/recurring-series/getRecurringSeriesRefOccurrences.md): `GET /recurring-series/{ref}/occurrences` - [Read one occurrence of a recurring series](https://www.tabba.io/developers/reference/recurring-series/getRecurringSeriesRefOccurrencesPeriod.md): `GET /recurring-series/{ref}/occurrences/{period}` - [Change the header fields of a recurring series that the body states](https://www.tabba.io/developers/reference/recurring-series/patchRecurringSeriesRef.md): `PATCH /recurring-series/{ref}` - [Change a line of a recurring series](https://www.tabba.io/developers/reference/recurring-series/patchRecurringSeriesRefLinesLineRef.md): `PATCH /recurring-series/{ref}/lines/{lineRef}` - [Create a recurring series](https://www.tabba.io/developers/reference/recurring-series/postRecurringSeries.md): `POST /recurring-series` - [Cancel a recurring series](https://www.tabba.io/developers/reference/recurring-series/postRecurringSeriesRefCancel.md): `POST /recurring-series/{ref}/cancel` - [Add a line to a recurring series](https://www.tabba.io/developers/reference/recurring-series/postRecurringSeriesRefLines.md): `POST /recurring-series/{ref}/lines` - [Issue an occurrence of a recurring series now](https://www.tabba.io/developers/reference/recurring-series/postRecurringSeriesRefOccurrencesPeriodIssue.md): `POST /recurring-series/{ref}/occurrences/{period}/issue` - [List the people of the company](https://www.tabba.io/developers/reference/users/getUsers.md): `GET /users` - [Read one person of the company](https://www.tabba.io/developers/reference/users/getUsersRef.md): `GET /users/{ref}` - [Set or clear a person's external_id](https://www.tabba.io/developers/reference/users/patchUsersRef.md): `PATCH /users/{ref}` - [A month-end accrual entry was booked](https://www.tabba.io/developers/reference/webhooks/onAccrualBooked.md): `accrual.booked` - [A credit note was booked](https://www.tabba.io/developers/reference/webhooks/onCreditNoteIssued.md): `credit_note.issued` - [A customer changed](https://www.tabba.io/developers/reference/webhooks/onCustomerUpdated.md): `customer.updated` - [An invoice was issued](https://www.tabba.io/developers/reference/webhooks/onInvoiceIssued.md): `invoice.issued` - [An issued invoice was not sent](https://www.tabba.io/developers/reference/webhooks/onInvoiceSendFailed.md): `invoice.send_failed` - [A product changed](https://www.tabba.io/developers/reference/webhooks/onProductUpdated.md): `product.updated` - [Set a person’s hours and completion on a line](https://www.tabba.io/developers/reference/work-registrations/putWorkRegistrations.md): `PUT /work-registrations` ## Machine surface - [llms-full.txt](https://www.tabba.io/llms-full.txt): the hand-written pages in full and the reference as an index, as one document - [OpenAPI 3.1 document](https://www.tabba.io/api/v1/openapi.json): every endpoint, parameter, schema and webhook event of the REST API - [MCP resource metadata](https://www.tabba.io/.well-known/oauth-protected-resource/api/mcp): where a client finds the authorization server of the MCP endpoint (RFC 9728)