Source: https://billingmart.com/developers/api # API reference Every route api.billingmart.com answers, read from the OpenAPI document the server publishes: 328 operations in 14 sections. A connection given every scope an assistant may hold is offered 318 tools: the API operations under their tool names, plus search and fetch. [Open the OpenAPI document](https://api.billingmart.com/v1/openapi.json) [How requests work](https://billingmart.com/developers/rest) Before the first call ## Four things every route shares Read these once. Each section below assumes them. ### [Base URL](https://billingmart.com/developers/rest#versioning) https://api.billingmart.com/v1. The version is in the path. Our build checks every contract against a recorded baseline for a removed or renamed field. ### [Authentication](https://billingmart.com/developers/authentication) Authorization: Bearer with an API key (bmk_live_… or bmk_test_…). An OAuth access token works only against the MCP service. ### [Envelope](https://billingmart.com/developers/rest#envelope) Success is { data, meta }. Failure is { error: { code, message, fields? }, meta }. ### [Money](https://billingmart.com/developers/rest#money) Integer minor units with the currency beside them. The server computes every total. 14 sections ## Browse by what you are building Each section is one page: the routes in it, their parameters and bodies, what they return, and the objects they return. ### [Workspace and access](https://billingmart.com/developers/api/workspace) 28 routes The workspace a credential acts in, its plan, how it pays for it, usage and AI credits, the connection an assistant holds, the people, keys and apps with access, and resetting a sandbox to its demo data. - GET [`/v1/business`](https://billingmart.com/developers/api/workspace#business-get) - POST [`/v1/business/item-presets`](https://billingmart.com/developers/api/workspace#business-upsertItemPreset) - GET [`/v1/business/item-presets`](https://billingmart.com/developers/api/workspace#business-listItemPresets) - POST [`/v1/business/item-presets/{key}/archive`](https://billingmart.com/developers/api/workspace#business-archiveItemPreset) - POST [`/v1/business/item-presets/{key}/restore`](https://billingmart.com/developers/api/workspace#business-restoreItemPreset) and 23 more ### [Clients](https://billingmart.com/developers/api/clients) 7 routes The people and companies you bill. Contact details come back masked unless the credential holds contacts:read. - GET [`/v1/clients`](https://billingmart.com/developers/api/clients#clients-list) - POST [`/v1/clients`](https://billingmart.com/developers/api/clients#clients-create) - GET [`/v1/clients/find`](https://billingmart.com/developers/api/clients#clients-find) - GET [`/v1/clients/{clientId}`](https://billingmart.com/developers/api/clients#clients-get) - PATCH [`/v1/clients/{clientId}`](https://billingmart.com/developers/api/clients#clients-update) and 2 more ### [Invoices](https://billingmart.com/developers/api/invoices) 53 routes Drafts, lines, deposits, progress billing and reminders. Every write here produces or edits a draft; sending is an action, approved by a person or the owner’s capped rule. - GET [`/v1/invoices`](https://billingmart.com/developers/api/invoices#invoices-list) - POST [`/v1/invoices`](https://billingmart.com/developers/api/invoices#invoices-createDraft) - GET [`/v1/invoices/{invoiceId}`](https://billingmart.com/developers/api/invoices#invoices-get) - PATCH [`/v1/invoices/{invoiceId}`](https://billingmart.com/developers/api/invoices#invoices-updateDraft) - POST [`/v1/jobs/{jobId}/invoices`](https://billingmart.com/developers/api/invoices#invoices-createFromJob) and 48 more ### [Estimates](https://billingmart.com/developers/api/estimates) 6 routes Quotes before the work, converted into an invoice once the client accepts. - GET [`/v1/estimates`](https://billingmart.com/developers/api/estimates#estimates-list) - POST [`/v1/estimates`](https://billingmart.com/developers/api/estimates#estimates-create) - GET [`/v1/estimates/{estimateId}`](https://billingmart.com/developers/api/estimates#estimates-get) - PATCH [`/v1/estimates/{estimateId}`](https://billingmart.com/developers/api/estimates#estimates-update) - POST [`/v1/estimates/{estimateId}/convert`](https://billingmart.com/developers/api/estimates#estimates-convert) and 1 more ### [Payments](https://billingmart.com/developers/api/payments) 17 routes What was paid, how, and what is still owed. Recording and refunding are API-key scopes or approved actions, never a connected assistant on its own. - GET [`/v1/payments`](https://billingmart.com/developers/api/payments#payments-list) - GET [`/v1/payments/{paymentId}`](https://billingmart.com/developers/api/payments#payments-get) - GET [`/v1/payment-links`](https://billingmart.com/developers/api/payments#paymentLinks-list) - GET [`/v1/payment-links/{linkId}`](https://billingmart.com/developers/api/payments#paymentLinks-get) - GET [`/v1/payment-links/{linkId}/summary`](https://billingmart.com/developers/api/payments#paymentLinks-summary) and 12 more ### [Recurring and automation](https://billingmart.com/developers/api/recurring) 7 routes Schedules that raise invoices on their own, the reminder cadence, and what the scheduled jobs will do next. - GET [`/v1/recurring`](https://billingmart.com/developers/api/recurring#recurring-list) - GET [`/v1/recurring/{recurringId}`](https://billingmart.com/developers/api/recurring#recurring-get) - PATCH [`/v1/recurring/{recurringId}`](https://billingmart.com/developers/api/recurring#recurring-update) - POST [`/v1/recurring/{recurringId}/pause`](https://billingmart.com/developers/api/recurring#recurring-pause) - GET [`/v1/automation/upcoming`](https://billingmart.com/developers/api/recurring#automation-upcoming) and 2 more ### [Time, expenses, mileage and documents](https://billingmart.com/developers/api/capture) 25 routes Work logged during the month, billed onto an invoice exactly once, and paper read from a photo or PDF into a draft a person files. A CSV of clients, items or open invoices can be dry-run here; a person runs the import in the console. - GET [`/v1/time-entries`](https://billingmart.com/developers/api/capture#time-list) - POST [`/v1/time-entries`](https://billingmart.com/developers/api/capture#time-create) - GET [`/v1/expenses`](https://billingmart.com/developers/api/capture#expenses-list) - POST [`/v1/expenses`](https://billingmart.com/developers/api/capture#expenses-create) - GET [`/v1/mileage`](https://billingmart.com/developers/api/capture#mileage-list) and 20 more ### [Bills and vendors](https://billingmart.com/developers/api/payables) 19 routes The other side of the ledger: vendors, the bills they send, and what has been paid against them. - GET [`/v1/recurring-bills`](https://billingmart.com/developers/api/payables#recurringBills-list) - POST [`/v1/recurring-bills`](https://billingmart.com/developers/api/payables#recurringBills-create) - GET [`/v1/recurring-bills/{recurringBillId}`](https://billingmart.com/developers/api/payables#recurringBills-get) - POST [`/v1/recurring-bills/{recurringBillId}/pause`](https://billingmart.com/developers/api/payables#recurringBills-pause) - GET [`/v1/bills`](https://billingmart.com/developers/api/payables#bills-list) and 14 more ### [Reports and exports](https://billingmart.com/developers/api/reports) 20 routes Ageing, income, tax, settlement and reconciliation, computed from stored amounts, plus the accounting export. - GET [`/v1/reports/ar-ageing`](https://billingmart.com/developers/api/reports#reports-arAgeing) - GET [`/v1/reports/ap-ageing`](https://billingmart.com/developers/api/reports#reports-apAgeing) - GET [`/v1/reports/income`](https://billingmart.com/developers/api/reports#reports-income) - GET [`/v1/reports/tax-categories`](https://billingmart.com/developers/api/reports#reports-taxCategories) - GET [`/v1/tax-categories`](https://billingmart.com/developers/api/reports#taxCategories-list) and 15 more ### [Templates and pay themes](https://billingmart.com/developers/api/templates) 11 routes How an invoice and its pay page look. Drafts only; publishing is an approved action. - GET [`/v1/templates`](https://billingmart.com/developers/api/templates#templates-list) - POST [`/v1/templates`](https://billingmart.com/developers/api/templates#templates-create) - GET [`/v1/templates/{templateId}`](https://billingmart.com/developers/api/templates#templates-get) - PATCH [`/v1/templates/{templateId}`](https://billingmart.com/developers/api/templates#templates-update) - GET [`/v1/templates/{templateId}/preview`](https://billingmart.com/developers/api/templates#templates-preview) and 6 more ### [Messages and activity](https://billingmart.com/developers/api/messages) 8 routes The delivery log of every email and text, the audit trail of who did what, and your own notifications and their settings. - GET [`/v1/messages`](https://billingmart.com/developers/api/messages#messages-list) - GET [`/v1/sms/threads`](https://billingmart.com/developers/api/messages#sms-threads-list) - GET [`/v1/sms/threads/{threadId}`](https://billingmart.com/developers/api/messages#sms-threads-get) - GET [`/v1/activity`](https://billingmart.com/developers/api/messages#activity-list) - GET [`/v1/activity/export`](https://billingmart.com/developers/api/messages#activity-export) and 3 more ### [Actions and approvals](https://billingmart.com/developers/api/actions) 109 routes Anything that sends, moves money or changes the workspace is proposed here and waits for a signed-in person, or for the owner’s capped rule. - GET [`/v1/actions`](https://billingmart.com/developers/api/actions#actions-list) - POST [`/v1/actions`](https://billingmart.com/developers/api/actions#actions-propose) - GET [`/v1/actions/{actionId}`](https://billingmart.com/developers/api/actions#actions-get) - POST [`/v1/actions/sendInvoice`](https://billingmart.com/developers/api/actions#actions-sendInvoice) - POST [`/v1/actions/sendEstimate`](https://billingmart.com/developers/api/actions#actions-sendEstimate) and 104 more ### [Webhooks](https://billingmart.com/developers/api/webhooks) 9 routes Endpoints BillingMart signs and posts events to, and the log of every attempt. - GET [`/v1/admin/webhook-endpoints`](https://billingmart.com/developers/api/webhooks#webhookEndpoints-list) - GET [`/v1/admin/webhook-deliveries`](https://billingmart.com/developers/api/webhooks#webhookDeliveries-list) - GET [`/v1/webhooks`](https://billingmart.com/developers/api/webhooks#webhooks-list) - POST [`/v1/webhooks`](https://billingmart.com/developers/api/webhooks#webhooks-create) - PATCH [`/v1/webhooks/{endpointId}`](https://billingmart.com/developers/api/webhooks#webhooks-update) and 4 more ### [Work setup and job types](https://billingmart.com/developers/api/work-setup) 9 routes How a business sets up its work records: its terminology, the record types it can use, and the industry packs it can adopt. A record type is saved here as a draft; publishing it is an approved action. - GET [`/v1/work-config`](https://billingmart.com/developers/api/work-setup#workConfig-get) - GET [`/v1/industry-packs`](https://billingmart.com/developers/api/work-setup#industryPacks-list) - GET [`/v1/job-types`](https://billingmart.com/developers/api/work-setup#jobTypes-list) - POST [`/v1/job-types`](https://billingmart.com/developers/api/work-setup#jobTypes-create) - GET [`/v1/job-types/{typeId}`](https://billingmart.com/developers/api/work-setup#jobTypes-get) and 4 more 41 scopes that routes name ## Scopes A credential holds a set of scopes. Each route needs the scope on its entry, and a few also need a second one, which their summary says. A write scope also reads what it writes. Scopes and how many routes need each | Scope | Routes that need it | | --- | --- | | `actions:admin` | 37 | | `actions:deliver` | 14 | | `actions:money` | 22 | | `actions:propose` | 3 | | `actions:read` | 3 | | `actions:records` | 31 | | `activity:read` | 2 | | `admin:read` | 12 | | `bills:approve` | 2 | | `bills:read` | 8 | | `bills:write` | 11 | | `business:read` | 18 | | `clients:read` | 4 | | `clients:write` | 6 | | `estimates:read` | 2 | | `estimates:write` | 4 | | `expenses:read` | 1 | | `expenses:write` | 3 | | `invoices:read` | 6 | | `invoices:write` | 21 | | `jobs:read` | 18 | | `jobs:write` | 19 | | `messages:read` | 3 | | `mileage:read` | 1 | | `mileage:write` | 2 | | `organizer:read` | 2 | | `organizer:write` | 4 | | `payments:notes` | 1 | | `payments:read` | 11 | | `payments:record` | 1 | | `payments:refund` | 1 | | `recurring:read` | 2 | | `recurring:write` | 3 | | `reports:read` | 17 | | `sandbox:reset` | 1 | | `templates:read` | 5 | | `templates:write` | 7 | | `time:read` | 3 | | `time:write` | 7 | | `webhooks:manage` | 7 | | `workConfig:write` | 3 | Start here ## How a request is handled Rate limits, idempotency, environments, errors and the envelope, in the order the server applies them. [Read the REST guide →](https://billingmart.com/developers/rest) ## Get a test key Every workspace has a sandbox. A bmk_test_ key works only there, so nothing you try reaches a real customer. [Start free](https://app.billingmart.com/sign-up) [All developer guides](https://billingmart.com/developers) --- This is the Markdown copy of https://billingmart.com/developers/api. Live plans, prices and limits are published as JSON at https://billingmart.com/plans.json and https://billingmart.com/agent-info.json.