# OrderDen > Order, quote, invoice and stock management for small makers and trades: > clients, a costed catalog with recipes and materials, quotes that become > orders that become invoices, payments, purchasing, production runs, stock > with a movement ledger, shipping labels and reports. Everything the web app does is available over a REST API at `https://0.0.0.0:3000/api/v1`, included in every plan. Authenticate with a bearer key from Company Settings → API keys (`Authorization: Bearer od_live_…`). Start with `GET /api/v1/me`: it says which workspace the key acts in, the role and permission flags it carries, and how much of the plan's quota is left. A key made by somebody who may not see costs gets responses with every cost and margin field **absent** — plan for that rather than treating it as an error. Conventions: JSON in and out; success is `{"data": …}` and lists add `{"meta": {total, page, pageSize, pageCount}}`; money is decimal strings; dates are ISO-8601; partial updates use PATCH. Every list takes `?updatedSince=` for polling, `?page`/`?pageSize`, `?sort` and `?format=csv`. Writes accept an `Idempotency-Key` header and replay the first response for 24 hours, so a retry after a timeout is safe. ## Every endpoint ### Custom fields & bulk - `GET /api/v1/custom-fields` — The fields this workspace added to its own records - `POST /api/v1/custom-fields` — Define a field - `POST /api/v1/custom-fields/reorder` — Set the order one entity's fields appear on the form - `GET /api/v1/custom-fields/{id}` — One definition - `PUT /api/v1/custom-fields/{id}` — Change the label, type, choices or where it shows - `DELETE /api/v1/custom-fields/{id}` — Remove a definition - `GET /api/v1/bulk-jobs/{id}` — How a long bulk run is getting on - `POST /api/v1/orders/bulk` — Do one thing to many orders - `POST /api/v1/quotes/bulk` — Do one thing to many quotes - `POST /api/v1/invoices/bulk` — Do one thing to many invoices - `POST /api/v1/items/bulk` — Do one thing to many items - `POST /api/v1/clients/bulk` — Do one thing to many clients - `POST /api/v1/purchases/bulk` — Do one thing to many purchases ### Catalog tree - `GET /api/v1/item-categories` — The catalog tree - `POST /api/v1/item-categories` — Add a category - `POST /api/v1/item-categories/reorder` — Reorder one level of the tree - `GET /api/v1/item-categories/{id}` — One category with its children - `PUT /api/v1/item-categories/{id}` — Rename, re-file, or change what its items start from - `DELETE /api/v1/item-categories/{id}` — Delete an empty category - `POST /api/v1/item-categories/{id}/merge` — Fold one category into another - `GET /api/v1/tags` — The workspace's one tag list - `POST /api/v1/tags` — Add a tag - `GET /api/v1/tags/{id}` — One tag with its usage count - `PUT /api/v1/tags/{id}` — Rename or recolour a tag - `DELETE /api/v1/tags/{id}` — Take a tag off everything and drop it - `POST /api/v1/tags/{id}/merge` — Fold one tag into another - `POST /api/v1/quotes/{id}/archive` — Archive a quote - `POST /api/v1/quotes/{id}/restore` — Restore a quote from the archive - `POST /api/v1/orders/{id}/archive` — Archive a order - `POST /api/v1/orders/{id}/restore` — Restore a order from the archive - `POST /api/v1/invoices/{id}/archive` — Archive a invoice - `POST /api/v1/invoices/{id}/restore` — Restore a invoice from the archive - `POST /api/v1/credit-notes/{id}/archive` — Archive a credit note - `POST /api/v1/credit-notes/{id}/restore` — Restore a credit note from the archive - `POST /api/v1/purchases/{id}/archive` — Archive a purchase - `POST /api/v1/purchases/{id}/restore` — Restore a purchase from the archive ### Setup - `GET /api/v1/setup/checklist` — The guided-setup checklist - `POST /api/v1/setup/checklist` — Tick a step off by hand, or dismiss the card - `GET /api/v1/setup/workspace` — What this workspace makes and the wording it reads in - `PUT /api/v1/setup/workspace` — Change the industry and/or the vocabulary - `GET /api/v1/setup/kit` — Every starter kit on offer, and what each installs - `POST /api/v1/setup/kit` — Install a starter kit - `GET /api/v1/setup/sample-data` — What a starter kit installed, and what is in the way of removing it - `DELETE /api/v1/setup/sample-data` — Remove the demonstration records - `POST /api/v1/inventory/opening-balances` — What was on the shelf when the workspace opened - `POST /api/v1/invoices/opening-balance` — An unpaid invoice that predates the workspace ### Stock - `GET /api/v1/inventory` — What is on the shelf - `GET /api/v1/inventory/bins` — Every bin the workspace has recorded - `PUT /api/v1/inventory/bins` — Set where one thing sits - `GET /api/v1/inventory/movements` — The workspace's whole stock ledger - `GET /api/v1/items/{id}/stock` — An item's stock figures - `GET /api/v1/items/{id}/movements` — An item's stock ledger - `POST /api/v1/items/{id}/stock/adjust` — Adjust an item's stock - `POST /api/v1/items/{id}/stock/opening` — Set an item's opening stock - `GET /api/v1/stock/alerts` — Low-stock alerts - `GET /api/v1/stock/allocations` — Allocations against an item - `POST /api/v1/stock/allocations` — Allocate stock to an order line - `GET /api/v1/stock/allocations/{id}` — Get an allocation - `DELETE /api/v1/stock/allocations/{id}` — Release an allocation - `GET /api/v1/orders/{id}/allocations` — Allocations on an order - `GET /api/v1/items/{id}/stock-by-location` — Where an item's stock is - `GET /api/v1/items/{id}/bins` — Where an item sits - `PUT /api/v1/items/{id}/bins` — Set where an item sits ### Organization - `GET /api/v1/organization` — The organization this key acts as, with its profile - `GET /api/v1/organization/profile` — The letterhead, currency, locale and logo - `PUT /api/v1/organization/profile` — Replace the profile - `GET /api/v1/organization/logo` — The logo file - `PUT /api/v1/organization/logo` — Upload (replace) the logo - `DELETE /api/v1/organization/logo` — Remove the logo - `GET /api/v1/billing` — Plan, subscription and add-ons with usage against every allowance - `GET /api/v1/billing/account-credit` — Account credit and the ledger behind it - `GET /api/v1/dashboard` — Headline numbers - `GET /api/v1/dashboard/widgets` — Dashboard widget data for a date range - `GET /api/v1/search` — Global search across the workspace ### Reports - `GET /api/v1/reports/revenue-by-client` — Revenue and gross margin by client - `GET /api/v1/reports/wholesale-vs-retail` — Trade against retail, compared on margin - `GET /api/v1/reports/revenue-by-item` — Revenue and gross margin by catalog item, or by category - `GET /api/v1/reports/revenue-by-period` — Revenue and gross margin per day, week or month - `GET /api/v1/reports/recurring-revenue` — What the running plans are worth a month - `GET /api/v1/reports/failed-charges` — Invoices whose card on file was declined - `GET /api/v1/reports/quote-conversion` — What became of the period's quotes, and which options were taken - `GET /api/v1/reports/backlog-aging` — Open order backlog aged by promised date - `GET /api/v1/reports/fulfilment-cycle-time` — Days from confirmation to fully shipped - `GET /api/v1/reports/on-time-delivery` — Share of orders fully shipped by their promised date - `GET /api/v1/reports/inventory-valuation` — What the stock was worth, as at any date - `GET /api/v1/reports/stock-movements` — The stock ledger over a period - `GET /api/v1/reports/stock-by-location` — What stock is where, right now - `GET /api/v1/reports/stocktake-variance` — What the physical counts found - `GET /api/v1/reports/production-summary` — What was made in a period and what it cost - `GET /api/v1/reports/project-profitability` — What each project was quoted at and what it cost - `GET /api/v1/reports/expenses-by-category` — Where the money went, per spend category - `GET /api/v1/reports/profit-and-loss` — Revenue, cost of sales, expenses and what is left - `GET /api/v1/reports/materials-usage` — What production got through, waste separately - `GET /api/v1/reports/credits-and-refunds` — What was given back, and what for - `GET /api/v1/reports/ar-ageing` — Who owes what, and for how long - `GET /api/v1/reports/income-by-payment-method` — How the money arrived - `GET /api/v1/reports/tax-collected` — Tax charged per rate and period - `GET /api/v1/reports/cogs` — Cost of goods sold for a period - `GET /api/v1/reports/schedule-c-expenses` — The period's spend grouped by tax line ### Activity - `GET /api/v1/activity` — The activity trail, newest first ### Clients - `GET /api/v1/clients` — List clients - `POST /api/v1/clients` — Create a client - `GET /api/v1/clients/duplicates` — Candidate duplicate clients, grouped - `POST /api/v1/clients/merge` — Fold duplicate clients into one - `GET /api/v1/clients/{id}` — Get a client (full graph incl. activity) - `PATCH /api/v1/clients/{id}` — Update a client - `DELETE /api/v1/clients/{id}` — Archive a client - `POST /api/v1/clients/{id}/restore` — Restore an archived client - `GET /api/v1/clients/{id}/summary` — Cross-domain rollup (documents, money, items) - `POST /api/v1/clients/{id}/notes` — Add a note to the client's activity feed - `POST /api/v1/clients/{id}/addresses` — Add an address - `POST /api/v1/clients/{id}/contacts` — Add a contact person - `POST /api/v1/clients/{id}/contact-methods` — Add a contact method (email/phone/…) - `PUT /api/v1/addresses/{id}` — Replace an address - `DELETE /api/v1/addresses/{id}` — Remove an address - `PUT /api/v1/contacts/{id}` — Replace a contact - `DELETE /api/v1/contacts/{id}` — Remove a contact - `DELETE /api/v1/contact-methods/{id}` — Remove a contact method - `GET /api/v1/clients/{id}/attachments` — List the client's attachments - `POST /api/v1/clients/{id}/attachments` — Upload an attachment to the client - `GET /api/v1/clients/{id}/credit` — A client's credit balance and the ledger behind it ### Items - `GET /api/v1/items` — List catalog items - `POST /api/v1/items` — Create an item - `GET /api/v1/items/{id}` — Get an item - `PATCH /api/v1/items/{id}` — Update an item - `DELETE /api/v1/items/{id}` — Delete an item - `GET /api/v1/items/{id}/vendors` — Who sells this item - `PUT /api/v1/items/{id}/vendors` — Add or update a vendor on the item - `DELETE /api/v1/items/{id}/vendors/{vendorId}` — Take a vendor off the item - `POST /api/v1/items/{id}/archive` — Deactivate an item - `POST /api/v1/items/{id}/restore` — Reactivate an item ### Variants & kits - `GET /api/v1/items/{id}/variants` — An item's variants - `POST /api/v1/items/{id}/variants` — Save the variant grid - `POST /api/v1/items/{id}/variants/generate` — Propose the variant grid - `GET /api/v1/variants/{id}` — Get a variant - `PUT /api/v1/variants/{id}` — Update a variant - `DELETE /api/v1/variants/{id}` — Delete a variant - `GET /api/v1/items/{id}/components` — What a kit contains - `PUT /api/v1/items/{id}/components` — Set what a kit contains - `GET /api/v1/items/{id}/images` — An item's photographs - `POST /api/v1/items/{id}/images` — Upload a photograph - `PUT /api/v1/items/{id}/images` — Reorder an item's photographs - `DELETE /api/v1/items/{id}/images/{attachmentId}` — Remove a photograph ### Materials & recipes - `GET /api/v1/items/{id}/recipe` — An item's recipe (bill of materials) - `PUT /api/v1/items/{id}/recipe` — Save an item's recipe - `DELETE /api/v1/items/{id}/recipe` — Remove an item's recipe - `GET /api/v1/items/{id}/recipe/cost` — What the recipe works out to - `POST /api/v1/items/{id}/recipe/adopt` — Use the recipe cost as the item's unit cost - `GET /api/v1/materials` — List materials - `POST /api/v1/materials` — Create a material - `GET /api/v1/materials/{id}` — Get a material - `PUT /api/v1/materials/{id}` — Update a material - `DELETE /api/v1/materials/{id}` — Delete a material - `GET /api/v1/units` — List units of measure - `POST /api/v1/units` — Add a unit - `GET /api/v1/units/{id}` — Get a unit - `PUT /api/v1/units/{id}` — Update a unit - `DELETE /api/v1/units/{id}` — Delete a unit - `GET /api/v1/variables` — List workspace variables - `POST /api/v1/variables` — Add a workspace variable - `GET /api/v1/variables/{id}` — Get a workspace variable - `PUT /api/v1/variables/{id}` — Update a workspace variable - `DELETE /api/v1/variables/{id}` — Delete a workspace variable ### Production - `GET /api/v1/production-runs` — List production runs - `POST /api/v1/production-runs` — Plan a production run - `GET /api/v1/production-runs/{id}` — Get a production run - `PUT /api/v1/production-runs/{id}` — Change a planned or in-progress run - `DELETE /api/v1/production-runs/{id}` — Delete a run that never moved stock - `POST /api/v1/production-runs/{id}/start` — Start a planned run - `POST /api/v1/production-runs/{id}/complete` — Finish the batch and move the stock - `POST /api/v1/production-runs/{id}/cancel` — Call off a run that has not completed - `GET /api/v1/items/{id}/buildable` — How many more can be made from what is on hand ### Enquiries - `GET /api/v1/enquiries` — List enquiries - `GET /api/v1/enquiries/{id}` — Get an enquiry - `GET /api/v1/enquiries/{id}/files` — The files sent with it - `POST /api/v1/enquiries/{id}/convert` — Turn it into a draft quote - `POST /api/v1/enquiries/{id}/close` — Close without a quote - `POST /api/v1/enquiries/{id}/reopen` — Reopen a closed enquiry ### Purchase orders from clients - `GET /api/v1/client-pos` — List purchase orders clients sent - `GET /api/v1/client-pos/{id}` — Get one - `GET /api/v1/client-pos/{id}/files` — The document they sent - `POST /api/v1/client-pos/{id}/accept` — Accept it as a draft order - `POST /api/v1/client-pos/{id}/decline` — Decline it, with a reason - `POST /api/v1/client-pos/{id}/read` — Read the document again ### Quotes - `GET /api/v1/quotes` — List quotes - `POST /api/v1/quotes` — Create a quote - `GET /api/v1/quotes/{id}` — Get a quote - `PATCH /api/v1/quotes/{id}` — Update a quote - `DELETE /api/v1/quotes/{id}` — Delete a quote - `POST /api/v1/quotes/{id}/status` — Set a quote's status - `POST /api/v1/quotes/{id}/convert` — Convert an accepted quote into a new order - `POST /api/v1/quotes/{id}/convert-to-invoice` — Invoice an accepted quote directly - `POST /api/v1/quotes/{id}/convert-to-project` — Start a project from a quote - `GET /api/v1/quotes/{id}/select-options` — How a quote's options stand - `POST /api/v1/quotes/{id}/select-options` — Set which options a quote charges for - `POST /api/v1/quotes/{id}/save-as-template` — Save a quote as a reusable template - `GET /api/v1/quotes/{id}/share-link` — Get the quote's active share link - `POST /api/v1/quotes/{id}/share-link` — Create (or rotate) the quote's share link - `DELETE /api/v1/quotes/{id}/share-link` — Revoke the quote's share link - `GET /api/v1/quotes/{id}/attachments` — List the quote's attachments - `POST /api/v1/quotes/{id}/attachments` — Upload an attachment to the quote - `GET /api/v1/quote-templates` — List quote templates - `POST /api/v1/quote-templates` — Create a quote template - `GET /api/v1/quote-templates/{id}` — Get a quote template - `PUT /api/v1/quote-templates/{id}` — Update a quote template - `DELETE /api/v1/quote-templates/{id}` — Delete a quote template - `POST /api/v1/quote-templates/{id}/create-quote` — Raise a quote from a template ### Invoices - `GET /api/v1/recurring-invoices` — List recurring invoices - `POST /api/v1/recurring-invoices` — Set up a recurring invoice - `GET /api/v1/recurring-invoices/{id}` — Get a recurring invoice - `PUT /api/v1/recurring-invoices/{id}` — Change the plan - `DELETE /api/v1/recurring-invoices/{id}` — Delete a recurring invoice - `POST /api/v1/recurring-invoices/{id}/pause` — Pause a plan - `POST /api/v1/recurring-invoices/{id}/resume` — Resume a paused plan - `POST /api/v1/recurring-invoices/{id}/run` — Raise the next invoice now - `GET /api/v1/invoices` — List invoices - `POST /api/v1/invoices` — Create an invoice - `GET /api/v1/invoices/{id}` — Get an invoice (lines and payments) - `PATCH /api/v1/invoices/{id}` — Update an invoice - `DELETE /api/v1/invoices/{id}` — Delete an invoice - `POST /api/v1/invoices/{id}/status` — Set an invoice's status - `POST /api/v1/invoices/{id}/payments` — Record a payment - `POST /api/v1/invoices/{id}/make-recurring` — Bill this invoice again and again - `POST /api/v1/invoices/{id}/write-off` — Write the balance off as a bad debt - `DELETE /api/v1/invoices/{id}/write-off` — Reverse a write-off - `DELETE /api/v1/invoices/{id}/payments/{paymentId}` — Remove a payment - `POST /api/v1/invoices/{id}/payments/{paymentId}/refund` — Refund a payment - `GET /api/v1/invoices/{id}/share-link` — Get the invoice's active share link - `POST /api/v1/invoices/{id}/share-link` — Create (or rotate) the invoice's share link - `DELETE /api/v1/invoices/{id}/share-link` — Revoke the invoice's share link - `GET /api/v1/invoices/{id}/attachments` — List the invoice's attachments - `POST /api/v1/invoices/{id}/attachments` — Upload an attachment to the invoice ### Payments - `GET /api/v1/clients/{id}/payment-methods` — A client's cards and bank accounts on file - `PUT /api/v1/payment-methods/{id}` — Make a payment method the client's default - `DELETE /api/v1/payment-methods/{id}` — Take a payment method off file - `POST /api/v1/invoices/{id}/charge` — Charge a card on file - `GET /api/v1/payments/{id}/receipt.pdf` — A receipt for one payment - `POST /api/v1/payments/{id}/receipt/email` — Email a receipt for one payment - `GET /api/v1/payments` — List payments - `POST /api/v1/payments` — Record a payment against any invoice - `GET /api/v1/payments/{id}` — Get a payment ### Settings - `GET /api/v1/settings/late-fees` — The workspace's late-fee rule - `PUT /api/v1/settings/late-fees` — Change the late-fee rule - `GET /api/v1/export` — Download everything in the workspace as a zip - `GET /api/v1/settings/templates` — Template settings (theme, footer, number formats) - `PUT /api/v1/settings/templates` — Replace template settings - `GET /api/v1/settings/templates/designs` — The document designs and colour palettes on offer - `GET /api/v1/settings/sales` — Sales policy (minimum gross margin) - `PUT /api/v1/settings/sales` — Update the sales policy - `GET /api/v1/suppressions` — Addresses this workspace has stopped emailing - `POST /api/v1/suppressions` — Stop emailing an address - `DELETE /api/v1/suppressions/{id}` — Start emailing an address again - `GET /api/v1/settings/notifications` — A member's notification preferences - `PUT /api/v1/settings/notifications` — Save a member's notification preferences - `GET /api/v1/settings/mail` — SMTP settings (the password is never returned) - `PUT /api/v1/settings/mail` — Create or update SMTP settings - `DELETE /api/v1/settings/mail` — Remove SMTP settings - `GET /api/v1/settings/payments` — The connected payment account and its options - `PUT /api/v1/settings/payments` — Which methods clients are offered, and whether part payments are allowed - `POST /api/v1/settings/payments/connect` — Start (or resume) payment onboarding - `POST /api/v1/settings/mail/verify` — Send a test email through the saved SMTP settings and verify them ### Orders - `GET /api/v1/orders` — List orders - `POST /api/v1/orders` — Create an order - `GET /api/v1/orders/{id}` — Get an order (lines, shipments, invoices) - `PATCH /api/v1/orders/{id}` — Update an order - `DELETE /api/v1/orders/{id}` — Delete an order - `POST /api/v1/orders/{id}/status` — Set an order's status - `POST /api/v1/orders/{id}/reopen` — Reopen a completed order - `POST /api/v1/orders/{id}/duplicate` — Duplicate an order (reorder) - `POST /api/v1/orders/{id}/close-short` — Close an order short - `POST /api/v1/orders/{id}/shipments` — Record a shipment (partial fulfilment) - `PATCH /api/v1/orders/{id}/shipments/{shipmentId}` — Set a shipment's freight cost - `DELETE /api/v1/orders/{id}/shipments/{shipmentId}` — Void a shipment - `POST /api/v1/orders/{id}/shipments/{shipmentId}/invoice` — Invoice a single shipment - `POST /api/v1/orders/{id}/invoice` — Create an invoice from the order's full lines - `GET /api/v1/orders/{id}/share-link` — Get the order's active share link - `POST /api/v1/orders/{id}/share-link` — Create (or rotate) the order's share link - `DELETE /api/v1/orders/{id}/share-link` — Revoke the order's share link - `GET /api/v1/orders/{id}/attachments` — List the order's attachments - `POST /api/v1/orders/{id}/attachments` — Upload an attachment to the order - `GET /api/v1/orders/{id}/packing-slip.pdf` — The packing slip - `POST /api/v1/orders/packing-slips` — A stack of packing slips as one PDF - `GET /api/v1/orders/{id}/pick-list` — The sheet you walk the shelf with ### Credit notes - `GET /api/v1/credit-notes` — List credit notes - `POST /api/v1/credit-notes` — Draft a credit note - `GET /api/v1/credit-notes/{id}` — Get a credit note (lines, applications and refunds) - `PUT /api/v1/credit-notes/{id}` — Edit a draft credit note - `DELETE /api/v1/credit-notes/{id}` — Void a credit note - `POST /api/v1/credit-notes/{id}/issue` — Issue the credit note - `POST /api/v1/credit-notes/{id}/apply` — Apply credit to an invoice - `POST /api/v1/credit-notes/{id}/refund` — Refund the credit - `POST /api/v1/credit-notes/{id}/void` — Void a credit note - `GET /api/v1/credit-notes/{id}/pdf` — The credit note as a PDF ### Attachments - `GET /api/v1/attachments/{id}` — Attachment metadata - `PUT /api/v1/attachments/{id}` — Show a file to the client, or stop showing it - `DELETE /api/v1/attachments/{id}` — Delete an attachment (permanent) - `GET /api/v1/attachments/{id}/download` — Download the file bytes - `GET /api/v1/attachment-purges` — Past attachment clear-outs - `POST /api/v1/attachment-purges` — Export and remove attachments older than a date - `POST /api/v1/attachment-purges/preview` — What a cutoff would remove - `GET /api/v1/attachment-purges/{id}` — One clear-out - `DELETE /api/v1/attachment-purges/{id}` — Delete the archive from OrderDen storage - `GET /api/v1/attachment-purges/{id}/download` — The archive a clear-out produced ### Statements - `GET /api/v1/clients/{id}/statement` — A client's statement of account - `POST /api/v1/clients/{id}/statement/send` — Email a client their statement - `GET /api/v1/statements` — The statements that have actually been sent - `GET /api/v1/settings/statements` — The automatic statement schedule - `PUT /api/v1/settings/statements` — Change the schedule ### Client portal - `GET /api/v1/clients/{id}/portal-users` — Who at this client can sign in - `POST /api/v1/clients/{id}/portal-users` — Give somebody at this client an account - `DELETE /api/v1/portal-users/{id}` — Take portal access away - `GET /api/v1/quotes/{id}/comments` — The client conversation on one quote - `POST /api/v1/quotes/{id}/comments` — Reply to the client on this quote - `GET /api/v1/orders/{id}/comments` — The client conversation on one order - `POST /api/v1/orders/{id}/comments` — Reply to the client on this order - `GET /api/v1/invoices/{id}/comments` — The client conversation on one invoice - `POST /api/v1/invoices/{id}/comments` — Reply to the client on this invoice - `GET /api/v1/projects/{id}/comments` — The client conversation on one project - `POST /api/v1/projects/{id}/comments` — Reply to the client on this project ### Pricing - `GET /api/v1/items/{id}/pricing` — What to charge, and what a price actually leaves you - `POST /api/v1/items/{id}/pricing` — Set a price from a suggestion - `POST /api/v1/pricing/what-if` — What if I charged this instead? - `GET /api/v1/settings/pricing` — The workspace's margin target and markup rules - `PUT /api/v1/settings/pricing` — Update the pricing rules ### Shipping - `GET /api/v1/settings/shipping` — The carrier account - `PUT /api/v1/settings/shipping` — Save the carrier account - `GET /api/v1/package-presets` — List the boxes - `POST /api/v1/package-presets` — Add a box - `GET /api/v1/package-presets/{id}` — Get a box - `PUT /api/v1/package-presets/{id}` — Update a box - `DELETE /api/v1/package-presets/{id}` — Delete a box - `POST /api/v1/addresses/{id}/validate` — Check an address against the carrier network - `POST /api/v1/orders/{id}/shipping/rates` — What every carrier would charge - `POST /api/v1/orders/{id}/shipping/labels` — Buy a label - `POST /api/v1/orders/{id}/shipping/local` — Record a collection or a local delivery - `POST /api/v1/shipping/labels/batch` — Buy labels for a stack of orders - `GET /api/v1/shipments/{id}/label.pdf` — Reprint a bought label - `POST /api/v1/shipments/{id}/void` — Ask for the postage back ### Print batches - `POST /api/v1/print-batches` — Book a stack of documents to be printed - `GET /api/v1/print-batches/{id}` — How a print batch is getting on - `GET /api/v1/print-batches/{id}/file` — The finished PDF ### Stocktakes - `GET /api/v1/stocktakes` — List stocktakes - `POST /api/v1/stocktakes` — Start a count - `GET /api/v1/stocktakes/{id}` — Get a stocktake - `PUT /api/v1/stocktakes/{id}/lines/{lineId}` — Record what was found - `GET /api/v1/stocktakes/{id}/review` — What the count found - `POST /api/v1/stocktakes/{id}/post` — Post the count - `POST /api/v1/stocktakes/{id}/cancel` — Abandon a count ### Barcodes - `GET /api/v1/barcodes/{code}` — What a scanned code is - `POST /api/v1/items/barcodes/generate` — Give a code to whatever has none - `POST /api/v1/labels` — Print barcode labels ### Locations - `GET /api/v1/locations` — List locations - `POST /api/v1/locations` — Add a location - `GET /api/v1/locations/{id}` — Get a location - `PUT /api/v1/locations/{id}` — Update a location - `DELETE /api/v1/locations/{id}` — Delete a location ### Purchases - `GET /api/v1/spending` — Everything that went out - `GET /api/v1/purchases` — List purchases - `POST /api/v1/purchases` — Create a purchase - `GET /api/v1/purchases/{id}` — Get a purchase (lines and payments) - `PATCH /api/v1/purchases/{id}` — Update a purchase - `DELETE /api/v1/purchases/{id}` — Delete a purchase - `POST /api/v1/purchases/{id}/status` — Set a purchase's status - `POST /api/v1/purchases/reorder` — Draft purchases from low stock - `POST /api/v1/purchases/{id}/receive` — Receive everything outstanding (or undo every delivery) - `GET /api/v1/purchases/{id}/receipts` — Deliveries booked against a purchase - `POST /api/v1/purchases/{id}/receipts` — Book a delivery in - `DELETE /api/v1/purchases/{id}/receipts/{receiptId}` — Undo a delivery - `POST /api/v1/purchases/{id}/email` — Email the purchase order to the supplier - `GET /api/v1/purchases/{id}/attachments` — List the purchase's attachments - `POST /api/v1/purchases/{id}/attachments` — Upload an attachment to the purchase - `GET /api/v1/vendors/{id}/attachments` — List the vendor's attachments - `POST /api/v1/vendors/{id}/attachments` — Upload an attachment to the vendor - `POST /api/v1/purchases/{id}/payments` — Record an outgoing payment - `DELETE /api/v1/purchases/{id}/payments/{paymentId}` — Remove a payment ### Price lists - `GET /api/v1/price-lists` — List price lists - `POST /api/v1/price-lists` — Add a price list - `GET /api/v1/price-lists/{id}` — Get a price list - `PUT /api/v1/price-lists/{id}` — Update a price list - `DELETE /api/v1/price-lists/{id}` — Delete a price list - `GET /api/v1/price-lists/{id}/items` — The list's prices - `PUT /api/v1/price-lists/{id}/items` — Set or clear prices in bulk - `POST /api/v1/price-lists/{id}/apply-rule` — Fill the list from its markup rule - `GET /api/v1/items/{id}/prices` — This item on every price list - `POST /api/v1/pricing/resolve` — What does this buyer pay? ### Carriers - `GET /api/v1/carriers` — List carriers - `POST /api/v1/carriers` — Add a carrier - `GET /api/v1/carriers/{id}` — Get a carrier - `PATCH /api/v1/carriers/{id}` — Update a carrier - `DELETE /api/v1/carriers/{id}` — Delete a carrier ### Taxes - `GET /api/v1/tax-rates` — List tax rates - `POST /api/v1/tax-rates` — Add a tax rate - `GET /api/v1/tax-rates/{id}` — Get a tax rate - `PUT /api/v1/tax-rates/{id}` — Update a tax rate - `PATCH /api/v1/tax-rates/{id}` — Update a tax rate (same as PUT) - `DELETE /api/v1/tax-rates/{id}` — Delete a tax rate - `GET /api/v1/tax-groups` — List tax groups - `POST /api/v1/tax-groups` — Combine rates into a group - `GET /api/v1/tax-groups/{id}` — Get a tax group - `PUT /api/v1/tax-groups/{id}` — Update a tax group - `PATCH /api/v1/tax-groups/{id}` — Update a tax group (same as PUT) - `DELETE /api/v1/tax-groups/{id}` — Delete a tax group ### Vendors - `GET /api/v1/vendors` — List vendors - `POST /api/v1/vendors` — Create a vendor - `GET /api/v1/vendors/{id}` — Get a vendor (with purchase rollups) - `PATCH /api/v1/vendors/{id}` — Update a vendor - `DELETE /api/v1/vendors/{id}` — Delete a vendor - `POST /api/v1/vendors/{id}/archive` — Deactivate a vendor - `POST /api/v1/vendors/{id}/restore` — Reactivate a vendor ### Projects - `GET /api/v1/projects` — List projects - `POST /api/v1/projects` — Open a project - `GET /api/v1/projects/{id}` — Get a project - `PUT /api/v1/projects/{id}` — Update a project - `PATCH /api/v1/projects/{id}` — Update a project (alias of PUT) - `DELETE /api/v1/projects/{id}` — Delete a project - `GET /api/v1/projects/{id}/profitability` — What a project was quoted at, and what it actually cost - `GET /api/v1/projects/{id}/time-entries` — List the time logged against a project - `POST /api/v1/projects/{id}/time-entries` — Log a stint - `POST /api/v1/projects/{id}/bill` — Bill a project's time, expenses and material onto one invoice - `POST /api/v1/projects/{id}/bill-time` — Put a project's unbilled time onto an invoice - `GET /api/v1/projects/{id}/bill-stock` — Material on a project that has not been charged for - `POST /api/v1/projects/{id}/bill-stock` — Charge a project's material to an invoice - `POST /api/v1/projects/{id}/bill-expenses` — Re-bill a project's unbilled expenses - `GET /api/v1/projects/{id}/stock` — What has come off the shelf for a project - `POST /api/v1/projects/{id}/stock` — Use stock on a project - `DELETE /api/v1/projects/{id}/stock/{movementId}` — Put stock back on the shelf - `GET /api/v1/time-entries/{id}` — Get a time entry - `PUT /api/v1/time-entries/{id}` — Update a time entry - `PATCH /api/v1/time-entries/{id}` — Update a time entry (alias of PUT) - `DELETE /api/v1/time-entries/{id}` — Delete a time entry ### Expenses - `GET /api/v1/expenses` — List expenses - `POST /api/v1/expenses` — Record an expense - `GET /api/v1/expenses/{id}` — Get an expense - `PUT /api/v1/expenses/{id}` — Update an expense - `PATCH /api/v1/expenses/{id}` — Update an expense (alias of PUT) - `DELETE /api/v1/expenses/{id}` — Delete an expense - `GET /api/v1/expenses/{id}/attachments` — List an expense's receipts - `POST /api/v1/expenses/{id}/attachments` — Add a receipt photograph - `POST /api/v1/expenses/from-image` — Draft an expense from a photograph - `POST /api/v1/expenses/{id}/confirm` — Agree with a drafted expense - `GET /api/v1/settings/inbound-email` — The workspace's receipts-in address - `PUT /api/v1/settings/inbound-email` — Turn receipts by email on or off - `POST /api/v1/settings/inbound-email/rotate` — Replace the receipts-in address - `POST /api/v1/expenses/{id}/rebill` — Charge an expense back to a client - `GET /api/v1/expense-categories` — List the workspace's spend categories - `POST /api/v1/expense-categories` — Add a spend category - `GET /api/v1/expense-categories/{id}` — Get a spend category - `PUT /api/v1/expense-categories/{id}` — Update a spend category - `PATCH /api/v1/expense-categories/{id}` — Update a spend category (alias of PUT) - `DELETE /api/v1/expense-categories/{id}` — Delete a spend category - `POST /api/v1/expense-categories/{id}/merge` — Merge one category into another ### Accounting - `GET /api/v1/accounting/map` — The chart-of-accounts mapping - `PUT /api/v1/accounting/map` — Replace one provider's mapping - `GET /api/v1/accounting/exports` — What has gone over - `POST /api/v1/accounting/exports` — Generate a period's export - `GET /api/v1/accounting/exports/{id}` — One export - `GET /api/v1/accounting/exports/{id}/download` — Download the zip - `GET /api/v1/accounting/changed-since-export` — What has moved since the books went over ### Imports - `POST /api/v1/imports/preview` — Parse and validate a file without importing it - `GET /api/v1/imports` — List import runs - `POST /api/v1/imports` — Run an import - `POST /api/v1/imports/archive` — Load a full-export archive back in - `GET /api/v1/imports/{id}` — Get one import run - `POST /api/v1/imports/{id}/undo` — Undo an import ### Payment terms - `GET /api/v1/payment-terms` — The workspace's named payment terms - `POST /api/v1/payment-terms` — Add a payment term - `GET /api/v1/payment-terms/{id}` — One payment term - `PUT /api/v1/payment-terms/{id}` — Replace a payment term - `DELETE /api/v1/payment-terms/{id}` — Remove a payment term - `GET /api/v1/orders/{id}/schedule` — The instalments agreed for this project - `PUT /api/v1/orders/{id}/schedule` — Replace the schedule - `POST /api/v1/orders/{id}/schedule/{stepId}/invoice` — Invoice one stage of the schedule - `POST /api/v1/orders/{id}/prepayment-invoice` — Take payment for an order before it has been billed - `POST /api/v1/orders/{id}/final-invoice` — Close the project out - `POST /api/v1/invoices/combined` — One invoice for several of a client's orders ### Change orders - `GET /api/v1/quotes/{id}/signature` — The client's signature on a quote - `POST /api/v1/quotes/{id}/signature` — Record a signature taken in person ### Reminders - `GET /api/v1/settings/reminders` — The workspace's chasing schedule - `PUT /api/v1/settings/reminders` — Replace the chasing schedule - `GET /api/v1/email-templates` — Every email template - `GET /api/v1/email-templates/{key}` — One email template - `PUT /api/v1/email-templates/{key}` — Save the workspace's own wording - `DELETE /api/v1/email-templates/{key}` — Reset to the built-in wording - `POST /api/v1/email-templates/{key}/test` — Send yourself a specimen - `GET /api/v1/invoices/{id}/reminders` — When this invoice is next chased, and what has gone already - `PUT /api/v1/invoices/{id}/reminders` — Pause or resume chasing this invoice - `POST /api/v1/invoices/{id}/reminders/send` — Send a payment reminder now - `GET /api/v1/quotes/{id}/follow-ups` — When this quote is next followed up, and what has gone already - `PUT /api/v1/quotes/{id}/follow-ups` — Pause or resume following this quote up - `POST /api/v1/quotes/{id}/follow-ups/send` — Send a follow-up now ### Notifications - `GET /api/v1/notifications` — One member's bell menu - `PUT /api/v1/notifications/{id}/read` — Mark one notification read (or unread) ### Webhooks - `GET /api/v1/webhooks` — The workspace's endpoints - `POST /api/v1/webhooks` — Add an endpoint - `GET /api/v1/webhooks/{id}` — One endpoint - `PUT /api/v1/webhooks/{id}` — Change an endpoint - `DELETE /api/v1/webhooks/{id}` — Remove an endpoint and its delivery history - `POST /api/v1/webhooks/{id}/test` — Queue an obviously fake event so you can watch one arrive - `POST /api/v1/webhooks/{id}/rotate-secret` — Mint a new signing secret and return it once - `GET /api/v1/webhooks/{id}/deliveries` — What was sent, what came back, and when the next attempt is due - `POST /api/v1/webhook-deliveries/{id}/redeliver` — Send a settled delivery again - `POST /api/v1/webhooks/subscriptions` — REST-hook subscribe (Zapier) - `DELETE /api/v1/webhooks/subscriptions` — REST-hook unsubscribe (Zapier) ### Team & access - `GET /api/v1/me` — What this key is and what it may do - `GET /api/v1/members` — Everybody in the workspace - `POST /api/v1/members/{id}/transfer-ownership` — Transfer ownership - `GET /api/v1/members/{id}` — One member - `PUT /api/v1/members/{id}` — Change somebody's role and permissions - `DELETE /api/v1/members/{id}` — Remove somebody from the workspace - `GET /api/v1/invitations` — Invitations still open - `POST /api/v1/invitations` — Invite somebody - `DELETE /api/v1/invitations/{id}` — Withdraw an invitation ## Every webhook event - `quote.sent` (payload: Quote) — A quote was sent to a client. Payload: the quote. - `quote.accepted` (payload: Quote) — A client accepted a quote, in the portal or by hand. - `quote.declined` (payload: Quote) — A client declined a quote. - `order.created` (payload: Order) — An order was raised — by hand, from a quote, or imported. - `order.confirmed` (payload: Order) — An order left draft and is committed: stock is reserved. - `order.shipped` (payload: Order) — An order shipped in full. Partial shipments do not fire this. - `order.completed` (payload: Order) — An order finished — shipped and settled, or closed short. - `invoice.sent` (payload: Invoice) — An invoice was issued to a client. - `invoice.paid` (payload: Invoice) — An invoice reached a zero balance, however it got there. - `payment.received` (payload: Payment) — A payment was recorded, online or by hand. - `payment.refunded` (payload: Refund) — A refund was issued against a payment. - `client.created` (payload: Client) — A client was added. - `client.updated` (payload: Client) — A client changed. `previous` carries the fields as they were. - `item.updated` (payload: Item) — A catalog item changed. `previous` carries the fields as they were. - `stock.low` (payload: ItemStock) — An item's available quantity fell to or below its reorder point. - `production.completed` (payload: ProductionRun) — A production run finished and its output went into stock. ## Guides ### Getting started Sign up, set up your workspace, invite your team. https://0.0.0.0:3000/docs/getting-started ### Pre-release: what to expect The free tier is real, there is no paid plan and no support model, and there is no guarantee your data will be preserved — what that means, and what to do about it. https://0.0.0.0:3000/docs/pre-release ### Starter kits The setup your trade already uses — units, materials with real costs, recipes, terms and wording — installed in one click, with sample data you can remove just as easily. https://0.0.0.0:3000/docs/starter-kits ### OrderDen on your phone Add it to your home screen, take photos straight into the app, and get notifications on a phone with the app closed. https://0.0.0.0:3000/docs/mobile ### Dashboard Your customizable widget board and date ranges. https://0.0.0.0:3000/docs/dashboard ### Clients Company profiles, contacts, addresses, terms and notes. https://0.0.0.0:3000/docs/clients ### Items & pricing The catalog: item numbers, client prices and COGS calculators. https://0.0.0.0:3000/docs/items ### Wholesale and retail pricing Named price lists with their own minimums and case packs, put a client on one, and every document charges the right price by itself. https://0.0.0.0:3000/docs/price-lists ### Materials, recipes and what things cost What you buy in, the units you count it in, and the bill of materials that turns both into a cost per unit — with labour, overhead and margin. https://0.0.0.0:3000/docs/materials ### Passwords & signing in Signing in with your email address, choosing a password, and the reset link when you have forgotten it. https://0.0.0.0:3000/docs/passwords ### Roles, permissions, two-factor and sessions The five roles, the eight permission flags, two-factor authentication with passkeys, and the devices you are signed in on. https://0.0.0.0:3000/docs/team-and-security ### Your data The full download, and what happens when OrderDen support signs in as you. https://0.0.0.0:3000/docs/your-data ### Importing your spreadsheet Load clients and items from a CSV — mapping, preview, duplicates and undo. https://0.0.0.0:3000/docs/import ### Enquiries A public request form that becomes a quote, with the client matched or created. https://0.0.0.0:3000/docs/enquiries ### Quotes Priced proposals — send, get accepted, convert to orders. https://0.0.0.0:3000/docs/quotes ### Orders & shipping Confirmed work: shipments, tracking, packing lists, invoicing. https://0.0.0.0:3000/docs/orders ### Invoices & payments Bill clients, record payments, track balances due. https://0.0.0.0:3000/docs/invoices ### Tax Named rates and groups, per-line tax, exempt clients and the tax collected. https://0.0.0.0:3000/docs/taxes ### Getting paid online Take card and US bank payments on a share link with Stripe; fees and refunds. https://0.0.0.0:3000/docs/payments ### Credit notes, refunds, returns and write-offs Correcting a sale without pretending it never happened: what comes back, where the money goes, and the difference between a credit and a bad debt. https://0.0.0.0:3000/docs/credit-notes ### Deposits, instalments and final invoices Half now and the rest on delivery: named payment terms that ask for a deposit, a deposit invoice raised the moment a quote is accepted, instalments on a project, and a final invoice that deducts what has already been paid. https://0.0.0.0:3000/docs/deposits ### Recurring invoices, cards on file and late fees Money that arrives without anybody chasing it: retainers and subscriptions billed on a schedule, a card the client leaves on file, charges taken on the due date with a retry ladder behind them, and the late fee that has three guard rails and one exception. https://0.0.0.0:3000/docs/recurring ### Signatures on quotes A client signing a quote — typed or drawn — with the record that makes it worth having: who, when, from where, and a fingerprint of the document exactly as it was in front of them. https://0.0.0.0:3000/docs/signatures ### When an email does not arrive What a bounced address and a spam complaint mean, what OrderDen does about each, and how to get an address working again. https://0.0.0.0:3000/docs/bounced-email ### Reminders, follow-ups and status emails Chasing an unpaid invoice, nudging an unanswered quote, telling a customer their order shipped — automatically, in your words, and stopping the moment it should. https://0.0.0.0:3000/docs/reminders ### Statements of account What a client owes over a period: printed, emailed, scheduled, and on their portal. https://0.0.0.0:3000/docs/statements ### Client portal Give a client an account: everything of theirs in one place, messages on the document, and files both ways. https://0.0.0.0:3000/docs/client-portal ### Documents & sharing Themes, numbering, print, email, attachments and the client portal. https://0.0.0.0:3000/docs/documents-and-sharing ### Spending: purchases and expenses in one list Everything that went out, on one screen, with a type column saying which kind of record it came from — and why the two records stay two records: receiving a purchase is what gives your materials a cost, and an expense never touches stock. https://0.0.0.0:3000/docs/spending ### Vendors & purchasing The money-out side: suppliers, purchase orders and payments. https://0.0.0.0:3000/docs/purchasing ### Projects: track time, costs and profit on a piece of work The container a whole piece of work hangs off — its quote, its orders, its invoices, the timber, the hours and the parking — and the one question at the end of it: did that project make money? https://0.0.0.0:3000/docs/projects ### Expenses, receipts and profit and loss The everything-else spend: photograph a receipt and be done, file it under a category that means something at tax time, charge what you spent for a client back to them, and see whether the whole thing made money. https://0.0.0.0:3000/docs/expenses ### Shipping labels Buy and print postage from the order: USPS, UPS and FedEx priced side by side, the label kept where you can reprint it, and the parcel marking itself delivered. https://0.0.0.0:3000/docs/shipping ### Inventory: what is on the shelf, and where How many there are and which bin they are in — quantity on hand from a movement ledger, allocated against available, bins you can search and pick by, stocktakes, adjustments and valuation. https://0.0.0.0:3000/docs/inventory ### Making stock: production runs, batches and curing Turn a recipe into stock: what a run consumes and produces, what a batch cost, batch codes and cure dates, buildable quantity and made-to-order. https://0.0.0.0:3000/docs/production ### Reports Revenue and margin by client, item and period; backlog aging, cycle time, on-time rate; inventory valuation and stock movements. https://0.0.0.0:3000/docs/reports ### Tax time: COGS, inventory value and your expense summary What the things you sold cost you, worked out from the stock ledger and laid out the way a tax return asks for it — with every figure drillable and the reconciliation printed underneath. https://0.0.0.0:3000/docs/tax-time ### Handing the numbers to your accountant A period's books as the files QuickBooks and Xero import — sales, credits, payments, bills, expenses, fees and a journal that balances every day — with your own chart of accounts mapped once. https://0.0.0.0:3000/docs/accounting ### Activity & history The named trail of every change, org-wide and per record. https://0.0.0.0:3000/docs/activity-history ### Search & lists Global search, filters, and columns you shape per list. https://0.0.0.0:3000/docs/search-and-lists ### Custom fields The two or three things about your business OrderDen does not know — added properly, so they filter, export, import and print rather than living in a notes box. https://0.0.0.0:3000/docs/custom-fields ### Settings Personal Settings, Company Settings and Account & Billing — who sees what, and where everything lives. https://0.0.0.0:3000/docs/settings ### Plans & billing Free and OrderDen: the 50 free invoices, the per-seat price, what unlimited means, and yearly billing. https://0.0.0.0:3000/docs/plans-and-billing ### Account credit Credit OrderDen has put on your bill: how it comes off your next invoice, and what it is not. https://0.0.0.0:3000/docs/account-credit ### Webhooks & automation Get told the moment something happens instead of asking: signed deliveries with retries, the polling filter for anything without a public URL, idempotency keys, Zapier and the MCP server. https://0.0.0.0:3000/docs/webhooks ### API reference The public REST API, included in every plan. https://0.0.0.0:3000/docs/api