Files
dashback/docs/api/routes.md
2026-09-30 18:45:30 +02:00

29 KiB

Dash API Routes Overview

Overview of all 162 API endpoints across all modules.

Method Route Params Return Type Summary Docs
POST /article body: { parentId, name, track_stock } 201 { article: ArticleSummary } Create article routes/article/create.md
GET /article/export.zip ?categoryId:integer 200 zip Export articles as ZIP routes/article/export.zip.md
DELETE /article/{sku} sku:string 204 void Delete article by SKU routes/article/delete.md
GET /article/{sku} sku:string 200 { article: ArticleDetail } Get article by SKU routes/article/get.md
PATCH /article/{sku} sku:string, body: { name, unitamount, unitSi, … } 200 { article: ArticleDetail } Update article by SKU routes/article/update.md
GET /article/{sku}/articlelist sku:string 200 { items: { id, articleId, sku, … }[] } Get Stückliste (bundle items) for an article routes/article/_sku/articlelist.get.md
PUT /article/{sku}/articlelist sku:string, body: { items: { articleId, sku, count, … }[] } 200 { items: object[] } Set Stückliste (bundle items) for an article routes/article/_sku/articlelist.put.md
GET /article/{sku}/attributevalue sku:string 200 { attributevalues: ArticleAttributeValue[] } List article attribute values routes/article/_sku/attributevalue.get.md
PUT /article/{sku}/attributevalue sku:string, body: { attributevalues: any[] } 200 { attributevalues: ArticleAttributeValue[] } Bulk set article attribute values routes/article/_sku/attributevalue.put.md
PUT /article/{sku}/brand sku:string, body: { brandId: integer } 200 { article: ArticleDetail } Set or clear article brand by SKU routes/article/set-brand.md
PUT /article/{sku}/categories sku:string, body: { categoryIds: integer[] } 200 { article: ArticleDetail } Replace article categories by SKU routes/article/set-categories.md
GET /article/{sku}/children sku:string 200 { children: { id, sku, name, … }[] } List child articles of a father article routes/article/_sku/children.get.md
POST /article/{sku}/children sku:string, body: { attributeValueId, value, name } 201 { article: Article } Add a child article to a father article routes/article/_sku/children.post.md
DELETE /article/{sku}/children/{childSku} sku:string, childSku:string, ?deleteArticle:boolean 200 { success, deleted } Remove a child article from a father article routes/article/_sku/children/_childSku.md
PUT /article/{sku}/eans sku:string, body: { eans: string[] } 200 { article: ArticleDetail } Replace article EANs by SKU routes/article/set-eans.md
POST /article/{sku}/father sku:string, body: { isFather, attributeNameId } 200 { article: Article } Toggle father mode for an article routes/article/_sku/father.md
GET /article/{sku}/history sku:string 200 { history: ArticleHistoryEntry[] } Get article history by SKU routes/article/history.md
POST /article/{sku}/image sku:string, image/avif 201 { image: ArticleImage } Add article image routes/article/add-image.md
DELETE /article/{sku}/image/{fullHash} sku:string, fullHash:string 204 void Delete article image routes/article/delete-image.md
PUT /article/{sku}/images/order sku:string, body: { fullHashes: string[] } 200 { fullHashes: string[] } Reorder article images routes/article/order-images.md
GET /article/{sku}/optionslist sku:string 200 { options: { id, articleId, sku, … }[] } Get options list for an article routes/article/_sku/optionslist.get.md
PUT /article/{sku}/optionslist sku:string, body: { options: { articleId, sku, count, … }[] } 200 { options: object[] } Set options list for an article routes/article/_sku/optionslist.put.md
PUT /article/{sku}/prices sku:string, body: { prices: { price, tax, minmultiplier }[] } 200 { article: ArticleDetail } Replace POS prices by SKU routes/article/set-prices.md
POST /article/{sku}/print sku:string, body: { templateId, printerId, quantity } 200 Print article label routes/article/_sku/print.md
GET /article/{sku}/property sku:string 200 { properties: ArticleProperty[] } List article properties routes/article/_sku/property.get.md
PUT /article/{sku}/property sku:string, body: { properties: { propertyId, value, sort }[] } 200 { properties: ArticleProperty[] } Bulk set article properties routes/article/_sku/property.put.md
DELETE /article/{sku}/property/{propertyId} sku:string, propertyId:integer 200 Delete article property routes/article/_sku/property/_propertyId.md
GET /article/{sku}/supplier sku:string 200 { suppliers: ArticleSupplier[] } List article suppliers routes/article/supplier/list.md
POST /article/{sku}/supplier sku:string, body: { entityId, sku, pu, … } 201 { supplier: ArticleSupplier } Assign supplier to article routes/article/supplier/create.md
PUT /article/{sku}/supplier/order sku:string, body: { ids: integer[] } 200 { ids: integer[] } Reorder article suppliers routes/article/supplier/order.md
DELETE /article/{sku}/supplier/{id} sku:string, id:integer 204 void Remove supplier assignment from article routes/article/supplier/delete.md
PATCH /article/{sku}/supplier/{id} sku:string, id:integer, body: { sku, pu, stock, … } 200 { supplier: ArticleSupplier } Update article supplier assignment routes/article/supplier/update.md
PUT /article/{sku}/track_stock sku:string, body: { track_stock: boolean } 200 { article: ArticleDetail } Set article track_stock flag by SKU routes/article/_sku/track_stock.md
PUT /article/{sku}/weight sku:string, body: { weight: number } 200 { article: ArticleDetail } Set article weight by SKU routes/article/set-weight.md
GET /articleIndex — 200 { articles: { id, sku, name, … }[] } List article search index routes/articleIndex.md
GET /attributename — 200 { attributenames: Attributename[] } List attribute names routes/attributename.get.md
POST /attributename body: { name, sort, exclusive } 201 { attributename: Attributename } Create attribute name routes/attributename.post.md
PUT /attributename/order body: { attributenameIds: integer[] } 200 Reorder attribute names routes/attributename/order.md
GET /attributename/{attributeId}/value attributeId:integer 200 { values: AttributeValue[] } List values for an attribute routes/attributename/_attributeId/value.get.md
POST /attributename/{attributeId}/value attributeId:integer, body: { value, sort } 201 { attributevalue: AttributeValue } Create value for an attribute routes/attributename/_attributeId/value.post.md
PUT /attributename/{attributeId}/value/order attributeId:integer, body: { attributevalueIds: integer[] } 200 Reorder values of an attribute routes/attributename/_attributeId/value/order.md
DELETE /attributename/{id} id:integer 200 Delete attribute name routes/attributename/_id.delete.md
PATCH /attributename/{id} id:integer, body: { name, sort, exclusive } 200 { attributename: Attributename } Update attribute name routes/attributename/_id.patch.md
DELETE /attributevalue/{id} id:integer 200 Delete attribute value routes/attributevalue/_id.delete.md
PATCH /attributevalue/{id} id:integer, body: { value, sort } 200 { attributevalue: AttributeValue } Update attribute value routes/attributevalue/_id.patch.md
POST /auth/login body: { idToken: string } 200 { message, user } Login with Google ID token routes/auth/login.md
POST /auth/logout — 200 { message: string } Logout routes/auth/logout.md
GET /auth/me — 200 { user, googleClientId } Current user routes/auth/me.md
PUT /auth/selected-company body: { companyId: integer } 200 { user: User } Set selected company routes/auth/selected-company.md
GET /brand — 200 { brands: Brand[] } List brands routes/brand/list.md
PUT /brand body: { name, gsprpinfo } 200 { brand: Brand } Upsert brand routes/brand/upsert.md
DELETE /brand/{id} id:integer 204 void Delete brand routes/brand/delete.md
POST /category body: { parentId, name } 201 { category: Category } Create category routes/category/create.md
GET /category/export.zip — 200 zip Export categories as ZIP routes/category/export.zip.md
PUT /category/order body: { parentId, categoryIds } 200 { categoryIds: integer[] } Reorder sibling categories routes/category/order.md
GET /category/tree — 200 { languageId, tree, articles } Category tree routes/category/tree.md
DELETE /category/{id} id:integer 204 void Delete category routes/category/delete.md
PATCH /category/{id} id:integer, body: { name, parentId } 200 { category: { id, name, slug, … } } Update category (rename or move) routes/category/update.md
GET /category/{id}/articles id:integer 200 { articles: { id, sku, name, … }[] } Articles in category routes/category/articles.md
DELETE /category/{id}/image id:integer 200 { category: { id, thumbW, thumbH, … } } Delete category image routes/category/delete-image.md
POST /category/{id}/image id:integer, image/avif 201 { category: { id, thumbW, thumbH, … } } Add category image routes/category/add-image.md
GET /company — 200 { companies: Company[] } List companies routes/company/list.md
POST /company body: { iso639, name, taxrate, … } 201 { company, user } Create company routes/company/create.md
GET /company/setting — 200 { settings: CompanySetting[] } List company settings routes/companysetting/list.md
GET /company/setting/{key} key:string 200 { setting: CompanySetting } Get company setting by key routes/companysetting/get.md
PUT /company/setting/{key} key:string, body: { value, frontend } 200 { setting: CompanySetting } Upsert company setting routes/companysetting/set.md
DELETE /company/{id} id:integer 204 void Delete company routes/company/delete.md
PUT /company/{id} id:integer, body: { iso639, name, taxrate, … } 200 { company: Company } Update company routes/company/update.md
GET /customergroup — 200 { customergroups: CustomergroupListItem[] } List customer groups routes/customergroup/list.md
POST /customergroup body: { name: string } 201 { customergroup: Customergroup } Create customer group routes/customergroup/create.md
PUT /customergroup/order body: { customergroupIds: integer[] } 200 { customergroupIds: integer[] } Reorder customer groups routes/customergroup/order.md
DELETE /customergroup/{id} id:integer 204 void Delete customer group routes/customergroup/delete.md
PATCH /customergroup/{id} id:integer, body: { name: string } 200 { customergroup: Customergroup } Update customer group routes/customergroup/update.md
GET /delivery — 200 { deliveries: DeliverySummary[] } List deliveries routes/delivery/list.md
POST /delivery body: { externalNumber, date, supplierId, … } 201 { delivery: Delivery } Create delivery routes/delivery/create.md
POST /delivery/parse form: { file } 200 SSE Parse document (SSE) routes/delivery/parse.md
DELETE /delivery/{id} id:integer 204 void Delete delivery routes/delivery/delete.md
GET /delivery/{id} id:integer 200 { delivery: Delivery } Get delivery routes/delivery/get.md
PATCH /delivery/{id} id:integer, body: { externalNumber, date, supplierId, … } 200 { delivery: Delivery } Update delivery routes/delivery/update.md
GET /delivery/{id}/file/{fileId} id:integer, fileId:integer, ?download:boolean 200 string Get delivery attachment file content routes/delivery/file.md
GET /entity ?customergroupId:integer, ?role:string 200 { entities: Entity[] } List entities routes/entity/list.md
POST /entity body: { customergroupId, name, firstName, … } 201 { entity: Entity } Create entity routes/entity/create.md
GET /entity/next-number — 200 { number: string } Peek next customer number routes/entity/next-number.md
GET /entity/{entityId}/address entityId:integer 200 { addresses: EntityAddress[] } List entity addresses routes/entity/address/list.md
POST /entity/{entityId}/address entityId:integer, body: { addressType, firstName, name, … } 201 { address: EntityAddress } Create entity address routes/entity/address/create.md
DELETE /entity/{entityId}/address/{id} entityId:integer, id:integer 204 void Delete entity address routes/entity/address/delete.md
PATCH /entity/{entityId}/address/{id} entityId:integer, id:integer, body: { addressType, firstName, name, … } 200 { address: EntityAddress } Update entity address routes/entity/address/update.md
GET /entity/{entityId}/contact entityId:integer 200 { contacts: EntityContact[] } List entity contacts routes/entity/contact/list.md
POST /entity/{entityId}/contact entityId:integer, body: { contactType, contact } 201 { contact: EntityContact } Create entity contact routes/entity/contact/create.md
DELETE /entity/{entityId}/contact/{id} entityId:integer, id:integer 204 void Delete entity contact routes/entity/contact/delete.md
PATCH /entity/{entityId}/contact/{id} entityId:integer, id:integer, body: { contactType, contact } 200 { contact: EntityContact } Update entity contact routes/entity/contact/update.md
DELETE /entity/{id} id:integer 204 void Delete entity routes/entity/delete.md
GET /entity/{id} id:integer 200 { entity: Entity } Get entity routes/entity/get.md
PATCH /entity/{id} id:integer, body: { name, firstName, number } 200 { entity: Entity } Update entity routes/entity/update.md
GET /events — 200 SSE Subscribe to update signals (SSE) routes/events.md
GET /health — 200 { ok: boolean } Database health check routes/health.md
GET /image/{fullHash} fullHash:string 200 avif Full image by hash routes/image/get.md
GET /labeltemplate — 200 { labeltemplates: LabelTemplate[] } List label templates routes/labeltemplate/list.md
POST /labeltemplate body: LabelTemplateCreateInput 201 { labeltemplate: LabelTemplate } Create label template routes/labeltemplate/create.md
DELETE /labeltemplate/{id} id:integer 204 void Delete label template routes/labeltemplate/delete.md
GET /labeltemplate/{id} id:integer 200 { labeltemplate: LabelTemplate } Get label template by ID routes/labeltemplate/get.md
PATCH /labeltemplate/{id} id:integer, body: LabelTemplateUpdateInput 200 { labeltemplate: LabelTemplate } Update label template (partial) routes/labeltemplate/update.md
PUT /labeltemplate/{id} id:integer, body: LabelTemplateUpdateInput 200 { labeltemplate: LabelTemplate } Update label template routes/labeltemplate/update.md
GET /ledger ?manifestarticle_id:integer, ?sku:string, ?transaction_type:string 200 { ledger: LedgerEntry[] } Query ledger by manifest article ID or SKU routes/ledger.get.md
POST /ledger body: LedgerEntryInput 201 { ledger: LedgerEntry } Add ledger entry routes/ledger.post.md
GET /ledger/manifestarticle/{manifestarticleId} manifestarticleId:integer, ?transaction_type:string 200 { ledger: LedgerEntry[] } Query ledger by manifest article ID routes/ledger/manifestarticle/_manifestarticleId.md
GET /ledger/sku/{sku} sku:string, ?transaction_type:string 200 { ledger: LedgerEntry[] } Query ledger by article SKU routes/ledger/sku/_sku.md
GET /number — 200 { numbers: NumberSequence[] } List number sequences routes/number/list.md
PATCH /number/{id} id:integer, body: { prefix, padding, next } 200 { number: NumberSequence } Update number sequence routes/number/update.md
GET /order — 200 { orders: OrderSummary[] } List orders routes/order/list.md
POST /order body: { number, date, entityId, … } 201 { order: Order } Create order routes/order/create.md
DELETE /order/{id} id:integer 204 void Delete order routes/order/delete.md
GET /order/{id} id:integer 200 { order: Order } Get order routes/order/get.md
PATCH /order/{id} id:integer, body: { number, date, entityId, … } 200 { order: Order } Update order routes/order/update.md
GET /posterminal — 200 { posterminals: Posterminal[] } List POS terminals routes/posterminal/list.md
PUT /posterminal body: { name: string } 200 { posterminal: Posterminal } Create POS terminal routes/posterminal/upsert.md
DELETE /posterminal/{id} id:integer 204 void Delete POS terminal routes/posterminal/delete.md
DELETE /posterminal/{id}/all id:integer 200 { id, categoryIds } Disable all categories on terminal routes/posterminal/setOffAll.md
PUT /posterminal/{id}/all id:integer 200 { id, categoryIds } Enable all categories on terminal routes/posterminal/setOnAll.md
DELETE /posterminal/{id}/category/{categoryId} id:integer, categoryId:integer 200 { id, categoryIds } Disable category on terminal routes/posterminal/setOff.md
PUT /posterminal/{id}/category/{categoryId} id:integer, categoryId:integer 200 { id, categoryIds } Enable category on terminal routes/posterminal/setOn.md
GET /printer — 200 { printers: Printer[] } List printers routes/printer/list.md
POST /printer body: PrinterCreateInput 201 { printer: Printer } Create printer routes/printer/create.md
PUT /printer/order body: { printerIds: integer[] } 200 { printerIds: integer[] } Reorder printers routes/printer/order.md
DELETE /printer/{id} id:integer 204 void Delete printer routes/printer/delete.md
GET /printer/{id} id:integer 200 { printer: Printer } Get printer by ID routes/printer/get.md
PATCH /printer/{id} id:integer, body: PrinterUpdateInput 200 { printer: Printer } Update printer (partial) routes/printer/update.md
PUT /printer/{id} id:integer, body: PrinterUpdateInput 200 { printer: Printer } Update printer routes/printer/_id.put.md
GET /propertyname — 200 { propertynames: Propertyname[] } List property names routes/propertyname.get.md
POST /propertyname body: { name, sort, exclusive } 201 { propertyname: Propertyname } Create property name routes/propertyname.post.md
PUT /propertyname/order body: { propertynameIds: integer[] } 200 Reorder property names routes/propertyname/order.md
DELETE /propertyname/{id} id:integer 200 Delete property name routes/propertyname/_id.delete.md
PATCH /propertyname/{id} id:integer, body: { name, sort, exclusive } 200 { propertyname: Propertyname } Update property name routes/propertyname/_id.patch.md
GET /quote — 200 { quotes: QuoteSummary[] } List quotes routes/quote/list.md
POST /quote body: { number, date, entityId, … } 201 { quote: Quote } Create quote routes/quote/create.md
DELETE /quote/{id} id:integer 204 void Delete quote routes/quote/delete.md
GET /quote/{id} id:integer 200 { quote: Quote } Get quote routes/quote/get.md
PATCH /quote/{id} id:integer, body: { number, date, entityId, … } 200 { quote: Quote } Update quote routes/quote/update.md
POST /serper/image body: { url: string } 200 avif Crawl image from URL, crop white/transparency borders, and return AVIF routes/serper/image.md
POST /serper/images body: { q, gl, hl, … } 200 SSE Search images via Serper.dev and stream WebP thumbnails (SSE) routes/serper/images.md
POST /stock/adjust body: StockAdjustmentInput 201 StockAdjustmentResult Adjust stock manually routes/stock/adjust.md
GET /supplier — 200 { suppliers: Supplier[] } List suppliers routes/supplier/list.md
POST /supplier body: { name: string } 201 { supplier: Supplier } Create supplier routes/supplier/create.md
DELETE /supplier/{id} id:integer 204 void Delete supplier routes/supplier/delete.md
PATCH /supplier/{id} id:integer, body: { name: string } 200 { supplier: Supplier } Update supplier routes/supplier/update.md
GET /supplier/{id}/articles id:integer, ?skus 200 { articles: SupplierArticle[] } List supplier articles by SKUs routes/supplier/articles.get.md
POST /supplier/{id}/articles id:integer, body: { skus: string[] } 200 { articles: SupplierArticle[] } Query supplier articles by SKUs (bulk) routes/supplier/articles.post.md
GET /thumb/{fullHash} fullHash:string 200 avif Thumb image by hash routes/thumb/get.md
DELETE /unit ?si:string 204 void Delete unit routes/unit/delete.md
GET /unit — 200 { units: Unit[] } List units routes/unit/list.md
PUT /unit body: { si, basesi, basesifactor, … } 200 { unit: Unit } Upsert unit routes/unit/upsert.md
GET /v1/category ?lastChangedCategory:string, ?limit:integer 200 object[] JTL-POS category synchronization routes/v1/category.md
GET /v1/client ?authCode:string, ?name:string 200 { authCode, authToken, certificateFingerprint, … } POS discovery and pairing routes/pos/client.md
GET /v1/init ?lastChangedProduct:integer, ?lastChangedCategory:integer, ?lastChangedCustomer:integer, ?lastChangedCustomerGroup:integer, ?lastChangedCompositeProduct:integer, ?lastChangedDeletedEntity:integer 200 { version, product_count, category_count, … } POS sync initialization counts routes/pos/init.md
GET /v1/product ?lastChangedProduct:string, ?limit:integer 200 object[] JTL-POS product catalog synchronization routes/v1/product.md
GET /warehouse — 200 { warehouses: Warehouse[] } List warehouses routes/warehouse/list.md
POST /warehouse body: WarehouseCreateInput 201 { warehouse: Warehouse } Create warehouse routes/warehouse/create.md
PUT /warehouse/order body: { warehouseIds: integer[] } 200 { warehouseIds: integer[] } Reorder warehouses routes/warehouse/order.md
DELETE /warehouse/{id} id:integer 204 void Delete warehouse routes/warehouse/delete.md
GET /warehouse/{id} id:integer 200 { warehouse: Warehouse } Get warehouse by ID routes/warehouse/get.md
PATCH /warehouse/{id} id:integer, body: WarehouseUpdateInput 200 { warehouse: Warehouse } Update warehouse (partial) routes/warehouse/update.md
PUT /warehouse/{id} id:integer, body: WarehouseUpdateInput 200 { warehouse: Warehouse } Update warehouse routes/warehouse/_id.put.md