{"openapi":"3.0.3","info":{"title":"Customers 1st API","description":"# General\n\n## Help and support\n\nIf you have any questions regarding the API we are happy to help you via our API support at <api@c1st.com>.\n\nPlease be specific and include the following information:\n\n * A detailed description of the problem with a step-by-step description of what you do and what happens.\n * Store details, specifically the StoreId.\n * If possible, include a complete request and response.\n * Screenshots, if possible.\n * Other relevant or helpful information.\n\n## Usage\n\nThe API is forward-compatible. We take the freedom to add **optional** attributes to endpoints without notice. In this case, you should be aware that a PUT request replaces an entire object. i.e. not specifying a field on an object will **null** the field. To update a single field on e.g. a product you must first GET the product and then PUT the entire product with the new updated field. See example below.\n\nWe may introduce breaking changes to endpoints. In such case, you will be contacted via the email provided at the API token setup page with a transition period. \n\n## Authentication\n\nSend the header\n\n`Authorization: Bearer <token>`\n\n`<token>` can be found at [https://app.c1st.com/en](https://app.c1st.com/en) -> Settings -> API -> API users.\n\nWe recommend creating a new user for each integration.\n\n## Rate limiting\n\nAPI requests are subject to potential throttling to limit excess load on our servers.\n\nThrottling of requests is based on a _simple bucket resource model_ (similar to the leaking bucket algorithm, except the bucket fills up instead of leaking). You are free to make API requests until the resource bucket is depleted, after which requests will return an HTTP 429 error.\n\nThe current bucket size is 80 and the filling (regen) rate is 8 requests per second. These limitations are subject change but are included within the HTTP response for throttled requests:\n\n```json\n{\n    \"error\": \"API Resource limit reached.\",\n    \"bucket_size:\" \"80\",\n    \"bucket_regen\": \"8\"\n}\n```\n## Fair usage\n\nWe ask that you use the API fairly and avoid introducing unnecessary load. Continuously retrieving all data, or routinely updating the entire product catalog through bulk operations, are examples of what we consider unfair API usage. Instead, use hooks and update only the products that have changed.\n\nCustomers 1st monitors API usage to identify excessive consumption. We will make every effort to contact you before taking action, but we may be required to reduce your limits until the matter has been resolved.\n\nIntegrators who misuse the API will be warned and asked to take the necessary steps to comply with fair usage. We will reach out using the API user contact email configured under **Settings → API**. If an integrator does not respond or comply within the given timeframe, Customers 1st administrators may suspend the relevant services or the API user in order to prevent further misuse.\n\n\n## Configs\n\nA list of settings configs can be found [here](https://api.c1st.com/doc/api/configs.php)\n\n\n# Examples\n## Common Requests\n\n### Fetch updated ressources since given timestamp\nA common operation you might want to do is fetch all the products from Customers 1st that where changed since the last time you \"checked\". The way to do this is to use the `updated_after` query parameter on the products search [endpoint](https://api-docs.c1st.com/#tag/Products/operation/searchProduct). So lets say for example today's date is the 20. of December and you want every product that was changed since the 19. of December. You would make a request like so:\n\n```bash\ncurl \\\n  -H 'Content-Type: application/json' \\\n  https://api.c1st.com/api/products?updated_after=2023-12-19 00:00:00\n```\n\nThis would then return a list of products updated after that date. If the amount of products changed are greater than 50 you would still have to paginate through the list. Use the `cursor` query parameter as described in [Pagination](#section/Pagination).\n\n#### Stock changes\nTo achive the same for stocktransaction, the request is almost the same as the example above. Here you use the search stockstransactions [endpoint](https://api-docs.c1st.com/#tag/StockTransactions/operation/getStockTransactions) with the query paramenter `committed_after`. So to get all stock transactions after the 19. of December 2023 you would make a request like so:\n\n```bash\ncurl \\\n  -H 'Content-Type: application/json' \\\n  https://api.c1st.com/api/stocktransactions?committed_after=2023-12-19 00:00:00\n```\n\n\n# Pagination\n\n## Cursor-based pagination (recommended)\n\nEndpoints that have been migrated to cursor-based pagination accept a `cursor` query parameter. **Use cursor-based pagination whenever an endpoint supports it.** It stays fast regardless of how deep you page, and you will not skip or receive duplicate items when data is created or deleted while you are paging.\n\nCheck the documentation of each endpoint to see whether it supports the `cursor` parameter, and which response field holds the next cursor.\n\nTo page through the results:\n\n1. Make the first request with an empty `cursor` parameter, e.g. `?cursor=&paginationPageLength=250`.\n2. Read the next cursor from the response (see the endpoint's documentation for the field name) and pass it unchanged as `cursor` in the next request. Keep all other query parameters the same.\n3. Repeat until the next cursor is `null`.\n\n```bash\ncurl \\\n  -H 'Content-Type: application/json' \\\n  'https://api.c1st.com/api/products?cursor=&paginationPageLength=250'\n\ncurl \\\n  -H 'Content-Type: application/json' \\\n  'https://api.c1st.com/api/products?cursor=eyJQcm9kdWN0LmlkIjoxMjM0LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9&paginationPageLength=250'\n```\n\nTreat the cursor as an opaque string: do not decode, modify or build it yourself. When `cursor` is set, `paginationStart` is ignored, and cursor-based pagination is only allowed with the default sorting or sorting by id.\n\n## Offset-based pagination (legacy)\n\nEndpoints that have not yet been migrated to cursor-based pagination use the GET parameters `paginationStart` and `paginationPageLength`. The pagination is based on element count.\nFor example, if you want to access the third page of a pagination with 10 items per page use:\n\n`?paginationStart=20&paginationPageLength=10`\n\nSome endpoints support both methods for backwards compatibility. On those endpoints we recommend switching to cursor-based pagination.\n\nFor all endpoints `paginationPageLength` is limited to **250**. We are currently working on implementing this limit.\n\n# Hooks\n\nThe Customers 1st API supports REST Hooks. This allows you to subscribe to events in our system and get notified via a callback url immediately.\n\nTo listen for events,\n\n`POST /api/hooks`\nwith JSON object\n\n```json\n{\n    \"event\": \"<event>\",\n    \"url\": \"<url>\"\n}\n```\n\nThis call returns a unique id for that subscription that is needed to manage the subscription.\n\nWhen the event triggers in our system, we will POST to the specified `url` with a relevant payload, for instance the product that was created in case of `product.created`.\n\nEvents can be:\n\n```js\nnotification.created\ninventorycount.created\ninventorycount.updated\ninventorycount.deleted\nproduct.created\nproduct.updated\nproduct.deleted\nproductdata.updated\ninventorylevel.updated\ninventorylevel.created\nsupplier.updated\nsupplier.deleted\nsupplier.created\npospayment.created\nposbalance.created\ncustomer.created\ncustomer.updated\ncustomer.deleted\nshoppinglistorder.created\nshoppinglistorder.committed\nshoppinglistorder.deleted\nshoppinglistitem.created\nshoppinglistitem.updated\nshoppinglistitem.deleted\ncustomertags.created\ncustomertags.updated\ncustomertags.deleted\ncustomerarticle.created\ncustomerarticle.updated\ncustomerarticle.deleted\ntaskmaterial.created\ntaskmaterial.updated\ntaskmaterial.deleted\ntask.created\ntask.updated\ntask.deleted\ntaskcomment.created\ntaskcomment.updated\ntaskcomment.deleted\nservicesubscription.created\nservicesubscription.deleted\nstocktransaction.committed\nstocktransactionlist.created\nstocktransactionlist.updated\nstocktransactionlist.committed\nstocktransactionlist.deleted\ngiftcard.created\ngiftcard.updated\ngiftcard.deleted\nloyaltybalance.updated\nsalesorder.created\nsalesorder.updated\nsalesorderfulfillment.created\nsalesorderfulfillment.updated\npayout.created\npayout.updated\npayout.booked\npromotion.created\npromotion.updated\npromotion.deleted\nverifiedsupplier.store.connected\nverifiedsupplier.store.disconnected\nverifiedsupplier.orderlist.created\n```\n\nTo unsubscribe\n`DELETE /api/hooks/{id}`\nYou can also unsubscribe by returning status code 410 (Gone) when your callback url is notified.\n\nREST hooks can also be specified via the app under Settings -> API.\n\nIf the request returns **408** (Request Timeout), **429** (Too Many Requests) or **5xx** (Server Error) the server will **retry a maximum of 3 times, with an increasing interval of 30, 60, and finally 120 minutes**, after which the hook will be considered failed.\n\n## Suppress Hooks\n\nWhen using the API to make changes to your store, for instance create products, these interactions will trigger events like `product.created` just like using the app would.\n\nIn some cases this behaviour is not desired since it can create infinite loops between services, for instance stock sync between Customers 1st and e-conomic.\n\nTo avoid this, interact with the API with the following header\n`X-Suppress-Hooks:`\nThe content of the header doesn't matter and is ignored.\n\n## Validate Hooks\n\nAll resthooks from Customers 1st are signed using a store's signing secret. The signature is set in a header called `X-C1st-Webhook-Signature`. The secret can be changed under api settings or set using the api by changing the store config `resthook_signing_secret`\n\nTo validate a resthook, you need to calculate the HMAC of the request payload using the signing secret.\n\nHere is an example in Laravel/PHP\n\n```php\n    public function validateResthook(\\Illuminate\\Http\\Request $request)\n    {\n        $signature = $request->header('X-C1st-Webhook-Signature');\n\n        $secret = \"resthook_super_secret_1337\";\n\n        $payload = $request->getContent();\n        $calculated_hmac = base64_encode(hash_hmac('sha256', $payload, $secret, true));\n\n        if ($signature != $calculated_hmac) {\n            abort(401, 'Webhook failed signature check');\n        }\n    }\n```\n","contact":{"name":"info@c1st.com"},"version":"1.0.0"},"tags":[{"name":"Billing","x-displayName":"Billing"},{"name":"Bundle - Experimental","x-displayName":"Bundle - Experimental"},{"name":"BundleFilter - Experimental","x-displayName":"BundleFilter - Experimental"},{"name":"CustomerArticles","x-displayName":"CustomerArticles"},{"name":"CustomerTags","x-displayName":"CustomerTags"},{"name":"Customers","x-displayName":"Customers"},{"name":"CustomFields","x-displayName":"CustomFields"},{"name":"DiscountTags","x-displayName":"DiscountTags"},{"name":"ExchangeRate","x-displayName":"ExchangeRate"},{"name":"Finance","x-displayName":"Finance"},{"name":"GiftCards","x-displayName":"GiftCards"},{"name":"RestHooksLog","x-displayName":"RestHooksLog"},{"name":"RestHooks","x-displayName":"RestHooks"},{"name":"Inventory levels","x-displayName":"Inventory levels"},{"name":"Loyalty","x-displayName":"Loyalty"},{"name":"Notifications","x-displayName":"Notifications"},{"name":"PartnerInventory","x-displayName":"PartnerInventory"},{"name":"PartnerPermissions","x-displayName":"PartnerPermissions"},{"name":"PaymentTypes","x-displayName":"PaymentTypes"},{"name":"PaymentTypeRelations","x-displayName":"PaymentTypeRelations"},{"name":"POSBalances","x-displayName":"POSBalances"},{"name":"POSPayments","x-displayName":"POSPayments"},{"name":"Cart","x-displayName":"Cart"},{"name":"pospaymentmaterialreturntag","x-displayName":"pospaymentmaterialreturntag"},{"name":"POSRegisters","x-displayName":"POSRegisters"},{"name":"ProductImage","x-displayName":"ProductImage"},{"name":"Products","x-displayName":"Products"},{"name":"ProductAddon","x-displayName":"ProductAddon"},{"name":"ProductMasterData","x-displayName":"ProductMasterData"},{"name":"ProductTags","x-displayName":"ProductTags"},{"name":"Promotions","x-displayName":"Promotions"},{"name":"RecurringPayment - Experimental","x-displayName":"RecurringPayment - Experimental"},{"name":"SalesOrderFulfillmentMaterials","x-displayName":"SalesOrderFulfillmentMaterials"},{"name":"SalesOrderFullfillments","x-displayName":"SalesOrderFullfillments"},{"name":"SalesOrdersMaterials","x-displayName":"SalesOrdersMaterials"},{"name":"SalesOrders","x-displayName":"SalesOrders"},{"name":"ServicePlan","x-displayName":"ServicePlan"},{"name":"ServiceSubscription","x-displayName":"ServiceSubscription"},{"name":"Settings","x-displayName":"Settings"},{"name":"ShoppingLists","x-displayName":"ShoppingLists"},{"name":"ShoppingListOrders","x-displayName":"ShoppingListOrders"},{"name":"StockTransactions","x-displayName":"StockTransactions"},{"name":"StockTransactionLists","x-displayName":"StockTransactionLists"},{"name":"StockTransactionTags","x-displayName":"StockTransactionTags"},{"name":"Suppliers","x-displayName":"Suppliers"},{"name":"TicketComments","x-displayName":"TicketComments"},{"name":"TicketFiles","x-displayName":"TicketFiles"},{"name":"TicketMaterials","x-displayName":"TicketMaterials"},{"name":"TicketTags","x-displayName":"TicketTags"},{"name":"Tickets","x-displayName":"Tickets"},{"name":"PaymentLink","x-displayName":"PaymentLink"},{"name":"ServiceNotifications","x-displayName":"ServiceNotifications"},{"name":"TicketTemplate","x-displayName":"TicketTemplate"},{"name":"TicketTemplateRelation","x-displayName":"TicketTemplateRelation"},{"name":"Users","x-displayName":"Users"},{"name":"VerifiedSupplier - Experimental","x-displayName":"VerifiedSupplier - Experimental"},{"name":"VerifiedSupplier","x-displayName":"VerifiedSupplier"}],"paths":{"/billing":{"get":{"tags":["Billing"],"summary":"Deprecated. Get billing data for the store","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingAccount"}}}}}}},"/bundle":{"post":{"tags":["Bundle - Experimental"],"operationId":"addBundle","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleResponse"}}}}}},"get":{"tags":["Bundle - Experimental"],"operationId":"Bundle","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchBundleResponse"}}}}}},"parameters":[{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":20,"maximum":200},"example":20}]},"/bundle/{id}":{"get":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["Bundle - Experimental"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleResponse"}}}}}},"put":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["Bundle - Experimental"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleResponse"}}}}}},"delete":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["Bundle - Experimental"],"operationId":"deleteBundle","responses":{"204":{"description":"Ok"}}}},"/bundlefilter":{"post":{"tags":["BundleFilter - Experimental"],"operationId":"BundleFilter","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleFilterRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleFilterResponse"}}}}}}},"/bundlefilter/{id}":{"get":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["BundleFilter - Experimental"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleFilterResponse"}}}}}},"put":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["BundleFilter - Experimental"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleFilterRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleFilterResponse"}}}}}},"delete":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["BundleFilter - Experimental"],"operationId":"deleteBundleFilter","responses":{"204":{"description":"Ok"}}}},"/customerarticles":{"get":{"tags":["CustomerArticles"],"summary":"Get list of customer articles","parameters":[{"in":"query","name":"serieno","schema":{"type":"string"},"example":"123abc"},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","maximum":200}},{"in":"query","name":"customerid","schema":{"type":"integer"},"example":31241},{"in":"query","name":"freetext","schema":{"type":"string"},"example":"Bike Tyson"},{"in":"query","name":"allowdeleted","schema":{"type":"boolean"},"example":true},{"in":"query","name":"scope","schema":{"type":"string","enum":["sharecustomerarticles","sharecustomers"]}},{"in":"query","name":"updated_after","schema":{"type":"string"},"description":"Get all customer articles updated after the given date","example":"2020-01-01 00:00:00"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerArticleListResponse"}}}}}},"post":{"tags":["CustomerArticles"],"summary":"Create a new customer article","operationId":"addCustomerArticle","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetCustomerArticle"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerArticleResponse"}}}}}}},"/customerarticles/delete":{"post":{"tags":["CustomerArticles"],"summary":"Delete customer articles","operationId":"deleteCustomerArticles","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteCustomerArticles"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteCustomerArticlesResponse"}}}},"404":{"description":"Not found"}}}},"/customerarticles/{id}/payments":{"parameters":[{"$ref":"#/components/parameters/id"}],"get":{"tags":["CustomerArticles"],"summary":"Get payments for a customer article","operationId":"listCustomerArticlePayments","description":"Returns a lightweight list of payments that contain the given customer article.","parameters":[{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0}},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":10,"maximum":25}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPOSPaymentResponse"}}}},"4XX":{"description":"Bad request"}}}},"/customerarticles/{id}/switchcustomer":{"parameters":[{"$ref":"#/components/parameters/id"}],"put":{"tags":["CustomerArticles"],"summary":"Switch customer of a customer article","operationId":"switchCustomer","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerArticleResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchCustomerQuery"}}}}}},"/customerarticles/{id}":{"parameters":[{"$ref":"#/components/parameters/id"}],"get":{"tags":["CustomerArticles"],"summary":"Get a customer article","parameters":[{"in":"query","name":"allowdeleted","schema":{"type":"boolean"},"example":"true or 1"},{"in":"query","name":"withdraftsubscription","schema":{"type":"boolean"},"example":"true or 1"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerArticleResponse"}}}}}},"put":{"tags":["CustomerArticles"],"summary":"Update a customer article","operationId":"updateCustomerArticle","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetCustomerArticle"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerArticleResponse"}}}}}},"delete":{"tags":["CustomerArticles"],"summary":"Delete a customer article","operationId":"deleteCustomerArticle","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerArticleResponse"}}}}}}},"/customertags":{"get":{"tags":["CustomerTags"],"summary":"Get list of customer tags used by the store","operationId":"getCustomerTags","parameters":[{"in":"query","name":"freetext","schema":{"type":"string","description":"Search string"}},{"in":"query","name":"paginationStart","schema":{"type":"number","default":0,"description":"Start of pagination"}},{"in":"query","name":"paginationPageLength","schema":{"type":"number","description":"Pagination page length","default":1000}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerTagsResponse"}}}}}},"post":{"tags":["CustomerTags"],"summary":"Add a new customer tag to the store","operationId":"createCustomerTag","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerTag"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerTagsResponse"}}}},"400":{"description":"Bad request"}}}},"/customertags/{tagId}":{"get":{"tags":["CustomerTags"],"summary":"Get a customer tag","operationId":"getCustomerTag","parameters":[{"in":"path","name":"tagId","schema":{"type":"integer"},"required":true,"description":"The tag ID"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerTag"}}}}}},"delete":{"tags":["CustomerTags"],"summary":"Delete a customer tag from the store","operationId":"deleteCustomerTag","parameters":[{"in":"path","name":"tagId","schema":{"type":"integer"},"required":true,"description":"The tag ID"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object"}}}}}},"put":{"tags":["CustomerTags"],"summary":"Update a customer tag","operationId":"updateCustomerTag","parameters":[{"in":"path","name":"tagId","required":true,"schema":{"type":"integer"},"description":"The tag ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerTag"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerTagsResponse"}}}},"404":{"description":"Not found"}}}},"/customers":{"get":{"tags":["Customers"],"summary":"Search for customers","description":"Lists customers of the authenticated store, optionally filtered and paginated. Drafts and deleted customers are excluded by default. Returns 400 for an unsupported `sortField` or an invalid request.","operationId":"searchCustomers","parameters":[{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100,"description":"Offset (in number of customers) to start from. This is usually a multiple of the paginationPageLength."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50},"example":30,"description":"Number of customers to fetch in one page."},{"in":"query","name":"count","schema":{"type":"boolean"},"description":"If set, the total number of matching customers (ignoring pagination) is returned in `count`."},{"in":"query","name":"sortOrder","schema":{"type":"integer","enum":[-1,1],"default":1},"example":1,"description":"Sorting order. If 1, customers are retrieved in ascending order, if -1, in descending order."},{"in":"query","name":"customerno","schema":{"type":"string"},"description":"Filter customers by exact customer number"},{"in":"query","name":"sortField","schema":{"type":"string"},"example":"id","description":"Field to sort by. Supported values are id, storeid, name, phone, address, city, zipcode, addr_country, email, vat, ean, lat, lng, country, draft, createddate, updated_at, permission_marketing, customerno and balance. Other values result in a 400 response. If omitted, the store's default customer sort is used (if configured)."},{"in":"query","name":"allowMarketing","schema":{"type":"boolean"},"example":true,"description":"If true, only customers with marketing permission are returned. If false, only customers without."},{"in":"query","name":"name","schema":{"type":"string"},"description":"Search for customer name. Partial match."},{"in":"query","name":"email","schema":{"type":"string"},"description":"Search for customer email. Partial match."},{"in":"query","name":"phoneno","schema":{"type":"string"},"description":"Search for customer phone number. Matches the normalized (E.164) number or a partial match on the stored phone number."},{"in":"query","name":"ean","schema":{"type":"string"},"description":"Search for customer EAN. Partial match."},{"in":"query","name":"barcode","schema":{"type":"string"},"description":"Filter customers by exact barcode match"},{"in":"query","name":"cvr","schema":{"type":"string"},"description":"Search for customer CVR (VAT number). Partial match."},{"in":"query","name":"tags","schema":{"type":"string"},"description":"Customer tag IDs as a comma-separated string. Customers with any of the tags are returned. Ignored if `tag` is set."},{"in":"query","name":"tag","schema":{"type":"integer"},"description":"Only return customers with the given customer tag ID"},{"in":"query","name":"ids","schema":{"type":"string"},"description":"Customer IDs as a comma-separated string. Only these customers are returned."},{"in":"query","name":"freetext","schema":{"type":"string"},"description":"Freetext search for customer, this searches in most customer properties like name, address, phone, email etc"},{"in":"query","name":"partOfLoyaltyClub","schema":{"type":"boolean"},"description":"If true, only customers in the loyalty club are returned. If false, only customers not in the loyalty club."},{"in":"query","name":"updated_after","schema":{"type":"string"},"description":"Get all customers updated at or after the given date","example":"2020-01-01 00:00:00"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchCustomerResponse"}}}},"400":{"description":"Bad request, e.g. unsupported `sortField`","content":{"application/json":{"schema":{"type":"object"}}}}}},"post":{"tags":["Customers"],"summary":"Add a new customer","description":"","operationId":"addCustomer","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetCustomer"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/customers/{customerId}":{"get":{"summary":"Get a customer","operationId":"getCustomer","tags":["Customers"],"parameters":[{"in":"path","name":"customerId","schema":{"type":"integer"},"required":true,"description":"The customer ID"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"string"}}}}}},"put":{"summary":"Replace a customer","operationId":"updateCustomer","tags":["Customers"],"parameters":[{"in":"path","name":"customerId","schema":{"type":"integer"},"required":true,"description":"The customer ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetCustomer"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}},"404":{"description":"Not found"}}},"delete":{"summary":"Delete a customer","operationId":"deleteCustomer","tags":["Customers"],"parameters":[{"in":"path","name":"customerId","schema":{"type":"integer"},"required":true,"description":"The customer ID"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}},"404":{"description":"Not found"}}}},"/customfields":{"get":{"tags":["CustomFields"],"summary":"Get a list of all customfields.","parameters":[{"in":"query","name":"endpoint","schema":{"type":"string","default":"product"}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchCustomFieldResponse"}}}}}}},"/customfields/{endpoint}/{attribute}":{"put":{"tags":["CustomFields"],"description":"","summary":"Edit customfield","parameters":[{"in":"path","name":"endpoint","schema":{"type":"string","pattern":"^(product|customerarticle)$"},"required":true},{"in":"path","name":"attribute","schema":{"type":"string","pattern":"^customfield[1-4]$"},"required":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFieldResponse"}}}},"4XX":{"description":"Not found"}}}},"/discounttags":{"post":{"tags":["DiscountTags"],"operationId":"addDiscountTag","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountTagRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountTagResponse"}}}}}},"get":{"tags":["DiscountTags"],"operationId":"DiscountTags","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchDiscountTagResponse"}}}}}}},"/discounttags/{id}":{"put":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["DiscountTags"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountTagRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountTagResponse"}}}}}},"delete":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["DiscountTags"],"operationId":"discounttags","responses":{"204":{"description":"Ok"}}}},"/exchangerate":{"get":{"tags":["ExchangeRate"],"summary":"Get all exchange rates created by the store","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRateListResponse"}}}}}},"post":{"tags":["ExchangeRate"],"summary":"Create a new exchange rate","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRateRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRateResponse"}}}}}}},"/exchangerate/{id}":{"get":{"tags":["ExchangeRate"],"summary":"Get an exchange rate by ID","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRateResponse"}}}}}},"put":{"tags":["ExchangeRate"],"summary":"Update an existing exchange rate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRateRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRateResponse"}}}}}},"delete":{"tags":["ExchangeRate"],"summary":"Delete an exchange rate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"No Content"}}}},"/financevouchers/{balanceId}":{"get":{"tags":["Finance"],"summary":"Get finance voucher for a balance","parameters":[{"$ref":"#/components/parameters/balanceId"},{"in":"query","name":"excludeInvoicePayment","required":false,"schema":{"type":"boolean"},"description":"Exclude invoice in the response"},{"in":"query","name":"excludeCustomerPayment","required":false,"schema":{"type":"boolean"},"description":"Exclude customer payment in the response"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FinanceVoucher"}}}}}}}},"/giftcards":{"get":{"tags":["GiftCards"],"description":"Search for giftcards","operationId":"searchGiftcard","parameters":[{"in":"query","name":"freetext","schema":{"type":"string"},"description":"The free text that is used to search in name, type, giftcardno, phone etc."},{"in":"query","name":"fromdate","schema":{"type":"string"},"description":"date","example":"2020-01-01 00:00:00"},{"in":"query","name":"todate","schema":{"type":"string"},"description":"date","example":"2020-01-01 23:59:59"},{"in":"query","name":"giftcardid","schema":{"type":"integer"},"description":"filter on id"},{"in":"query","name":"customerid","schema":{"type":"integer"},"description":"filter on customerid"},{"in":"query","name":"giftcardno","schema":{"type":"string"},"description":"filter on id"},{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100,"description":"Determine the offset (in number of item) to fetch. This is usually a multiple of the pageLength."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50},"example":30,"description":"Determine the number of items to fetch in one page."},{"in":"query","name":"sortOrder","schema":{"type":"integer","enum":[-1,1],"default":1},"example":1,"description":"Sorting order. If `order` is 1, items are retrieved in ascending order, if -1, in descending order."},{"in":"query","name":"sortField","schema":{"type":"string"},"example":"id","description":"Sort by `field` e.g. giftcardno, date,.."}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchGiftcardsResponse"}}}}}},"post":{"tags":["GiftCards"],"description":"Create a giftcard","operationId":"createGiftcard","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostGiftcardsRequest"},"examples":{"AddGiftcard":{"value":{"content":{"giftcardno":"1234","amount":200}},"description":"Create a giftcard with amount of 200"},"AddGiftcardWithCustomer":{"value":{"content":{"giftcardno":"1234","amount":200,"customerid":123}},"description":"Create a giftcard with amount of 200 and connect customer with customerid 123"}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostGiftcardsResponse"},"examples":{"AddGiftcard":{"value":{"content":{"id":27660,"giftcardno":"1234","amount":200,"amountspent":0,"createddate":"2022-01-20 09:20:34","expirationdate":"2025-01-20 09:20:34","paymentid":null,"type":"giftcard","vat":null,"productid":null,"productno":null,"expired":false,"store":{"id":198},"customer":null}},"description":"Add a giftcard with amount of 200"}}}}},"4XX":{"description":"Bad request"}}}},"/giftcards/{giftcardId}":{"put":{"tags":["GiftCards"],"description":"Update a giftcard","parameters":[{"in":"path","name":"giftcardId","schema":{"type":"integer"},"required":true,"description":"The giftcard ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutGiftcardRequest"},"examples":{"UpdateAmountSpent":{"value":{"content":{"amountspent":80}},"description":"Set the amount spent on a giftcard to 80 and leave the balance at 120"},"UpdateGiftCardHolder":{"value":{"content":{"customerid":123}},"description":"Set the current customer of the giftcard to customerId 123"}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutGiftcardsResponse"},"examples":{"UpdateAmountSpent":{"value":{"content":{"id":27660,"giftcardno":"1234","amount":200,"amountspent":80,"createddate":"2022-01-20 09:20:34","expirationdate":"2025-01-20 09:20:34","paymentid":null,"type":"giftcard","vat":null,"productid":null,"productno":null,"expired":false,"store":{"id":198}}}}}}}},"4XX":{"description":"ok"}}},"get":{"tags":["GiftCards"],"description":"Get giftcards","operationId":"getGiftcard","parameters":[{"in":"path","name":"giftcardId","schema":{"type":"integer"},"required":true,"description":"The giftcard id"}],"responses":{"200":{"description":"Ok. The created giftcard is returned in the response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetGiftcardResponse"}}}},"404":{"description":"Giftcard not found."}}}},"/giftcards/{giftcardid}/transactions":{"get":{"tags":["GiftCards"],"description":"Get all transactions for a given giftcard","parameters":[{"in":"path","name":"giftcardid","schema":{"type":"integer"},"required":true,"description":"The giftcard id"}],"responses":{"200":{"description":"Ok. The transactions for the giftcard is returned in the response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetGiftCardTransactionsResponse"}}}},"404":{"description":"Giftcard not found"}}}},"/hooks/log":{"get":{"tags":["RestHooksLog"],"summary":"List current REST hook log entries for store.","description":"","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestHookLogResponse"}}}}}}},"/hooks/events":{"get":{"summary":"Get the list of valid events.","tags":["RestHooks"],"responses":{"200":{"description":"List of valid rest hook events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestHookEventResponse"}}}}}}},"/hooks":{"get":{"tags":["RestHooks"],"summary":"List current subscriptions for store.","description":"","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestHookResponse"}}}}}},"post":{"tags":["RestHooks"],"summary":"Subscribe to event","description":"Subscribe to an event like product.created with a callback url to get pinged when the event triggers.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestHook"}}}},"responses":{"201":{"description":"Added","content":{"application/json":{"schema":{"type":"object","description":"The hook information returned when subscribing to an an event.","properties":{"id":{"description":"The id needed to unsubscribe.","type":"integer","example":1}},"additionalProperties":false}}},"links":{"unsubscribeOp":{"operationId":"unsubscribe","parameters":{"hookId":"$response.body#/id"},"description":"The `id` returned in the response is used as the parameter `hookId` in `DELETE /hooks/{hookId}`"}}},"4XX":{"description":"Invalid input"}},"callbacks":{"callback":{"{$request.body#/url}":{"post":{"requestBody":{"content":{"application/json":{}}},"responses":{"200":{"description":"Ok"}}}}}}}},"/hooks/{hookId}":{"get":{"operationId":"getSubscription","tags":["RestHooks"],"summary":"Get subscription","description":"Get the subscription details for given an id.","parameters":[{"in":"path","name":"hookId","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestHook"}}}},"4XX":{"description":"Not found"}}},"put":{"operationId":"updateSubscription","tags":["RestHooks"],"summary":"Update subscription","description":"Update the subscription for an event given an id.","parameters":[{"in":"path","name":"hookId","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestHook"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","description":"The status of the subscription update.","properties":{"updated":{"type":"integer","example":1,"description":"Whether or not the event was updated. 0 for failure, 1 for success."}},"additionalProperties":false}}}},"4XX":{"description":"Invalid input"}}},"delete":{"operationId":"unsubscribe","tags":["RestHooks"],"summary":"Unsubscribe from event","description":"Unsubscribe from an event given an id for subscription.","parameters":[{"in":"path","name":"hookId","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"The status of the subscription deletion.","properties":{"deleted":{"type":"integer","example":1,"description":"Whether or not the event was deleted. 0 for failure, 1 for success."}}}}}}}}},"/inventorylevels":{"get":{"description":"List the current inventory level for products","operationId":"InventoryLevelList","tags":["Inventory levels"],"parameters":[{"$ref":"#/components/parameters/cursor"},{"$ref":"#/components/parameters/updated_after"},{"in":"query","name":"product_id","schema":{"type":"integer"}},{"in":"query","name":"product_no","schema":{"type":"string"}},{"in":"query","name":"exclude_zero","schema":{"type":"boolean","default":false}},{"in":"query","name":"per_page","schema":{"type":"integer","default":50,"minimum":0,"maximum":1000}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryLevelSearchResponse"}}}}}},"patch":{"description":"Update inventory level for a product","operationId":"InventoryLevelPatch","tags":["Inventory levels"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryLevelUpdateRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/InventoryLevel"}},"additionalProperties":false}}}}}}},"/loyalty/customer/{id}/membership":{"parameters":[{"$ref":"#/components/parameters/id"}],"delete":{"tags":["Loyalty"],"summary":"Withdraw a customer from the loyalty program","responses":{"204":{"description":"Ok"}}},"post":{"tags":["Loyalty"],"summary":"Enroll a customer into the loyalty program","responses":{"204":{"description":"Ok"}}}},"/loyalty/customer/{id}":{"parameters":[{"$ref":"#/components/parameters/id"}],"get":{"tags":["Loyalty"],"summary":"Get loyalty transactions of the customer","parameters":[{"in":"query","name":"paginationStart","schema":{"type":"number","default":0,"description":"Start of pagination"}},{"in":"query","name":"paginationPageLength","schema":{"type":"number","description":"Pagination page length","default":1000}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoyaltyTransactionsResponse"}}}}}},"post":{"tags":["Loyalty"],"summary":"Create a new transaction on this user","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"content":{"$ref":"#/components/schemas/CreateLoyaltyTransactionRequest"}}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoyaltyTransactionResponse"}}}}}}},"/notifications":{"get":{"tags":["Notifications"],"summary":"Get recent notifications for the current user","parameters":[{"in":"query","name":"userid","schema":{"type":"integer"},"description":"The user ID"},{"in":"query","name":"updated_after","schema":{"type":"string"},"description":"Get alle notification updated after a certain date"},{"in":"query","name":"created_after","schema":{"type":"string"},"description":"Get alle notification created after a certain date"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationsResponse"}}}}}},"post":{"tags":["Notifications"],"summary":"Create notification","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationCreateRequest"}}}},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationCreateResponse"}}}}}}},"/notifications/settings":{"get":{"tags":["Notifications"],"summary":"Get the settings object describing which users are listening to what notifications","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}},"put":{"tags":["Notifications"],"summary":"Update the settings object describing which users are listening to what notifications","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/notifications/settings/{channel}":{"parameters":[{"name":"channel","in":"path","required":true,"schema":{"type":"string","enum":["sms","mail"]}}],"get":{"tags":["Notifications"],"summary":"Get which users receive which notifications on a channel","description":"Maps each notification type to the ids of the users receiving it by SMS or email in addition to in-app.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Notification type mapped to the ids of the users receiving it on the channel","additionalProperties":{"type":"array","items":{"type":"integer"}}}}}}}},"put":{"tags":["Notifications"],"summary":"Turn a channel on or off for one user and notification type","description":"Channels are add-ons to the in-app subscription, so enabling a channel for a user who isn't subscribed in-app is rejected, and unsubscribing in-app also stops the channel. The main user can change any user, other users only themselves.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["notification","userid","enabled"],"properties":{"notification":{"type":"string","example":"App\\Notifications\\ProductStockBelowMinimum"},"userid":{"type":"integer"},"enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Notification type mapped to the ids of the users receiving it on the channel","additionalProperties":{"type":"array","items":{"type":"integer"}}}}}},"4XX":{"description":"403 if a non-main user changes another user's channels, 422 if the user isn't subscribed to the notification in-app"}}}},"/partnerinventory/{productid}":{"get":{"parameters":[{"in":"path","name":"productid","schema":{"type":"integer"},"required":true,"description":"The product ID"}],"tags":["PartnerInventory"],"description":"Get inventory levels for partner stores matched on product number. If a product has serial products the endpoint will return the inventory sum of all those serial products\n","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerInventoryResponse"}}}},"4XX":{"description":"Bad request"}}}},"/partnerpermissions/derived":{"get":{"tags":["PartnerPermissions"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerPermissionDerivedResponse"}}}}}}},"/paymenttypes":{"get":{"tags":["PaymentTypes"],"description":"","summary":"Get a list of all the store's payment types.","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PaymentType"}}}}}}},"post":{"tags":["PaymentTypes"],"description":"","summary":"Create a payment type","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentType"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentType"}}}}}}},"/paymenttypes/{id}":{"get":{"tags":["PaymentTypes"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true},{"in":"query","name":"allowDeleted","schema":{"type":"integer"},"required":false,"description":"Includes deleted payment types in the response when not 0"}],"description":"","summary":"Get a list of all the store's payment types.","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentType"}}}},"4XX":{"description":"Not found"}}},"put":{"tags":["PaymentTypes"],"description":"","summary":"Edit an exisiting payment type","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The PaymentType ID"},{"in":"query","name":"allowDeleted","schema":{"type":"integer"},"required":false,"description":"Allows for settings deleted payment types when not 0"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentType"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentType"}}}},"4XX":{"description":"Not found"}}},"delete":{"tags":["PaymentTypes"],"description":"","summary":"Delete a payment type","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The PaymentType ID"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"integer","readOnly":true,"example":1,"description":"Whether or not the PaymentType was deleted."}},"additionalProperties":false}}}},"4XX":{"description":"Bad request"}}}},"/paymenttyperelation/{paymentId}":{"parameters":[{"$ref":"#/components/parameters/paymentId"}],"get":{"tags":["PaymentTypeRelations"],"parameters":[{"in":"query","name":"getreceipts","schema":{"type":"boolean"},"required":false,"description":"Whether or not to include receipts"}],"summary":"Add a list of articles to an existing payment","description":"","operationId":"getPaymentTypes","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PaymentTypeRelation"}}}}}}},"post":{"tags":["PaymentTypeRelations"],"summary":"Add a list of payments to an existing payment","description":"","operationId":"addPaymentTypes","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PaymentTypeRelation"}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PaymentTypeRelation"}}}}},"404":{"description":"The payment you are trying to add paymenttypes to does not exist."}}},"put":{"tags":["PaymentTypeRelations"],"summary":"Changes status of a payment","description":"Can only change the status of a payment if it is not captured","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentTypeRelation"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentTypeRelation"}}}},"4XX":{"description":"Not found"}}}},"/paymenttyperelation/{id}/receipts":{"get":{"tags":["PaymentTypeRelations"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The ID"}],"summary":"Gets receipt for a paymenttyperelation","description":"","operationId":"getPaymentTypeReceipts","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}}}},"/posbalances":{"get":{"tags":["POSBalances"],"summary":"Search for balances","description":"Get balances. Balances are readonly and can only be created via Customers 1st app","operationId":"searchBalances","parameters":[{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100,"description":"Determine the offset (in number of item) to fetch. This is usually a multiple of the pageLength."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50},"example":30,"description":"Determine the number of items to fetch in one page."},{"in":"query","name":"sortOrder","schema":{"type":"integer","enum":[-1,1],"default":1},"example":1,"description":"Sorting order. If `order` is 1, items are retrieved in ascending order, if -1, in descending order."},{"in":"query","name":"sortField","schema":{"type":"string"},"example":"id","description":"Sort by `field` e.g. date,..."},{"in":"query","name":"userId","schema":{"type":"integer"},"example":1,"description":"Id of the cashier"},{"in":"query","name":"cashRegisterId","schema":{"type":"integer"},"example":2,"description":"Id of the cash register"},{"in":"query","name":"toDate","schema":{"type":"string"},"description":"Get all payments before the given date","example":"2020-01-01 23:59:59"},{"in":"query","name":"fromDate","schema":{"type":"string"},"description":"Get all payments after the given date","example":"2020-01-01 23:59:59"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPOSBalanceResponse"}}}}}}},"/pospayments/{paymentId}/articles":{"parameters":[{"$ref":"#/components/parameters/paymentId"}],"post":{"tags":["POSPayments"],"summary":"Add a list of articles to an existing payment.","description":"","operationId":"addArticles","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PaymentArticle"}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PaymentArticle"}}}}},"404":{"description":"The payment you are trying to add articles to does exist"}}}},"/pospayments/{paymentId}/articles/{paymentArticleId}":{"parameters":[{"$ref":"#/components/parameters/paymentId"},{"$ref":"#/components/parameters/paymentArticleId"}],"put":{"tags":["Cart"],"summary":"a new cart.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentArticleRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentArticleResponse"}}}},"4XX":{"description":"Not found"}}},"delete":{"tags":["Cart"],"summary":"a new cart.","responses":{"204":{"description":"Ok"},"4XX":{"description":"Not found"}}}},"/pospayments/{paymentId}/articles/{paymentArticleId}/discount":{"parameters":[{"$ref":"#/components/parameters/paymentArticleId"},{"$ref":"#/components/parameters/paymentId"}],"post":{"tags":["Cart"],"summary":"Add a discount to a specific article in a payment.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountArticleItem"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentArticle"}}}},"4XX":{"description":"Not found"}}}},"/pospayments/{paymentId}/articles/discount":{"parameters":[{"$ref":"#/components/parameters/paymentId"}],"post":{"tags":["Cart"],"summary":"a new cart.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountArticleItem"}}}},"responses":{"204":{"description":"Ok"},"4XX":{"description":"Not found"}}}},"/pospayments/materialreturntags":{"get":{"tags":["pospaymentmaterialreturntag"],"summary":"List all material return tags","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMaterialReturnTagsResponse"}}}}}}},"/pospayments":{"get":{"tags":["POSPayments"],"summary":"Search for payments","description":"Get payments.","operationId":"searchPosPayments","parameters":[{"in":"query","name":"freetext","deprecated":true,"schema":{"type":"string"},"description":"The free text that is used to search in paymentno, payment materials, etc."},{"in":"query","name":"note","schema":{"type":"string"},"description":"Search based on notes."},{"in":"query","name":"fromdate","schema":{"type":"string"},"description":"Get all payments after the given fromdate to now (or to todate if specified)","example":"2020-01-01 00:00:00"},{"in":"query","name":"cash","schema":{"type":"integer"},"description":"1 of you only want cash payments"},{"in":"query","name":"invoice","schema":{"type":"integer"},"description":"1 of you only want invoice payments","example":1},{"in":"query","name":"todate","schema":{"type":"string"},"description":"Get all payments before the given todate","example":"2020-01-01 23:59:59"},{"in":"query","name":"productid","schema":{"type":"integer"},"description":"Get payments of a specific product"},{"in":"query","name":"discounttagid","schema":{"type":"integer"},"description":"Get payments with an article discounted using a specific discount tag"},{"in":"query","name":"paymentno_after","schema":{"type":"integer","minimum":0},"description":"Get all payments with paymentno >= paymentno_after"},{"in":"query","name":"updated_after","schema":{"type":"string"},"description":"Get all payments updated after the given date","example":"2020-01-01 00:00:00"},{"in":"query","name":"userid","schema":{"type":"integer"},"description":"filter on userid"},{"in":"query","name":"customerid","schema":{"type":"integer"},"description":"filter on customerid"},{"in":"query","name":"customerPaymentSum","schema":{"type":"integer","default":0},"description":"Calculate total payment sum for customer, requires that customerid is provided"},{"in":"query","name":"paymenttypeid","schema":{"type":"integer"},"description":"Filter on paymenttype"},{"in":"query","name":"sum","deprecated":true,"schema":{"type":"number","format":"double"},"description":"Deprecated: Use sumFrom and sumTo instead. Filter payments with exact sum match."},{"in":"query","name":"sumFrom","schema":{"type":"number","format":"double"},"description":"Filter payments with sum greater than or equal to this value"},{"in":"query","name":"sumTo","schema":{"type":"number","format":"double"},"description":"Filter payments with sum less than or equal to this value"},{"in":"query","name":"returnPaymentsOnly","schema":{"type":"boolean"},"description":"Filter to only include payments where articles are being returned (i.e. quantity < 0)"},{"in":"query","name":"paymentno","schema":{"type":"string"},"description":"Filter on paymentno"},{"in":"query","name":"paymentid","schema":{"type":"integer"},"description":"Filter on payment"},{"in":"query","name":"bamdeskdevice","schema":{"type":"integer"},"description":"1 = only get bamdeskdevice payments"},{"in":"query","name":"fromPartnerStores","schema":{"type":"integer","default":0},"description":"Includes payments from partner stores when not 0","example":1},{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100,"description":"Determine the offset (in number of item) to fetch. This is usually a multiple of the pageLength."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50},"example":30,"description":"Determine the number of items to fetch in one page."},{"in":"query","name":"sortOrder","schema":{"type":"integer","enum":[-1,1],"default":1},"example":1,"description":"Sorting order. If `order` is 1, items are retrieved in ascending order, if -1, in descending order."},{"in":"query","name":"sortField","schema":{"type":"string"},"example":"id","description":"Sort by `field` e.g. paymentno, date,."},{"in":"query","name":"cashRegisterId","schema":{"type":"number"},"example":1,"description":"Get payments with a specific cash register"},{"in":"query","name":"status","schema":{"$ref":"#/components/schemas/PaymentStatus"},"example":"completed","description":"Get payments with a specific status"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPOSPaymentResponse"}}}}}},"post":{"tags":["POSPayments"],"summary":"Add a new POS payment","description":"Add a new payment. For a payment use must provide the products sold via articles and the payment transactions via paymenttypes","operationId":"addPayment","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/POSPayment"},"examples":{"Wine":{"value":{"articles":[{"title":"Vin","price":100,"costprice":30,"quantity":1,"productno":"zinfandel_123","vat":25}],"paymenttypes":[{"title":"Cash","amount":100,"cash":1}]},"description":"Sell wine with cash payment"}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/POSPayment"}}}}}}},"/pospayments/{paymentId}":{"parameters":[{"$ref":"#/components/parameters/paymentId"}],"get":{"summary":"Get a payment","description":"Get a single payment, including its extra details (e.g. materials and payment types). Payments of stores sharing gift cards with the current store are also returned.","operationId":"getPOSPayment","tags":["POSPayments"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/POSPaymentResponse"}}}},"4XX":{"description":"Payment not found."}}},"put":{"summary":"Changes payment","operationId":"putPOSPayment","tags":["POSPayments"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/POSPaymentRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/POSPaymentResponse"}}}},"4XX":{"description":"Not found"}}}},"/registers":{"get":{"tags":["POSRegisters"],"description":"","summary":"Get a list of all the store's POS registers.","parameters":[{"in":"query","name":"includeDeleted","required":false,"schema":{"type":"boolean","default":false,"description":"Include deleted cash registers in request"}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/POSRegisterResponse"}}}}}},"post":{"tags":["POSRegisters"],"description":"","summary":"Create a new POSRegister","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPOSRegister"}}}},"responses":{"201":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPOSRegisterResponse"}}}}}}},"/registers/{id}":{"parameters":[{"$ref":"#/components/parameters/id"}],"put":{"tags":["POSRegisters"],"description":"","summary":"Edit an exisiting POS register","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPOSRegister"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPOSRegisterResponse"}}}}}},"get":{"tags":["POSRegisters"],"summary":"Get a POS register based on id","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPOSRegisterResponse"}}}},"4XX":{"description":"Not found"}}},"delete":{"tags":["POSRegisters"],"summary":"Deletes a POS register based on id","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPOSRegisterResponse"}}}},"4XX":{"description":"Not found"}}}},"/products/{id}/image":{"parameters":[{"$ref":"#/components/parameters/id"}],"get":{"tags":["ProductImage"],"summary":"Get a products image","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductImageResponse"}}}}}},"delete":{"tags":["ProductImage"],"summary":"Delete a products image","responses":{"204":{"description":"No content"}}}},"/products/{id}/image/url":{"parameters":[{"$ref":"#/components/parameters/id"}],"post":{"tags":["ProductImage"],"summary":"Set a product image from a url. This is done Async.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetProductImageFromURL"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductImageResponse"}}}}}}},"/products/{id}/addons":{"get":{"tags":["Products"],"summary":"Get addons for a specific product","description":"","operationId":"getProductAddons","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The product ID"},{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100,"description":"Determine the offset (in number of products) to fetch. This is usually a multiple of the pageLength. For legacy support you can also write pagination-start"},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50,"maximum":250},"example":30,"description":"Determine the number of products to fetch in one page. For legacy support you can also write pagination-PageLength"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddonListResponse"}}}},"4XX":{"description":"Not found"}}},"post":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["Products"],"summary":"Add a new add-on to a specific product","description":"","operationId":"addProductAddon","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAddon"}}}},"responses":{"204":{"description":"Ok"},"405":{"description":"Invalid input"}}}},"/products/{productId}/addons/{addonId}":{"put":{"summary":"Edit a addon relation","operationId":"putProductAddonRelation","tags":["ProductAddon"],"parameters":[{"in":"path","name":"productId","schema":{"type":"integer"},"required":true,"description":"The product ID"},{"in":"path","name":"addonId","schema":{"type":"integer"},"required":true,"description":"The add-on id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAddon"}}}},"responses":{"204":{"description":"Ok"},"4XX":{"description":"Not found"}}},"delete":{"summary":"Delete a specific addon for a specific product","operationId":"deleteProductAddon","tags":["ProductAddon"],"parameters":[{"in":"path","name":"productId","schema":{"type":"integer"},"required":true,"description":"The product ID"},{"in":"path","name":"addonId","schema":{"type":"integer"},"required":true,"description":"The add-on id"}],"responses":{"204":{"description":"Ok"},"4XX":{"description":"Not found"}}}},"/products/{id}/addons/count":{"get":{"tags":["Products"],"summary":"Get the number of addons for a specific product","description":"","operationId":"countProductAddons","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The product ID"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountAddonsResponse"}}}},"4XX":{"description":"Not found"}}}},"/products/bulk":{"put":{"tags":["Products"],"summary":"Replace products in chunks","description":"","operationId":"replaceProductBulk","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetProductBulk"}}}},"responses":{"200":{"description":"The endpoint always return 200","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponseBulk"}}}}}},"patch":{"tags":["Products"],"summary":"Patch products in bulk","description":"","operationId":"updateProductBulk","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetProductBulk"}}}},"responses":{"200":{"description":"The endpoint always return 200","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponseBulk"}}}}}},"delete":{"tags":["Products"],"summary":"Delete products in chunks","description":"","operationId":"deleteProductBulk","parameters":[{"in":"query","name":"ids","style":"pipeDelimited","schema":{"type":"array","maxItems":100,"items":{"type":"string"}},"description":"Pipe separated list of ids"}],"responses":{"200":{"description":"The endpoint always return 200","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponseBulk"}}}}}}},"/productmasterdata":{"post":{"tags":["ProductMasterData"],"summary":"Add or update product master data. Update is triggered if {suppliername, productno, industry, country} matches existing item","description":"","operationId":"addProductMasterdata","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMasterData"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMasterDataResponse"}}}},"4XX":{"description":"Failed"}}},"get":{"tags":["ProductMasterData"],"summary":"Search the productmasterdata","description":"","operationId":"searchProductMasterData","parameters":[{"in":"query","name":"search","schema":{"type":"string"},"description":"The search string"},{"in":"query","name":"barcode","schema":{"type":"string"},"description":"A secondary search string that only searches in the barcode field"},{"in":"query","name":"productno","schema":{"type":"string"},"description":"A search string that searches in the productno field"},{"in":"query","name":"pagelength","schema":{"type":"integer"},"description":"The pagination page length"},{"in":"query","name":"offset","schema":{"type":"integer"},"description":"The pagination object offset"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ProductMasterData"}},"hasMore":{"type":"boolean"}},"additionalProperties":false}}}},"4XX":{"description":"Failed"}}}},"/productmasterdata/bulk":{"post":{"tags":["ProductMasterData"],"summary":"Add or update product master data in bulk. Update is triggered if {suppliername, productno, industry, country} matches existing item","description":"","operationId":"addUpdateBulk","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","maxItems":1000,"items":{"$ref":"#/components/schemas/ProductMasterData"}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductMasterDataResponse"}}}}},"4XX":{"description":"Failed"}}}},"/products":{"get":{"tags":["Products"],"summary":"Search for product","description":"","operationId":"searchProduct","parameters":[{"$ref":"#/components/parameters/cursor"},{"in":"query","name":"barcode","schema":{"type":"string"},"description":"Barcode. Matches exactly on the barcode (also with leading zeros/`¤` trimmed). If nothing is found, alternative barcodes are searched as well."},{"in":"query","name":"title","schema":{"type":"string"},"description":"Product title. Partial match."},{"in":"query","name":"brand","schema":{"type":"string"},"description":"Brand. Partial match."},{"in":"query","name":"color","schema":{"type":"string"},"description":"Color. Partial match."},{"in":"query","name":"size","schema":{"type":"string"},"description":"Size. Partial match."},{"in":"query","name":"customfield1","schema":{"type":"string"},"description":"Value of custom field 1. Partial match."},{"in":"query","name":"customfield2","schema":{"type":"string"},"description":"Value of custom field 2. Partial match."},{"in":"query","name":"customfield3","schema":{"type":"string"},"description":"Value of custom field 3. Partial match."},{"in":"query","name":"customfield4","schema":{"type":"string"},"description":"Value of custom field 4. Partial match."},{"in":"query","name":"freetext","schema":{"type":"string"},"description":"Freetext search used to find what humans expect. NB this can change over time, don't use this in your integration on this."},{"in":"query","name":"id","schema":{"type":"integer"},"description":"The ID of the product."},{"in":"query","name":"ids","schema":{"type":"array","items":{"type":"integer"}},"style":"form","explode":true,"description":"Only retrieve products with one of these IDs. Must be sent with bracket syntax, `ids[]=1&ids[]=2`; repeated `ids=` parameters are not supported."},{"in":"query","name":"count","schema":{"type":"boolean","default":false},"description":"If true, the total number of matching products (ignoring pagination) is returned in `count`."},{"in":"query","name":"allowDeleted","schema":{"type":"boolean","default":false},"description":"Include deleted products."},{"in":"query","name":"notInStock","schema":{"type":"boolean"},"description":"Only retrieve products that are not in stock (stock is zero or negative)."},{"in":"query","name":"available","schema":{"type":"boolean"},"description":"Only retrieve products with available stock (stock not reserved by sales orders or tickets)."},{"in":"query","name":"reserved","schema":{"type":"boolean"},"description":"Only retrieve products with stock reserved by sales orders or tickets (and with inventory tracking)."},{"in":"query","name":"notsold","schema":{"type":"boolean"},"description":"Exclude products that have been sold in POS and are no longer in stock."},{"in":"query","name":"excludeserialproducts","schema":{"type":"boolean"},"description":"Exclude products that have a serie-number."},{"in":"query","name":"hasPrice","schema":{"type":"boolean"},"description":"Only retrieve products with a price greater than zero."},{"in":"query","name":"hasBarcode","schema":{"type":"boolean"},"description":"Only retrieve products that have a barcode."},{"in":"query","name":"styleGroup","schema":{"type":"string"},"description":"Only retrieve products belonging to this style group."},{"in":"query","name":"inStock","schema":{"type":"boolean"},"description":"Only retrieve products that are currently in stock."},{"in":"query","name":"needsOrdering","schema":{"type":"boolean"},"description":"Only retrieve products that needs to be ordered because of low stock."},{"in":"query","name":"paginationStart","deprecated":true,"schema":{"type":"integer","default":0},"example":100,"description":"Deprecated, use `cursor` instead. Determine the offset (in number of products) to fetch. This is usually a multiple of the pageLength. For legacy support `pagination-start` is also accepted."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50,"maximum":250},"example":30,"description":"Determine the number of products to fetch in one page. Default is 50. For legacy support `pagination-pageLength` is also accepted (the backend is case-sensitive)."},{"in":"query","name":"productNo","style":"pipeDelimited","schema":{"type":"array","maximum":100,"items":{"type":"string"}},"description":"Pipe separated list of product numbers."},{"in":"query","name":"styleNo","style":"pipeDelimited","schema":{"type":"array","maximum":100,"items":{"type":"string"}},"description":"Pipe separated list of style numbers."},{"in":"query","name":"serieNo","schema":{"type":"string"},"description":"Serie-number"},{"in":"query","name":"hasSerieNo","schema":{"type":"boolean"},"description":"Return products that has a serie-number"},{"in":"query","name":"needsrrppriceupdate","schema":{"type":"boolean"},"description":"Return products that have a recommended retail price and the recommended retail price does not match the products price"},{"in":"query","name":"stocktransactionlistid","schema":{"type":"integer"},"description":"Search in stocktransactionlist, this will only search on products that are a part of a stocktransactionlist with this id"},{"in":"query","name":"sort-order","schema":{"type":"integer","enum":[-1,1],"default":1},"example":1,"description":"Sorting order. If 1, products are retrieved in ascending order, if -1, in descending order."},{"in":"query","name":"sort-field","schema":{"type":"string"},"example":"id","description":"Product column to sort by. Offset pagination has no guaranteed order unless `sort-field` or `sort-order` is given (`sort-field` then defaults to `id`). Special values `instock_title`, `stockno`, `bikedeskpossales` and `costprice` are also supported. Cursor pagination only supports `id`."},{"in":"query","name":"suppliername","deprecated":true,"schema":{"type":"string"},"description":"Name of the supplier. Has no effect."},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Only retrieve products with this tag ID. Takes precedence over `tags`."},{"in":"query","name":"tags","style":"pipeDelimited","description":"List of tag IDs to restrict the search to (any of them). Send as `tags[]=1&tags[]=2`.","schema":{"type":"array","maxItems":100,"items":{"type":"string"}}},{"in":"query","name":"supplierid","schema":{"type":"string"},"description":"Only retrieve products from the supplier with this ID."},{"in":"query","name":"partnerstoreid","schema":{"type":"string"},"description":"List products for a partner store that shares product data with the current store. Responds 401 if the store does not share product data."},{"in":"query","name":"vatmode","schema":{"type":"string","enum":["normal","second_hand"]},"description":"VAT mode"},{"in":"query","name":"updated_after","schema":{"type":"string"},"description":"Get all products updated at or after the given date (`Y-m-d H:i:s`).","example":"2020-01-01 00:00:00"},{"in":"query","name":"created_before","schema":{"type":"string"},"description":"Get all products created at or before the given date (`Y-m-d H:i:s`).","example":"2020-01-01 00:00:00"},{"in":"query","name":"updated_before","schema":{"type":"string"},"description":"Get all products updated at or before the given date (`Y-m-d H:i:s`).","example":"2020-01-01 00:00:00"},{"in":"query","name":"getDiscountPrice","schema":{"type":"boolean"},"description":"Whether to include discountprice for the products","example":true},{"in":"query","name":"hasSyncproductdatawebshop","schema":{"type":"boolean"},"description":"If given, only get products that has/has not syncproductdatawebshop set","example":true}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchProductResponse"}}}},"401":{"description":"The store specified by `partnerstoreid` does not share product data.","content":{"application/json":{"schema":{"type":"object"}}}},"422":{"description":"Cursor pagination was combined with a `sort-field` other than `id`.","content":{"application/json":{"schema":{"type":"object"}}}}}},"post":{"tags":["Products"],"summary":"Add a new product","description":"","operationId":"addProduct","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetProduct"},"examples":{"Wine":{"value":{"content":{"title":"Wine","productno":"zinfaldel_123","barcode":"79530347","stockno":12,"stockmin":6,"stockmax":26}}}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"405":{"description":"Invalid input"}}}},"/products/{productId}":{"get":{"summary":"Get a product","operationId":"getProduct","tags":["Products"],"parameters":[{"in":"path","name":"productId","schema":{"type":"integer"},"required":true,"description":"The product ID"},{"in":"query","name":"includeDiscountPrice","schema":{"type":"integer"},"required":false,"description":"Includes discountprice of a product. If set to 1, the discountprice is included, otherwise it is not included."}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"4XX":{"description":"Not found"}}},"patch":{"tags":["Products"],"summary":"Update selected fields for a product","description":"Updates only the fields given in `content`; fields that are omitted keep their current value. The product is merged with the given fields and then saved with the same validation as `PUT`, so the result must be a valid product (for example a unique `productno` and a non-empty `title`). `content.tags` and `content.suppliers`, when given, replace the existing lists. Changing `stockno` creates a stock transaction.","operationId":"patchProduct","parameters":[{"in":"path","name":"productId","schema":{"type":"integer"},"required":true,"description":"The product ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetProduct"},"examples":{"WineChangeTitle":{"description":"Change only the title of a product","value":{"content":{"title":"Wine"}}},"WineOverwriteStockNumber":{"description":"Overwrite the stock number of a product","value":{"content":{"stockno":18},"stocktransactionreason":"Stock count"}}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"400":{"description":"The resulting product is invalid, for example the product number or barcode is already in use, the title is empty or the cost price is negative. See `errorcode` in the body (for example `PRODUCT_PRODUCTNO_EXISTS`, `PRODUCT_BARCODE_EXISTS`, `PRODUCT_TITLE_INVALID`, `PRODUCT_TAG_NOT_FOUND`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The product does not exist or is not accessible to the store.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"A referenced supplier (`content.suppliers[].id`) or VAT type (`content.vat_type_id`) does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["Products"],"summary":"Replace a product","description":"","operationId":"replaceProduct","parameters":[{"in":"path","name":"productId","schema":{"type":"integer"},"required":true,"description":"The product ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetProduct"},"examples":{"WineAbsoluteOverwriteStockNumber":{"description":"Overwrite stock number of wine","value":{"content":{"title":"Wine","productno":"zinfaldel_123","barcode":"79530347","stockno":18,"stockmin":6,"stockmax":26}}}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"4XX":{"description":"Bad request"}}},"delete":{"summary":"Delete a product","operationId":"deleteProduct","tags":["Products"],"parameters":[{"in":"path","name":"productId","schema":{"type":"integer"},"required":true,"description":"The product ID"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"4XX":{"description":"Not found"}}}},"/producttags":{"get":{"tags":["ProductTags"],"summary":"Get list of product tags used by the store","operationId":"getProductTags","parameters":[{"in":"query","name":"handles","style":"pipeDelimited","schema":{"type":"array","maximum":100,"items":{"type":"string"}},"description":"Pipe separated list of tag handles."},{"in":"query","name":"ids","style":"pipeDelimited","schema":{"type":"array","maximum":100,"items":{"type":"string"}},"description":"Pipe separated list of ids handles."}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTagListResponse"}}}}}},"post":{"tags":["ProductTags"],"summary":"Create a new product tag","operationId":"createProductTag","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTag"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTagResponse"}}}}}}},"/producttags/{id}":{"get":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["ProductTags"],"summary":"Get a product tag used by the store","operationId":"getProductTag","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTagResponse"}}}}}},"delete":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["ProductTags"],"summary":"Delete a product tag","operationId":"deleteProductTag","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTagResponse"}}}}}},"put":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["ProductTags"],"summary":"Update a product tag","operationId":"updateProductTag","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTag"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTagResponse"}}}}}}},"/promotions":{"get":{"tags":["Promotions"],"summary":"List promotions for store.","parameters":[{"$ref":"#/components/parameters/cursor"},{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100,"description":"Determine the offset (in number of items) to fetch. This is usually a multiple of the pageLength."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50},"example":30,"description":"Determine the number of item to fetch in one page."},{"in":"query","name":"allowDeleted","required":false,"description":"Optional. If equal to `1`, deleted promotions will be included in the response.\n","schema":{"type":"integer","default":0}},{"in":"query","name":"freeText","required":false,"description":"Optional. Search for promotion name, product, brand, tag and customer group","schema":{"type":"string"}},{"in":"query","name":"actionType","description":"Optional. Search promotions by its action type","schema":{"type":"string","enum":["percentage","adjustPriceBy","percentageByCostprice","totalPriceUnit"]}},{"in":"query","name":"startDate","required":false,"description":"Optional. Search promotions by start date (format YYYY-MM-DD HH:MM:SS)","schema":{"type":"string"}},{"in":"query","name":"endDate","required":false,"description":"Optional. Search promotions by end date (format YYYY-MM-DD HH:MM:SS)","schema":{"type":"string"}},{"in":"query","name":"hideDiscountProductno","required":false,"schema":{"type":"boolean"},"description":"Optional. Filter out single product discounts"},{"in":"query","name":"hideChainPromotions","required":false,"schema":{"type":"boolean"},"description":"Optional. Filter out chain promotions"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPromotionResponse"}}}}}},"post":{"tags":["Promotions"],"summary":"Add new promotion","description":"**NB:** If you want to add discount price to a specific product use discountprice on [Product](https://api-docs.c1st.com/#tag/Products/operation/replaceProduct) instead.\n\nCreate a new promotion that results in an automatic discount when matching products are put in the POS cart.\n\nThe automatic assignment of discounts is based product filters (explained in more detail below).\nWhen these filters match, the promotion triggers an action resulting in some kind of discount presentend in the cart.\nCurrently, actions come in two flavors: *single product discounts* and *bundle discounts*.\nHow the promotion will trigger depends on this flavor.\n\nSingle product discounts (`percentage`, `adjustPriceBy`, `percentageByCostprice`, `totalPriceUnit`):\n  Here, a single product gets discount by some amount.\n  The filters can match against productnos, brands and tags.\n\nEach promotion has a required `name` which shown in the cart when the discount is given.\n`description` is optional and designed only for humans to read. It is only shown in the settings.\n`active` can be used to disable promotions until they are ready.\nPromotions will also only be considered active when today's date is inside the `startdate`-`enddate`-range.\nIf `enddate` is `null`, the promotion is considered to run forever.\n\nProduct filters are inclusive by nature. In the future, excluding filters will be added as well.\nFilters have an `attribute` and a `value`. The attribute can be various attributes of a product, like `tag` and `productno`.\nFor instance, to give a discount on all bikes with tag *Bike*, see the example below).\nThe `value` can be a list of values in which case, if either of the values match, the filter matches.\nAnd if either of the filters matches, the promotion will trigger (in case of single product discounts).\n\nThe filters for bundle discounts currently needs to be very specific:\nA single filter with `attribute` = productno and `value` = *list of productnos*.\n\nIn the future, it will be possible to filter based on customer attributes as well, such that specific customers can get certain discounts.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/Promotion"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":123,"description":"The id of the promotion."}},"additionalProperties":false}}}}}}},"/promotions/{id}":{"get":{"operationId":"retrieve","tags":["Promotions"],"summary":"Retrieve promotion","description":"Given a specific promotion id, fetch the entire promotion object.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Promotion"}}}},"4XX":{"description":"Ok"}}},"put":{"operationId":"update","tags":["Promotions"],"summary":"Update promotion","description":"Replace the promotion object of a specific promotion with another.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/Promotion"}},"additionalProperties":false}}}},"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"type":"integer","example":1,"description":"Whether or not the promotion was deleted. 0 for failure, 1 for success."}},"additionalProperties":false}}}}}},"delete":{"operationId":"delete","tags":["Promotions"],"summary":"Delete promotion.","description":"Delete a promotion based an id.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"integer","example":1,"description":"Whether or not the promotion was deleted. 0 for failure, 1 for success."}},"additionalProperties":false}}}}}}},"/promotions/lookup":{"post":{"tags":["Promotions"],"summary":"Get all relevant promotions for a set of products and a customer.","description":"Get all relevant promotions for a set of products and a customer.\nCurrently the customer is ignore and can be null.\nThis query can be seen as \"given a cart, what promotions will match?\"\n\nIf you have multiple of the same products in the query, they should be represented as a `CartArticle`,\ni.e. specified by a `productno` and `quantity` (see example). Otherwise, you can simply use productno strings.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionLookup"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionLookupResponse"}}}}}}},"/recurringpayment/{id}":{"get":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["RecurringPayment - Experimental"],"summary":"Get a recurring payment by id","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringPaymentResponse"}}}},"4XX":{"description":"Bad request"}}}},"/recurringpayment":{"get":{"tags":["RecurringPayment - Experimental"],"summary":"Get a list of recurring payments","parameters":[{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":20,"maximum":200},"example":20},{"in":"query","name":"exceededduedate","schema":{"type":"integer","description":"If exceededduedate is 1, it wil get all recurring payments, where the nextduedate is exceeded, and the customer still needs to pay."}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRecurringPaymentResponse"}}}},"4XX":{"description":"Bad request"}}},"post":{"tags":["RecurringPayment - Experimental"],"summary":"Creates a recurring payment","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringPaymentRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringPaymentResponse"}}}},"4XX":{"description":"Bad request"}}}},"/recurringpayment/{id}/term/invoice":{"post":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["RecurringPayment - Experimental"],"summary":"Creates a new term payment and issues an invoice to economic. It degrades costprice and subtracts from amountleft.","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/POSPaymentResponse"}}}},"4XX":{"description":"Bad request"}}}},"/recurringpayment/{id}/cancel":{"post":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["RecurringPayment - Experimental"],"summary":"Cancels given recurring payment and regulates stock for the product and costprice","responses":{"204":{"description":"Ok"},"4XX":{"description":"Bad request"}}}},"/pospayments/{paymentId}/recurringpayment":{"post":{"parameters":[{"$ref":"#/components/parameters/paymentId"}],"tags":["RecurringPayment - Experimental"],"summary":"Creates a recurring payment in draft mode and attaches an article to the given payment, which is -amountleft","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringPaymentRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringPaymentResponse"}}}},"4XX":{"description":"Bad request"}}}},"/recurringpayment/{id}/returnproduct":{"post":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["RecurringPayment - Experimental"],"summary":"Return products that are in the recurring payment, regulates stock for the product and costprice","responses":{"204":{"description":"Ok"},"4XX":{"description":"Bad request"}}}},"/sales-order-fulfillments/{salesOrderFulfillmentId}/sales-order-fulfillment-materials":{"get":{"tags":["SalesOrderFulfillmentMaterials"],"summary":"List salesorderfulfillment materials","parameters":[{"name":"salesOrderFulfillmentId","in":"path","description":"Sales order ID","required":true,"schema":{"type":"integer"}},{"name":"search","in":"query","description":"Search string","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number","required":false,"schema":{"type":"integer"}},{"name":"pageSize","in":"query","description":"Page size","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterialSearchResponse"}}}}}},"post":{"tags":["SalesOrderFulfillmentMaterials"],"summary":"Create salesorderfulfillment material","parameters":[{"name":"salesOrderFulfillmentId","in":"path","description":"Sales order ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterialCreateRequest"}}}},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterial"}}}}}}},"/sales-order-fulfillment-materials/{id}":{"get":{"tags":["SalesOrderFulfillmentMaterials"],"summary":"Get salesorderfulfillment material","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterialResponse"}}}}}},"put":{"tags":["SalesOrderFulfillmentMaterials"],"summary":"Update salesorderfulfillment material","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterial"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterialResponse"}}}}}}},"/sales-order-fulfillments":{"get":{"tags":["SalesOrderFullfillments"],"summary":"List salesorder fulfillments","parameters":[{"name":"freetext","in":"query","description":"Search string","required":false,"schema":{"type":"string"}},{"name":"storeid","in":"query","description":"Filter by the id of the fulfilling store","required":false,"schema":{"type":"integer"}},{"name":"salesOrderStoreid","in":"query","description":"Filter by the id of store that created the order","required":false,"schema":{"type":"integer"}},{"name":"salesOrderid","in":"query","description":"Filter by the id of the salesorder","required":false,"schema":{"type":"integer"}},{"name":"page","in":"query","description":"Page number","required":false,"schema":{"type":"integer"}},{"name":"pageSize","in":"query","description":"Page size","required":false,"schema":{"type":"integer"}},{"name":"includeDrafts","in":"query","description":"Include draft orders","required":false,"schema":{"type":"boolean"}},{"name":"open","in":"query","description":"Filter by open/closed status","required":false,"schema":{"type":"boolean"}},{"name":"status","in":"query","description":"Filter by status. Can be comma separated list of statuses","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentSearchResponse"}}}}}},"post":{"tags":["SalesOrderFullfillments"],"summary":"Create salesorder fulfillment","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentCreateRequest"}}}},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillment"}}}}}}},"/sales-order-fulfillments/{id}":{"get":{"tags":["SalesOrderFullfillments"],"summary":"Get salesorder fulfillment","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentResponse"}}}}}},"put":{"tags":["SalesOrderFullfillments"],"summary":"Update salesorder fulfillment","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentUpdateRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderFulfillmentResponse"}}}}}},"delete":{"tags":["SalesOrderFullfillments"],"summary":"Delete salesorder fulfillment","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"message":{"type":"string"}}}}}}}}},"/sales-orders/{salesOrderId}/sales-order-materials":{"get":{"tags":["SalesOrdersMaterials"],"summary":"List salesorder materials","parameters":[{"name":"salesOrderId","in":"path","description":"Sales order ID","required":true,"schema":{"type":"integer"}},{"name":"search","in":"query","description":"Search string","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number","required":false,"schema":{"type":"integer"}},{"name":"pageSize","in":"query","description":"Page size","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderMaterialSearchResponse"}}}}}},"post":{"tags":["SalesOrdersMaterials"],"summary":"Create salesorder material","parameters":[{"name":"salesOrderId","in":"path","description":"Sales order ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderMaterialCreateRequest"}}}},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderMaterial"}}}}}}},"/sales-order-materials/{id}":{"get":{"tags":["SalesOrdersMaterials"],"summary":"Get salesorder material","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderMaterialResponse"}}}}}},"put":{"tags":["SalesOrdersMaterials"],"summary":"Update salesorder material","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderMaterial"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderMaterialResponse"}}}}}},"delete":{"tags":["SalesOrdersMaterials"],"summary":"Delete salesorder material","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResponse"}}}}}}},"/sales-order-materials/{id}/fulfillments":{"post":{"tags":["SalesOrdersMaterials"],"summary":"Add fulfillment to existing salesorder material","parameters":[{"name":"id","in":"path","description":"Material ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderMaterialAddFulfillmentRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderMaterialResponse"}}}}}}},"/sales-orders":{"get":{"tags":["SalesOrders"],"summary":"List salesorders","parameters":[{"name":"search","in":"query","description":"Search string","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number","required":false,"schema":{"type":"integer"}},{"name":"pageSize","in":"query","description":"Page size","required":false,"schema":{"type":"integer"}},{"name":"includeDrafts","in":"query","description":"Include draft orders","required":false,"schema":{"type":"boolean"}},{"name":"open","in":"query","description":"Include draft orders","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderSearchResponse"}}}}}},"post":{"tags":["SalesOrders"],"summary":"Create salesorder","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderCreateRequest"}}}},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrder"}}}}}}},"/sales-orders/{id}":{"get":{"tags":["SalesOrders"],"summary":"Get salesorder","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderResponse"}}}}}},"put":{"tags":["SalesOrders"],"summary":"Update salesorder","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderUpdateRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOrderResponse"}}}}}},"delete":{"tags":["SalesOrders"],"summary":"Delete salesorder","parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResponse"}}}}}}},"/serviceplan":{"post":{"tags":["ServicePlan"],"operationId":"addServicePlan","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanResponse"}}}}}},"get":{"tags":["ServicePlan"],"operationId":"ServicePlan","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchServicePlanResponse"}}}}}},"parameters":[{"in":"query","name":"productid","schema":{"type":"integer"},"description":"If it is set, it will exclude all serviceplans that does not match with the producttagrestriction. If not set it will get all serviceplans."},{"in":"query","name":"withdeleted","schema":{"type":"boolean","default":false},"description":"Wheter or not to include soft deleted service plans"}]},"/serviceplan/{id}":{"put":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["ServicePlan"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicePlanResponse"}}}}}},"delete":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["ServicePlan"],"operationId":"deleteServicePlan","responses":{"204":{"description":"Ok"}}}},"/servicesubscription":{"post":{"tags":["ServiceSubscription"],"operationId":"addServiceSubscription","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceSubscriptionRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceSubscriptionResponse"}}}}}},"get":{"tags":["ServiceSubscription"],"operationId":"ServiceSubscription","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchServiceSubscriptionResponse"}}}}},"parameters":[{"in":"query","name":"customerarticleid","schema":{"type":"integer"},"description":"Sort by customerarticleid"},{"in":"query","name":"allowdeleted","schema":{"type":"integer"},"description":"Allow deleted subscription with search (1 for allow deleted, if it is set to 0 or not set at all, it will not include deleted subscriptions)"},{"in":"query","name":"serviceplanid","schema":{"type":"integer"},"description":"Sort by serviceplanid"},{"in":"query","name":"serieno","schema":{"type":"string"},"description":"Sort by serieno"}]}},"/servicesubscription/{id}":{"put":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["ServiceSubscription"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceSubscriptionRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceSubscriptionResponse"}}}}}},"delete":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["ServiceSubscription"],"operationId":"deleteServiceSubscription","responses":{"204":{"description":"Ok"}}}},"/servicesubscription/ticketmaterial/{materialid}":{"post":{"parameters":[{"in":"path","name":"materialid","required":true,"schema":{"type":"integer"}}],"tags":["ServiceSubscription"],"operationId":"addServiceSubscriptionToMaterial","description":"By posting a serviceplanid, the serviceplan for the customerarticle attached to the material will be updated with the given serviceplanid, and a new material will be added to the task: The price of the serviceplan with its title. When this material is paid, the subscription for the customerarticle will be activated","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceSubscriptionRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceSubscriptionResponse"}}}}}}},"/settings/configs":{"put":{"tags":["Settings"],"summary":"Update a list of configs","description":"","operationId":"updateConfigs","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetConfigs"}}}}}},"get":{"tags":["Settings"],"summary":"Get all configs","description":"","operationId":"configs","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetConfigs"}}}}}}},"/settings/configs/{configKey}":{"parameters":[{"in":"path","name":"configKey","required":true,"schema":{"type":"string"}}],"delete":{"tags":["Settings"],"summary":"Delete a config","description":"","operationId":"deleteConfig","responses":{"204":{"description":"Ok"},"4XX":{"description":"Bad request"}}}},"/settings":{"get":{"tags":["Settings"],"summary":"Get settings","description":"Returns the store info, store configs and other settings for the authenticated store.","operationId":"getSettings","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsAPI"}}}}}}},"/settings/store":{"put":{"tags":["Settings"],"summary":"Update store info","description":"","operationId":"updateStore","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Store"}}}}}},"get":{"tags":["Settings"],"summary":"Get store info","description":"","operationId":"getStore","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Store"}}}}}}},"/shoppinglist/addbybarcode":{"post":{"tags":["ShoppingLists"],"summary":"Add items by barcode","description":"","operationId":"addShoppingListItemByBarcode","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddShoppingListItemByBarcode"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddShoppingListItemByBarcodeResponse"}}}}}}},"/shoppinglist":{"post":{"tags":["ShoppingLists"],"summary":"Add item to the shopping list","description":"","operationId":"addShippingListItem","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetShoppingListItem"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetShoppingListItem"}}}}}},"get":{"tags":["ShoppingLists"],"summary":"List shopping list","description":"","operationId":"searchShoppingList","parameters":[{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100,"description":"Determine the offset (in number of items) to fetch. This is usually a multiple of the pageLength."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50},"example":30,"description":"Determine the number of items to fetch in one page."},{"in":"query","name":"orderid","schema":{"type":"integer"},"example":30},{"in":"query","name":"notordered","schema":{"type":"integer","default":0,"enum":[0,1]},"description":"filter ordered items"},{"in":"query","name":"supplierid","schema":{"type":"integer","nullable":true},"required":false}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchShoppingListResponse"}}}}}},"delete":{"tags":["ShoppingListOrders"],"summary":"Delete a shopping list order","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"deleted":{"type":"integer"}}}}}}}}},"/shoppinglist/totalcostprice":{"get":{"tags":["ShoppingLists"],"summary":"Get the total cost price of a shopping list","description":"","operationId":"getShoppingListTotalCostPrice","parameters":[{"in":"query","name":"orderid","schema":{"type":"integer"},"example":30},{"in":"query","name":"supplierid","schema":{"type":"integer","nullable":true},"required":false}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingListTotalCostPriceResponse"}}}}}}},"/shoppinglist/{id}":{"get":{"summary":"Get a shopping list item","operationId":"getShoppingListItem","tags":["ShoppingLists"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The shopping list ID"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingListItemResponse"}}}},"4XX":{"description":"Bad request"}}},"delete":{"summary":"Delete a item","operationId":"deleteShoppingListItem","tags":["ShoppingLists"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The shopping list ID"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingListItemResponse"}}}},"4XX":{"description":"Bad request"}}},"put":{"tags":["ShoppingLists"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The shopping list ID"}],"summary":"Replace item in shopping list","description":"","operationId":"replaceShoppingListItem","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetShoppingListItem"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetShoppingListItem"}}}}}}},"/shoppinglistorder":{"post":{"tags":["ShoppingListOrders"],"summary":"An order of shopping list items","description":"","operationId":"addShoppingListOrder","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetShoppingListOrder"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetShoppingListOrder"}}}}}},"get":{"tags":["ShoppingListOrders"],"summary":"List shopping list orders","description":"","operationId":"searchShoppingListOrders","parameters":[{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100,"description":"Determine the offset (in number of items) to fetch. This is usually a multiple of the pageLength."},{"in":"query","name":"freetext","schema":{"type":"string"},"example":"Bike","description":"Freetext search for note, orderlist number, product title etc."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50},"example":30,"description":"Determine the number of items to fetch in one page."},{"in":"query","name":"received","schema":{"type":"integer"},"example":1,"description":"If it is set to 1, it only retrieves orders with all items received"},{"in":"query","name":"notReceived","schema":{"type":"integer"},"example":1,"description":"If it is set to 1, it only retrieves orders where the items are not received"},{"in":"query","name":"brand","schema":{"type":"string"},"description":"Filter by product brand (exact match)"},{"in":"query","name":"partner_storeid","schema":{"type":"integer","nullable":true},"description":"Filter by the partner store that placed the order"},{"in":"query","name":"supplierid","schema":{"type":"integer","nullable":true},"description":"Filter by supplier"},{"in":"query","name":"partnerOrderStatus","schema":{"type":"string","nullable":true,"enum":["pending","handled"]},"description":"Filter by partner order status"},{"in":"query","name":"ingoing","schema":{"type":"boolean"},"description":"Filter to ingoing partner orders"},{"in":"query","name":"scopeSupplier","schema":{"type":"boolean"},"description":"Scope query to the stores this store supplies"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchShoppingListOrderResponse"}}}}}}},"/shoppinglistorder/{id}/note":{"parameters":[{"$ref":"#/components/parameters/id"}],"put":{"summary":"Update the shopping list order's note","tags":["ShoppingListOrders"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"object","additionalProperties":false,"description":"Content body for updating the note","properties":{"note":{"type":"string","description":"New note"}}}}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchShoppingListOrderResponse"}}}}}}},"/shoppinglistorder/{id}":{"delete":{"tags":["ShoppingListOrders"],"summary":"Delete a shopping list order","operationId":"deleteOrder","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"deleted":{"type":"integer"}}}}}}}},"patch":{"parameters":[{"$ref":"#/components/parameters/id"}],"summary":"Update the shopping list order","tags":["ShoppingListOrders"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingListOrderPatchRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchShoppingListOrderResponse"}}}}}}},"/shoppinglistorder/bulkupdate/{orderlistid}":{"put":{"tags":["ShoppingListOrders"],"summary":"Updates properties for all orders that has the given orderlistid.","parameters":[{"in":"path","required":true,"name":"orderlistid","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"expecteddelivery":{"nullable":true,"type":"string"}}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"updated":{"type":"integer"}}}}}},"4XX":{"description":"Not found"}}}},"/stocktransactions":{"get":{"tags":["StockTransactions"],"summary":"Search for stock transaction","description":"Represents changes to product stock and costprice","operationId":"getStockTransactions","parameters":[{"in":"query","name":"productid","description":"The ID of the product","schema":{"type":"integer"}},{"in":"query","name":"stocktransactionlistid","schema":{"type":"integer"},"description":"The ID of the stock transaction list"},{"$ref":"#/components/parameters/cursor"},{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0,"example":100},"description":"Deprecated, use `cursor` instead. Determine the offset (in number of items) to fetch. This is usually a multiple of the pageLength."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50},"example":50,"description":"Determine the number of items to fetch in one page."},{"in":"query","name":"orderlistid","schema":{"type":"integer"},"description":"Filter by the orderlistid"},{"in":"query","name":"sort","schema":{"type":"string","default":"id"}},{"in":"query","name":"sortOrder","schema":{"type":"integer","default":-1,"description":"-1 being descending and 1 being ascending."}},{"in":"query","name":"committed_after","schema":{"type":"string"},"description":"Get all stocktransactions committed after the given date","example":"2020-01-01 00:00:00"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchStockTransactionResponse"}}}}}},"post":{"tags":["StockTransactions"],"summary":"Change stock of a product relatively","description":"","operationId":"addStockTransaction","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetStockTransaction"},"examples":{"IncreaseStock":{"description":"Increase stock","value":{"content":{"addtostock":5,"productid":4,"reason":"Delivery of items"}}},"DereaseStock":{"description":"Decrease stock","value":{"content":{"addtostock":-2,"productid":4,"reason":"Webshop order"}}}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionResponse"}}}}}}},"/stocktransactions/{stocktransactionId}":{"get":{"summary":"Get a stock transaction","operationId":"getStockTransaction","tags":["StockTransactions"],"parameters":[{"in":"path","name":"stocktransactionId","schema":{"type":"integer"},"required":true,"description":"The product ID"},{"in":"query","name":"partnerstoreid","schema":{"type":"integer","default":0},"example":100}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionResponse"}}}}}},"put":{"tags":["StockTransactions"],"summary":"Replace a stock transaction","description":"Stock transactions can be changed if they are not committed","operationId":"replaceStockTransaction","parameters":[{"in":"path","name":"stocktransactionId","schema":{"type":"integer"},"required":true,"description":"The product ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetStockTransaction"},"examples":{"CommitStockTransaction":{"summary":"Commit a previous non-committed stock transaction","value":{"content":{"addtostock":5,"productid":4,"reason":"Delivery of items","commit":1}}}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionResponse"}}}}}},"delete":{"summary":"Delete a stock transaction","operationId":"deleteStockTransaction","tags":["StockTransactions"],"parameters":[{"in":"path","name":"stocktransactionId","schema":{"type":"integer"},"required":true,"description":"The product ID"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionResponse"}}}}}}},"/stocktransactionlist":{"get":{"tags":["StockTransactionLists"],"summary":"List stock transaction lists","description":"","operationId":"getStockTransactionLists","parameters":[{"in":"query","name":"freetext","schema":{"type":"string"}},{"in":"query","name":"partnerstoreid","schema":{"type":"integer","default":0},"example":100},{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"example":100,"description":"Determine the offset (in number of items) to fetch. This is usually a multiple of the pageLength."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":50},"example":30,"description":"Determine the number of items to fetch in one page."},{"in":"query","name":"includefromstore","schema":{"type":"integer","nullable":true},"required":false,"description":"1 to include the store that sent the stock transaction, if present. 0 will not include the sender store."},{"in":"query","name":"requested","schema":{"type":"boolean"},"example":true,"description":"Requested lists"},{"in":"query","name":"committed","schema":{"type":"integer"},"example":1,"description":"1 to list committed lists, 0 to list non-committed lists"},{"in":"query","description":"Query stock transaction lists committed after a given date.","name":"committedAfter","schema":{"type":"string"}},{"in":"query","name":"type","schema":{"$ref":"#/components/schemas/StockTransactionListType"},"example":"move"},{"in":"query","name":"supplierid","schema":{"type":"integer","nullable":true},"example":42,"description":"Query stock transaction lists containing at least one product supplied by this supplier."}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionListSearchResponse"}}}}}},"post":{"tags":["StockTransactionLists"],"summary":"Add stock transaction list","description":"","operationId":"addStockReception","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetStockTransactionList"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionListResponse"}}}}}}},"/stocktransactionlist/{stocktransactionlistId}":{"get":{"summary":"Get a stock transaction list","operationId":"getStockTransactionList","description":"A list of stock transactions. All stock transaction can commited ","tags":["StockTransactionLists"],"parameters":[{"in":"path","name":"stocktransactionlistId","schema":{"type":"integer"},"required":true,"description":"The ID"},{"in":"query","name":"calculations","schema":{"type":"boolean"},"required":false,"description":"Display `addToStockSum` and `totalCostprice` in response by setting this value"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionListResponse"}}}}}},"put":{"tags":["StockTransactionLists"],"summary":"Replace a stock transaction list","description":"","operationId":"replaceStockTransactionList","parameters":[{"in":"path","name":"stocktransactionlistId","schema":{"type":"integer"},"required":true,"description":"The ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetStockTransactionList"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionListResponse"}}}}}},"delete":{"summary":"Delete a Stock transaction list","operationId":"deleteStockTransactionList","tags":["StockTransactionLists"],"parameters":[{"in":"path","name":"stocktransactionlistId","schema":{"type":"integer"},"required":true,"description":"The  ID"}],"responses":{"2XX":{"description":"Ok"}}}},"/stocktransactionlist/{id}/commit":{"post":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The ID"}],"tags":["StockTransactionLists"],"summary":"Bulk commit entries in a stock transaction list","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionCommitRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionCommitResponse"}}}}}}},"/stocktransactionlistfromorderlistid/{orderlistid}":{"post":{"tags":["StockTransactionLists"],"summary":"Add stock transaction list from orderlistid","description":"","operationId":"addStockFromOrderlistid","parameters":[{"in":"path","name":"orderlistid","schema":{"type":"integer"},"required":true,"description":"The ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"note":{"type":"string","nullable":true,"description":"Note to the transactionlist"},"partnerstoreid":{"type":"integer","nullable":true,"description":"If specified, stock transaction request will be sent to partner store"}}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionListResponse"}}}}}}},"/stocktransactionlistfromorderlistid/{orderlistid}/invalid-products":{"get":{"tags":["StockTransactionLists"],"summary":"Get invalid products","description":"","operationId":"getInvalidProductsFromOrderlistid","parameters":[{"in":"path","name":"orderlistid","schema":{"type":"integer"},"required":true,"description":"The ID"},{"in":"query","name":"partnerstoreid","schema":{"type":"integer"},"required":true},{"in":"query","name":"selectedorders","schema":{"type":"array","items":{"type":"number"}}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidProductsInPartnerStore"}}}}}}},"/stocktransactiontags":{"post":{"tags":["StockTransactionTags"],"summary":"Add a transaction tag","description":"","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionTagRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionTagResponse"}}}},"4XX":{"description":"Bad request"}}},"get":{"tags":["StockTransactionTags"],"summary":"Get all transaction tags","description":"","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionTagsResponse"}}}},"4XX":{"description":"Bad request"}}}},"/stocktransactiontags/{id}":{"put":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["StockTransactionTags"],"summary":"Edit a transaction tag","description":"","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionTagRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockTransactionTagResponse"}}}},"4XX":{"description":"Bad request"}}},"delete":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["StockTransactionTags"],"summary":"Delete a transaction tag","description":"","responses":{"204":{"description":"Ok"},"4XX":{"description":"Bad request"}}}},"/suppliers":{"post":{"tags":["Suppliers"],"summary":"Adding a new supplier","requestBody":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierResponse"}}}}}},"get":{"tags":["Suppliers"],"summary":"Get a list of all the suppliers.","parameters":[{"in":"query","name":"hasOrders","schema":{"type":"integer","default":0},"description":"1 to include only suppliers that has orders"},{"in":"query","name":"filter","schema":{"type":"string","description":"Search string"}},{"in":"query","name":"paginationStart","schema":{"type":"number","default":0,"description":"Start of pagination"}},{"in":"query","name":"paginationPageLength","schema":{"type":"number","description":"Pagination page length","default":1000}},{"in":"query","name":"allowDeleted","schema":{"type":"boolean","default":false},"example":true,"description":"Include deleted suppliers in search"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListSupplierResponse"}}}}}}},"/suppliers/{id}":{"put":{"tags":["Suppliers"],"description":"","summary":"Edit an exisiting supplier","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierResponse"}}}},"4XX":{"description":"Not found"}}},"get":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["Suppliers"],"summary":"Get a supplier based on id","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierResponse"}}}},"4XX":{"description":"Not found"}}},"delete":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["Suppliers"],"summary":"Delete a supplier based on id","responses":{"204":{"description":"Ok"},"4XX":{"description":"Not found"}}}},"/tickets/comments":{"get":{"tags":["TicketComments"],"summary":"Get list of ticket comments","operationId":"listTicketComments","parameters":[{"in":"query","name":"taskid","schema":{"type":"integer"},"description":"Filter by task id"},{"in":"query","name":"excludeautocomment","style":"pipeDelimited","schema":{"type":"array","items":{"type":"string"}},"description":"Array of autocomment values to exclude"},{"in":"query","name":"includenullautocomments","schema":{"type":"boolean"},"description":"Whether or not to include comment if autocomment is null, task comments have a autocomment of null by default"},{"in":"query","name":"paginationStart","schema":{"type":"number","default":0,"description":"Start of pagination"}},{"in":"query","name":"paginationPageLength","schema":{"type":"number","description":"Pagination page length","default":250,"maximum":250}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCommentListResponse"}}}}}},"post":{"tags":["TicketComments"],"summary":"Create a ticket comment","operationId":"addTicketComment","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketComment"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCommentResponse"}}}}}}},"/tickets/comments/{id}":{"get":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["TicketComments"],"summary":"Get a ticket comment","operationId":"getTicketComment","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCommentResponse"}}}}}},"delete":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["TicketComments"],"summary":"Delete a ticket comment","operationId":"deleteTicketComment","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCommentResponse"}}}}}},"put":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["TicketComments"],"summary":"Update a ticket comment","operationId":"updateTicketComment","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketComment"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCommentResponse"}}}}}}},"/tickets/files":{"get":{"tags":["TicketFiles"],"summary":"Get a list of ticket files","operationId":"listTaskFiles","parameters":[{"in":"query","name":"taskid","schema":{"type":"integer"},"description":"Filter by task id"},{"in":"query","name":"id","schema":{"type":"integer"},"description":"Filter by id"},{"in":"query","name":"paginationStart","schema":{"type":"number","default":0,"description":"Start of pagination"}},{"in":"query","name":"paginationPageLength","description":"Pagination page length","schema":{"type":"number","default":250,"maximum":250}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketFileListResponse"}}}}}}},"/tickets/files/{id}":{"get":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["TicketFiles"],"summary":"Get a ticket file","operationId":"getTaskFile","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketFileResponse"}}}}}},"delete":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["TicketFiles"],"summary":"Delete a ticket file","operationId":"deleteTaskFile","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketFileResponse"}}}}}}},"/tickets/materials":{"get":{"tags":["TicketMaterials"],"summary":"Get list of ticket materials","description":"Lists ticket materials ordered by `position`, restricted to tickets the store may read (own and partner tickets). Prices may be hidden for materials on partner tickets.","parameters":[{"in":"query","name":"ticketid","schema":{"type":"integer"},"description":"Only return materials of this ticket."},{"in":"query","name":"paginationStart","schema":{"type":"integer","default":0},"description":"Offset (in number of materials) to fetch from."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":1000},"description":"Maximum number of materials to return in one page."}],"operationId":"listTicketMaterials","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketMaterialListResponse"}}}}}},"post":{"tags":["TicketMaterials"],"summary":"Create a new ticket material","operationId":"addTicketMaterial","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketMaterial"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketMaterialResponse"}}}}}}},"/tickets/materials/{id}":{"get":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["TicketMaterials"],"summary":"Get a ticket material","operationId":"getTicketMaterial","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketMaterialResponse"}}}}}},"delete":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["TicketMaterials"],"summary":"Delete a ticket material","operationId":"deleteTicketMaterial","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketMaterialResponse"}}}}}},"put":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["TicketMaterials"],"summary":"Update a ticket material","operationId":"updateTicketMaterial","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketMaterial"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketMaterialResponse"}}}}}}},"/tickets/materials/{id}/discount":{"post":{"parameters":[{"$ref":"#/components/parameters/id"}],"tags":["Cart"],"summary":"a new cart.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountArticleItem"}}}},"responses":{"204":{"description":"Ok"},"4XX":{"description":"Not found"}}}},"/tickettags":{"post":{"tags":["TicketTags"],"description":"","operationId":"addTicketTag","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketTag"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTagResponse"}}}}}},"get":{"tags":["TicketTags"],"summary":"Get all configs","operationId":"getTicketTags","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTicketTag"}}}}}}},"/tickettags/{id}":{"put":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketTag"}}}},"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTags"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTagResponse"}}}}}},"delete":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTags"],"summary":"Get all configs","operationId":"deleteTicketTag","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTagResponse"}}}}}}},"/tickets":{"get":{"tags":["Tickets"],"summary":"Get a list of tickets","description":"Returns tickets of the authenticated store, ordered by `sortField` and `sortOrder` and paginated with `paginationStart` and `paginationPageLength`. Drafts and deleted tickets are excluded unless requested.","parameters":[{"$ref":"#/components/parameters/cursor"},{"in":"query","deprecated":true,"name":"filter","schema":{"type":"string"},"description":"Filter expression. See https://restdocs.e-conomic.com/#filtering. `In` and `Not In` are **not** supported."},{"in":"query","name":"sortOrder","schema":{"type":"integer","enum":[-1,1],"default":1},"example":1,"description":"Sorting order. If 1, items are retrieved in ascending order, otherwise in descending order. Ties are broken by ticket id in the same direction."},{"in":"query","name":"type","schema":{"type":"string","enum":["repair","sale"]},"example":"repair","description":"Only return tickets of this type."},{"in":"query","name":"status","schema":{"type":"string"},"example":"new","description":"Only return tickets with this status. Supported values are `new`, `ready`, `done`, `awaiting` and `quote`."},{"in":"query","name":"excludedonetasks","schema":{"type":"boolean"},"description":"If `true`, tickets with status `done` are excluded."},{"in":"query","name":"isPaid","schema":{"type":"boolean"},"description":"Only return tickets that are paid (`true`) or not paid (`false`)."},{"in":"query","name":"assignee","schema":{"type":"integer"},"description":"Id of the employee assigned to the ticket."},{"in":"query","name":"id","schema":{"type":"integer"},"description":"Id of a single ticket to restrict the search to."},{"in":"query","name":"serieno","schema":{"type":"string"},"description":"Only return tickets with a customer article having this serial number."},{"in":"query","name":"customerarticleids","schema":{"type":"string"},"example":"1,2,3","description":"Comma separated ids of customer articles. Only applied when it contains at least two ids; use `customerarticleid` for one."},{"in":"query","name":"sortField","schema":{"type":"string"},"example":"id","description":"Field to sort by. Supported values are `id`, `cardno`, `status`, `payingcustomerid`, `type`, `description`, `created`, `startTime`, `updated_at`, `pickup`, `draft`, `assignee`, `customerid`, `createByUserId` and `customer_name`. Other values are ignored (sorted by id)."},{"in":"query","name":"paginationStart","deprecated":true,"schema":{"type":"integer","default":0},"example":100,"description":"Deprecated, use `cursor` instead. Determine the offset (in number of items) to fetch. This is usually a multiple of the pageLength."},{"in":"query","name":"paginationPageLength","schema":{"type":"integer","default":25},"example":25,"description":"Determine the number of items to fetch in one page. If 0, no items are returned."},{"in":"query","name":"withPartnerStores","schema":{"type":"boolean","default":false},"deprecated":true,"description":"Not used by the server."},{"in":"query","name":"tagids","style":"pipeDelimited","description":"List of tag ids to restrict the search to.","schema":{"type":"array","maxItems":100,"items":{"type":"string"}}},{"in":"query","name":"ids","style":"pipeDelimited","description":"List of ids to restrict the search to.","schema":{"type":"array","maxItems":100,"items":{"type":"string"}}},{"in":"query","name":"excludetagids","style":"pipeDelimited","description":"List of tag ids that should not be in the task.","schema":{"type":"array","maxItems":100,"items":{"type":"string"}}},{"in":"query","name":"updated_after","schema":{"type":"string"},"description":"Get all tasks updated after the given date","example":"2020-01-01 00:00:00"},{"in":"query","name":"startDate","schema":{"type":"string","nullable":true},"description":"Get tasks where pickup (and startTime if set) is after the given date","example":"2020-01-01 00:00:00"},{"in":"query","name":"endDate","schema":{"type":"string","nullable":true},"description":"Get tasks where pickup (and startTime if set) is before the given date","example":"2020-01-01 00:00:00"},{"in":"query","name":"created_after","schema":{"type":"string","nullable":true},"description":"Get tasks created on or after the given date","example":"2020-01-01 00:00:00"},{"in":"query","name":"created_before","schema":{"type":"string","nullable":true},"description":"Get tasks created on or before the given date","example":"2020-01-01 00:00:00"},{"in":"query","name":"customerid","schema":{"type":"integer","nullable":true},"description":"Id of customer assigned to the ticket"},{"in":"query","name":"customerarticleid","schema":{"type":"integer","nullable":true},"description":"Id of customer article assigned to the ticket"},{"in":"query","name":"cardno","schema":{"type":"string","nullable":true},"description":"Card number of the ticket"},{"in":"query","name":"allowDeleted","schema":{"type":"boolean"},"required":false,"description":"Allow deleted tickets in response"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketListResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object"}}}}}},"post":{"tags":["Tickets"],"summary":"Create a new ticket","description":"","operationId":"addTicket","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketResponse"}}}}}}},"/tickets/{id}":{"get":{"tags":["Tickets"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The ticket ID"},{"in":"query","name":"showDrafts","required":false,"schema":{"type":"string","default":"false"},"description":"Set to `true` or `1` to also return the ticket if it is a draft. Drafts are otherwise treated as not found."}],"summary":"Get a ticket","description":"Returns a single ticket, including its payments, tags, customers and customer articles. Draft tickets are only returned when `showDrafts` is set.","operationId":"getTicket","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketResponse"}}}},"404":{"description":"The ticket does not exist, is a draft (and `showDrafts` is not set), or is not accessible to the current store.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Item not found"}},"additionalProperties":false}}}}}},"put":{"tags":["Tickets"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The ticket ID"}],"summary":"Update a ticket","operationId":"updateTicket","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketResponse"}}}}}},"delete":{"tags":["Tickets"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true,"description":"The ticket ID"}],"summary":"Delete a ticket","operationId":"deleteTicket","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketResponse"}}}}}}},"/tickets/duplicate/{ticketId}":{"post":{"parameters":[{"$ref":"#/components/parameters/ticketId"}],"tags":["Tickets"],"summary":"Duplicate a ticket from a ticketid (sets it as draft mode)","operationId":"duplicateTicket","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketResponse"}}}}}}},"/tickets/{ticketId}/barcode":{"post":{"parameters":[{"$ref":"#/components/parameters/ticketId"}],"summary":"Add task materials to ticket from barcodes","tags":["Tickets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"barcodes":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Ticket material was successfully added to the ticket","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketMaterialListResponse"}}}},"4XX":{"description":"Not found"}}}},"/tickets/{ticketId}/paymentlink":{"parameters":[{"$ref":"#/components/parameters/ticketId"}],"post":{"tags":["Tickets","PaymentLink"],"summary":"Creates a link in which the customer can pay. If changes occur to the ticket, the link will update its products and prices as well on refresh. An integration to Adyen is required to use this endpoint.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"force":{"type":"boolean","description":"Creates the link even when the amount exceeds the store's payment link limit, which otherwise fails with PAYMENT_LINK_OVER_LIMIT."}}}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"string"}}}},"4XX":{"description":"Not found"}}}},"/servicenotification/autocreate":{"post":{"tags":["ServiceNotifications"],"summary":"Create servicenotices for specified customerarticles based on what would be selected by default when creating servicenotices via UI. Returns success status for each customerarticle","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoCreateServiceNotices"}}}},"responses":{"200":{"description":"Attempted to create servicenotices for the specified customerarticles. The result show the success status for each customerarticle","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoCreateServiceNoticesResponse"}}}},"404":{"description":"Not found"}}}},"/servicenotification/bulkdelete":{"post":{"tags":["ServiceNotifications"],"summary":"Delete servicenotices for specified customerarticles based on what would be selected by default when deleting servicenotices via UI. Returns success status for each customerarticle","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteServiceNotices"}}}},"responses":{"200":{"description":"Attempted to delete servicenotices for the specified customerarticles. The result show the success status for each customerarticle","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteServiceNoticesResponse"}}}},"404":{"description":"Not found"}}}},"/ticket-templates":{"post":{"tags":["TicketTemplate"],"description":"","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketTemplate"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateResponse"}}}}}},"get":{"tags":["TicketTemplate"],"summary":"Get all templates","operationId":"getTicketTemplates","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTicketTemplate"}}}}}}},"/ticket-templates/{id}":{"delete":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTemplate"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateResponse"}}}}}},"get":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTemplate"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateResponse"}}}}}},"put":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTemplate"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketTemplate"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateResponse"}}}}}}},"/ticket-templategroups":{"post":{"tags":["TicketTemplate"],"description":"","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketTemplateGroup"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateGroupResponse"}}}}}},"get":{"tags":["TicketTemplate"],"summary":"Get all configs","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTicketTemplateGroup"}}}}}}},"/ticket-templategroups/{id}":{"delete":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTemplate"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateGroupResponse"}}}}}},"get":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTemplate"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateGroupResponse"}}}}}},"put":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTemplate"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketTemplateGroup"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateGroupResponse"}}}}}}},"/ticket-templates/{ticketTemplateId}/materials":{"post":{"parameters":[{"$ref":"#/components/parameters/ticketTemplateId"}],"tags":["TicketTemplate"],"description":"","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketTemplateMaterial"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateMaterialResponse"}}}}}},"get":{"parameters":[{"$ref":"#/components/parameters/ticketTemplateId"}],"tags":["TicketTemplate"],"summary":"Get all configs","operationId":"tickettag","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTicketTemplateMaterial"}}}}}}},"/ticket-templates/{ticketTemplateId}/materials/{id}":{"delete":{"parameters":[{"$ref":"#/components/parameters/ticketTemplateId"},{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTemplate"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateMaterialResponse"}}}}}},"get":{"parameters":[{"$ref":"#/components/parameters/ticketTemplateId"},{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTemplate"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateMaterialResponse"}}}}}},"put":{"parameters":[{"$ref":"#/components/parameters/ticketTemplateId"},{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["TicketTemplate"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketTemplateMaterial"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateMaterialResponse"}}}}}}},"/ticket/{ticketId}/templates":{"parameters":[{"$ref":"#/components/parameters/ticketId"}],"post":{"tags":["TicketTemplateRelation"],"description":"","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketTemplateRelation"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTicketTemplateRelationResponse"}}}}}},"get":{"tags":["TicketTemplateRelation"],"summary":"Get all templates","operationId":"getTicketTemplateRelations","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTicketTemplateRelationResponse"}}}}}}},"/ticket/{ticketId}/templates/{ticketTemplateId}":{"parameters":[{"$ref":"#/components/parameters/ticketId"},{"$ref":"#/components/parameters/ticketTemplateId"}],"delete":{"tags":["TicketTemplateRelation"],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTicketTemplateRelationResponse"}}}}}},"put":{"tags":["TicketTemplateRelation"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTicketTemplateRelation"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTemplateRelationResponse"}}}}}}},"/users":{"post":{"tags":["Users"],"description":"","summary":"Add user","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetUser"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRespond"}}}}}},"get":{"tags":["Users"],"summary":"get all users","operationId":"getUsers","parameters":[{"in":"query","name":"withTrashed","schema":{"type":"boolean","default":true},"example":true,"description":"return soft deleted users"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchUsers"}}}}}}},"/users/{id}/passcode":{"parameters":[{"$ref":"#/components/parameters/id"}],"put":{"tags":["Users"],"summary":"Set user passcode","operationId":"setPasscode","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"passcode":{"type":"string","nullable":true}}}}}},"responses":{"2XX":{"description":"ok"}}}},"/users/{id}":{"parameters":[{"$ref":"#/components/parameters/id"}],"put":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["Users"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetUser"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRespond"}}}},"4XX":{"description":"Bad request"}}},"delete":{"parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["Users"],"responses":{"2XX":{"description":"OK"},"4XX":{"description":"Bad request"}}}},"/verified-suppliers/own":{"get":{"tags":["VerifiedSupplier - Experimental"],"summary":"List the active verified suppliers this store is registered as","description":"The verified suppliers owned by this store, i.e. the identities it receives ingoing orders as.","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnVerifiedSupplierListResponse"}}}},"4XX":{"description":"Unauthorized"}}}},"/verified-suppliers/connected-stores":{"get":{"tags":["VerifiedSupplier - Experimental"],"summary":"List the stores connected to this store's verified suppliers","description":"The stores this store supplies, i.e. the ones it receives ingoing orders from.","responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedStoreListResponse"}}}},"4XX":{"description":"Unauthorized"}}}},"/verified-suppliers/sales":{"get":{"tags":["VerifiedSupplier - Experimental"],"summary":"Sales of supplied products in connected stores since a point in time","description":"One row per product in the connected store, totalling everything sold since sold_after and before sold_before.","parameters":[{"$ref":"#/components/parameters/SupplierReportStore"},{"$ref":"#/components/parameters/SupplierSoldAfter"},{"$ref":"#/components/parameters/SupplierSoldBefore"},{"$ref":"#/components/parameters/SupplierReportCursor"},{"$ref":"#/components/parameters/SupplierReportPageLength"}],"responses":{"200":{"description":"Sales totals per product, in product order","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierSalesReportResponse"}}}},"4XX":{"description":"Bad request"}}}},"/verified-suppliers/inventory":{"get":{"tags":["VerifiedSupplier - Experimental"],"summary":"Stock for supplied products whose inventory changed since a point in time","description":"One row per inventory-tracked product whose stock level was touched after inventory_updated_after, reporting the stock as it stands now.","parameters":[{"$ref":"#/components/parameters/SupplierReportStore"},{"$ref":"#/components/parameters/SupplierInventoryUpdatedAfter"},{"$ref":"#/components/parameters/SupplierReportCursor"},{"$ref":"#/components/parameters/SupplierReportPageLength"}],"responses":{"200":{"description":"Current stock per product, in product order","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierInventoryReportResponse"}}}},"4XX":{"description":"Bad request"}}}},"/verified-suppliers/products":{"post":{"tags":["VerifiedSupplier - Experimental"],"summary":"Add or update a single product for a supplier the store is a verified supplier for","description":"Authorized on the suppliername, industry and country of the product. Answers 403 with a failed report when the store is not a verified supplier for that key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifiedSupplierProductRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMasterDataResponse"}}}},"403":{"description":"The store is not a verified supplier for any of the keys in the upload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifiedSupplierProductFailedResponse"}}}},"4XX":{"description":"Bad request"}}}},"/verified-suppliers/products/bulk":{"post":{"tags":["VerifiedSupplier - Experimental"],"summary":"Add or update products in bulk for the suppliers the store is a verified supplier for","description":"Products are grouped by their suppliername, industry and country, and each group is authorized on its own. Groups the store is not a verified supplier for are skipped and reported in failed.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifiedSupplierProductBulkRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifiedSupplierProductBulkResponse"}}}},"403":{"description":"The store is not a verified supplier for any of the keys in the upload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifiedSupplierProductFailedResponse"}}}},"4XX":{"description":"Bad request"}}}},"/verified-suppliers/{id}/products":{"parameters":[{"$ref":"#/components/parameters/id"}],"delete":{"tags":["VerifiedSupplier - Experimental"],"summary":"Delete the products of a verified supplier that have not been updated since the given time","parameters":[{"in":"query","name":"updated_before","required":true,"schema":{"type":"string"},"example":"2026-08-01 00:00:00","description":"Deletes the products last updated before this point in time"},{"in":"query","name":"brand","schema":{"type":"string"},"description":"Limit the deletion to a single brand"}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifiedSupplierProductDeleteResponse"}}}},"4XX":{"description":"Bad request"}}}},"/verified-suppliers/{id}/products/older-than/count":{"parameters":[{"$ref":"#/components/parameters/id"}],"get":{"tags":["VerifiedSupplier - Experimental"],"summary":"Count the products the delete endpoint will delete with the same query","parameters":[{"in":"query","name":"updated_before","required":true,"schema":{"type":"string"},"example":"2026-08-01 00:00:00"},{"in":"query","name":"brand","schema":{"type":"string"}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifiedSupplierProductCountResponse"}}}},"4XX":{"description":"Bad request"}}}},"/verified-suppliers/stocktransactionlists":{"post":{"tags":["VerifiedSupplier - Experimental"],"summary":"Add a new stocktransactionlist for a supplied store","description":"Creates an uncommitted stocktransactionlist in a store that registered the authenticated store as verified supplier. Stocktransactions are matched by barcode; an unknown or ambiguous barcode is left blank for the store to map.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierStockReceptionCreateRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierStockReceptionResponse"}}}},"4XX":{"description":"Not a verified supplier of the store, or invalid request"}}}},"/verified-suppliers/stocktransactionlists/{stocktransactionlistid}/stocktransactions":{"parameters":[{"in":"path","name":"stocktransactionlistid","schema":{"type":"integer"},"required":true,"description":"The stocktransactionlist to add the stocktransaction to"}],"post":{"tags":["VerifiedSupplier - Experimental"],"summary":"Add a stocktransaction to a stocktransactionlist","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierStockTransactionCreateRequest"}}}},"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierStockTransactionResponse"}}}},"4XX":{"description":"Not a verified supplier of the store, or invalid request"}}}},"/verified-suppliers":{"get":{"tags":["VerifiedSupplier"],"summary":"List active verified suppliers matching the store's industry","parameters":[{"in":"query","name":"name","description":"Only return the supplier whose name matches this exactly.","schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreVerifiedSupplierListResponse"}}}},"4XX":{"description":"Unauthorized"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"AdyenConfigUpdate":{"type":"object","additionalProperties":false,"required":["termsUrl","paymentLinkAllowedMethods","paymentLinkTransactionLimit"],"properties":{"termsUrl":{"type":"string","nullable":true,"description":"Terms & conditions URL shown on the payment link checkout. When set, the customer must accept before paying."},"paymentLinkAllowedMethods":{"type":"array","nullable":true,"description":"Limits payment links sent from tickets to these payment methods.","items":{"type":"string"}},"paymentLinkTransactionLimit":{"type":"number","nullable":true,"description":"Amount above which sending a payment link from a ticket warns the user before the link is created. Null means no limit."}}},"AdyenConfig":{"type":"object","additionalProperties":false,"required":["ecommerceEnabled","paymentMethods","termsUrl","paymentLinkAllowedMethods","paymentLinkTransactionLimit"],"properties":{"ecommerceEnabled":{"type":"boolean","readOnly":true},"paymentMethods":{"type":"array","readOnly":true,"items":{"type":"string"}},"termsUrl":{"type":"string","nullable":true,"description":"Terms & conditions URL shown on the payment link checkout. When set, the customer must accept before paying."},"paymentLinkAllowedMethods":{"type":"array","nullable":true,"description":"Limits payment links sent from tickets to these payment methods.","items":{"type":"string"}},"paymentLinkTransactionLimit":{"type":"number","nullable":true,"description":"Amount above which sending a payment link from a ticket warns the user before the link is created. Null means no limit."}}},"AdyenSession":{"type":"object","additionalProperties":false,"properties":{"amount":{"type":"object","properties":{"currency":{"type":"string"},"value":{"type":"integer"}},"required":["currency","value"],"additionalProperties":false},"countryCode":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"id":{"type":"string"},"sessionData":{"type":"string"},"shopperLocale":{"type":"string"}},"required":["amount","id"]},"AdyenSessionResponse":{"type":"object","additionalProperties":false,"properties":{"session":{"$ref":"#/components/schemas/AdyenSession"},"storeInfo":{"$ref":"#/components/schemas/AssistedCheckoutStore"},"payment":{"$ref":"#/components/schemas/CheckoutPOSPayment"},"status":{"$ref":"#/components/schemas/PaymentStatus"},"receiptTemplate":{"type":"string"},"termsUrl":{"type":"string","nullable":true,"description":"Terms and conditions URL from the Adyen integration config. When set, the checkout requires the shopper to accept before paying."}}},"AdyenRedirectResultResponse":{"type":"object","additionalProperties":false,"required":["resultCode"],"properties":{"resultCode":{"type":"string"}}},"CheckoutConfiguration":{"type":"object","additionalProperties":false,"properties":{"pos_barcode_button_enabled":{"type":"boolean","description":"Whether or not to show the POS barcode button"},"pay_by_link_enabled":{"type":"boolean","description":"Whether or not to show the pay by link button"},"search_enabled":{"type":"boolean","description":"Whether or not to allow manual product search"}}},"AssistedCheckoutStore":{"type":"object","additionalProperties":false,"properties":{"countrycode":{"type":"string","readOnly":true},"currency":{"type":"string","readOnly":true},"title":{"type":"string","readOnly":true},"cityname":{"type":"string","nullable":true},"zipcode":{"type":"string","nullable":true},"streetname":{"type":"string","nullable":true},"streetno":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"email":{"type":"string","nullable":true},"settings":{"nullable":true,"$ref":"#/components/schemas/CheckoutConfiguration"},"base64logo":{"type":"string","readOnly":true,"nullable":true},"industry":{"type":"string","readOnly":true,"nullable":true}}},"VATMode":{"type":"string","description":"< `normal` vat calculation is based on `price` `second_hand` vat calulation is based on `price - costprice`","enum":["normal","second_hand"]},"ProductImage":{"type":"object","additionalProperties":false,"description":"A Product's image","properties":{"blurhash":{"type":"string","nullable":true,"readOnly":true},"preview_url":{"type":"string","nullable":false,"readOnly":true},"full_url":{"type":"string","nullable":false,"readOnly":true}}},"CheckoutPaymentArticle":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","description":"A unique ID generated automatically","readOnly":true},"title":{"type":"string","description":"The title of the article sold"},"price":{"type":"number","format":"double","example":100,"description":"Price of the article. By default price includes VAT but can be changed in the store config \"prices_include_vat\"."},"quantity":{"type":"number","description":"Number of articles sold."},"vat":{"type":"number","format":"double","example":25,"maximum":100,"minimum":0,"description":"VAT percentage."},"vatmode":{"$ref":"#/components/schemas/VATMode"},"paymentid":{"type":"integer"},"barcode":{"type":"string","readOnly":true,"nullable":true},"type":{"type":"string","nullable":true,"description":"Can either be \"recurringpaymentterm\", \"newservicesubscription\" or \"newrecurringpayment\""},"date":{"type":"string","readOnly":true,"default":"The date of when the material is added"},"total_vat":{"type":"number","format":"double","example":20,"nullable":true,"readOnly":true,"description":"Total vat amount"},"total_ex_vat":{"type":"number","format":"double","example":80,"nullable":true,"readOnly":true,"description":"Total price excluding VAT"},"discount_ppm_id":{"type":"integer","readOnly":true,"nullable":true},"total_incl_vat":{"type":"number","format":"double","example":100,"nullable":true,"readOnly":true,"description":"Total price including VAT"},"image":{"$ref":"#/components/schemas/ProductImage","nullable":true,"readOnly":true}}},"PaymentStatus":{"type":"string","enum":["initialized","parked","in_progress","completed","cancelled"]},"CheckoutPOSPayment":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true,"description":"A global unique payment id"},"date":{"readOnly":true,"maxLength":255,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"The date of the payment"},"sum":{"type":"number","format":"double","readOnly":true,"example":1,"description":"The sum of the payment materials"},"remainingamount":{"type":"number","format":"double","readOnly":true,"example":1,"description":"The sum of the payment materials"},"customerpayment":{"type":"integer","readOnly":true,"description":"1 if payment is a customer payment"},"customerpaymentsum":{"type":"number","nullable":true,"readOnly":true,"description":"The sum to pay when the payment is a customer payment"},"paymenttypes":{"type":"array","items":{"type":"object","properties":{"amount":{"type":"number"},"title":{"type":"string"},"currency":{"type":"string","nullable":true},"exchangerate":{"type":"number","nullable":true}},"additionalProperties":false}},"articles":{"type":"array","description":"The list of payment articles. Those are the products sold with the payment. When you POST a payment this will be the list of articles sold Note: When get GET payments we only provide this if you add query parameter ?extra=1\n","items":{"$ref":"#/components/schemas/CheckoutPaymentArticle"}},"status":{"$ref":"#/components/schemas/PaymentStatus"},"signature":{"nullable":true,"type":"string"},"discountsum":{"type":"number","nullable":true,"format":"double","readOnly":true,"description":"the sum of all discounts in the purchase"}}},"AdyenDevice":{"type":"object","additionalProperties":false,"required":["title","poiid"],"properties":{"id":{"type":"string","nullable":false,"readOnly":true},"storeid":{"type":"number","nullable":false,"readOnly":true},"title":{"type":"string","nullable":false},"poiid":{"type":"string","nullable":false}}},"AdyenDeviceImageType":{"type":"string","enum":["default","no_customer","not_loyalty","loyalty"]},"CheckoutProductSearchResult":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string"},"barcode":{"type":"string"},"price":{"type":"number","format":"double","description":"Price including VAT"},"image":{"$ref":"#/components/schemas/ProductImage","nullable":true}}},"CheckoutPOSPaymentResponse":{"type":"object","additionalProperties":false,"description":"The representation of a pos payment search.","properties":{"content":{"$ref":"#/components/schemas/CheckoutPOSPayment"}}},"BamdeskDevice":{"additionalProperties":false,"type":"object","properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique BamdeskDevice id"},"title":{"type":"string","example":"Payment terminal","description":"The name of the BamdeskDevice"},"state":{"type":"string","example":"CONNECTED","nullable":true,"description":"The connection state of the BamdeskDevice."},"derivedstate":{"type":"string","readOnly":true,"example":"CONNECTED","nullable":true,"description":"The derived connection state of the BamdeskDevice.","enum":["CONNECTED","AUTO_DISCOVERY","BAMDESK_NOT_RUNNING"]},"lastactivity":{"type":"string","example":"2020-01-30 10:00:00","nullable":true,"description":"The timestamp of the time the device was last used"},"printdeskid":{"type":"string","nullable":true,"description":"no idea"},"ip":{"type":"string","nullable":true,"example":"192.168.1.120","description":"The IP of the BamdeskDevice"},"secretkey":{"type":"string","nullable":true}}},"BillingAccount":{"type":"object","description":"Billing data for the store","additionalProperties":false,"properties":{"warning":{"$ref":"#/components/schemas/BillingWarning"},"active":{"type":"boolean","description":"true if account is active"},"invoiceDueDate":{"type":"string","nullable":true,"description":"Date for when a dunning must be paid"},"trialEnds":{"type":"string","nullable":true,"description":"Date for when trial ends"},"activeModules":{"$ref":"#/components/schemas/BillingModules"},"limits":{"$ref":"#/components/schemas/BillingLimits"},"subscription":{"type":"object","description":"Data of the current signup subscription if. Null if not signed up","nullable":true,"additionalProperties":false,"properties":{"active":{"type":"boolean","description":"True if the subscription is active"},"startDate":{"type":"string","description":"The date for when the subscription started or is expected to start"},"plan":{"type":"string","enum":["empty","starter","scaler","professional"],"description":"Plan the subscription is signed up to"}}},"test_account":{"type":"boolean"}}},"BillingLimit":{"type":"object","additionalProperties":false,"properties":{"max":{"type":"number"},"current":{"type":"number"},"showwarning":{"type":"boolean"}}},"BillingLimits":{"type":"object","additionalProperties":false,"properties":{"monthlytasks":{"$ref":"#/components/schemas/BillingLimit"},"maxusers":{"$ref":"#/components/schemas/BillingLimit"},"cashregisters":{"$ref":"#/components/schemas/BillingLimit"},"loyaltymembers":{"$ref":"#/components/schemas/BillingLimit"},"products":{"$ref":"#/components/schemas/BillingLimit"}}},"BillingModules":{"type":"object","description":"for each module, true if the module is active and subscription is active","additionalProperties":true,"properties":{"statistics":{"type":"boolean"},"pos":{"type":"boolean"},"products":{"type":"boolean"},"masterdata":{"type":"boolean"},"economic":{"type":"boolean"},"dinero":{"type":"boolean"},"woocommerce":{"type":"boolean"},"shopify":{"type":"boolean"},"smartweb":{"type":"boolean"},"mobilepay":{"type":"boolean"},"servicewidget":{"type":"boolean"},"inventorycount":{"type":"boolean"},"tickets":{"type":"boolean"},"loyalty":{"type":"boolean"},"shopping":{"type":"boolean"},"partner_sharing":{"type":"boolean"},"rackbeat":{"type":"boolean"},"recurring_payments":{"type":"boolean"},"serviceplans":{"type":"boolean"},"custompaymenttypes":{"type":"boolean"},"omnichannel":{"type":"boolean"},"unimicro":{"type":"boolean"},"fortnox":{"type":"boolean"},"tripletex":{"type":"boolean"},"booking":{"type":"boolean"},"poweroffice":{"type":"boolean"},"xero":{"type":"boolean"},"klaviyo":{"type":"boolean"}}},"BillingWarning":{"type":"string","nullable":true,"enum":["TrialEnded","Inactive","InTrial","Invoice","MissingCard","OutOfTasks","LoyaltyMembers","IntegrationWarning",null]},"BundleResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Bundle"}}},"BundleRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Bundle"}}},"Bundle":{"type":"object","additionalProperties":false,"properties":{"id":{"nullable":true,"type":"integer","readOnly":true,"example":1,"description":"A unique bundle id"},"title":{"type":"string","description":"title for bundle"},"price_type":{"type":"string","enum":["fixed","cheapest-free"],"description":"Type of pricing for the bundle"},"amount":{"type":"number","description":"The cost of the bundle"},"startdate":{"type":"string","nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Start date of when the bundle is valid"},"enddate":{"type":"string","nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"End date of the bundle"},"filters":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/BundleFilter"}},"updated_at":{"type":"string","nullable":true,"format":"date-time","readOnly":true,"description":"When the bundle was last updated"},"created_at":{"type":"string","nullable":true,"format":"date-time","readOnly":true,"description":"When the bundle was created"}},"required":["title","amount"]},"SearchBundleResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Bundle"}},"count":{"type":"number","deprecated":true,"description":"amount of bundles"},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"VerifiedSupplierSummary":{"type":"object","additionalProperties":false,"required":["id","name","email","image_url"],"properties":{"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string"},"image_url":{"type":"string","nullable":true}}},"Supplier":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","nullable":true,"readOnly":true,"example":1,"description":"A unique id for a supplier"},"name":{"type":"string","example":"Johnson","description":"The name of a supplier"},"email":{"type":"string","nullable":true,"example":"johnson@doe.com","description":"The mail of a supplier"},"customerno":{"type":"string","nullable":true,"example":2413,"description":"Customer number for the supplier"},"address":{"type":"string","nullable":true,"example":"A place","description":"Address of the supplier"},"city":{"type":"string","nullable":true,"example":"London","description":"Which city the supplier is from"},"zipcode":{"type":"string","nullable":true,"example":2412,"description":"Zipcode of the supplier"},"note":{"type":"string","nullable":true,"example":"Sells bike parts"},"handle":{"type":"string","nullable":true,"description":"Slug for the supplier based on the name"},"accountnumber":{"type":"number","nullable":true,"description":"Accountnumber for the supplier, used to cross reference this supplier to a supplier in e-conomic"},"auto_create_orderlist":{"type":"boolean","nullable":true,"description":"If true, an orderlist will be created automatically for this supplier"},"auto_create_orderlist_frequency":{"type":"string","enum":["daily","weekly","monthly","yearly",null],"nullable":true,"description":"The frequency of the orderlist creation"},"auto_create_orderlist_day_of_week":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"The day of the week the orderlist should be created"},"auto_create_orderlist_months":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"The months the orderlist should be created"},"auto_create_orderlist_day_of_month":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"The day of the month the orderlist should be created"},"auto_create_orderlist_minimum_costprice":{"type":"number","nullable":true,"description":"The minimum costprice required to trigger the automatic creation of the order list"},"external_supplier":{"type":"string","nullable":true,"description":"The external supplier used for integrations, if given (e.g. \"ponbike\", etc)"},"external_supplier_active":{"type":"boolean","nullable":true,"readOnly":true,"description":"Whether the external supplier integration (e.g. \"ponbike\"/Gazelle) is currently authorized and active. Null when the supplier has no external_supplier."},"partner_store_id":{"type":"integer","nullable":true,"deprecated":true,"description":"OBSOLETE - The store id from the available partner store"},"verified_supplier_id":{"type":"integer","nullable":true,"description":"Id of the verified supplier this supplier is linked to"},"verified_supplier":{"$ref":"#/components/schemas/VerifiedSupplierSummary","nullable":true,"description":"The linked verified supplier. Only included when listing suppliers."}}},"VatType":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string"},"rate":{"type":"number"},"revenue_account_no":{"type":"string","nullable":true,"description":"Revenue account number for the revenue incl amount"},"is_ticket_override":{"type":"boolean","default":false,"description":"When true, this VAT type can be used to seed override VAT on new repair tickets."},"vat_account_no":{"type":"string","nullable":true,"description":"VAT account number for the revenue vat part"}}},"PromotionTagFilter":{"type":"object","nullable":true,"additionalProperties":false,"properties":{"amount":{"type":"integer","nullable":true,"description":"minimum amount of products in order to apply promotion"},"date":{"type":"object","nullable":true,"additionalProperties":false,"description":"date of when the promotion should be applied","properties":{"start":{"nullable":true,"type":"string"},"end":{"nullable":true,"type":"string"}}}}},"ProductTag":{"type":"object","additionalProperties":false,"description":"A product tag","properties":{"title":{"type":"string","description":"The title of the tag"},"id":{"type":"integer","nullable":true,"description":"The ID of the tag"},"accountno":{"type":"integer","nullable":true,"description":"The accountno used for book keeping"},"promotionfilter":{"$ref":"#/components/schemas/PromotionTagFilter"},"handle":{"type":"string","nullable":true,"description":"Unique handle for the produttag. Will be set automatically if not set. The handle is write once, and can not be changed after the tag is created."},"position":{"type":"number","nullable":true,"example":23.04,"description":"Number used to determine order of product tags."},"positionafterid":{"type":"number","nullable":true,"description":"If this is set, the position of this product tag will be between positionafterid and the tag below if it exists."},"positionbeforeid":{"type":"number","nullable":true,"description":"If this is set, the position of this product tag will be between positionbeforeid and the tag above if it exists."}}},"Product":{"type":"object","additionalProperties":false,"description":"The representation of a product.","properties":{"id":{"type":"integer","readOnly":true,"nullable":true,"description":"A unique product ID"},"title":{"type":"string","example":"Scott Scale 960","maxLength":255,"description":"Product name"},"productno":{"maxLength":255,"type":"string","description":"The product no. This must be unique. If serieno is set we allow multiple products to have the same product no. For new products this value must be at most 25 chars"},"barcode":{"nullable":true,"maxLength":255,"description":"A unique barcode","type":"string"},"alternativebarcode":{"type":"string","maxLength":255,"nullable":true,"description":"This will be used when searching for a barcode, if it could not find the product, it will search for alternative barcodes for the product. You can include multiple barcodes by separating it with spaces. It will not be used in print, for example price label/sign, instead \"barcode\" is used."},"serieno":{"nullable":true,"maxLength":255,"type":"string"},"price":{"type":"number","nullable":true,"format":"double","example":100,"description":"Price of the product. By default price includes VAT but can be changed in the store config \"prices_include_vat\"."},"pricewithoutvat":{"type":"number","format":"double","example":80,"nullable":true,"readOnly":true,"description":"Consistently give the calculcated price without VAT. Regardless of the value of store config \"prices_include_vat\""},"costprice":{"type":"number","nullable":true,"format":"double","minimum":0,"example":8.65,"description":"Cost price of the product excl. VAT"},"recommendedretailprice":{"type":"number","nullable":true,"format":"double","example":99.95,"description":"Recommended retail price of the product"},"stockno":{"nullable":true,"type":"integer","description":"Number of items in stock. Set to null to disable stock keeping. Change this value if you want to overwrite the stock number. This will trigger a stock transaction rest hook If you want update stock number relative, add a stock transaction and use addtostock."},"previousstockno":{"readOnly":true,"type":"integer","deprecated":true,"description":"Deprecated. Use stock transactions. Previous stockno value. Only set in RestHook events; in product.updated if stockno has changed; and always in product.created with a value of 0","nullable":true},"stocknochangetype":{"readOnly":true,"type":"string","enum":["absolute","relative"],"nullable":true,"deprecated":true,"description":"Deprecated. Use stock transactions. Type of stockno change. Only set in RestHook events; in product.updated if stockno has changed; and always in product.created with a value of 'absolute'. When relative it indicates adding or removing (e.g. selling) items from inventory. When absolute it indicates taking inventory, e.g. setting an initial value or correcting an errornous value. See also stocknochangeisrelative in SetProduct."},"stockmin":{"default":null,"type":"integer","nullable":true,"description":"The minimum number of items that must be in stock before the product is in the state of needs ordering"},"stockmax":{"nullable":true,"default":null,"type":"integer","description":"Used to suggest the number of items to be ordered when the product is added to the ordering list."},"suppliername":{"nullable":true,"readOnly":true,"maxLength":255,"type":"string","deprecated":true,"description":"This field is obsolete and therefore can't add a supplier using this field. If you want to add a supplier use the \"suppliers\" field instead"},"suppliers":{"nullable":true,"type":"array","description":"List of suppliers attached to the product. If you leave supplier id empty, any suppliername that does not exits will be created.","items":{"$ref":"#/components/schemas/Supplier"}},"color":{"nullable":true,"maxLength":255,"type":"string"},"styleno":{"nullable":true,"maxLength":255,"type":"string"},"size":{"nullable":true,"maxLength":255,"type":"string"},"brand":{"nullable":true,"maxLength":255,"type":"string"},"vat":{"nullable":true,"type":"number","format":"double","minimum":0,"maximum":100,"description":"DEPRECATED FOR WRITE. Create `VatType` with the desired rate and assign the `vat_type_id` instead. The VAT of the product in percent. Should in most cases be NULL. NULL will default the VAT value to the one specified in store config (25 % for DK customers). When `vat_type_id` is set, this field reflects the rate of the assigned VAT type."},"vat_type_id":{"nullable":true,"type":"integer","description":"The id of the assigned VAT type. When set, the product uses the rate of the referenced VAT type."},"vat_type":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/VatType"},"lastordered":{"readOnly":true,"nullable":true,"maxLength":255,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"The date for when the product was last ordered. Can only be set while create a shoppinglistorder"},"tags":{"type":"array","default":[],"nullable":true,"items":{"$ref":"#/components/schemas/ProductTag"},"description":"List of product tags.  Hint, if you leave tag id empty, any tag that does not exist will be created."},"customfield1":{"type":"string","maxLength":255,"nullable":true,"description":"Field for custom product data"},"customfield2":{"type":"string","maxLength":255,"nullable":true},"customfield3":{"type":"string","maxLength":255,"nullable":true},"customfield4":{"type":"string","maxLength":255,"nullable":true},"created":{"readOnly":true,"type":"string","nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}"},"reservedstock":{"readOnly":true,"nullable":true,"type":"integer","description":"Number of items of this product reserved on open tickets"},"totalstock":{"readOnly":true,"nullable":true,"type":"integer","description":"The sum of serial products in stock"},"totalavailablestock":{"readOnly":true,"nullable":true,"type":"integer","description":"The sum of serial products available"},"tobeordered":{"readOnly":true,"nullable":true,"type":"integer","description":"Number of items that needs to be ordered. Based on stockmin, stockmax and whats already on shopping list."},"onshoppinglist":{"readOnly":true,"nullable":true,"type":"integer","description":"Number of items already on shopping list."},"ordered":{"readOnly":true,"type":"integer","nullable":true,"description":"Number of items currently in order"},"needsordering":{"readOnly":true,"nullable":true,"type":"integer","description":"True if the product is in low stock and needs to be ordered.  Based on stockmin, stockmax and whats already in order."},"discountprice":{"type":"number","nullable":true,"description":"The discounted price of the product. The discountprice can only be changed if the field is the defined in body with PUT requests. If a promotion exists for a product, and a discountprice is set to a product, the discount chosen would be the best discount for the product, which makes the product the cheapest. If you want to include discountprice for a specific product with discountprice use \"includeDiscountPrice\" in query and set the value to 1."},"calculcatedvat":{"type":"number","format":"double","nullable":true,"readOnly":true,"description":"The calculated VAT for the product's price field."},"webshopurl":{"type":"string","nullable":true,"description":"Permalink to a products webshop page, this is used when fetching Opengraph images."},"vatmode":{"$ref":"#/components/schemas/VATMode"},"updated_at":{"type":"string","nullable":true,"example":"2022-03-10 00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Timestamp for when the last time the customer is updated."},"storeid":{"type":"integer","nullable":true,"readOnly":true,"description":"The owner storeid"},"image":{"$ref":"#/components/schemas/ProductImage","nullable":true,"readOnly":true},"availabletoorder":{"readOnly":false,"nullable":true,"type":"integer","default":1,"description":"True by default. Enables the shopping-cart icon for the product that makes the product available to be ordered."},"syncproductdatawebshop":{"nullable":true,"type":"boolean","default":0,"description":"Whether or not to sync changes to webshop."},"deleted_at":{"type":"string","nullable":true,"description":"Deleted date, if product is soft deleted"}}},"BundleFilter":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","example":1,"readOnly":true,"nullable":true},"bundleid":{"type":"integer","description":"Which bundle this filter is attached to"},"attribute":{"type":"string","description":"Which attribute to check the bundle on","enum":["productno","producttag","styleno"]},"value":{"type":"array","description":"The value to check on in order to validate the bundle","items":{"type":"string"}},"products":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/Product"}},"producttags":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/ProductTag"}},"quantity":{"minimum":1,"type":"integer","description":"The amount of times the item should be applied before the bundle is valid"},"updated_at":{"type":"string","nullable":true,"format":"date-time","readOnly":true,"description":"When the bundle was last updated"},"created_at":{"type":"string","nullable":true,"format":"date-time","readOnly":true,"description":"When the bundle was created"}},"required":["bundleid","attribute","value","quantity"]},"BundleFilterResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/BundleFilter"}}},"BundleFilterRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/BundleFilter"}}},"SearchBundleFilterResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/BundleFilter"}}}},"SetPaymentMethod":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/POSPaymentMethodRelation"},"positionafterid":{"type":"number","nullable":true,"description":"The id of the payment method that should be after the edited payment method"},"positionbeforeid":{"type":"number","nullable":true,"description":"The id of the payment method that should be before the edited payment method"}}},"SetPaymentMethodResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/POSPaymentMethodRelation"}}},"PaymentMethodResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/POSPaymentMethodRelation"}}}},"POSPaymentMethodRelation":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","example":1,"readOnly":true,"description":"A unique POS cash register payment type relation id"},"title":{"type":"string","nullable":true,"description":"If no title is set, title from `paymentprovider.title` is used"},"poscashregisterid":{"type":"integer","example":1,"description":"A unique POS register id"},"paymentproviderid":{"type":"string","nullable":true,"example":1,"description":"A unique payment provider id"},"paymentprovidertype":{"$ref":"#/components/schemas/PaymentProviderType","nullable":false,"example":"paymenttype","description":"The type of the payment provider"},"paymentprovider":{"$ref":"#/components/schemas/POSPaymentProvider"},"position":{"type":"number","example":1,"description":"The position of the payment provider in the list of payment providers"},"transaction_limit":{"type":"number","example":99.45,"description":"The allowed transaction amount for this payment method. If payment sum is over this, a warning will be shown.","minimum":1,"nullable":true},"btnColor":{"type":"string","example":"#000000","nullable":true,"description":"The color of the associated button"},"customer_required":{"type":"boolean","default":false,"description":"If the customer is required for this particular payment type"},"config":{"$ref":"#/components/schemas/PaymentLinkMethodConfig","nullable":true}}},"PaymentLinkMethodConfig":{"type":"object","additionalProperties":false,"description":"Settings that only apply to some payment provider types.","properties":{"allowedPaymentMethods":{"type":"array","nullable":true,"description":"Limits payment link session to these payment methods. Empty or null offers every method the store has enabled.","items":{"type":"string","description":"An Adyen payment method type, as used in the payment link session's allowedPaymentMethods"}}}},"PaymentProviderType":{"type":"string","enum":["nets","bamdesk","paymenttype","cash","giftcard","invoice","economic","tripletex","fortnox","poweroffice","unimicro","recurringpayment","stripe","mobilepay","vipps","adyen","payment_link","fashioncheque","swish"],"example":"paymenttype","description":"The type of the payment provider"},"POSPaymentProvider":{"anyOf":[{"type":"string","description":"A null value","nullable":true},{"$ref":"#/components/schemas/GenericPaymentProvider"},{"$ref":"#/components/schemas/BamdeskDevice"},{"$ref":"#/components/schemas/NetsDevice"},{"$ref":"#/components/schemas/PaymentType"},{"$ref":"#/components/schemas/AdyenDevice"}]},"GenericPaymentProvider":{"type":"object","properties":{"title":{"type":"string","example":"Payment type","description":"The title of the payment provider"}},"additionalProperties":false},"NetsDevice":{"type":"object","additionalProperties":false,"required":["terminalid","title"],"properties":{"id":{"type":"number","readOnly":true,"nullable":true},"terminalid":{"type":"string","nullable":false},"title":{"type":"string","nullable":false},"ip":{"type":"string","nullable":true}}},"PaymentType":{"additionalProperties":false,"type":"object","properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique payment type id"},"title":{"type":"string","example":"Cash","description":"The name of a payment type"},"accountno":{"type":"string","example":1234,"nullable":true,"description":"The account number associated with the payment type"},"currency":{"type":"string","example":"DKK","nullable":true,"description":"The currency associated with the payment type"},"exchangerate":{"type":"number","example":7.5,"nullable":true,"description":"The exchange rate of the given currency (if any) to the store's main currency."},"cash":{"type":"integer","example":0,"default":0,"description":"Whether or not the payment type is physical cash"},"disabled":{"type":"integer","nullable":true,"readOnly":true,"description":"Included when deleted payment types are allowed"}}},"CustomerArticle":{"type":"object","properties":{"id":{"type":"integer","readOnly":true,"example":1,"nullable":true,"description":"A unique CustomerArticle ID"},"dateadded":{"type":"string","readOnly":true,"nullable":true,"example":"2019-08-27 10:00:00","description":"The date the customertarticle was created"},"customerid":{"type":"integer","example":1,"description":"The ID of the customer the customerarticle belongs to"},"customer":{"nullable":true,"description":"Only mapped if query \"mapcustomer\" is set to 1.","$ref":"#/components/schemas/Customer"},"title":{"type":"string","example":"Kildemoes Cykel"},"serieno":{"type":"string","nullable":true,"example":"1231232"},"color":{"type":"string","nullable":true,"example":"Blue"},"size":{"type":"string","nullable":true,"example":"Large"},"customfield1":{"type":"string","nullable":true,"example":"Gear"},"customfield2":{"type":"string","nullable":true,"example":"123123"},"customfield3":{"type":"string","nullable":true,"example":"123123"},"customfield4":{"type":"string","nullable":true,"example":"123123"},"storeid":{"type":"integer","nullable":false,"description":"ID of the owning store"},"servicesubscription":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/ServiceSubscription"},"hasservicenotices":{"readOnly":true,"type":"boolean","deprecated":true,"description":"Whether or not the customer article has any service notices, check servicenotices_count instead"},"servicenotices_count":{"readOnly":true,"type":"integer","description":"Amount of service notices"},"permission":{"$ref":"#/components/schemas/PartnerPermissionAccess","nullable":false,"readOnly":true,"description":"Your permission to the customer article."},"deleted":{"type":"integer","nullable":true,"readOnly":true,"description":"If 1 this means that the customerarticle is deleted, 0 is not deleted."},"updated_at":{"type":"string","nullable":true,"example":"2022-03-10 00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Timestamp for when the last time the customer is updated."},"last_sold_at":{"type":"string","nullable":true,"readOnly":true,"example":"2022-03-10 00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Timestamp of when the customerarticle was last sold on a payment (this does not include return payments)"}},"additionalProperties":false},"CustomerArticleListResponse":{"type":"object","description":"Response when requesting a list of customer articles","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/CustomerArticle"}},"count":{"type":"integer","deprecated":true,"nullable":true},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"CustomerArticleResponse":{"type":"object","additionalProperties":false,"description":"Response when requesting a customer article","properties":{"content":{"$ref":"#/components/schemas/CustomerArticle"}}},"SetCustomerArticle":{"type":"object","additionalProperties":false,"description":"The body of the request used for creating / updating CustomerArticles","properties":{"content":{"$ref":"#/components/schemas/CustomerArticle"},"createsubscription":{"nullable":true,"$ref":"#/components/schemas/ServiceSubscription"},"removesubscription":{"type":"boolean","nullable":true}}},"SwitchCustomerQuery":{"type":"object","additionalProperties":false,"description":"The body of the request used for switching the customer of a customer article","required":["newCustomerId"],"properties":{"newCustomerId":{"type":"integer","example":1,"nullable":false,"description":"The ID of the new customer to transfer the customer article to"},"transferServiceNotifications":{"type":"integer","nullable":false,"default":0,"example":0,"description":"If not 0, the service notifications will be transferred to the new customer"}}},"BulkDeleteCustomerArticles":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","description":"Array of customer article ids","items":{"type":"integer"}}}},"BulkDeleteCustomerArticlesResponse":{"type":"object","description":"Response for bulk deleting customer articles","additionalProperties":false,"properties":{"content":{"type":"array","description":"Array of responses with success status","items":{"$ref":"#/components/schemas/BulkDeleteCustomerArticlesResponseItem"}}}},"BulkDeleteCustomerArticlesResponseItem":{"type":"object","description":"Response for deleting a customer article","additionalProperties":false,"properties":{"id":{"type":"integer","description":"customer article id"},"success":{"type":"boolean","description":"true if success, false if it failed to delete the customer article"},"message":{"nullable":true,"type":"string","description":"Exception message of a failed deletion of a customer article"}}},"CustomerTag":{"type":"object","description":"A customer tag","required":["title"],"properties":{"title":{"type":"string","description":"The title of the tag"},"id":{"type":"integer","nullable":true,"description":"The id of the tag"},"handle":{"type":"string","nullable":true,"description":"Unique handle for the produttag. Will be set automatically if not set. This value cannot be changed once set."},"color":{"type":"string","nullable":true,"pattern":"^#[0-9a-fA-F]{6}$","example":"#4baf4f","description":"The color used when displaying the tag in the app"}},"additionalProperties":false},"Customer":{"type":"object","description":"The representation of a customer.","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique customer ID"},"storeid":{"type":"integer","readOnly":true,"example":1,"description":"ID for the store for which the customer is associated"},"createddate":{"type":"string","example":"2019-01-02 01:02:03","readOnly":true,"nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}\\ \\d{2}:\\d{2}:\\d{2}\\.?\\d*$"},"name":{"type":"string","nullable":true,"example":"John Doe","description":"The name of the customer."},"phone":{"type":"string","nullable":true,"example":"+4533608586","description":"The phone number of the customer. Should start with country code, like +45. If not, assume +45."},"phone_e164":{"type":"string","nullable":true,"example":"+4533608586","description":"Phone number in E.164 format, might sometimes be the same as \"phone\" but this field is guaranteed to be in E.164 format","readOnly":true},"country":{"type":"string","nullable":true,"example":"dk","description":"The country of the phone number. Must be in format ISO 3166-1 alpha-2."},"email":{"type":"string","nullable":true,"example":"johndoe@example.com","description":"The email of the customer."},"barcode":{"type":"string","nullable":true,"example":"1234567890","description":"Barcode used for POS customer lookup via barcode scanning."},"address":{"type":"string","nullable":true,"example":"Andebyvej 1","description":"The address of the customer."},"city":{"type":"string","nullable":true,"example":"Odense","description":"The city of the customer."},"zipcode":{"type":"string","nullable":true,"example":"5000","description":"The zip code of the customer."},"addr_country":{"type":"string","nullable":true,"example":"dk","description":"The country of the customers address."},"lat":{"type":"number","nullable":true,"readOnly":true,"format":"double","description":"The latitude of the customer."},"lng":{"type":"number","nullable":true,"readOnly":true,"format":"double","description":"The longitude of the customer."},"birthdate":{"type":"string","nullable":true,"example":"1993-12-31","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"ean":{"type":"string","nullable":true,"example":"12345678","description":"The EAN number associated with the customer. Must be a valid EAN."},"vat":{"type":"string","nullable":true,"example":"12345678","description":"The VAT/CVR number associated with the customer."},"customerno":{"type":"string","nullable":true,"example":"19181715","description":"The customer-number associated with the customer."},"economic_customernumber":{"type":"integer","nullable":true,"example":12345678,"description":"The e-conomic number of the customer."},"balance":{"type":"number","nullable":true,"example":123.45,"description":"The customer's balance"},"note":{"type":"string","nullable":true,"example":"Pays on time.","description":"A note about the customer."},"draft":{"type":"integer","example":0,"description":"Whether or not the customer is in draft mode"},"deleted":{"type":"integer","example":0,"description":"Whether or not the customer is deleted","readOnly":true},"tags":{"type":"array","default":[],"items":{"$ref":"#/components/schemas/CustomerTag"},"nullable":true,"description":"Tags associated with the customer."},"permission_marketing":{"type":"string","nullable":true,"example":"2022-03-10 00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","default":null,"description":"Timestamp for if when the permission has been granted. `null` if permission hasn't been granted."},"updated_at":{"type":"string","nullable":true,"example":"2022-03-10 00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Timestamp for when the last time the customer is updated."},"deleted_at":{"type":"string","nullable":true,"example":"2022-03-10 00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Timestamp for when the last time the customer is deleted."},"loyaltypointsbalance":{"type":"number","nullable":true,"readOnly":true,"description":"The customers loyalty point balance"},"loyalty_member_since":{"type":"string","nullable":true,"readOnly":true,"description":"Datetime of when the customer joined the loyalty club. If null, the customer is not part of the loyalty club"},"loyalty_member_id":{"type":"number","nullable":true,"readOnly":true,"description":"Assigned loyalty membership ID when the customer joined the loyalty club. If null, the customer is not part of the loyalty club"},"shopify_customer_id":{"type":"number","nullable":true,"readOnly":true,"description":"The corresponding ShopifyCustomerId if customer is syncronized with Shopify"},"store":{"type":"object","properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"Store id"},"title":{"type":"string","readOnly":true,"description":"Store title"}},"readOnly":true,"description":"Name of partner store that customer is registered in. requires scope 'customerlookup'","additionalProperties":false}}},"ServiceNotificationTemplate":{"additionalProperties":false,"type":"object","description":"A service notification sms template","properties":{"id":{"description":"Id of the template","example":12,"readOnly":true,"type":"integer"},"title":{"description":"The title of the template","example":"1. Service","type":"string","nullable":true},"enabled":{"description":"Boolean determening whether the call should be selected by default in the modal","type":"boolean"},"days":{"description":"If the template is absolute, this is how many days has to pass from \"NOW()\" till when the sms is sent out","type":"integer","example":60},"template":{"description":"The template of which the sms text will be generated from","type":"string","example":"Hej [customer_name] det er tid til første service af din nye cykel. Kig ind eller ring til os på [store_phone]","nullable":true},"absolute":{"description":"Boolean that determines if the template is absolute, meaning the date of when the call is sent out is determind in \"days\" instead of a specific month, day and year","type":"boolean"},"noticedate":{"nullable":true,"readOnly":true,"description":"The exact date and time of when the service call will be sent out, this is relative to when the service call template is requested","type":"string","example":"2027-11-01T12:00:00+01:00"},"day":{"description":"If absolute == false. Specific date of the month of when call is sent out","type":"integer","example":2,"nullable":true},"month":{"description":"If absolute == false. Specific month of when call is sent out","type":"string","example":"March","nullable":true},"year":{"description":"If absolute == false. Specify the number of year that must pass before the notification is sent","example":3,"type":"integer","nullable":true},"includeinprint":{"description":"Whether or not to include notices generated from this template in servicecard print","default":true,"type":"boolean","nullable":false},"task_service_group_id":{"description":"The id of the group of which this call template belongs to","example":12,"type":"integer"},"deleted_at":{"description":"The date and time this ServiceNotificationTemplate was deleted. Null if it is not deleted","example":"2024-02-23T09:37:20.000000Z","type":"string","nullable":true}}},"ServiceNotificationTemplateGroup":{"additionalProperties":false,"type":"object","description":"A group of service notification templates","properties":{"id":{"description":"Id of the group","type":"integer"},"title":{"description":"Title of the group","type":"string","example":"El-cykel"},"enabled":{"description":"Boolean determening whether the group will be selected by default","type":"boolean"},"producttags":{"type":"array","description":"Product tags assoicated with the group","nullable":true,"items":{"$ref":"#/components/schemas/ProductTag"}},"vatmode":{"type":"string","description":"VAT associated with the group","nullable":true,"default":null},"templates":{"type":"array","nullable":true,"description":"Array of templates associated with this group","items":{"$ref":"#/components/schemas/ServiceNotificationTemplate"}},"deleted_at":{"description":"The date and time this ServiceNotificationTemplateGroup was deleted. Null if it is not deleted","example":"2024-02-23T09:37:20.000000Z","type":"string","nullable":true}},"required":["title","enabled"]},"ServicePlan":{"type":"object","additionalProperties":false,"properties":{"id":{"nullable":true,"type":"integer","readOnly":true,"example":1,"description":"A unique service id"},"title":{"type":"string","description":"title for service"},"handle":{"type":"string","nullable":true,"description":"Unique handle for service. Will be set automatically if not set"},"servicecallgroupid":{"type":"integer","nullable":true,"deprecated":true,"description":"Which servicegroup should automatically be selected, if the service is on a customerarticle"},"servicecallgroupids":{"type":"array","nullable":true,"items":{"type":"integer"},"description":"An array of which servicegroup should automatically be selected, if the service is on a customerarticle"},"servicecallgroup":{"nullable":true,"readOnly":true,"deprecated":true,"$ref":"#/components/schemas/ServiceNotificationTemplateGroup"},"servicecallgroups":{"type":"array","nullable":true,"readOnly":true,"items":{"$ref":"#/components/schemas/ServiceNotificationTemplateGroup"}},"producttagidsrestriction":{"type":"array","nullable":true,"deprecated":true,"items":{"type":"integer"},"description":"Array of producttag ids where this service can be applied to. If tagid 1 and 2 is set as restriction, the product have to at least one of them in order to be included in the search"},"producttaghandlesrestriction":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Array of producttag handles where this service can be applied to. If handle bike and mountainbike is set as restriction, the product have to at least one of them in order to be included in the search."},"producttagsrestriction":{"type":"array","nullable":true,"readOnly":true,"items":{"$ref":"#/components/schemas/ProductTag"},"description":"Array of producttags where this service can be applied to."},"visibility":{"type":"string","enum":["all","secondhandvat","normalvat"],"description":"Determines what types of products this plan is visible for. All makes the plan visible for products with normalvat and secondhandvat"},"price":{"type":"number","nullable":true,"description":"If set, when adding a serviceplan to a serial product, it will create a material with the given price, and set the type of the material as \"serivceplan\""},"terms":{"type":"integer","nullable":true,"description":"If set, when adding a serviceplan, an enddate is set to be x months from startdate for a subscription"},"updated_at":{"type":"string","nullable":true,"format":"date-time","readOnly":true,"description":"When the service was last updated"},"created_at":{"type":"string","nullable":true,"format":"date-time","readOnly":true,"description":"When the service was created"},"deleted_at":{"type":"string","nullable":true,"format":"date-time","readOnly":true,"description":"When the service was soft deleted"},"followproductno":{"type":"string","nullable":true,"deprecated":true,"description":"When adding a service to a customerarticle, the product with the given followproductno will added as an additional material."}}},"Permission":{"type":"object","additionalProperties":false,"properties":{"read":{"type":"boolean","readOnly":true},"write":{"type":"boolean","readOnly":true}}},"ServiceSubscription":{"type":"object","additionalProperties":false,"properties":{"id":{"nullable":true,"type":"integer","readOnly":true,"example":1,"description":"A unique service id"},"customerarticleid":{"type":"integer","description":"Which customer article that has been assigned to this subcription"},"serviceplanid":{"nullable":true,"type":"integer","description":"The id of the serviceplan it is attached to."},"serviceplan":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/ServicePlan"},"draft":{"nullable":true,"type":"integer","default":0,"description":"Whether or not the subscription is in draft mode or not."},"updated_at":{"type":"string","nullable":true,"format":"date-time","readOnly":true,"description":"When the service was last updated"},"created_at":{"type":"string","nullable":true,"format":"date-time","readOnly":true,"description":"When the service was created"},"deleted_at":{"type":"string","nullable":true,"format":"date-time","readOnly":true,"description":"When the service was deleted"},"startdate":{"type":"string","nullable":true,"description":"When the service has started"},"enddate":{"type":"string","nullable":true,"description":"When the service is supposed to end. Set if the serviceplan has terms"},"price":{"type":"number","nullable":true,"description":"The price of the serviceplan when the service was activated"},"permission":{"nullable":true,"$ref":"#/components/schemas/Permission"},"active":{"nullable":true,"type":"boolean","description":"Whether or not the subscription is active, by looking at start- and enddate compared to today"}}},"PartnerPermissionAccess":{"type":"string","enum":["none","readonly","full"]},"GiftCardTypes":{"type":"string","enum":["giftcard","voucher","deposit"]},"CountryData":{"type":"object","properties":{"code":{"type":"string","readOnly":true,"nullable":false,"description":"Country code in alpha2 format","example":"DK"},"currency":{"type":"string","readOnly":true,"nullable":false,"description":"Currency for this country","example":"DKK"},"smsprice_dkk":{"type":"number","readOnly":true,"nullable":false,"description":"Price to send 1 sms to this country, in DKK","example":0.48},"smsprice_eur":{"type":"number","readOnly":true,"nullable":false,"description":"Price to send 1 sms to this country, in EUR","example":0.06},"eu":{"type":"boolean","readOnly":true,"description":"true if country is member of EU"}},"additionalProperties":false},"Store":{"type":"object","description":"Store object","additionalProperties":false,"required":["title"],"properties":{"id":{"readOnly":true,"type":"integer"},"title":{"type":"string","nullable":false},"cityname":{"type":"string","nullable":true},"zipcode":{"type":"string","nullable":true},"streetname":{"type":"string","nullable":true},"streetno":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"email":{"type":"string","nullable":true},"website":{"type":"string","nullable":true},"created":{"type":"string","nullable":false,"readOnly":true},"countrydata":{"$ref":"#/components/schemas/CountryData"}}},"Giftcard":{"type":"object","additionalProperties":false,"description":"A giftcard","properties":{"id":{"type":"integer","description":"A unique ID","readOnly":true},"giftcardno":{"type":"string","example":"1234567891234","description":"a unique string to identify giftcards."},"amount":{"type":"number","format":"double","example":100,"description":"The inital amount on the giftcard. Can only be set when the gift is created"},"amountspent":{"type":"number","format":"double","default":50,"description":"The amount spent of the giftcard. Balance of the giftcard can be calculcated by `amount - amountspent`."},"paymentid":{"type":"integer","nullable":true,"readOnly":true,"description":"If the giftcard was issued by a payment."},"type":{"$ref":"#/components/schemas/GiftCardTypes","default":"Giftcard"},"store":{"readOnly":true,"$ref":"#/components/schemas/Store","description":"The store from which the giftcard has been issued. Can be different from the current store if giftcards are shared between stores."},"customer":{"readOnly":true,"nullable":true,"$ref":"#/components/schemas/Customer","description":"The currently registered customer of the giftcard, or null if none or data is not available"},"customerid":{"type":"integer","nullable":true,"description":"The unique customer ID of the currently registered customer of the giftcard, or null if none"},"vat":{"readOnly":true,"type":"number","nullable":true,"description":"The VAT percentage of the payment that issued the giftcard"},"productid":{"type":"integer","readOnly":true,"nullable":true,"deprecated":true,"description":"To be removed"},"productno":{"readOnly":true,"type":"string","nullable":true,"deprecated":true,"description":"To be removed"},"external_id":{"readOnly":true,"type":"number","nullable":true,"description":"The external id to Shopify etc."},"createddate":{"readOnly":true,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"When the giftcard was created."},"expirationdate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"When the giftcard expires. Defaults to the createddate + the value of the storeconfig \"giftcard_expiration_years\"."},"draft":{"readOnly":true,"type":"integer","example":0,"description":"Whether the giftcard is a draft (1) or finalized (0). Draft giftcards are created during discount-to-voucher conversion and finalized on payment completion."},"expired":{"readOnly":true,"type":"boolean","example":false,"description":"If the giftcard has expired based on expirationdate."},"active":{"readOnly":true,"type":"boolean","nullable":true,"example":false,"description":"The giftcard is active if its not expired and amountspent is less than amount."},"deleted_at":{"readOnly":true,"type":"string","nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"When the giftcard was deleted."},"deleted":{"readOnly":true,"type":"boolean","example":false,"default":false,"description":"If the giftcard has been deleted based on deleted_at."}}},"DiscountTag":{"type":"object","additionalProperties":false,"properties":{"id":{"nullable":true,"type":"integer","readOnly":true,"example":1,"description":"A unique discount tag id"},"label":{"type":"string","example":"Bestillingsvarer","description":"Label for the discount"},"handle":{"type":"string","nullable":true,"description":"Unique handle for discounttag. Will be set automatically if not set"}}},"TicketMaterial":{"type":"object","properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique TicketMaterial ID","nullable":true},"taskid":{"type":"integer","example":1},"title":{"type":"string","example":"Bike"},"amount":{"type":"number","example":5},"customerarticleid":{"type":"integer","example":1,"nullable":true},"customerarticle":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/CustomerArticle"},"price":{"type":"number","format":"double","example":100,"nullable":true,"description":"Price of the product. By default price includes VAT but can be changed in the store config \"prices_include_vat\"."},"costprice":{"type":"number","format":"double","example":30,"nullable":true,"description":"Cost price of the product."},"pricewithoutvat":{"type":"number","format":"double","example":80,"nullable":true,"readOnly":true,"deprecated":true,"description":"Consistently give the calculcated price without VAT. Regardless of the value of store config \"prices_include_vat\". See `total_ex_vat` for the total price excluding VAT."},"calculatedvat":{"type":"number","format":"double","readOnly":true,"nullable":true,"deprecated":true,"description":"The calculated VAT for the product's price field. See `total_vat` for the total VAT amount."},"productid":{"nullable":true,"type":"integer","example":1},"product":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/Product"},"productno":{"type":"string","example":1,"nullable":true},"discount_tm_id":{"type":"integer","nullable":true,"readOnly":true,"example":1},"usedGiftcardid":{"type":"integer","example":1,"nullable":true,"description":"If set, the material represents the use of giftcard for paying for the tasks"},"usedGiftcard":{"type":"object","nullable":true,"description":"Gift card object","$ref":"#/components/schemas/Giftcard"},"promotionid":{"type":"integer","example":1,"nullable":true,"description":"The promotion id of the that triggered the discount"},"deletedpromotion":{"type":"integer","example":1,"nullable":true,"description":"If a promotion is deleted from a taskmaterial, then this value is set to 1, meaning every promotion on the material will not be applied"},"expecteddeliveries":{"type":"array","description":"List of dates, when the material is expected to be delivered from ongoing orders","items":{"type":"string","description":"The date of when the material is expected to be delivered"}},"position":{"type":"number","description":"Number used to determin the order of the materials"},"discounttagid":{"type":"integer","nullable":true,"description":"Which discount tag it is attached to"},"discountid":{"type":"number","description":"ID of the discount applied to the material. This will be null if the material has multiple discounts or if no discount is attached.","nullable":true,"readOnly":true},"discounttaglabel":{"type":"string","nullable":true,"description":"Label of the discount tag"},"bundleid":{"type":"integer","nullable":true},"type":{"type":"string","nullable":true,"description":"Can currently only be \"newservicesubscription\""},"servicesubscriptionid":{"type":"integer","nullable":true,"description":"The id of the servicesubscription to be activated when payment completed"},"servicesubscription":{"readOnly":true,"nullable":true,"$ref":"#/components/schemas/ServiceSubscription","description":"subscription object of `servicesubscriptionid`"},"availablestock":{"type":"integer","description":"Number of non-reserved products in stock, ignoring the amount reserved by the material itself. Is null, if the material doesn't have a product, or stock keeping is disabled for the product.","nullable":true,"readOnly":true},"availablestockexceeded":{"description":"Is true, if the amount exceeds the available stock count otherwise false. Will always be false, if the material doesn't have a product, or stock keeping is disabled for the product.","type":"boolean","nullable":false,"readOnly":true},"amountpaid":{"type":"number","description":"Amount of the material that is paid (sum of quantities on completed payments). Only included when requested with `withamountpaid` on the list endpoint.","nullable":true,"readOnly":true},"addonparentmaterialid":{"type":"integer","nullable":true,"readOnly":true,"description":"The id of the parent material. If set, this paymentmaterial is considered to be an addon"},"total_vat":{"type":"number","format":"double","example":20,"nullable":true,"readOnly":true,"description":"Total vat amount"},"total_ex_vat":{"type":"number","format":"double","example":80,"nullable":true,"readOnly":true,"description":"Total price excluding VAT"},"total_incl_vat":{"type":"number","format":"double","example":100,"nullable":true,"readOnly":true,"description":"Total price including VAT"}},"required":["title","taskid","amount","price"],"additionalProperties":false},"PaymentArticle":{"type":"object","additionalProperties":false,"description":"The representation of a POS article\n\nTo issue/sell giftcards\nIf you want to issue a gift card, sell a article with productno either 'giftcard', 'voucher', or 'deposit' and provide a unique giftcard number as value of giftcardno. Quantity must be 1\nIf you want to return a giftcard set `giftcardid` and quantity to -1.  Price must be positive\nIf you want to use a giftcard set `giftcardid` and quantity to 1. Price must be be negative\nany other value for quantiy and price for giftcards will fail.\n","properties":{"id":{"type":"integer","description":"A unique ID generated automatically","readOnly":true,"nullable":true},"title":{"type":"string","description":"The title of the article sold"},"price":{"type":"number","format":"double","example":100,"description":"Price of the article. By default price includes VAT but can be changed in the store config \"prices_include_vat\"."},"costprice":{"type":"number","nullable":true,"format":"double","description":"The cost price of the article sold"},"quantity":{"type":"number","description":"Number of articles sold."},"vat":{"type":"number","format":"double","example":25,"maximum":100,"minimum":0,"description":"VAT percentage."},"vatmode":{"nullable":true,"$ref":"#/components/schemas/VATMode"},"pricewithoutvat":{"type":"number","format":"double","example":80,"nullable":true,"readOnly":true,"description":"Consistently give the calculcated price without VAT. Regardless of the value of store config \"prices_include_vat\""},"vatamount":{"type":"number","format":"double","nullable":true,"readOnly":true,"description":"The calculated VAT for the price field."},"giftcardno":{"type":"string","nullable":true,"description":"Provide this if you want to issue a giftcard with the payment. The amount on the giftcard will be the value of price.","deprecated":true},"usedGiftcardId":{"deprecated":true,"nullable":true,"type":"integer","description":"Provide this if you want use a giftcard as means of payment. The value of price will be deducted from the giftcard balance"},"usedGiftcard":{"deprecated":true,"nullable":true,"readOnly":true,"$ref":"#/components/schemas/Giftcard","description":"The giftcard object refered to by usedGiftcardId"},"giftcardid":{"nullable":true,"type":"integer","description":"Id of issued giftcard"},"giftcard":{"nullable":true,"$ref":"#/components/schemas/Giftcard","description":"Giftcard details. When issuing a giftcard, provide the expiration date. A unique giftcard number may also be provided when manual giftcard numbers are enabled for the store."},"customerarticleid":{"type":"integer","nullable":true,"description":"Id of the attached customerarticle"},"productno":{"type":"string","nullable":true,"deprecated":true,"description":"For legacy support, instead refer to product.productno. This is only used for voucher and deposit","example":"voucher"},"productid":{"type":"integer","nullable":true,"description":"< The the id of the product you want to sell. Stock will be deducted from the product after succesful payment. Deleted products are allowed. This is useful for return sales and payments of tickets with deleted products."},"product":{"nullable":true,"readOnly":true,"description":"A reference to the product object refered to by productid","$ref":"#/components/schemas/Product"},"taskmaterialid":{"nullable":true,"description":"Relate the payment article to a taskmaterial. Use this to keep track of the payment status of task.","type":"integer"},"discount_ppm_id":{"type":"number","nullable":true,"readOnly":true,"description":"If the article has a discount. This will be a reference to the discount article. This will be autofilled by matching the value of discountToken and discountedToken"},"discountToken":{"type":"number","example":0.3423,"writeOnly":true,"deprecated":true},"discountedToken":{"type":"number","nullable":true,"writeOnly":true,"deprecated":true},"paymentid":{"type":"integer","nullable":true},"deletedpromotion":{"type":"integer","nullable":true,"description":"If a promotion is deleted from an article, this is set to 1, thus no further promotions will be applied to it"},"discounttagid":{"type":"integer","nullable":true},"discounttag":{"nullable":true,"$ref":"#/components/schemas/DiscountTag"},"promotionid":{"nullable":true,"type":"integer"},"taskmaterial":{"nullable":true,"deprecated":true,"$ref":"#/components/schemas/TicketMaterial"},"bundleid":{"type":"integer","nullable":true},"type":{"type":"string","nullable":true,"description":"Can either be \"recurringpaymentterm\", \"newservicesubscription\" or \"newrecurringpayment\""},"recurringpaymentid":{"type":"integer","nullable":true,"description":"The id of the recurring payment"},"servicesubscriptionid":{"type":"integer","nullable":true,"description":"The id of the servicesubscription to be activated when payment completed"},"servicesubscription":{"readOnly":true,"nullable":true,"$ref":"#/components/schemas/ServiceSubscription","description":"subscription object of `servicesubscriptionid`"},"loyaltypoints":{"readOnly":true,"nullable":true,"type":"number","description":"The amount of desired loyalty points to be credited by this paymentmaterial."},"loyaltypoints_transactioned":{"readOnly":true,"nullable":true,"type":"number","description":"The transactioned changed of loyalty points when payment is completed."},"addonparentmaterialid":{"type":"integer","nullable":true,"readOnly":true,"description":"The id of the parent material. If set, this paymentmaterial is considered to be an addon"},"date":{"type":"string","nullable":true,"readOnly":true,"default":"The date of when the material is added"},"salesorder_fulfillment":{"type":"boolean","nullable":true,"default":false},"discountid":{"type":"integer","nullable":true,"readOnly":true,"description":"The id of the discount added to the paymentmaterial"},"returnmaterialid":{"type":"number","nullable":true,"description":"An id referencing the paymentmaterial being returned"},"returntagid":{"type":"number","nullable":true,"description":"An id referencing the return tag (reason) of the paymentmaterial being returned"},"total_vat":{"type":"number","format":"double","example":20,"nullable":true,"readOnly":true,"description":"Total vat amount"},"total_ex_vat":{"type":"number","format":"double","example":80,"nullable":true,"readOnly":true,"description":"Total price excluding VAT"},"total_incl_vat":{"type":"number","format":"double","example":100,"nullable":true,"readOnly":true,"description":"Total price including VAT"},"total_discount_incl_vat":{"type":"number","format":"double","example":-10,"nullable":true,"readOnly":true,"description":"Total discount including VAT for this line item (negative number; 0 when no discount)"},"vat_type_id":{"type":"integer","nullable":true,"readOnly":true,"description":"The id of the vat type from the product at the time it was created."}}},"PaymentProvider":{"type":"string","nullable":true,"enum":["mobilepay","bamdesk","nets","stripe","vipps","adyen","adyen_ecommerce","fashioncheque"]},"PaymentTypeRelation":{"additionalProperties":false,"type":"object","description":"A payment transaction.","properties":{"id":{"type":"integer","nullable":true},"title":{"type":"string","example":"Cash","description":"The title of the payment. E.g. 'cash' or 'Dankort'"},"paymenttypeid":{"type":"integer","nullable":true,"description":"reference to user created payment type."},"amount":{"type":"number","format":"double","example":123.45,"description":"The amount of the payment type."},"unroundedcash":{"type":"number","format":"double","readOnly":true,"nullable":true,"example":123,"description":"The unrounded amount for a cash payment. Used to calculate rounding difference"},"cash":{"type":"integer","example":0,"description":"Returns whether or not the payment type is cash-based."},"bamdesk_messageid":{"type":"integer","nullable":true,"example":4343,"description":"If provider = 'bamdesk'. This will be the id for the messageid for Worldline card-terminal."},"accountno":{"type":"string","nullable":true,"example":"1234","description":"The account where the payment has been posted. If not applicable, it will be null."},"currency":{"type":"string","nullable":true,"example":"DKK","description":"3-digit currency code if the payment is in foreign currency."},"exchangerate":{"type":"number","format":"double","nullable":true,"description":"The exchange rate if the payment is in foreign currency"},"receipts":{"type":"array","nullable":true,"description":"Index for where it's stored.","items":{"type":"string"}},"receiptsCount":{"type":"integer","nullable":true,"readOnly":true,"description":"Number of entries in receipts."},"mobilepayid":{"type":"string","readOnly":true,"nullable":true,"description":"If provider = 'mobilepay' this is a reference to the Mobile Pay transaction"},"paymentid":{"type":"integer","readOnly":true,"nullable":true,"description":"The paymentid the type is related to"},"vipps_reference_id":{"type":"string","readOnly":true,"nullable":true,"description":"The reference for the vipps payment"},"adyen_reference_id":{"type":"string","readOnly":true,"nullable":true,"description":"The reference for the adyen payment"},"error_message":{"type":"string","nullable":true,"description":"If an error occured during the payment, this will contain the error message, if supported by the provider."},"provider":{"anyOf":[{"$ref":"#/components/schemas/PaymentProvider"},{"type":"string","nullable":true,"description":"If payment was handled by an external provider use this string indicate the provider."}]},"status":{"type":"string","default":"captured","enum":["initiated","reserved","cancelled","captured"]},"initiated_amount":{"type":"number","format":"double","nullable":true,"description":"The amount attempted when the payment type was initiated. Defaults to `amount` when omitted on creation."},"created_at":{"type":"string","readOnly":true,"nullable":true,"description":"The timestamp for when the payment type relation was created."},"updated_at":{"type":"string","readOnly":true,"nullable":true,"description":"The timestamp for when the payment type relation was last updated."}}},"POSPayment":{"type":"object","additionalProperties":false,"description":"The representation of a POS sale","properties":{"id":{"type":"integer","readOnly":true,"nullable":true,"description":"A global unique payment id"},"paymentno":{"type":"integer","readOnly":true,"nullable":true,"description":"a sequential autoincremented payment no"},"userid":{"type":"integer","nullable":true,"example":1,"readOnly":true,"description":"The id of the user who created the payment"},"customerid":{"type":"integer","example":1,"nullable":true,"description":"The id of the customer if any was attached to the payment"},"date":{"readOnly":true,"nullable":true,"maxLength":255,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"The date of the payment"},"numberofmaterials":{"type":"number","nullable":true,"format":"double","example":1,"readOnly":true,"description":"the total number of payment articles sold"},"sum":{"type":"number","nullable":true,"format":"double","readOnly":true,"example":1,"description":"The sum of the payment materials"},"discountsum":{"type":"number","nullable":true,"format":"double","readOnly":true,"description":"the sum of all discounts in the purchase"},"remainingamount":{"type":"number","nullable":true,"description":"The amount left to pay for the payment"},"cashRegisterId":{"type":"integer","nullable":true,"example":1,"description":"The id of the cash register used for the payment. Provide null if you don't use cash regiters"},"cashRegisterTitle":{"type":"string","nullable":true,"readOnly":true,"deprecated":true,"description":"Deprecated. Refer to cashregister.title"},"updated_at":{"type":"string","nullable":true,"example":"2022-03-10 00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Timestamp for when the last time the payment is updated."},"invoice":{"type":"integer","example":0,"description":"1 if payment is a invoice payment. For example if the payment is paid via an invoice in economic."},"customerpayment":{"type":"integer","example":0,"default":0,"description":"1 if payment is a customer payment"},"cashregister":{"description":"The cashregister referered to by cashRegisterId","additionalProperties":false,"readOnly":true,"nullable":true,"type":"object","properties":{"title":{"type":"string"},"id":{"type":"number"}}},"receiptcopycount":{"type":"integer","nullable":true,"description":"Number of receipt copies printed (requires Efsta)"},"fiscalisation":{"description":"Information about fiscalisation if enabled","additionalProperties":false,"readOnly":true,"nullable":true,"type":"object","properties":{"event":{"type":"string","nullable":true},"no":{"type":"string","nullable":true},"signature":{"type":"string","nullable":true},"code":{"type":"string","nullable":true},"payload":{"type":"string","nullable":true},"tags":{"type":"object","nullable":true,"additionalProperties":{"type":"object","properties":{"value":{"anyOf":[{"type":"string","nullable":true},{"type":"number","nullable":true}]},"label":{"type":"string"}},"additionalProperties":false}},"message":{"type":"string","nullable":true},"created_at":{"type":"string"}}},"user":{"description":"The user refered to by userid","readOnly":true,"additionalProperties":false,"nullable":true,"type":"object","properties":{"name":{"type":"string"},"id":{"type":"number"}}},"customer":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/Customer","description":"The customer refered to by customerid"},"articles":{"type":"array","nullable":true,"description":"The list of payment articles. Those are the products sold with the payment. When you POST a payment this will be the list of articles sold Not provided with GET payments\n","items":{"$ref":"#/components/schemas/PaymentArticle"}},"taskids":{"type":"array","description":"An optional list of ticket id attached to the payment. Not provided with GET payments\n","items":{"type":"integer"}},"salesOrderId":{"type":"integer","nullable":true,"readOnly":true,"description":"The id of the sales order if any was attached to the payment Not provided with GET payments\n"},"paidwithcash":{"type":"number","readOnly":true,"nullable":true,"description":"The sum of payment types considered cash payments."},"paymenttypes":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/PaymentTypeRelation"},"description":"A list of payment transactions used as means of payments."},"surcharge_amount":{"type":"number","nullable":true,"description":"The surcharge amount that was applied to the payment, if any."},"storeid":{"type":"integer","nullable":true,"readOnly":true,"description":"Included when partner store payments are included"},"customerpaymentsum":{"type":"number","nullable":true,"readOnly":true,"description":"Total payment sum for customer, only set if customerid and customerPaymentSum query parameters are set"},"cash":{"type":"integer","nullable":true,"deprecated":true,"description":"Deprecated. To be removed soon"},"secondhand":{"type":"integer","nullable":true,"description":"Set to 1 i f the return of the payment has secondhand products (only necessary to set if you want statistics of secondhand sales)"},"status":{"nullable":true,"$ref":"#/components/schemas/PaymentStatus"},"returnpaymentid":{"type":"integer","nullable":true,"description":"A reference ID to the POSPayment being returned. Only relevant for return sales."},"lastmodifiedbyuserid":{"type":"integer","nullable":true,"description":"ID of the user who last modified the payment by changing the status from in_progress to complete/cancelled"},"lastmodifiedbyuser":{"description":"The user refered to by lastmodifiedbyuserid","readOnly":true,"additionalProperties":false,"nullable":true,"type":"object","properties":{"name":{"type":"string"},"id":{"type":"number"}}},"note":{"description":"A piece of text attached to the payment.","type":"string","additionalProperties":false,"nullable":true},"permission":{"nullable":false,"readOnly":true,"$ref":"#/components/schemas/PartnerPermissionAccess","description":"Your permission to the payment."},"source":{"type":"string","nullable":true,"description":"Source of the payment. Can either be 'assisted-checkout' or 'pos'","enum":["assisted-checkout","pos"]}}},"SearchPOSPaymentResponse":{"type":"object","additionalProperties":false,"description":"The representation of a pos payment search.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/POSPayment"}},"count":{"type":"integer","deprecated":true,"nullable":true,"description":"The total number of items found by the query."},"hasMore":{"type":"boolean","nullable":true,"description":"True if there are more payments than the given page length"},"totalcustomerpaymentsum":{"type":"number","nullable":true,"readOnly":true,"description":"Total payment sum for customer, only set if customerid and customerPaymentSum query parameters are set"}}},"CustomerTagsResponse":{"type":"object","description":"The customer tags used by a store.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/CustomerTag"}},"count":{"type":"integer","deprecated":true,"nullable":true,"description":"The total number of customer tags found"},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}},"additionalProperties":false},"CustomerResponse":{"type":"object","description":"The representation of a customer response","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Customer"}}},"SetCustomer":{"type":"object","description":"The body of the request used for creating / updating customers","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Customer"},"synctoeconomic":{"type":"boolean","nullable":true,"description":"Whether or not it should be synced to economic, default is false"}}},"SearchCustomerResponse":{"type":"object","description":"The representation of a customer search.","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Customer"}},"count":{"type":"integer","nullable":true,"deprecated":true,"description":"The total number of customers found by the query if ignoring pagination. Only present if `count` was specified in the query parameter."},"hasMore":{"type":"boolean","description":"True if there are more customers to receive than the current pagination allowed."}}},"CustomerLink":{"type":"object","nullable":true,"readOnly":true,"description":"The representation of a customer.","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique customer ID"},"storeid":{"type":"integer","readOnly":true,"example":1,"description":"ID for the store for which the customer is associated"},"name":{"type":"string","nullable":true,"example":"John Doe","description":"The name of the customer."},"customerno":{"type":"string","nullable":true,"example":"19181715","description":"The customer-number associated with the customer."},"tags":{"type":"array","default":[],"items":{"$ref":"#/components/schemas/CustomerTag"},"nullable":true,"description":"Tags associated with the customer."},"deleted_at":{"type":"string","nullable":true,"example":"2022-03-10 00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Timestamp for when the last time the customer is deleted."},"loyalty_member_since":{"type":"string","nullable":true,"readOnly":true,"description":"Datetime of when the customer joined the loyalty club. If null, the customer is not part of the loyalty club"},"store":{"type":"object","properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"Store id"},"title":{"type":"string","readOnly":true,"description":"Store title"}},"readOnly":true,"description":"Name of partner store that customer is registered in. requires scope 'customerlookup'","additionalProperties":false}}},"CustomFieldRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/CustomField"}}},"CustomFieldResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/CustomField"}}},"SearchCustomFieldResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"object","additionalProperties":false,"properties":{"product":{"type":"object","additionalProperties":false,"properties":{"customfield1":{"$ref":"#/components/schemas/CustomField"},"customfield2":{"$ref":"#/components/schemas/CustomField"},"customfield3":{"$ref":"#/components/schemas/CustomField"},"customfield4":{"$ref":"#/components/schemas/CustomField"}}},"customerarticle":{"type":"object","additionalProperties":false,"properties":{"customfield1":{"$ref":"#/components/schemas/CustomField"},"customfield2":{"$ref":"#/components/schemas/CustomField"},"customfield3":{"$ref":"#/components/schemas/CustomField"},"customfield4":{"$ref":"#/components/schemas/CustomField"}}}}}}},"CustomField":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string","example":"Gear","description":"The title of the CustomField"},"endpoint":{"type":"string","example":"product","readOnly":true,"description":"The endpoint of the CustomField"},"attribute":{"type":"string","example":"customfield1","readOnly":true,"description":"Which CustomField it maps to"},"required":{"type":"boolean","example":1,"description":"Whether or not a customfield is required"},"activated":{"type":"boolean","description":"Whether or not a customfield is activated"},"show_on_variant":{"type":"boolean","description":"Wheter or not the customfield shows up on variant create/edit UI"}}},"DiscountTagResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/DiscountTag"}}},"DiscountTagRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/DiscountTag"}}},"SearchDiscountTagResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/DiscountTag"}}}},"ErrorResponse":{"type":"object","required":["message","errorcode","code"],"properties":{"message":{"type":"string","description":"Description of the error"},"errorcode":{"$ref":"#/components/schemas/ErrorCode"},"code":{"type":"integer","example":404,"description":"HTTP response status code"},"logid":{"type":"string","nullable":true,"description":"A reference to the log entry if the error was logged."},"storeid":{"type":"integer","nullable":true,"description":"A reference to the customer. NULL if no customer is authenticated"},"metadata":{"nullable":true,"type":"object","description":"An object with extra error information"},"debug":{"type":"object","description":"An object with debugging information. Only visible in development mode"},"info":{"type":"string"}},"additionalProperties":false},"ErrorCode":{"type":"string","enum":["PRODUCT_PRODUCTNO_EXISTS","PRODUCT_PRODUCTNO_INVALID","PRODUCT_SERIENO_EXISTS","PRODUCT_CANNOT_CHANGE_TO_SERIENO","PRODUCT_BARCODE_EXISTS","PRODUCT_TITLE_INVALID","PRODUCT_TAG_NOT_FOUND","PRODUCT_INVALID_STOCKNO","PRODUCT_NOT_AVAILABLE","PRODUCT_NOT_FOUND","QUERY_FILTER","BILLING_MODULE_NOT_ACTIVE","BILLING_SUBSCRIPTION_NOT_ACTIVE","BILLING_PRODUCT_REACHED_LIMIT","USER_ALREADY_IN_USE","USER_NO_LOGIN_LEFT","USER_CANT_DELETE_MAINUSER","USER_CANT_RESTRICT_MAINUSER","USER_CANT_RESTRICT_SELF","SMS_PREPAYMENT_FAILED","AUTH_PASSCODE_IN_USE","AUTH_RECAPTCHA_VALIDATION_FAILED","AUTH_EMAIL_IN_USE","AUTH_PASSWORD_TOO_SHORT","AUTH_EMAIL_INVALID","AUTH_REQUIRE_MFA","UNAUHTORIZED","TASK_ALREADY_PAID","REEPAY","ECONOMIC","SERVER_ERROR","CLIENT_ERROR","GIFTCARD_NUMBER_ALREADY_USED","PRODUCT_TAG_DUPLICATE","POS_PRODUCT_PRICE_MISSING","POS_BARCODE_NOT_FOUND","POS_MULTIPLE_PRODUCTS_FOUND","ST_MULTIPLE_PRODUCTS_FOUND","POS_REGISTER_NOT_SELECTED","CUSTOMERARTICLE_RETURN_ERROR","POS_REGISTER_MB_CONFLICT","PAYMENT_NOT_PAID_ENOUGH","INVENTORY_SERIAL_COUNT_ERROR","PRODUCT_HAS_SERIAL_NUMBER","STORE_DELETED","CANNOT_DELETE_LAST_ORDER","PAYMENT_METHOD_NOT_FOUND","FILE_NOT_AN_IMAGE","IMAGE_TOO_BIG","BAD_REQUEST","VIPPS_MSN_NOT_FOUND","VIPPS_WEBHOOKS_ALREADY_REGISTERED","VIPPS_DELETE_HOOKS_PAYMENT_METHODS_STILL_REGISTERED","ASSISTED_CHECKOUT_PAYMENT_NOT_EDITABLE","ADYEN_VALIDATION_ERROR","ADYEN_DEVICE_RELATION_EXISTS","BOOKING_NEW_CODE_REQUIRED","PAYMENT_ALREADY_PAID","PAYMENT_LINK_EXPIRED","PAYMENT_LINK_OVER_LIMIT","CUSTOMER_VAT_INCORRECT","BOOKING_NEW_CUSTOMERS_NOT_ALLOWED","BOOKING_CUSTOMER_ARTICLE_REQUIRED","BOOKING_SMS_UNAVAILABLE","FASHIONCHEQUE_CARD_NOT_FOUND","FASHIONCHEQUE_CARD_NOT_ACTIVE","FASHIONCHEQUE_CARD_EXPIRED","FASHIONCHEQUE_CARD_SUSPENDED","FASHIONCHEQUE_MERCHANT_NOT_ALLOWED","FASHIONCHEQUE_INSUFFICIENT_BALANCE","TRIPLETEX_INTERNAL_ERROR","TRIPLETEX_UNAVAILABLE","FORTNOX_INTERNAL_ERROR","UNIMICRO_INTERNAL_ERROR","IDENTITY_REQUIRED","FINANCE_MISSING_ACCOUNTNO"]},"ValidationError":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"in":{"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"integer"},{"type":"boolean"},{"type":"array","items":{"type":"object"}},{"type":"object"}]},"expected":{"type":"array","items":{"type":"string"}},"used":{"type":"string"}},"additionalProperties":false},"ValidationErrorResponse":{"type":"object","properties":{"message":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}},"additionalProperties":false},"FormRequestValidationResponse":{"type":"object","properties":{"message":{"type":"string"},"errors":{"type":"object","description":"An object containing the properties that failed validation. Each property is an array of error messages.","additionalProperties":true}},"additionalProperties":false},"ExchangeRateListResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeRate"}}}},"ExchangeRateResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/ExchangeRate"}}},"ExchangeRateRequest":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/ExchangeRate"}},"additionalProperties":false},"ExchangeRate":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","description":"ID of the exchange rate","nullable":true},"currency":{"type":"string","description":"Currency code","nullable":false},"title":{"type":"string","description":"Title of the exchange rate","nullable":false},"store_id":{"type":"integer","description":"ID of the store that created the exchange rate","nullable":false},"rate":{"type":"number","description":"Exchange rate value","nullable":false},"created_at":{"type":"string","format":"date-time","description":"Date and time when the exchange rate was created","nullable":true},"updated_at":{"type":"string","format":"date-time","description":"Date and time when the exchange rate was last updated","nullable":true}}},"FinanceVoucher":{"type":"object","additionalProperties":false,"required":["title","amount","account"],"properties":{"title":{"type":"string","nullable":false,"description":"Voucher text"},"amount":{"type":"number","nullable":false},"account":{"type":"number","description":"Account Number","nullable":false},"contraAccount":{"type":"number","description":"Contra-account Number","nullable":true},"currency":{"type":"string","nullable":true,"description":"Voucher currency"}}},"GiftCardTransaction":{"type":"object","additionalProperties":false,"description":"The representation of a giftcard transaction.","properties":{"id":{"type":"integer","description":"Unique ID for the giftcard transaction","readOnly":true},"storeid":{"type":"integer","description":"Unique ID for the store for which the giftcard is associated","readOnly":true},"userid":{"type":"integer","description":"Unique ID for the user who created/updated the giftcard","readOnly":true},"giftcardid":{"type":"integer","description":"Unique ID for the giftcard","readOnly":true},"paymentid":{"type":"integer","description":"Unique ID for the payment where the giftcard was used","nullable":true},"pospaymentmaterialid":{"type":"integer","description":"Unique ID for the payment material refering to the giftcard when the giftcard was created","nullable":true},"amountchange":{"type":"number","format":"double","description":"Amount adjusted when the giftcard was used/updated","readOnly":true},"currentamount":{"type":"number","format":"double","description":"Current amount on the giftcard after adjustments","readOnly":true},"created_at":{"type":"string","description":"Datetime for when the transaction was created"},"integrationconfigid":{"type":"integer","description":"Unique ID for the integration that updated the giftcard","nullable":true,"readOnly":true},"note":{"type":"string","description":"Note added to the giftcard transaction","nullable":true,"readOnly":true}}},"SearchGiftcardsResponse":{"type":"object","additionalProperties":false,"description":"The representation of a giftcard search.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Giftcard"}},"count":{"type":"integer","deprecated":true,"description":"The total number of items found by the query."},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"PostGiftcardsRequest":{"type":"object","additionalProperties":false,"description":"The giftcard to be created by the post.","properties":{"content":{"$ref":"#/components/schemas/Giftcard"}}},"PostGiftcardsResponse":{"type":"object","additionalProperties":false,"description":"The respone of a giftcard creation.","properties":{"content":{"$ref":"#/components/schemas/Giftcard"}}},"PutGiftcardRequest":{"type":"object","additionalProperties":false,"description":"The giftcard to be updated.","properties":{"content":{"$ref":"#/components/schemas/Giftcard"}}},"PutGiftcardsResponse":{"type":"object","additionalProperties":false,"description":"The respone of a giftcard update.","properties":{"content":{"$ref":"#/components/schemas/Giftcard"}}},"GetGiftcardResponse":{"type":"object","additionalProperties":false,"description":"Returns giftcard if found.","properties":{"content":{"$ref":"#/components/schemas/Giftcard"}}},"GetGiftCardTransactionsResponse":{"type":"object","additionalProperties":false,"description":"Returns transactions for the giftcard if found.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/GiftCardTransaction"}},"hasMore":{"type":"boolean"}}},"RestHookResponse":{"type":"object","description":"A list of rest hooks.","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/RestHook"}},"count":{"type":"integer","deprecated":true,"nullable":true,"description":"The total number of items found by the query if ignoring pagination."}}},"RestHook":{"type":"object","additionalProperties":false,"description":"Object representing a rest hook subscription.","properties":{"id":{"type":"integer","readOnly":true,"example":123,"description":"A unique ID. Use this to handle this subscription."},"event":{"type":"string","example":"product.created","description":"The event being listened for."},"url":{"type":"string","example":"https://hookb.in/Mqdd36mEeEUqaq6znxda","description":"The event being listened for."},"receiver":{"type":"string","nullable":true,"deprecated":true,"example":"zapier","description":"An identifier to distinguish different receivers."},"active":{"type":"integer","enum":[0,1],"example":1,"description":"Whether or not the hook is enabled."},"created":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","readOnly":true,"example":"2019-01-01 12:00:00","description":"Creation date of hook."},"lastactivity":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","readOnly":true,"nullable":true,"example":"2019-01-01 12:00:00","description":"Date of last time the hook got used."},"last_updated":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","readOnly":true,"example":"2019-01-01 12:00:00","description":"The time the hook data was last updated"}}},"RestHookEventResponse":{"type":"object","additionalProperties":false,"description":"The list of events that can be subscribed to, like `product.created`.","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RestHookEvent"}}}},"RestHookEvent":{"type":"object","properties":{"key":{"type":"string","description":"The event name.","example":"product.created"},"description":{"type":"string","description":"Description of the event.","example":"Triggered when a product is created."}},"additionalProperties":false},"RestHookLog":{"type":"object","additionalProperties":false,"description":"A REST hook log entry.","properties":{"id":{"type":"integer","readOnly":true,"example":123,"description":"A unique ID."},"storeid":{"type":"integer","readOnly":true,"description":"The ID of the store which initiated the REST hook event"},"resthookid":{"type":"integer","readOnly":true,"example":1,"description":"The ID of the associated REST hook"},"job_uuid":{"type":"string","readOnly":true,"nullable":true,"example":"9df6e604-ebe1-46a2-8f73-fb3e38ed7e22","description":"The UUID of the job responsible for handling the REST hook."},"event":{"type":"string","readOnly":true,"example":"product.updated","description":"The event type of the REST hook when the hook attempt was logged."},"url":{"type":"string","readOnly":true,"example":"https://example.com/hook/gg1qbV0PEDFG7Voo72xk","description":"The URL of the REST hook when the hook attempt was logged."},"payload":{"type":"string","readOnly":true,"description":"The data that was posted to the URL (JSON formatted)"},"status":{"type":"string","enum":["successful","failed","pending","in_progress"]},"attempts":{"type":"integer","readOnly":true,"example":3,"description":"The amount of attempts that have been made so far. This includes the final successful attempt, if the REST hook succeeds."},"last_failed_date":{"type":"string","readOnly":true,"nullable":true,"description":"A timestamp of the time when the last attempt failed."},"succeeded_date":{"type":"string","readOnly":true,"nullable":true,"description":"A timestamp of the time when the REST hook succeeded."},"last_http_status":{"type":"string","readOnly":true,"nullable":true,"description":"The HTTP status code of the last response retrieved by the server"},"last_failed_reason":{"type":"string","readOnly":true,"nullable":true,"description":"The failed reason"},"initiated_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","readOnly":true,"example":"2019-01-01 12:00:00","description":"The time the hook was put into queue"}}},"RestHookLogResponse":{"type":"object","description":"A list of rest hook log entries.","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/RestHookLog"}},"count":{"type":"integer","nullable":true,"deprecated":true,"description":"The total number of items found by the query if ignoring pagination."},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"InventoryLevel":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer"},"storeid":{"type":"integer"},"costprice":{"type":"number","nullable":true,"description":"The costprice of the product"},"inventory":{"type":"integer","description":"The number of items in the inventory"},"reserved":{"type":"integer","description":"The number of items reserved. Reserved items are not sellable."},"available":{"type":"integer","description":"The number of sellable items. `inventory - reserved`"},"tracked":{"type":"boolean","description":"If `false`, `inventory`, `available`, and `reserved` will always be `0` and will not be changed on sales or usage on ticket materials"},"productid":{"type":"integer"},"product":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"barcode":{"type":"string","nullable":true},"productno":{"type":"string"},"serieno":{"type":"string","nullable":true}},"additionalProperties":false},"updated_at":{"type":"string"},"created_at":{"type":"string"}}},"InventoryLevelSearchResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/InventoryLevel"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"},"links":{"$ref":"#/components/schemas/PaginationLinks"}}},"InventoryLevelUpdateRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"object","additionalProperties":false,"required":["product"],"properties":{"product":{"description":"The product you want to update inventory level for.","anyOf":[{"$ref":"#/components/schemas/ProductId"},{"$ref":"#/components/schemas/ProductNumberKey"}]},"inventory":{"type":"number","nullable":false},"costprice":{"nullable":false,"type":"number","minimum":0}}}}},"ProductNumberKey":{"type":"object","additionalProperties":false,"description":"Update using product number (and serial number).\n","properties":{"productno":{"type":"string","example":"77-293186058","description":"Update inventory based on product number"},"serieno":{"type":"string","example":"WSSPAJR29D25827040554N","description":"Optionally, specify a serial number to update inventory on a specific serial product. Required if product number matches multiple products"}}},"ProductId":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"number"}}},"PaginationLink":{"type":"object","readOnly":true,"additionalProperties":false,"properties":{"url":{"nullable":true,"type":"string"},"label":{"type":"string"},"active":{"type":"boolean"}}},"PaginationMeta":{"type":"object","readOnly":true,"additionalProperties":false,"properties":{"next_cursor":{"nullable":true,"type":"string"},"prev_cursor":{"nullable":true,"type":"string"},"current_page":{"type":"integer"},"current_page_url":{"type":"string"},"from":{"type":"integer","nullable":true},"last_page":{"type":"integer"},"path":{"type":"string"},"per_page":{"type":"integer"},"to":{"type":"integer","nullable":true},"total":{"type":"integer"},"links":{"type":"array","items":{"$ref":"#/components/schemas/PaginationLink"}}}},"PaginationLinks":{"type":"object","readOnly":true,"properties":{"first":{"type":"string","nullable":true},"last":{"type":"string","nullable":true},"prev":{"type":"string","nullable":true},"next":{"type":"string","nullable":true}},"additionalProperties":false},"CreateLoyaltyTransactionRequest":{"type":"object","description":"The hook information expected when subscribing to an event.","properties":{"adjustment":{"description":"The amount of points to adjust, can be negative if you want to deduct from the customers balance or positive if you want to add to it","type":"number","example":-44},"reason":{"type":"string","description":"The reason to give for this transaction","nullable":true,"example":"Manuel adjustment"}},"additionalProperties":false},"LoyaltyTransactionResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/LoyaltyTransaction"}}},"LoyaltyTransactionsResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/LoyaltyTransaction"}},"balance":{"type":"number"},"count":{"type":"integer","deprecated":true,"nullable":true},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"},"lastenrolledbystoreid":{"type":"number","nullable":true,"description":"The id of the store that enrolled this customer into the loyalty club"},"ispartofloyaltyclub":{"type":"boolean","nullable":false}}},"LoyaltyTransaction":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true,"nullable":false,"description":"Id of the transaction"},"amount":{"type":"number","readOnly":true,"example":2,"description":"Number of points credited or debited in this transaction, can be negative"},"expires_at":{"type":"string","nullable":true,"readOnly":true,"description":"Expiration date for this transaction"},"created_at":{"type":"string","readOnly":true,"description":"Creation date for this transaction"},"pospaymentid":{"type":"number","nullable":true,"readOnly":true,"description":"Reference to pospaymentid where this transaction was created from"},"pospaymentmaterialid":{"type":"number","nullable":true,"readOnly":true,"description":"Reference to the specific pospayment material id where this transaction was created from"},"customerid":{"type":"number","nullable":false,"readOnly":true,"description":"Reference to the customer this transaction belongs to"},"storeid":{"type":"number","nullable":false,"description":"Reference to the store that created this transaction"},"userid":{"type":"number","nullable":false,"description":"The TaskUser behind the transaction"},"reason":{"type":"string","nullable":true,"description":"Reason for the transaction, can be sale, return sale, or what the user has put in"},"loyalty_member_id":{"type":"number","nullable":true,"description":"Reference to the loyalty membership id the customer was assigned when they enrolled in the loyalty club"}}},"NotificationResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Notification"}}},"NotificationsResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Notification"}},"count":{"deprecated":true,"type":"number"},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"Notification":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","nullable":false,"description":"The unique ID of the notification","readOnly":true,"example":"07d7dec1-ce02-4e51-811b-d0844b24d37c"},"type":{"type":"string","description":"The specific type of the notification","example":"App\\\\Notifications\\\\NewProduct","readOnly":true},"notifiable_id":{"type":"number","description":"The ID of the entity (e.g. the current user) being notified","readOnly":true},"data":{"type":"string","description":"A JSON encoded string containing any arbitrary data related to the notification","readOnly":true},"read_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","readOnly":true,"example":"2022-01-01 12:00:00","nullable":true,"description":"The time the notification was read. If the notification is unread this value will be null"},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","readOnly":true,"description":"The time the notification was created."},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","readOnly":true,"description":"The time the notification was last updated."}}},"NotificationCreateRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/ExternalNotification"}}},"ExternalNotification":{"type":"object","additionalProperties":false,"required":["title"],"properties":{"title":{"type":"string","description":"A headline"},"message":{"type":"string","description":"Some text"},"link":{"type":"string","description":"An url that will be followed when the notification is clicked. Links inside C1st has the form \"/repairs/1234\". No url validation is done."},"notifiable_id":{"type":"number","description":"The User Id to be notified. If not set, all store users that are configured to receive external notifications will be notified."}}},"NotificationCreateResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"object","additionalProperties":false,"properties":{"receivers":{"type":"integer","description":"Number of found receivers of the notification"}}}}},"PartnerInventoryResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/PartnerInventory"}},"totalstock":{"type":"integer","description":"Total stock for all partner stores. Any store with negative inventory is omitted from this sum."},"totalreserved":{"type":"integer"},"totalavailable":{"type":"integer"}}},"PartnerInventory":{"type":"object","additionalProperties":false,"properties":{"storeid":{"type":"number"},"inventory":{"$ref":"#/components/schemas/PartnerInventoryLevels"}}},"PartnerInventoryLevels":{"additionalProperties":false,"type":"object","properties":{"productno":{"type":"string"},"stockno":{"type":"number"},"reservedstock":{"type":"number"},"availablestock":{"type":"number"}}},"PartnerPermissionType":{"type":"string","enum":["products","customers","customerarticles","giftcards","payments","promotions","tickets"]},"PartnerPermissionResourceDerived":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/PartnerPermissionType"},"read":{"type":"array","items":{"$ref":"#/components/schemas/Store"}},"write":{"type":"array","items":{"$ref":"#/components/schemas/Store"}}},"additionalProperties":false},"PartnerPermissionDerivedResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/PartnerPermissionResourceDerived"}}},"additionalProperties":false},"PaymentTypeRelationRes":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/PaymentTypeRelation"}}},"POSBalance":{"type":"object","additionalProperties":false,"description":"The representation of a POS balance","properties":{"id":{"type":"integer","readOnly":true,"description":"A unique payment ID","nullable":true},"balance_no":{"type":"integer","nullable":true,"readOnly":true,"description":"The current balance number"},"date":{"type":"string","example":"2019-01-01 12:00:00","description":"The date of the balance. Defaults to current date"},"enddate":{"type":"string","example":"2019-01-01 12:00:00","description":"The date of when the balance has ended","nullable":true,"readOnly":true},"startdate":{"type":"string","example":"2019-01-01 12:00:00","description":"The date of when the balance has started","nullable":true,"readOnly":true},"numpayments":{"type":"integer","example":5,"description":"The number of payments in the balance."},"cashstart":{"type":"number","format":"double","example":123.45,"description":"The cash in the register at the start of the balance."},"cashcounted":{"type":"number","format":"double","example":123.45,"description":"The counted cash in the cash register"},"expense":{"type":"number","nullable":true,"format":"double","example":123.54,"description":"The expense for the day"},"cashrevenue":{"type":"number","format":"double","example":123.45,"description":"Revenue in cash","nullable":true},"cashtobank":{"type":"number","format":"double","example":123.45,"description":"Cash taken out of the register and put in the bank."},"cashdifference":{"type":"number","format":"double","example":123.45},"cashrounding":{"type":"number","format":"double","nullable":true},"totalrevenue":{"type":"number","format":"double","example":123.45,"description":"The total revenue"},"totalrevenue_ex_vat":{"type":"number","format":"double","example":123.45,"description":"The total revenue excluding VAT"},"cashregistertitle":{"type":"string","nullable":true,"readOnly":true,"example":"Register 1","description":"The name of the cash register (if any)"},"cashregisterid":{"type":"integer","nullable":true,"description":"Id of the cash register attached to the balance"},"last_synced_at":{"type":"string","nullable":true,"example":"2019-01-01 12:00:00","description":"The datetime of the last posbalance sync (if any)"},"lastdinerosync":{"type":"string","nullable":true,"deprecated":true,"example":"2019-01-01 12:00:00","description":"DEPRECATED: use last_synced_at instead. The datetime of the last Dinero sync (if any)"},"lasteconomicsync":{"type":"string","nullable":true,"deprecated":true,"example":"2019-01-01 12:00:00","description":"DEPRECATED: use last_synced_at instead. The datetime of the last e-conomic sync (if any)"},"userid":{"type":"integer","nullable":true,"readOnly":true},"paymenttypes":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"paymenttypeid":{"type":"integer","example":1,"description":"The id of the payment type (if present)","nullable":true},"title":{"type":"string","example":"Cash","description":"The type of payment"},"amount":{"type":"number","format":"double","example":123.45,"description":"The amount of the payment type."},"card_fees":{"type":"number","format":"double","example":123.45,"description":"The amount of fees paid."},"cash":{"type":"boolean","example":true,"description":"Returns whether or not the payment type is cash-based."},"bamdesk_messageid":{"type":"integer","nullable":true,"example":"75","description":"The id for the Worldline card-terminal if it is used. Null otherwise."},"accountno":{"type":"string","nullable":true,"example":"1234","description":"The account where the payment has been posted. If not applicable, it will be null."},"currency":{"type":"string","example":"DKK","nullable":true,"description":"The currency associated with the payment type"},"giftcardtype":{"type":"string","nullable":true,"example":"1234","description":"The giftcard type if a giftcard is used. Null otherwise."},"provider":{"type":"string","nullable":true}}}},"payouts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"date":{"type":"string","example":"2025-05-01 12:00:00","description":"The date of the payout","nullable":true},"exported_at":{"type":"string","example":"2025-05-01 12:00:00","description":"The date the payout was exported to the accounting system","nullable":true},"reference":{"type":"string","example":"3K94P0673PGSJUF3","description":"The payout reference"},"amount":{"type":"number","format":"double","example":123.45,"description":"The amount of the payment type."},"currency":{"type":"string","example":"DKK","description":"The currency of the payout"}}}},"giftcardissued":{"type":"number","format":"double","nullable":true,"example":"100","description":"The total amount issued on giftcards."},"giftcardused":{"type":"number","format":"double","nullable":true,"example":"-100","description":"The total amount spent via giftcards."},"returnsum":{"type":"number","format":"double","example":-100,"description":"The total sum of returned articles"},"salesum":{"type":"number","format":"double","example":100,"description":"The total sum of sold articles"},"invoices":{"type":"integer","nullable":true,"example":1,"description":"The number of payments paid with invoices"},"invoicesum":{"type":"number","format":"double","nullable":true,"example":1000,"description":"The sum of payments paid with invoices"},"economicinvoicesum":{"type":"number","format":"double","nullable":true,"example":"","deprecated":true,"description":"The sum of payments paid with economic invoices. Deprecated, use invoicesum instead"},"totalsenttobookkeeping":{"type":"number","format":"double","example":123.45,"description":"Total sent to e-conomic, excluding the economicinvoicesum"},"totalvat":{"type":"number","format":"double","example":123.45,"description":"The total VAT"},"totalvatbypercentage":{"type":"array","items":{"$ref":"#/components/schemas/VATByPercentage"},"description":"VAT by each percentage"},"totalcostprice":{"type":"number","format":"double","nullable":true,"example":123.45,"description":"The total cost price"},"totalcostpricestockonly":{"type":"number","format":"double","nullable":true,"example":123.45,"description":"The total cost price for products with tracked stock only"},"note":{"type":"string","nullable":true,"example":"This is a note","description":"A text note"},"customerpaymentsum":{"type":"number","format":"double","nullable":true,"description":"The sum of the customerpayments"},"stockvalue":{"type":"number","format":"double","nullable":true,"example":10,"description":"Stock value of the store's inventory at the time of the POS balance"},"secondhandprofitsum":{"type":"number","nullable":true,"description":"Sum of profit from selling secondhand products"},"secondhandcostpricesum":{"type":"number","nullable":true,"description":"The sum of the difference between the price of the product sold and the profit for the product"},"secondhandcostpricesumstockonly":{"type":"number","nullable":true,"description":"The sum of the difference between the price of the product sold and the profit for the product for products with tracked stock only"},"secondhandreturnsum":{"type":"number","nullable":true,"description":"Sum of all products that has been returned as a second hand product"},"secondhandreturnsumstockonly":{"type":"number","nullable":true,"description":"Sum of all products that has been returned as a second hand product for the product for products with tracked stock only"},"secondhandinvoicesum":{"type":"number","nullable":true,"description":"Sum of all products that are second hand"},"totalstocktransactionsrest":{"type":"number","nullable":true,"description":"Sum of all stocktransactions that are not inventory count adjustments and that are not in payment or stocktransactionlist"},"totalstocktransactionsinventorycount":{"type":"number","nullable":true,"description":"Sum of all stocktransactions that are inventory count adjustments"},"totalstocktransactionsrestincludingnegative":{"type":"number","nullable":true,"description":"Sum of all stocktransactions that are not inventory count adjustments and that are not in payment or stocktransactionlist including movements between negative stock values"},"totalstocktransactionsinventorycountincludingnegative":{"type":"number","nullable":true,"description":"Sum of all stocktransactions that are inventory count adjustments including movements between negative stock values"},"startpaymentno":{"type":"integer","nullable":true,"description":"The first payment no in this balance","example":255},"endpaymentno":{"type":"integer","nullable":true,"example":256,"description":"The last payment no in this balance"},"number_of_products":{"type":"integer","example":15,"description":"The total number of products sold"},"number_of_services":{"type":"integer","example":3,"description":"The total number of services sold"},"number_of_return_sales":{"type":"integer","example":2,"description":"The total number of return sales processed"},"number_of_uncompleted_sales":{"type":"integer","example":1,"description":"The total number of uncompleted sales"},"total_discount":{"type":"number","format":"double","example":50.75,"description":"The total amount of discounts applied"},"total_uncompleted_sales":{"type":"number","format":"double","example":125.5,"description":"The total value of uncompleted sales"},"accumulated_sales":{"type":"number","format":"double","example":125.5,"description":"The accumulated grand total value of completed sales"},"accumulated_returns":{"type":"number","format":"double","example":30,"description":"The accumulated grand total value of returns"},"drawer_open_count":{"type":"integer","example":10,"description":"The number of times the cash drawer was opened"},"number_of_receipts":{"type":"integer","example":20,"description":"The total number of receipts issued"},"number_of_receipt_copies_printed":{"type":"integer","example":5,"description":"The total number of receipt copies printed"},"total_revenue_receipt_copies":{"type":"number","format":"double","example":30,"description":"The total sum amount for all receipt copies printed"}}},"VATByPercentage":{"additionalProperties":false,"type":"object","properties":{"vat_type_name":{"type":"string","example":"25%","nullable":true},"revenue_account_no":{"type":"string","example":"1234","nullable":true},"vat_account_no":{"type":"string","example":"1234","nullable":true},"percentage":{"type":"number","format":"double","example":25},"amount":{"type":"number","format":"double","example":420},"revenue_ex_vat":{"type":"number","format":"double","example":1680},"revenue_incl_vat":{"type":"number","format":"double","example":2100}}},"SearchPOSBalanceResponse":{"additionalProperties":false,"type":"object","description":"The representation of a pos balance search.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/POSBalance"}},"count":{"type":"integer","deprecated":true,"nullable":true,"description":"The total number of items found by the query."},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"CreatePOSBalanceRequest":{"type":"object","properties":{"balance":{"$ref":"#/components/schemas/POSBalanceAdd"}},"required":["balance"],"additionalProperties":false},"POSBalanceAdd":{"type":"object","additionalProperties":true,"properties":{"startpaymentno":{"type":"integer","nullable":true},"endpaymentno":{"type":"integer","nullable":true},"starteddate":{"type":"string"},"cashcounted":{"type":"number","format":"double"},"cashtobank":{"type":"number","format":"double"},"cashstart":{"type":"number","format":"double"},"expense":{"type":"number","format":"double"},"cashregisterid":{"type":"integer","nullable":true,"description":"Id of the cash register attached to the balance. If null, defaults to the register assigned to the store. If the store has multiple registers, a validation error will be thrown."},"note":{"type":"string","nullable":true},"commit":{"type":"boolean"}},"required":["startpaymentno","endpaymentno","cashcounted","cashtobank","cashstart","cashregisterid"]},"DiscountArticleItem":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string"},"discount":{"type":"number"},"discounttagid":{"type":"integer","nullable":true,"description":"Which discount tag that should be applied to the discount"},"mode":{"type":"string","nullable":false,"description":"Mode for the discount e.g. percentage, subtract, total, perItem"},"val":{"type":"number","nullable":false,"description":"Value set for the discount"},"quantity":{"type":"number","description":"Quantity of the discount line, either 1 or -1. Defaults to 1 when omitted.\n"}}},"PaymentArticleResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/PaymentArticle"}}},"PaymentArticleRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/PaymentArticle"}}},"PaymentMaterialReturnTag":{"type":"object","additionalProperties":false,"properties":{"id":{"nullable":true,"type":"integer","readOnly":true},"title":{"type":"string"},"handle":{"type":"string","nullable":true}}},"PaymentMaterialReturnTagsResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/PaymentMaterialReturnTag"}}}},"POSPaymentLink":{"type":"object","additionalProperties":false,"readOnly":true,"nullable":true,"description":"The representation of a POS sale","properties":{"id":{"type":"integer","readOnly":true,"nullable":true,"description":"A global unique payment id"},"paymentno":{"type":"integer","readOnly":true,"nullable":true,"description":"a sequential autoincremented payment no"},"date":{"readOnly":true,"nullable":true,"maxLength":255,"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"The date of the payment"},"sum":{"type":"number","nullable":true,"format":"double","readOnly":true,"example":1,"description":"The sum of the payment materials"}}},"POSPaymentResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/POSPayment"}}},"POSPaymentRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/POSPayment"}}},"CustomerArticleCondition":{"type":"object","additionalProperties":false,"properties":{"secondhand":{"type":"integer","description":"Whether or not the article is used (1 for used, 0 for not used)"},"repurchaseprice":{"type":"number","nullable":true,"description":"New price of the article. The new price is only set if the article is used."},"servicesubscriptionreturnprice":{"type":"number","nullable":true,"description":"The price of the return price of the serviceplan. If not the full amount of the service subscription is returned"}}},"POSPaymentLinkResponse":{"type":"object","additionalProperties":false,"required":["url","uuid"],"properties":{"url":{"type":"string","readOnly":true,"description":"Url of the created link"},"uuid":{"type":"string","readOnly":true,"description":"Uuid of the created link"}}},"POSRegister":{"type":"object","additionalProperties":false,"required":["title"],"properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique POS register id"},"title":{"type":"string","example":"Register","maxLength":255,"description":"The name of a register"},"cashactive":{"type":"integer","nullable":true,"default":1,"description":"If set to 1, the default cash paymenttype in pos can be used as paymenttype."},"default":{"type":"integer","nullable":true,"default":0,"description":"If set to 1, the register becomes a default register."},"startamount":{"type":"number","nullable":true,"description":"The first balance starts with this amount"},"pospaymentmethodrelations":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/POSPaymentMethodRelation"},"description":"A list of payment providers associated with this POS register"},"deleted_at":{"nullable":true,"type":"string","description":"Whether or not this cash register is deleted"}}},"SetPOSRegister":{"type":"object","additionalProperties":false,"description":"The body of the request used to create/update a POS register.","properties":{"content":{"$ref":"#/components/schemas/POSRegister"}}},"SetPOSRegisterResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/POSRegister"}}},"POSRegisterResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/POSRegister"}}}},"ProductImageResponse":{"additionalProperties":false,"type":"object","properties":{"content":{"$ref":"#/components/schemas/ProductImage","nullable":true},"message":{"type":"string","nullable":true}}},"SetProductImageFromURL":{"additionalProperties":false,"type":"object","properties":{"content":{"type":"object","properties":{"url":{"type":"string","nullable":false,"description":"The url to fetch the image from"}},"additionalProperties":false},"setatpartners":{"type":"boolean","default":false,"description":"Whether or not to update the image for partner products - if true this only updates the image, not any other properties"}}},"CountAddonsResponse":{"type":"object","additionalProperties":false,"properties":{"count":{"type":"integer"}}},"PutProductAddonRequest":{"type":"object","additionalProperties":false,"description":"The addon","properties":{"amount":{"type":"integer","nullable":false},"addonprice":{"type":"number","nullable":true,"format":"double"}}},"ProductAddon":{"type":"object","additionalProperties":false,"description":"A single addon.","properties":{"productno":{"type":"string","readOnly":true},"productid":{"type":"integer","readOnly":true,"nullable":true},"addonproductid":{"type":"integer","readOnly":true},"amount":{"type":"integer"},"addonprice":{"type":"number","nullable":true,"format":"double"},"updated_at":{"type":"string","readOnly":true},"product":{"readOnly":true,"$ref":"#/components/schemas/Product"}}},"AddAddon":{"type":"object","additionalProperties":false,"description":"The body of the request.","properties":{"addonproductid":{"type":"integer","nullable":false,"description":"The id of the addon to add."},"amount":{"type":"integer","nullable":true,"description":"The amount"},"addonprice":{"type":"number","nullable":true,"format":"double","description":"A custom price"}}},"AddonListResponse":{"type":"object","additionalProperties":false,"description":"A list of addons and related data.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ProductAddon"}},"hasMore":{"type":"boolean","description":"Whether or not the list has more entries."}}},"SetProductBulk":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"array","maxItems":100,"description":"The body of the request used to create/update products.","items":{"$ref":"#/components/schemas/SetProductBulkItem"}}}},"SetProductBulkItem":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Product","description":"The product you want to create/update. If product id is provided the product will be replaced."},"syncproductdatawebshop":{"type":"boolean","nullable":true,"default":false,"deprecated":true,"description":"Please use the field of the same name inside the product content instead."},"stocktransactionreason":{"type":"string","description":"Create/update the product at partner store"}}},"ProductResponseBulk":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","description":"The body of the response used to create/update products.","items":{"$ref":"#/components/schemas/ProductResponseBulkItem"}}}},"ProductResponseBulkItem":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","nullable":true},"content":{"nullable":true,"$ref":"#/components/schemas/Product"},"status":{"nullable":true,"type":"integer","description":"HTTP status code of individual product","example":200},"message":{"nullable":true,"type":"string","description":"Exception message of a failed product import"},"error":{"nullable":true,"type":"object"}}},"ProductMasterData":{"type":"object","additionalProperties":false,"description":"The representation of a product master data (stamdata).","properties":{"id":{"type":"integer","readOnly":true,"nullable":true,"description":"A unique entry ID","deprecated":true},"suppliername":{"type":"string","example":"DanishBikeSupplier","maxLength":255,"description":"Name of supplier"},"tags":{"type":"array","nullable":true,"items":{"type":"string"},"maxItems":15},"title":{"type":"string","maxLength":255,"description":"Name of product"},"productno":{"type":"string","nullable":false,"description":"Product id"},"barcode":{"type":"string","nullable":true,"description":"Barcode"},"alternativebarcode":{"type":"string","nullable":true,"description":"Barcode"},"brand":{"type":"string","maxLength":100,"nullable":true,"description":"Brand"},"suggestedprice":{"type":"number","nullable":true,"format":"double","description":"Maps to `Product.price`"},"price":{"type":"number","nullable":true,"format":"double","description":"Maps to `Product.costprice`"},"color":{"type":"string","maxLength":255,"nullable":true,"description":"Color"},"size":{"type":"string","maxLength":255,"nullable":true,"description":"Size"},"styleno":{"type":"string","maxLength":255,"nullable":true,"description":"Style number"},"vat":{"type":"number","nullable":true,"format":"double","example":25,"description":"VAT in percent"},"industry":{"type":"string","maxLength":255,"nullable":false,"example":"bikeshop","description":"Industry. Examples: bikeshop, garden, phone, jewelry, generic."},"country":{"type":"string","maxLength":255,"nullable":false,"readOnly":false,"example":"dk","description":"Country. Examples: dk, en."},"year":{"nullable":true,"type":"integer","example":2019,"description":"Year"},"stock":{"nullable":true,"type":"integer","example":20,"description":"The quantity of this product in suppliers stock"},"stockupdated":{"type":"string","nullable":true,"description":"The date time when the stock quantity was valid","example":"2025-04-27T14:04:58"},"imageurl":{"type":"string","nullable":true,"example":"https://picsum.photos/id/674/3888/2592.jpg","description":"The url from which to fetch the image"},"webshopurl":{"type":"string","nullable":true,"example":"https://example.com/products/123","description":"The url of the product in the webshop"},"lastupdate":{"type":"string","maxLength":255,"nullable":true,"readOnly":true,"description":"Date time of the last time this entry was updated"},"customfield1":{"type":"string","nullable":true,"example":"Gear"},"customfield2":{"type":"string","nullable":true,"example":"123123"},"customfield3":{"type":"string","nullable":true,"example":"123123"},"customfield4":{"type":"string","nullable":true,"example":"Gold wheels"}},"required":["suppliername","industry","country","productno"]},"ProductMasterDataResponse":{"type":"object","additionalProperties":false,"description":"The representation of product master data (response).","properties":{"content":{"$ref":"#/components/schemas/ProductMasterData"},"status":{"type":"string"}}},"ProductMasterDataSupplierSummary":{"type":"object","additionalProperties":false,"properties":{"supplierName":{"type":"string","nullable":true,"example":"DanishBikeSupplier"},"industry":{"type":"string","nullable":true,"example":"bikeshop"},"country":{"type":"string","nullable":true,"example":"dk"},"count":{"type":"integer","description":"The number of products for this supplier","example":123},"min_lastupdate":{"type":"string","nullable":true,"description":"The oldest update for this supplier","example":"2020-01-01T00:00:00"},"max_lastupdate":{"type":"string","nullable":true,"description":"The newest update for this supplier","example":"2020-01-01T00:00:00"}}},"ProductMasterDataSupplierResponse":{"type":"object","additionalProperties":false,"description":"The representation of product master data (response).","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ProductMasterDataSupplierSummary"}}}},"ProductMasterDataBrandSummary":{"type":"object","additionalProperties":false,"properties":{"brand":{"type":"string","nullable":true,"example":"DanishBikeBrand"},"industry":{"type":"string","nullable":true,"example":"bikeshop"},"country":{"type":"string","nullable":true,"example":"dk"},"count":{"type":"integer","description":"The number of products for this brand","example":123},"min_lastupdate":{"type":"string","nullable":true,"description":"The oldest update for this brand","example":"2020-01-01T00:00:00"},"max_lastupdate":{"type":"string","nullable":true,"description":"The newest update for this brand","example":"2020-01-01T00:00:00"}}},"ProductMasterDataBrandResponse":{"type":"object","additionalProperties":false,"description":"The representation of product master data (response).","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ProductMasterDataBrandSummary"}}}},"ProductMasterDataTagSummary":{"type":"object","additionalProperties":false,"properties":{"tag":{"type":"string","example":"gloves"},"count":{"type":"integer","description":"The approximate number of products for this tag","example":123}}},"ProductMasterDataTagResponse":{"type":"object","additionalProperties":false,"description":"The representation of product master data tags (response).","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ProductMasterDataTagSummary"}}}},"SetProduct":{"type":"object","additionalProperties":false,"description":"The body of the request used to create/update products.","properties":{"content":{"$ref":"#/components/schemas/Product"},"stocktransactiontagid":{"type":"number","default":null,"nullable":true},"resthookmetadata":{"type":"string","maxLength":255,"default":"{}","description":"The string content has to be valid JSON. It is passed through untouched to the subscribers of the resthooks the request triggers, so it can carry whatever meta data those subscribers need in order to process the event."},"stocktransactionreason":{"type":"string","maxLength":255,"description":"The reason why the product stock was updated. This will be saved in the product stock transaction log."},"stocknochangeisrelative":{"type":"boolean","default":false,"deprecated":true,"description":"If true, the Product.stockno update is interpreted as relative to its previous value; for example, if the previous value was 40 and you pass Product.stockno=42, it's interpreted as adding 2 (e.g. receiving 2 items from a supplier), and if you pass Product.stockno=38, it's interpreted as removing 2 (e.g. selling 2 items). If stocknochangeisrelative is false, the change is interpreted as absolute, e.g. with the intention of setting the initial value or correcting a wrong number. Note it has no direct effect on how Customers 1st functions; Product.stockno will always be set to the specified value; but it affects REST hooks (product.updated events) and 3rd party integrations if they distinguish between absolute and relative changes in the number of items in stock. See also stocknochangetype in Product."},"orderid":{"type":"integer","description":"A reference to the shopping list item id for which this product stock has been updated."},"setatpartners":{"type":"boolean","default":false,"description":"Create/update relavant product data at partner stores"}}},"Products":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"hasNextPage":{"type":"boolean","description":"If there exists a result page after the current page. Use this to create a 'next page' functionality"}}},"ProductResponse":{"type":"object","description":"The representation of a product.","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Product"},"allow_edit_productno_and_serieno":{"type":"boolean","nullable":true,"description":"If true, the productno and serieno can be changed."}}},"SearchProductResponse":{"type":"object","additionalProperties":false,"description":"The representation of a product search.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"count":{"type":"integer","deprecated":true,"nullable":true,"description":"The total number of products found by the query if ignoring pagination. Is null if `count` was not specified in the query parameter."},"hasMore":{"type":"boolean","description":"True if there are more products to receive than the current pagination allowed."},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for next page when using cursor based pagination."}}},"ProductTagResponse":{"type":"object","additionalProperties":false,"description":"A product tag response","properties":{"content":{"$ref":"#/components/schemas/ProductTag"}}},"ProductTagListResponse":{"type":"object","additionalProperties":false,"description":"The product tags used by a store.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ProductTag"}},"count":{"type":"integer","deprecated":true,"nullable":true,"description":"The total number of product tags found"},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"SearchPromotionResponse":{"type":"object","description":"The representation of a promotion search.","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Promotion"}},"count":{"type":"integer","deprecated":true,"example":1,"description":"The total number of promotions found by the query if ignoring pagination."},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for next page when using cursor based pagination."}}},"Promotion":{"type":"object","description":"Object representing a promotion.","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true,"nullable":true,"example":123,"description":"A unique ID. Use this to handle this subscription."},"name":{"type":"string","example":"Summer discount","description":"Short name for the promotion"},"description":{"type":"string","default":"","nullable":true,"example":"10% on all bikes in the summer.","description":"Description of the promotion. This is only displayed in the controlpanel, not for the customers."},"deleted":{"type":"integer","enum":[0,1],"default":1,"nullable":true,"example":1,"description":"Whether or not the promotion is deleted. Disabled promotions do not trigger even when inside the date range."},"startdate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","nullable":true,"example":"2019-01-01 12:00:00","description":"Specifies when the promotion starts. Null if the promotion has no startdate and thus is always in effect (except if deleted)."},"enddate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","nullable":true,"example":"2019-02-01 12:00:00","description":"Specifies when the promotion ends. Null if the promotion has no enddate."},"minproducts":{"type":"integer","nullable":true,"example":1,"description":"Minimum number of prodcts before the promotion is in effect","default":1},"applyall":{"type":"boolean","nullable":true,"description":"Whether or not to apply promotion to all"},"productfilters":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/PromotionProductFilter"}},"customerfilters":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/PromotionCustomerFilter"}},"loyalty_members_only":{"type":"boolean","nullable":true},"serviceplanfilters":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/PromotionServicePlanFilter"}},"articles":{"nullable":true,"readOnly":true,"description":"A list of products from the cart that match the promotion. This will only be set in the case of the lookup endpoint.","type":"array","items":{"$ref":"#/components/schemas/CartArticle"},"example":null},"storeid":{"nullable":true,"readOnly":true,"type":"integer"},"productno_counts":{"type":"array","items":{"type":"object","properties":{"productno":{"type":"string","nullable":true},"count":{"type":"number","nullable":true}},"additionalProperties":false}},"count":{"type":"integer","nullable":true,"readOnly":true,"description":"The number of times this promotion matches things in the cart. This will only be set in the case of the lookup endpoint."},"action":{"$ref":"#/components/schemas/PromotionAction"}}},"PromotionFilter":{"anyOf":[{"$ref":"#/components/schemas/PromotionProductFilter"},{"$ref":"#/components/schemas/PromotionCustomerFilter"},{"$ref":"#/components/schemas/PromotionServicePlanFilter"}]},"PromotionProductFilter":{"type":"object","description":"Filter promotion based on different product attributes.","additionalProperties":false,"properties":{"attribute":{"type":"string","enum":["product_productno","product_tag","product_brand","product_styleno"],"example":"tag","description":"What attribute to filter the promotion on."},"value":{"anyOf":[{"type":"string","example":"Bike","description":"The value that the attribute needs to have to match.","nullable":true},{"type":"array","items":{"type":"string"},"example":["Bike","Gear"],"description":"A list of possible values. The attribute needs to match at least one of the values for the rule to apply.","nullable":true}],"example":"Bike"}}},"PromotionCustomerFilter":{"type":"object","description":"Filter promotion based on different customer attributes.","additionalProperties":false,"properties":{"attribute":{"type":"string","enum":["customer_tag"],"example":"tag","description":"What attribute to filter the promotion on."},"value":{"anyOf":[{"type":"array","items":{"type":"string"},"example":["1","2","3"],"description":"A list of possible values. The attribute needs to match at least one of the values for the rule to apply."},{"type":"string","example":"1","description":"The value that the attribute needs to have to match."}]}}},"PromotionServicePlanFilter":{"type":"object","description":"Filter promotion based on serviceplan.","additionalProperties":false,"properties":{"attribute":{"type":"string","enum":["serviceplan_handle"],"example":"tag","description":"What attribute to filter the promotion on."},"value":{"anyOf":[{"type":"array","items":{"type":"string"},"example":["1","2","3"],"description":"A list of possible values. The attribute needs to match at least one of the values for the rule to apply."},{"type":"string","example":"1","description":"The value that the attribute needs to have to match."}]}}},"PromotionAction":{"type":"object","description":"The action / effect the promotion has on checkout.","additionalProperties":false,"properties":{"type":{"type":"string","enum":["percentage","adjustPriceBy","percentageByCostprice","totalPriceUnit"],"example":"percentage","description":"The type of the action."},"amount":{"type":"number","format":"double","example":10,"description":"The amount to be deducted, depending on the `type`."}}},"PromotionLookup":{"type":"object","description":"The object used to query for relevant promotions based on products and customers.","additionalProperties":false,"properties":{"products":{"type":"array","items":{"anyOf":[{"type":"string","example":"123"},{"$ref":"#/components/schemas/CartArticle"}]},"description":"List of productnos."},"allowDeleted":{"type":"boolean","nullable":true,"description":"Whether or not the lookup should find promotions which are deleted."},"customer":{"type":"integer","nullable":true,"example":42,"description":"The id of the customer. Can be null, if returned promotions should be relevant for all customers."}}},"PromotionLookupResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Promotion"}},"count":{"type":"number","deprecated":true,"nullable":true,"description":"Count of returned entries"},"hasMore":{"type":"boolean","description":"True if there are more promotions to receive than the current pagination allowed."}}},"CartArticle":{"type":"object","additionalProperties":false,"properties":{"productno":{"type":"string","example":"456","nullable":true,"description":"The product number of the product that the article represents."},"quantity":{"type":"number","nullable":true,"example":5,"description":"The amount that is present of that product."}}},"RecurringPaymentResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/RecurringPayment"}}},"RecurringPaymentRequest":{"type":"object","additionalProperties":false,"description":"List of stores","properties":{"content":{"$ref":"#/components/schemas/RecurringPayment"}}},"SearchRecurringPaymentResponse":{"type":"object","additionalProperties":false,"description":"List of stores","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/RecurringPayment"}},"count":{"deprecated":true,"type":"integer"},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"RecurringPayment":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","nullable":true},"startdate":{"type":"string","nullable":true,"description":"Date of when the recurring payment has started"},"expectedenddate":{"type":"string","readOnly":true,"nullable":true,"description":"Date of when the recurring payment has started"},"termamount":{"type":"number","nullable":true,"description":"Amount the customer has to pay pr. term which is calculated from amountleft and terms"},"termamountwithoutvat":{"type":"number","readOnly":true,"nullable":true},"termvatamount":{"type":"number","readOnly":true,"nullable":true,"deprecated":true},"vat":{"type":"number","readOnly":true,"nullable":true},"nextamount":{"type":"number","nullable":true,"readOnly":true,"description":"The exact amount of the next payment."},"amountleft":{"type":"number","description":"The amount the customer has to pay"},"customerid":{"type":"integer"},"customer":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/Customer"},"paymentno":{"type":"integer","nullable":true,"readOnly":true,"description":"The number of the recurring payment"},"terms":{"type":"integer","minimum":1,"description":"Amount of terms the customer has to pay"},"termspaid":{"readOnly":true,"type":"integer","nullable":true,"description":"The amount of terms that has been paid"},"interval":{"type":"string","enum":["month","year"],"description":"Interval of when the next term is, you can either choose \"month\" or \"year\" as interval."},"recurringpaymentproductdepreciations":{"nullable":true,"deprecated":true,"type":"array","items":{"$ref":"#/components/schemas/RecurringPaymentProductDepreciation"}},"recurring_payment_materials":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/RecurringPaymentMaterial"}},"nextduedate":{"type":"string","nullable":true,"description":"Date of when the next payment is due to."},"overdue":{"type":"boolean","nullable":true,"description":"If the payment is overdue."},"status":{"$ref":"#/components/schemas/RecurringPaymentStatus"},"userid":{"type":"integer","nullable":true,"readOnly":true},"user":{"description":"User that create the recurring payment","readOnly":true,"additionalProperties":false,"nullable":true,"type":"object","properties":{"name":{"type":"string"},"id":{"type":"number"}}}}},"RecurringPaymentProductDepreciation":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","nullable":true},"productid":{"type":"integer"},"product":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/Product"},"customerarticleid":{"type":"integer","nullable":true,"description":"Id for the customerarticle attached to the recurring payment product"},"customerarticle":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/CustomerArticle"},"scrapvalue":{"type":"number"},"initialcostprice":{"type":"number","readOnly":true,"nullable":true,"description":"The initialcostprice is set from the products costprice"},"currentcostprice":{"type":"number","nullable":true,"readOnly":true,"description":"The costprice slowly depreciate, this is what the costprice has been depreciated to"},"recurringpaymentid":{"type":"integer","nullable":true},"scrapdate":{"type":"string","nullable":true,"description":"The date when the products costprice degrades to scrapvalue (it degrades every payment)"},"created_at":{"type":"string","readOnly":true,"nullable":true}}},"RecurringPaymentStatus":{"type":"string","enum":["active","cancelled","paidwaitingreturn","completed"]},"RecurringPaymentMaterial":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","nullable":true},"recurring_payment_id":{"type":"integer","readOnly":true,"nullable":true,"description":"Id for the recurring payment this material is attached to"},"pos_payment_material_id":{"type":"integer","description":"Id for the payment article attached to the recurring payment material"},"pos_payment_material":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/PaymentArticle"},"recurring_payment_product_depreciation":{"nullable":true,"$ref":"#/components/schemas/RecurringPaymentProductDepreciation"},"created_at":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"updated_at":{"type":"string","format":"date-time","readOnly":true,"nullable":true}}},"SalesOrderFulfillmentMaterialCreateRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterial"}}},"SalesOrderFulfillmentMaterialUpdateRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterial"}}},"SalesOrderFulfillmentMaterialSearchResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterial"}}}},"SalesOrderFulfillmentMaterialResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterial"}}},"SalesOrderFulfillmentMaterial":{"type":"object","additionalProperties":true,"properties":{"id":{"readOnly":true,"type":"integer"},"title":{"readOnly":true,"type":"string"},"description":{"readOnly":true,"type":"string"},"product_id":{"readOnly":true,"type":"integer","nullable":true},"quantity":{"readOnly":true,"type":"number"},"fulfilled_quantity":{"type":"number"},"cancelled_quantity":{"type":"number"},"rejected_quantity":{"type":"number"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"salesOrderFulfillment":{"$ref":"#/components/schemas/SalesOrderFulfillmentLink"},"product":{"$ref":"#/components/schemas/Product","nullable":true}}},"SalesOrderFulfillmentMethod":{"type":"string","enum":["pickup","ship","transfer"]},"SalesOrderFulfillmentStatus":{"type":"string","enum":["pending","accepted","processing","ready","completed","cancelled","rejected"]},"SalesOrderFulfillmentLink":{"readOnly":true,"nullable":true,"type":"object","additionalProperties":false,"properties":{"id":{"readOnly":true,"type":"integer"},"storeid":{"readOnly":true,"type":"integer"},"fulfillment_method":{"$ref":"#/components/schemas/SalesOrderFulfillmentMethod"},"status":{"$ref":"#/components/schemas/SalesOrderFulfillmentStatus"},"open":{"type":"boolean"},"draft":{"type":"boolean"}}},"SalesOrderFulfillmentCreateRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrderFulfillment"}}},"SalesOrderFulfillmentUpdateRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrderFulfillment"}}},"SalesOrderFulfillmentSearchResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/SalesOrderFulfillmentListItem"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"},"links":{"$ref":"#/components/schemas/PaginationLinks"}}},"SalesOrderFulfillmentResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrderFulfillment"}}},"SalesOrderFulfillmentListItem":{"type":"object","additionalProperties":false,"properties":{"id":{"readOnly":true,"type":"integer"},"storeid":{"readOnly":true,"type":"integer"},"fulfillment_no":{"type":"integer","nullable":true},"sales_order_id":{"type":"integer","readOnly":true},"updated_by_user_id":{"type":"integer","readOnly":true,"nullable":true},"fulfillment_method":{"$ref":"#/components/schemas/SalesOrderFulfillmentMethod"},"status":{"$ref":"#/components/schemas/SalesOrderFulfillmentStatus"},"open":{"type":"boolean"},"note":{"type":"string"},"draft":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"sales_order":{"$ref":"#/components/schemas/SalesOrderLink"}}},"SalesOrderFulfillment":{"type":"object","additionalProperties":false,"properties":{"id":{"readOnly":true,"type":"integer"},"storeid":{"readOnly":true,"type":"integer"},"fulfillment_no":{"type":"integer","nullable":true},"pos_payment_id":{"type":"integer","readOnly":true,"nullable":true},"sales_order_id":{"type":"integer"},"sales_order":{"$ref":"#/components/schemas/SalesOrderLink"},"status":{"$ref":"#/components/schemas/SalesOrderFulfillmentStatus"},"open":{"type":"boolean"},"fulfillment_method":{"$ref":"#/components/schemas/SalesOrderFulfillmentMethod"},"note":{"type":"string"},"draft":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"updated_by_user_id":{"type":"integer","nullable":true},"customer":{"nullable":true,"readOnly":true,"description":"The customer associated with the sales order","$ref":"#/components/schemas/Customer"}}},"SalesOrderLink":{"type":"object","additionalProperties":false,"properties":{"id":{"readOnly":true,"type":"integer"},"storeid":{"readOnly":true,"type":"integer"},"order_no":{"type":"integer","nullable":true},"customer":{"$ref":"#/components/schemas/CustomerLink"},"note":{"type":"string"}}},"SalesOrderMaterialCreateRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrderMaterial"},"fulfillment":{"type":"object","nullable":true,"additionalProperties":false,"properties":{"method":{"type":"string","description":"The fulfillment method","enum":["pickup","ship","transfer"]},"storeid":{"type":"integer","description":"The store id where the order is fulfilled"}}}}},"SalesOrderMaterialAddFulfillmentRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"object","additionalProperties":false,"properties":{"quantity":{"type":"number"},"method":{"type":"string","description":"The fulfillment method","enum":["pickup","ship","transfer"]},"storeid":{"type":"integer","description":"The store id where the order is fulfilled"}}}}},"SalesOrderMaterialUpdateRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrderMaterial"}}},"SalesOrderMaterialSearchResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/SalesOrderMaterial"}}}},"SalesOrderMaterialResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrderMaterial"}}},"SalesOrderMaterial":{"type":"object","additionalProperties":true,"properties":{"id":{"readOnly":true,"type":"integer"},"sales_order_id":{"type":"integer","readOnly":true},"title":{"type":"string"},"description":{"type":"string"},"product_id":{"type":"integer","readOnly":true,"nullable":true},"quantity":{"type":"number"},"missing_quantity":{"type":"number"},"fulfilled_quantity":{"type":"number"},"rejected_quantity":{"type":"number"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"fulfillments":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterial"}},"pendingOrCompletedFulfillments":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/SalesOrderFulfillmentMaterial"}},"product":{"type":"object","readOnly":true,"nullable":true,"additionalProperties":false,"properties":{"id":{"type":"integer"},"title":{"type":"string"},"productno":{"type":"string"},"size":{"type":"string","nullable":true},"color":{"type":"string","nullable":true},"image":{"$ref":"#/components/schemas/ProductImage","nullable":true}}}}},"DeleteResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"object","additionalProperties":false,"properties":{"message":{"type":"string"}}}}},"SalesOrderCreateRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrder"}}},"SalesOrderUpdateRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrder"}}},"SalesOrderSearchResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/SalesOrderListItem"}},"meta":{"$ref":"#/components/schemas/PaginationMeta"},"links":{"$ref":"#/components/schemas/PaginationLinks"}}},"SalesOrderResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SalesOrder"}}},"SalesOrderStatus":{"type":"string","enum":["pending","processing","completed","cancelled"]},"SalesOrderListItem":{"type":"object","additionalProperties":false,"properties":{"id":{"readOnly":true,"type":"integer"},"storeid":{"readOnly":true,"type":"integer"},"order_no":{"type":"integer","nullable":true},"customer_id":{"type":"integer","nullable":true},"status":{"$ref":"#/components/schemas/SalesOrderStatus"},"open":{"type":"boolean"},"note":{"type":"string"},"draft":{"type":"boolean"},"customer":{"$ref":"#/components/schemas/CustomerLink"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"missing_quantity":{"type":"integer","readOnly":true,"nullable":true},"pospayment_id":{"type":"integer","readOnly":true,"nullable":true},"payment":{"$ref":"#/components/schemas/POSPaymentLink"}}},"SalesOrder":{"type":"object","additionalProperties":false,"properties":{"id":{"readOnly":true,"type":"integer"},"storeid":{"readOnly":true,"type":"integer"},"order_no":{"type":"integer","nullable":true},"pospayment_id":{"type":"integer","readOnly":true,"nullable":true},"customer_id":{"type":"integer","nullable":true},"status":{"$ref":"#/components/schemas/SalesOrderStatus"},"open":{"type":"boolean"},"note":{"type":"string"},"draft":{"type":"boolean","readOnly":true},"customer":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/Customer"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"missing_quantity":{"type":"integer","readOnly":true,"nullable":true},"payment":{"$ref":"#/components/schemas/POSPaymentLink"}}},"ServicePlanResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/ServicePlan"}}},"ServicePlanRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/ServicePlan"}}},"SearchServicePlanResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ServicePlan"}},"count":{"deprecated":true,"type":"integer"},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"ServiceSubscriptionResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/ServiceSubscription"}}},"ServiceSubscriptionRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/ServiceSubscription"}}},"SearchServiceSubscriptionResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ServiceSubscription"}}}},"ConfigAPI":{"type":"object","description":"A config. For a complete list refer to https://api-docs.c1st.com/#section/General/Configs","properties":{"key":{"type":"string"},"value":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"}},"additionalProperties":false},"SetConfigs":{"type":"object","description":"The body of the request used to create/update configs.","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ConfigAPI"}},"targetStoreId":{"type":"number","nullable":true,"description":"If supplied, will be used as the target store to set storeconfigs (only if the apitoken has adequate permission)."}}},"GetConfigs":{"type":"object","description":"Get configs","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ConfigAPI"}},"targetStoreId":{"type":"number","nullable":true,"description":"If supplied, will be used as the target store to set storeconfigs (only if the source apitoken has adequate permission)."}}},"PartnerStores":{"type":"object","description":"partner stores","properties":{"viewstock":{"type":"array","items":{"$ref":"#/components/schemas/Store"}},"saveproduct":{"type":"array","items":{"$ref":"#/components/schemas/Store"}},"sharecustomer":{"type":"array","items":{"$ref":"#/components/schemas/Store"}},"inventorymove":{"type":"array","items":{"$ref":"#/components/schemas/Store"}},"sharecustomerarticle":{"type":"array","items":{"$ref":"#/components/schemas/Store"}}},"additionalProperties":false},"PrintDeskSettings":{"type":"object","description":"PrintDesk settings object","properties":{"derivedDevices":{"description":"Array of each print desk device's settings","type":"array","items":{"$ref":"#/components/schemas/PrintDeskDevice"}}},"additionalProperties":false},"PrintDeskDevice":{"type":"object","description":"A PrintDesk device object","properties":{"ip":{"type":"string","nullable":true},"derivedStatus":{"type":"string","nullable":true,"enum":["active","disconnected"]},"deviceid":{"type":"string","nullable":true},"port":{"type":"integer","nullable":true},"name":{"type":"string","nullable":true},"ts":{"type":"string","nullable":true},"platform":{"type":"string","nullable":true,"enum":["darwin","win32","linux"]},"printers":{"type":"array","items":{"$ref":"#/components/schemas/PrintDeskPrinter"}}},"additionalProperties":false},"PrintDeskPrinter":{"type":"object","description":"A PrintDesk printer object","properties":{"name":{"type":"string","nullable":true,"description":"deviceName, see https://www.electronjs.org/docs/api/web-contents#contentsprintoptions-callback"},"description":{"type":"string","nullable":true},"id":{"type":"string","nullable":true},"status":{"type":"string","nullable":true,"enum":["active","unknown"]}},"additionalProperties":false},"SettingsAPI":{"type":"object","description":"Settings for the authenticated store","properties":{"store":{"$ref":"#/components/schemas/Store"},"storeTimezone":{"type":"string","readOnly":true,"description":"IANA timezone of the store","example":"Europe/Copenhagen"},"configs":{"type":"array","description":"Store configs readable by the store. Email and SMS templates fall back to the translated default for the user's language when not set.","items":{"$ref":"#/components/schemas/ConfigAPI"}},"printDesk":{"$ref":"#/components/schemas/PrintDeskSettings"},"appConfigs":{"$ref":"#/components/schemas/AppConfigs"},"customFields":{"type":"array","deprecated":true,"description":"Product custom field definitions (customfield1-3)","items":{"$ref":"#/components/schemas/CustomProductField"}},"featureFlags":{"type":"array","description":"Resolved feature flags for the store","items":{"type":"object","properties":{"key":{"type":"string","description":"Feature flag key"},"value":{"type":"boolean","description":"Whether the flag is enabled for the store"}},"additionalProperties":false}},"integrations":{"type":"array","description":"Types of the integrations configured for the store","items":{"type":"string"}},"partners":{"deprecated":true,"description":"Not returned by the endpoint","$ref":"#/components/schemas/PartnerStores"},"shouldShowWebshopCheckbox":{"type":"boolean","nullable":false,"description":"Whether or not the store has external webshop integration that requires the special sync to webshop checkbox"}},"additionalProperties":false},"CustomProductField":{"type":"object","properties":{"key":{"nullable":false,"type":"string"},"config":{"type":"string"},"requiredCustomerArticle":{"type":"boolean"},"label":{"type":"string"}},"additionalProperties":false},"AppConfigs":{"type":"object","description":"Public keys for third-party apps","properties":{"economic_appPublicToken":{"nullable":true,"type":"string","description":"Public app token for e-conomic"},"ReePayPublicKey":{"nullable":true,"type":"string","description":"Public key for Reepay"}},"additionalProperties":false},"AddShoppingListItemByBarcode":{"type":"object","additionalProperties":false,"description":"The body of the request used to add items to a shopping list, using barcodes","properties":{"partnerstoreid":{"type":"number"},"barcodes":{"type":"array","items":{"type":"object","properties":{"barcode":{"type":"string"},"amount":{"type":"integer"}},"additionalProperties":false}}}},"AddShoppingListItemByBarcodeResponse":{"type":"object","additionalProperties":false,"description":"The body of the response","properties":{"content":{"type":"object","additionalProperties":false,"properties":{"barcodesNotFound":{"type":"array","items":{"type":"string"}},"barcodes":{"type":"array","items":{"type":"string"}}}}}},"SetShoppingListItem":{"type":"object","additionalProperties":false,"description":"The body of the request used to create/update a shopping list item.","properties":{"partnerstoreid":{"type":"number","description":"The store id of the store that item is moved to. Stock movements are recieved as shopping list orders. The store id must be on the store's stock partner list."},"content":{"$ref":"#/components/schemas/ShoppingListItem"},"aggregate":{"type":"boolean","nullable":true,"default":true,"description":"Aggregate same products with same cost price into one list-item."}}},"ShoppingListItem":{"type":"object","additionalProperties":false,"description":"The representation of a shopping list item. The shopping list is a set of products the store must rememeber to order from a supplier.","properties":{"id":{"type":"integer","readOnly":true,"nullable":true,"description":"A unique ID"},"productid":{"type":"integer","nullable":true,"description":"a reference to the product. This field can only be set with POST"},"supplierid":{"type":"integer","nullable":true,"description":"The supplierid attached to the order"},"amount":{"type":"integer","description":"The number of items to buy"},"costprice":{"type":"number","description":"Cost price will default to product cost price if not specified","format":"double","nullable":true,"example":29.95},"expectedtotalcostprice":{"type":"number","description":"Used to check that `costprice` and `amount` is correct by verifying that `amount * costprice = expectedtotalcostprice`","format":"double","nullable":true,"example":29.95},"added":{"readOnly":true,"type":"string","nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"when added to the list"},"materialid":{"type":"integer","nullable":true,"description":"a reference to the task material. This field can only be set with POST"},"taskid":{"type":"integer","nullable":true,"readOnly":true,"description":"a reference to the task of the material"},"taskno":{"type":"string","nullable":true,"readOnly":true,"description":"task no for reference task"},"orderlistno":{"type":"integer","nullable":true,"readOnly":true,"description":"The orderlist no of the attached orderlist"},"orderlistid":{"type":"integer","nullable":true,"readOnly":true,"description":"The order id if the shopping list item has been ordered. Can only be set while creating a shopping list order. This field is write once"},"delivereddate":{"readOnly":true,"type":"string","nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"when item has delivered to stock. Specificied by setting orderid when updating product."},"product":{"readOnly":true,"description":"The product refered to by productid","nullable":true,"$ref":"#/components/schemas/Product"},"partner_product":{"readOnly":true,"description":"The partner product based on product number. Is only set when getting orders from a store that is not your own.","nullable":true,"$ref":"#/components/schemas/Product"},"received":{"readOnly":true,"type":"integer","nullable":true,"description":"Amount of items that are received"},"inorder":{"readOnly":true,"type":"integer","nullable":true,"description":"Amount of items that are not received"},"pending":{"readOnly":true,"type":"integer","nullable":true,"description":"Amount of items that are in a stocktransaction reception but not completed yet."},"pendingmove":{"readOnly":true,"type":"integer","nullable":true,"description":"Amount of items that are in a stocktransaction move but not completed yet."},"sent_from_partner":{"readOnly":true,"type":"integer","nullable":true,"description":"Amount of items that are sent from the partner store."},"partner_order_on_shopping_list":{"readOnly":true,"nullable":true,"type":"integer","description":"Total amount of partner order items that have been added to the shopping list."},"partner_order_list_id":{"type":"integer","nullable":true,"description":"The order id coming from a partner order."},"receivedstatus":{"$ref":"#/components/schemas/ShoppingListReceivedStatus"},"material":{"nullable":true,"$ref":"#/components/schemas/TicketMaterial"},"expecteddelivery":{"nullable":true,"type":"string"}},"required":["amount"]},"SearchShoppingListResponse":{"type":"object","additionalProperties":false,"description":"The representation of a shopping list search.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ShoppingListItem"}},"count":{"type":"integer","deprecated":true,"nullable":true,"description":"The total number of items found by the query."},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"ShoppingListItemResponse":{"additionalProperties":false,"type":"object","description":"The representation of a product.","properties":{"content":{"$ref":"#/components/schemas/ShoppingListItem"}}},"ShoppingListOrder":{"type":"object","additionalProperties":false,"description":"The representation of a shopping list order item. An order is at set of shopping list items that have been ordered","properties":{"id":{"type":"integer","readOnly":true,"description":"A unique ID"},"orderlistno":{"type":"integer","readOnly":true,"description":"The number of orderlistno (unique for storeid)"},"note":{"type":"string","nullable":true,"description":"A note"},"orderdate":{"readOnly":true,"type":"string","nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"date when ordered"},"orderids":{"type":"array","nullable":true,"items":{"type":"integer"}},"receiveditems":{"readOnly":true,"type":"integer","description":"Number of shopping list items which have been received"},"itemcount":{"readOnly":true,"type":"integer","description":"Total number of shopping list items on the order"},"invoicesupplierid":{"type":"integer","nullable":true,"description":"Supplier ID to invoice"},"invoiceduedate":{"type":"string","nullable":true,"pattern":"^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$","description":"Set custom invoice duedate to override the normal duedate fetched from the E-conomic supplier. Format according to ISO-8601 (YYYY-MM-DD)."},"invoicedate":{"type":"string","nullable":true,"pattern":"^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$","description":"Set custom invoice date to override committed date. Format according to ISO-8601 (YYYY-MM-DD)."},"invoicesupplier":{"nullable":true,"description":"Supplier object to invoice","readOnly":true,"$ref":"#/components/schemas/Supplier"},"suppliers":{"readOnly":true,"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/Supplier"}},"totalamount":{"readOnly":true,"type":"integer","description":"Total amount of items that needs to be ordered"},"totalreceived":{"readOnly":true,"type":"integer","description":"Total amount of received items"},"totalinorder":{"readOnly":true,"type":"integer","description":"Total amount of items that are still in order"},"totalmovepending":{"readOnly":true,"nullable":true,"type":"integer","description":"Total amount of items that are in a stocktransaction move but not committed yet."},"totalpending":{"readOnly":true,"nullable":true,"type":"integer","description":"Total amount of items that are in a stocktransaction reception but not committed yet."},"total_sent_from_partner":{"readOnly":true,"nullable":true,"type":"integer","description":"Total amount of items that are sent from the partner store."},"partner_order_on_shopping_list":{"readOnly":true,"nullable":true,"type":"integer","description":"Total amount of partner order items that have been added to the shopping list."},"completed":{"readOnly":true,"type":"boolean","description":"1 if the order is completed, 0 otherwise"},"delivereddate":{"readOnly":true,"type":"string","nullable":true,"description":"Date of latest received item if completed"},"invoicenumber":{"readOnly":true,"type":"string","nullable":true,"description":"Invoice number of the shopping list order"},"shippingcost":{"type":"number","nullable":true},"store":{"readOnly":true,"nullable":true,"$ref":"#/components/schemas/Store"}},"required":["orderids"]},"SetShoppingListOrder":{"type":"object","additionalProperties":false,"description":"The body of the request used to create/update a shopping list item.","properties":{"partnerstoreid":{"type":"number","description":"see movestocktostoreid in SetShoppingListItem"},"content":{"$ref":"#/components/schemas/ShoppingListOrder"}},"required":["content"]},"SearchShoppingListOrderResponse":{"type":"object","additionalProperties":false,"description":"The representation of a shopping list search.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ShoppingListOrder"}},"count":{"type":"integer","deprecated":true,"nullable":true,"description":"The total number of items found by the query."},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"ShoppingListReceivedStatus":{"type":"string","enum":["completed","partial","none"]},"ShoppingListTotalCostPrice":{"type":"object","properties":{"totalcostprice":{"type":"number"},"totalamount":{"type":"integer"}},"additionalProperties":false,"description":"Total cost price and total item count of a shopping list"},"ShoppingListTotalCostPriceResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/ShoppingListTotalCostPrice"}}},"ShoppingListOrderPatchRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"object","additionalProperties":false,"description":"Content body for updating the note","properties":{"note":{"type":"string","nullable":true,"description":"New note"},"shippingcost":{"type":"number","nullable":true,"description":"New shipping cost"},"invoicesupplierid":{"type":"integer","nullable":true,"description":"Supplier ID to invoice"},"invoicedate":{"type":"string","nullable":true,"pattern":"^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$","description":"Set custom invoice date to override committed date. Format according to ISO-8601 (YYYY-MM-DD)."},"invoicenumber":{"readOnly":true,"type":"string","nullable":true,"description":"Invoice number of the shopping list order"}}}}},"SMSShortcodeResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/SMSShortcodeItem"}}},"SMSUsageResponse":{"type":"object","description":"Response with the store's current daily SMS usage status. The quota window\nis a fixed 24-hour window anchored to the first SMS sent after the\nprevious window expired; subsequent sends do not extend the window.\n","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","additionalProperties":false,"required":["used","limit","resets_at"],"properties":{"used":{"type":"integer","minimum":0,"description":"Number of SMS segments counted against the daily quota in the\ncurrent 24-hour window. May briefly exceed `limit` because the\ncounter is incremented by the actual number of segments sent per\nmessage (multi-segment SMS each contribute their segment count).\n"},"limit":{"type":"integer","minimum":0,"description":"Maximum allowed SMS segments per 24-hour window for this store."},"resets_at":{"type":"string","format":"date-time","nullable":true,"description":"ISO-8601 timestamp of when the current window resets — i.e. 24\nhours after the first SMS sent in the window. Null when no SMS\nhave been sent in the current window.\n"}}}}},"SMSResponse":{"type":"object","additionalProperties":false,"properties":{"batchid":{"type":"integer","nullable":false,"description":"The batch id that the SMS jobs were added to"}}},"SMSShortcodeItem":{"type":"object","additionalProperties":false,"nullable":true,"properties":{"shortcode":{"type":"string","description":"The shortcode or \"phone number\""},"last_used":{"type":"string","description":"When the shortcode was last used","nullable":true}}},"SMSResponseItem":{"type":"object","additionalProperties":false,"properties":{"customerid":{"type":"integer","nullable":true},"phone":{"type":"string","nullable":false},"smslogid":{"type":"integer","nullable":false}}},"SendSMSItem":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"object","required":["phone"],"additionalProperties":false,"properties":{"customerid":{"nullable":true,"type":"integer"},"phone":{"nullable":false,"type":"string","description":"The customer the provided tag values apply to."},"tagvalues":{"nullable":true,"type":"array","items":{"type":"string"}}}}}},"SendSMS":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"object","required":["message"],"additionalProperties":false,"properties":{"message":{"nullable":false,"minLength":1,"type":"string"},"sendtime":{"type":"string","nullable":true,"description":"The time of when to send the sms"},"batchid":{"type":"integer","nullable":true,"description":"The batch id of the existing SMS bulk job batch (if it exists)"},"template":{"nullable":true,"$ref":"#/components/schemas/SMSTemplate","default":"SMSTemplateEmpty","description":"Sms template used so send this message"},"items":{"nullable":false,"type":"array","items":{"$ref":"#/components/schemas/SendSMSItem","description":"Recipients to send the given text message."}},"tags":{"nullable":true,"description":"Tags in the given text message to be replaced by tag values associated with the individual recipient.","type":"array","items":{"type":"string"}},"sync":{"type":"boolean","description":"If true the sms will be sent synchronously and the response will contain the sms log ids for each recipient.","default":false}}}}},"SMSLog":{"type":"object","additionalProperties":false,"description":"A logged SMS","properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique SMSLog ID"},"message":{"type":"string","nullable":true},"size":{"nullable":true,"type":"integer","readOnly":true,"example":2,"description":"The actual SMS count after the message has been split into 160 character segments"},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}"},"phone_e164":{"type":"string","nullable":true,"description":"The phoneno in E164 format"},"gateway_id":{"type":"integer","nullable":true,"readOnly":true,"example":1000},"gateway_status":{"type":"string","nullable":true,"readOnly":true,"deprecated":true,"example":"DELIVERED","description":"The status of the SMS reported by the gateway system. See https://gatewayapi.com/docs/rest.html#webhooks"},"gateway_time":{"type":"integer","nullable":true,"readOnly":true,"example":1576748431,"description":"A unix timestamp of the moment the latest gateway_status was reported by the gateway."},"sendtime":{"type":"string","nullable":true,"readOnly":true,"description":"The time of the message that should be sent."},"status":{"type":"string","nullable":true,"readOnly":true,"example":"DELIVERED","$ref":"#/components/schemas/SMSStatus","description":"The status of the SMS"},"inbound":{"type":"integer","readOnly":true,"example":1,"description":"If 1 the message is an inbound message from the customer"},"country":{"nullable":false,"readOnly":true,"type":"string","description":"The country code of where the sms was sent to (set by gateway api)","example":"DK"},"userid":{"nullable":false,"type":"integer","readOnly":true,"description":"Userid of who sent this sms, currently faked using ticket comment"},"template":{"readOnly":true,"nullable":true,"type":"string","description":"The template used in this sms, currently faked using ticket comment","example":"sms_task_created"},"encoding":{"readOnly":true,"nullable":true,"type":"string","enum":["gsm7","ucs2"]},"error_status":{"type":"string","nullable":true,"readOnly":true,"example":"PAYMENT_FAILED","description":"The error status of the SMS from the batch relation"}}},"SMSLogBatchListResponse":{"type":"object","description":"Response when requesting customer sms log","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/SMSLogBatch"}},"count":{"type":"number","description":"The total number of batches"}}},"SMSLogBatch":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"number","readOnly":true,"description":"The ID of the SMSLog batch"},"message":{"type":"string","description":"The message that was sent in this batch"},"created_at":{"type":"string","description":"The unix timestamp of when the batch was created"},"message_count":{"nullable":true,"type":"integer","readOnly":true,"example":2,"description":"The number of SMS messages contained in this batch"},"user":{"description":"User that sent this batch","readOnly":true,"additionalProperties":false,"nullable":true,"type":"object","properties":{"name":{"type":"string"},"id":{"type":"number"}}}}},"SMSLogBatchResponse":{"type":"object","description":"Response when requesting customer sms batch log details","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/SMSLog"}},"count":{"type":"integer","description":"The number of SMS messages contained in this batch"},"delivered_count":{"type":"number","description":"The total number of delivered messages"},"failed_count":{"type":"number","description":"The total number of failed messages (eligble for retry)"},"processing":{"type":"boolean","description":"Whether or not the batch is still processing (true after initial sending or after retrying)"}}},"SmsLogListResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/SMSLog"}}}},"SMSLogBatchRetryResponse":{"type":"object","description":"Response when retrying a batch of SMS messages","additionalProperties":false,"properties":{"content":{"type":"object","properties":{"count":{"type":"integer","nullable":false,"description":"The number of SMS messages that were retried"}},"additionalProperties":false}}},"SMSTemplate":{"type":"string","enum":["SMSTemplateTaskCreated","SMSTemplateTaskDone","SMSTemplateTaskDoneSale","SMSTemplateTaskSale","SMSTemplateEmpty","SMSTemplateReceipt","SMSTemplateSalesOrderAccepted","SMSTemplateSalesOrderReadyPickup","SMSTemplateSalesOrderShipped","SMSTemplateCustom_1","SMSTemplateCustom_2","SMSTemplateCustom_3","SMSTemplateCustom_4","SMSTemplateCustom_5","SMSTemplateCustom_6","SMSTemplateCustom_7","SMSTemplateCustom_8","SMSTemplateCustom_9","SMSTemplateCustom_10","SMSTemplateServiceNotification","SMSTemplateBookingConfirmation","SMSTemplatePayByLink"]},"SMSStatus":{"type":"string","enum":["RECEIVED","UNDELIVERABLE","SCHEDULED","SENT","DELIVERED","DELETED","FAILED"]},"SmsSizeRequest":{"type":"object","description":"Request when generating estimate of number of required segments","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","required":["message"],"properties":{"message":{"type":"string","nullable":true,"description":"The message that should be estimated."}},"additionalProperties":false}}},"SmsSizeEstimate":{"type":"object","description":"Response when generating estimate of number of required segments","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","required":["size"],"properties":{"size":{"type":"integer","nullable":false,"description":"Estimated number of segments"}},"additionalProperties":false}}},"SearchStockTransactionResponse":{"type":"object","additionalProperties":false,"description":"The response of a stock transaction search.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/StockTransaction"}},"count":{"type":"integer","deprecated":true,"nullable":true,"description":"The total number of items found by the query if ignoring pagination."},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for next page when using cursor based pagination."}}},"StockTransaction":{"type":"object","additionalProperties":false,"description":"Apply relative stock change to a product. If you want to apply a absolute change to a product stock. Set the value using PUT /product/{id} on stockno.","properties":{"id":{"type":"integer","nullable":true,"readOnly":true,"description":"A unique transaction ID"},"productid":{"type":"integer","nullable":true,"description":"a reference to product ID."},"addtostock":{"nullable":true,"type":"integer","default":null,"description":"Number of items to add to the stock for the product. The value can be negative if some items are removed from the stock."},"costpriceofaddeditems":{"nullable":true,"type":"number","format":"double","description":"The pr. unit cost price of the added items. The costprice of the product will be set to average of the current costprice and the costprice of the added items"},"foreign_costpriceofaddeditems":{"nullable":true,"type":"number","format":"double","description":"The cost price of the added items in the exchange rate currency used on the stock transaction list."},"totalcostpriceofaddeditems":{"nullable":true,"type":"number","format":"double","description":"The total cost price of the added items. If `costpriceofaddeditems` is left blank you can specify a total costprice in this field. Use this to avoid rounding errors."},"foreign_totalcostpriceofaddeditems":{"nullable":true,"type":"number","format":"double","description":"The total cost price of the added items in the exchange rate currency used on the stock transaction list."},"expectedtotalcostprice":{"type":"number","description":"Used to check that `costprice` and `amount` is correct by verifying that `amount * costprice = expectedtotalcostprice`","format":"double","nullable":true,"example":29.95},"reason":{"type":"string","nullable":true,"maxLength":50,"description":"The logged reason for stock change"},"stocktransactionlistid":{"nullable":true,"type":"integer","default":null,"description":"Stock transactions can be grouped into lists and all applied as a single transaction. See stock transaction list."},"stocktransactionlist":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/StockTransactionList","description":"The list object refered to by stocktransactionlistid"},"stocknoafter":{"nullable":true,"readOnly":true,"type":"integer","description":"The product stock number right after the transaction was applied"},"absoluteoverwrite":{"type":"integer","enum":[0,1],"readOnly":true,"description":"Indicates the stock transactions is an absolute adjustment of stock number and costprice. You can do an absolute adjustment by changing costprice or stockno when updating a product using the product endpoint."},"commit":{"type":"integer","default":1,"description":"Set to 1 if you want the stock transaction to be applied. Once commited a transaction cannot be changed. If the value is 0, the stock transaction is saved and can be committed by later setting commit = 1. Note, by default all stock transactions are committed. Use 0 to create draft transactions that will later be commiited."},"committeddate":{"type":"string","nullable":true,"readOnly":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Date when the stock transaction was commited. Null if not committed"},"commitorder":{"type":"integer","nullable":true,"readOnly":true,"description":"An incremental value which can be used to lookup the commitorder for a specific product."},"createddate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Created date."},"product":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/Product","description":"The product object refered to by productid."},"miscdata":{"type":"string","nullable":true,"maxLength":150,"description":"Use to save any misc data with the transaction. Misc data will be cleared when transaction is commited"},"pospaymentmaterialid":{"nullable":true,"type":"number","readOnly":true,"description":"pospaymentmaterial id if transaction was triggered by a sale"},"pospaymentmaterial":{"type":"object","nullable":true,"description":"payment material object refered to by pospaymentmaterialid","readOnly":true,"properties":{"paymentid":{"type":"integer"},"id":{"type":"integer"},"returntagid":{"type":"integer","nullable":true}},"additionalProperties":false},"fulfillmentmaterialid":{"nullable":true,"type":"number","readOnly":true,"description":"fulfillmentmaterial id if transaction was triggered by a salesorder order fulfillment"},"fulfillmentmaterial":{"type":"object","nullable":true,"description":"fulfillment material object refered to by fulfillmentmaterialid","readOnly":true,"properties":{"id":{"type":"integer"},"sales_order_fulfillment_id":{"type":"integer"}},"additionalProperties":false},"orderid":{"nullable":true,"type":"number","description":"set if the stock transaction was created from a shopping list item"},"order":{"nullable":true,"readOnly":true,"description":"The order refered to by orderid","$ref":"#/components/schemas/ShoppingListItem"},"costpriceavg":{"type":"number","readOnly":true,"nullable":true,"format":"double","description":"The average stock value of the product at the time of the transaction"},"totalstockvalueavg":{"type":"number","nullable":true,"readOnly":true,"format":"double","description":"The total average stock value of the product at the time of the transaction"},"totalstockvaluefifo":{"type":"number","readOnly":true,"nullable":true,"format":"double","deprecated":true},"totalcostpricefifo":{"type":"number","readOnly":true,"nullable":true,"format":"double","deprecated":true},"userid":{"nullable":true,"readOnly":true,"type":"integer","description":"Id of user who made the stocktransaction"},"stocktransactiontagid":{"type":"integer","nullable":true,"description":"Id of the StockTransactionTag attached to the transaction"},"stocktransactiontag":{"nullable":true,"description":"The tag","$ref":"#/components/schemas/StockTransactionTag"},"fromstocktransactionid":{"type":"integer","nullable":true,"description":"Id of the stocktransaction that was created from the partner store"}}},"StockTransactionResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/StockTransaction"}}},"SetStockTransaction":{"type":"object","additionalProperties":false,"properties":{"partnerstoreid":{"type":"integer","default":null,"description":"Save transaction at partner store"},"content":{"$ref":"#/components/schemas/StockTransaction"}}},"StockTransactionListType":{"type":"string","enum":["reception","count","move"]},"StockTransactionList":{"type":"object","additionalProperties":false,"description":"A list of stock transactions. Set commit = 1 to commit all transactions in a list.","properties":{"id":{"type":"integer","nullable":true,"readOnly":true,"description":"A unique ID"},"note":{"type":"string","nullable":true,"maxLength":65535,"description":"a free text note"},"created":{"readOnly":true,"type":"string","nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"created date"},"committeddate":{"type":"string","readOnly":true,"nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"If the inventory list is booked"},"commit":{"type":"integer","readOnly":true,"default":0,"description":"PUT with value 1 to commit all stock transactions in the list. If type == \"move\", a stock move is done, if type == \"reception\" a stock reception is done"},"movetostoreid":{"type":"integer","nullable":true,"example":null,"description":"The store id of the partner to move the stock to. Can only be set if type = move"},"movetostoretransactionlist":{"type":"object","nullable":true,"additionalProperties":false,"properties":{"id":{"type":"integer","nullable":true,"readOnly":true,"description":"A unique ID"},"committeddate":{"type":"string","readOnly":true,"nullable":true,"pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"If the inventory list is booked"}}},"fromstocktransactionlistid":{"type":"integer","nullable":true,"description":""},"fromListNo":{"type":"integer","nullable":true,"description":"Assigned list number generated by a stock movement from partner store","readOnly":true},"fromstore":{"$ref":"#/components/schemas/Store","nullable":true,"description":"Is included if present and includefromstore is 1, otherwise null."},"orderlistno":{"type":"integer","nullable":true,"description":"The orderlist no of the attached orderlist","readOnly":true},"inventorycountreportid":{"type":"integer","nullable":true,"description":"The  id of report that was created on inventory count","readOnly":true},"reportno":{"type":"integer","nullable":true,"description":"The report number of the attached report","readOnly":true},"listno":{"type":"integer","nullable":true,"description":"Sequentially generated list number","readOnly":true},"invoicenumber":{"type":"string","nullable":true,"description":"The stock transaction lists invoice number"},"invoicedate":{"type":"string","nullable":true,"description":"The stock transaction lists invoice date"},"shippingcost":{"type":"number","nullable":true,"description":"Shipping cost of the stock transaction list"},"orderlistid":{"type":"integer","nullable":true,"description":"The id of the orderlistid which the stocktransaction list was created from"},"partnersyncdate":{"type":"string","nullable":true,"description":"The date the stock transaction list was synced to an external service (e.g. E-conomic)"},"exchangerateid":{"type":"number","nullable":true,"description":"The id of the foreign exchange rate used for the stock transaction list (if any)"},"exchangerate":{"$ref":"#/components/schemas/ExchangeRate"},"store":{"$ref":"#/components/schemas/Store"},"type":{"$ref":"#/components/schemas/StockTransactionListType"},"totalcostprice":{"type":"number","readOnly":true,"nullable":true,"description":"Sum of costprice across the list's stock transactions. Null for uncommitted lists or any list that is not of type `reception`."},"userid":{"type":"integer","readOnly":true,"nullable":true,"description":"Id of the user who created/committed the stocktransaction"},"user":{"description":"The user referred to by userid","readOnly":true,"additionalProperties":false,"nullable":true,"type":"object","properties":{"name":{"type":"string"},"id":{"type":"number"}}}}},"StockTransactionTag":{"type":"object","additionalProperties":false,"properties":{"id":{"nullable":true,"type":"integer","readOnly":true},"title":{"type":"string"},"handle":{"type":"string","nullable":true}}},"InvalidProductsInPartnerStoreItem":{"type":"object","additionalProperties":false,"properties":{"orderId":{"type":"number","description":"The order id"},"actualPartnerStockNo":{"type":"number","nullable":true,"description":"The partner's actual stockno"},"partnerHasProduct":{"type":"boolean","description":"Whether or not the partner has the product"},"order":{"$ref":"#/components/schemas/ShoppingListItem"},"product":{"$ref":"#/components/schemas/Product"}}},"InvalidProductsInPartnerStore":{"type":"object","additionalProperties":false,"properties":{"hasInvalidOrders":{"type":"boolean","description":"Whether or not there are any invalid orders"},"content":{"type":"array","items":{"$ref":"#/components/schemas/InvalidProductsInPartnerStoreItem"}}}},"SetStockTransactionList":{"type":"object","additionalProperties":false,"description":"The body of the request used to create/update products.","properties":{"partnerstoreid":{"type":"integer","nullable":true,"default":null,"description":"Save transaction at partner store"},"content":{"$ref":"#/components/schemas/StockTransactionList"}}},"StockTransactionListResponse":{"type":"object","nullable":true,"properties":{"content":{"$ref":"#/components/schemas/StockTransactionList"},"totalcostprice":{"type":"number","description":"Sum of costprice"},"addtostocksum":{"type":"number","description":"Sum of all `addtostock`"},"errors":{"type":"array","nullable":true,"items":{"$ref":"#/components/schemas/StockTransactionListResponseError"}}},"additionalProperties":false},"StockTransactionListResponseError":{"type":"object","properties":{"errorcode":{"type":"string","description":"Identifier of the error","enum":["INVALID_PRODUCTS","INVALID_STOCK_COUNT","NO_MOVE_TARGET","INVALID_TOTAL_COSTPRICE","INVALID_SERIENO","INVALID_SERIENO_STOCK"]},"message":{"type":"string","description":"Description of the error"}},"additionalProperties":false},"StockTransactionListSearchResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/StockTransactionList"}},"count":{"type":"integer","deprecated":true,"example":5,"description":"Number of available items, if ignoring pagination."},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}},"additionalProperties":false},"StockTransactionCommitRequest":{"oneOf":[{"$ref":"#/components/schemas/StockTransactionCommitRequestCreateList"},{"$ref":"#/components/schemas/StockTransactionCommitRequestAddToList"}]},"StockTransactionCommitRequestCreateList":{"type":"object","required":["mode","paginationStart","paginationLength"],"properties":{"mode":{"type":"string","enum":["create_list"]},"paginationStart":{"type":"number"},"paginationLength":{"type":"number"}},"additionalProperties":false},"StockTransactionCommitRequestAddToList":{"type":"object","required":["mode","failureList","paginationStart","paginationLength"],"properties":{"mode":{"type":"string","enum":["add_to_list"]},"failureList":{"type":"number"},"paginationStart":{"type":"number"},"paginationLength":{"type":"number"}},"additionalProperties":false},"StockTransactionCommitResponse":{"type":"object","properties":{"failed":{"type":"object","properties":{"content":{"type":"array","nullable":true,"items":{"type":"object","properties":{"transaction":{"$ref":"#/components/schemas/StockTransaction"},"error":{"type":"string"}},"additionalProperties":false}},"count":{"type":"number","nullable":true}},"additionalProperties":false},"succeeded":{"type":"object","nullable":true,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/StockTransaction"}},"count":{"type":"number","nullable":true}},"additionalProperties":false},"failedListId":{"type":"number","nullable":true}},"additionalProperties":false},"StockTransactionTagRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/StockTransactionTag"}}},"StockTransactionTagResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/StockTransactionTag"}}},"StockTransactionTagsResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/StockTransactionTag"}}}},"SupplierRequest":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Supplier"}}},"SupplierResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/Supplier"}}},"ListSupplierResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Supplier"}},"count":{"deprecated":true,"type":"number"},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}}},"TicketAutoComment":{"type":"string","enum":["status_ready","status_new","status_done","status_awaiting","status_cancelled","status_quote","assignee_changed","email_other","sms_task_done","sms_task_created","sms_other","sms_inbound_response"]},"TicketComment":{"type":"object","properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique TicketComment ID"},"taskid":{"type":"integer","example":1},"userid":{"type":"integer","example":1},"comment":{"type":"string","example":"A comment"},"autocomment":{"type":"string","nullable":true,"example":"sms_task_created"},"created":{"type":"string","readOnly":true,"example":"2019-08-27 10:00:00"},"smslogid":{"type":"integer","readOnly":true,"nullable":true},"smslog":{"nullable":true,"readOnly":true,"$ref":"#/components/schemas/SMSLog"}},"additionalProperties":false},"SetTicketComment":{"type":"object","description":"The body of the request used for creating / updating TicketComments","properties":{"content":{"$ref":"#/components/schemas/TicketComment"}},"additionalProperties":false},"TicketCommentListResponse":{"type":"object","description":"Response when requesting a list of ticket comments based on some filters.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/TicketComment"}},"count":{"type":"integer","deprecated":true,"nullable":true,"example":5,"description":"Number of ticket comments"},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}},"additionalProperties":false},"TicketCommentResponse":{"type":"object","description":"Response when requesting a ticket comment","properties":{"content":{"$ref":"#/components/schemas/TicketComment"}},"additionalProperties":false},"TicketFile":{"type":"object","properties":{"id":{"type":"integer","readOnly":true,"description":"A unique TicketFile","example":1},"taskid":{"type":"integer","example":1},"s3id":{"type":"string","example":1},"filename":{"type":"string","example":"image.png"},"size":{"type":"integer","example":1024},"mime":{"type":"string","example":"image/png"},"src":{"type":"string","example":null}},"additionalProperties":false},"TicketFileListResponse":{"type":"object","description":"Response when requesting a list of task files based on some filters.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/TicketFile"}},"count":{"type":"integer","deprecated":true,"nullable":true,"example":5,"description":"Number of ticket comments"},"hasMore":{"type":"boolean","description":"True if there are data to retrieve than the given page length"}},"additionalProperties":false},"TicketFileResponse":{"type":"object","description":"Response when requesting a task file","properties":{"content":{"$ref":"#/components/schemas/TicketFile"}},"additionalProperties":false},"SetTicketMaterial":{"type":"object","description":"The body of the request used for creating / updating TicketMaterials","properties":{"content":{"$ref":"#/components/schemas/TicketMaterial"},"positionaftermaterialid":{"type":"number","nullable":true,"description":"If this is set, the position of this material will be between positionaftermaterialid and the material below if (if it exists)"},"positionbeforematerialid":{"type":"number","nullable":true,"description":"If this is set, the position of this material will be between positionbeforematerialid and the material above if (if it exists)"}},"additionalProperties":false},"TicketMaterialListResponse":{"type":"object","description":"Response when requesting a list of task materials based on some filters.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/TicketMaterial"}},"count":{"type":"integer","deprecated":true,"nullable":true,"example":5,"description":"Total number of materials matching the filters, ignoring pagination"},"hasMore":{"type":"boolean","description":"True if there are more materials to retrieve beyond the returned page"}},"additionalProperties":false},"TicketMaterialResponse":{"type":"object","description":"Response when requesting a list of task materials based on some filters.","properties":{"content":{"$ref":"#/components/schemas/TicketMaterial"}},"additionalProperties":false},"TicketTagResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/TicketTag"}}},"SetTicketTag":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/TicketTag"}}},"TicketTag":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique ticket ID"},"label":{"type":"string","example":"Bestillingsvarer"},"color":{"type":"string","nullable":true,"example":"#ff0039"},"handle":{"type":"string","nullable":true,"description":"Unique handle for the produttag. Will be set automatically if not set. This value cannot be changed."}}},"SearchTicketTag":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/TicketTag"}}}},"Ticket":{"type":"object","description":"A ticket representing a repair or work task.","properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique ticket ID"},"customerid":{"type":"integer","example":234,"description":"The ID of the customer.","nullable":true},"customer":{"readOnly":true,"nullable":true,"$ref":"#/components/schemas/Customer"},"customerarticleids":{"type":"array","items":{"type":"integer","nullable":true,"example":789,"description":"The ID of the article associated with ticket (if any)."}},"customerarticles":{"type":"array","readOnly":true,"items":{"$ref":"#/components/schemas/CustomerArticle"}},"assignee":{"type":"integer","nullable":true,"example":555,"description":"The ID of the employee assigned to the ticket."},"createByUserId":{"type":"integer","nullable":true,"example":555,"description":"The ID of the employee who created the ticket."},"assigneeName":{"type":"string","readOnly":true,"example":"Brian","nullable":true,"description":"The name of the employee assigned to the ticket."},"createByUserName":{"type":"string","readOnly":true,"example":"John","nullable":true,"description":"The name of the user that created the ticket."},"cardno":{"type":"string","example":"456","nullable":true,"description":"An identifier for the ticket. This will default to next auto incremented value if not set"},"autoincrementno":{"type":"integer","readOnly":true,"deprecated":true,"nullable":true,"example":100,"description":"A unique auto incrementing ID for the ticket"},"description":{"type":"string","example":"Bremsejustering (bag)","description":"A description of what will or has been done.","nullable":true},"created":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","readOnly":true,"example":"2018-08-01 14:00:00"},"startTime":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","nullable":true,"example":"2018-08-03 16:15:00"},"pickup":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","nullable":true,"example":"2018-08-03 17:15:00"},"payments":{"type":"array","items":{"$ref":"#/components/schemas/POSPayment"}},"paid":{"type":"boolean","readOnly":true},"agreedPrice":{"type":"number","nullable":true,"format":"double","example":99.95,"description":"Price agreed with customer incl. VAT"},"numComments":{"type":"integer","readOnly":true,"example":3,"description":"How many comments exist on the ticket."},"totalPrice":{"type":"number","readOnly":true,"format":"double","example":99.95,"description":"Total price of the all materials incl. VAT","nullable":true},"draft":{"type":"integer","example":1,"description":"Whether or not the ticket is in draft mode"},"tags":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/TicketTag"}},"tagids":{"type":"array","items":{"type":"number"}},"status":{"$ref":"#/components/schemas/TicketStatus"},"type":{"$ref":"#/components/schemas/TicketType"},"taskserviceid":{"type":"integer","nullable":true,"description":"Id of a task service attached to the task"},"storeid":{"type":"integer","nullable":false,"description":"ID of the owning store"},"payingcustomerid":{"type":"integer","nullable":true,"description":"If payingcustomerid is set, it will use payingcustomerid as customer when the ticket is paid"},"payingcustomer":{"readOnly":true,"nullable":true,"$ref":"#/components/schemas/Customer"},"contactcustomerid":{"type":"integer","nullable":true,"description":"The primary contact customer who will receive SMS"},"contactcustomer":{"readOnly":true,"nullable":true,"$ref":"#/components/schemas/Customer"},"templates":{"type":"array","readOnly":true,"nullable":true,"items":{"$ref":"#/components/schemas/TicketTemplateRelation"}},"updated_at":{"type":"string","nullable":true,"example":"2022-03-10 00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Timestamp for when the last time the customer is updated."},"deleted_at":{"type":"string","nullable":true,"example":"2022-03-10 00:00:00","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","description":"Timestamp for when the ticket was deleted"},"permission":{"nullable":false,"readOnly":true,"description":"Your permission to the task.","$ref":"#/components/schemas/PartnerPermissionAccess"},"workload":{"nullable":false,"description":"The estimated work load of this task. Has to be a positive decimal number.","example":1.25,"default":1,"type":"number"},"expected_minutes":{"type":"integer","readOnly":true,"example":35,"description":"Total expected work time in minutes of the ticket's task lines. Lines without an estimate count as 0."},"override_vat":{"type":"number","format":"double","nullable":true,"description":"Legacy. Snapshot of the override VAT rate as a percentage. New clients should set `override_vat_type_id` instead; this field is then maintained server-side to reflect the rate of the assigned VAT type.","example":12},"override_vat_type_id":{"nullable":true,"type":"integer","description":"The id of the VAT type used to override the VAT rate on this ticket's materials. When set, the override uses the rate of the referenced VAT type and `override_vat` is kept in sync."},"override_vat_type":{"readOnly":true,"nullable":true,"description":"The VAT type referenced by `override_vat_type_id`.","$ref":"#/components/schemas/VatType"}},"required":["status","type"],"additionalProperties":false},"TicketStatus":{"type":"string","enum":["new","ready","done","awaiting","quote","draft"]},"TicketType":{"type":"string","enum":["repair","sale"]},"TicketCountResponse":{"type":"object","description":"Response when requesting a list tickets based on some filters.","properties":{"new":{"type":"integer","example":5},"ready":{"type":"integer","example":2},"awaiting":{"type":"integer","example":7}},"additionalProperties":false},"TicketListResponse":{"type":"object","description":"Response when requesting a list tickets based on some filters.","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Ticket"}},"count":{"type":"integer","deprecated":true,"nullable":true,"example":5,"description":"Number of available tickets, if ignoring pagination. Only set when the `count` query parameter is `true`, otherwise null."},"hasMore":{"type":"boolean","description":"True if there are more tasks than the given page length"},"nextCursor":{"type":"string","nullable":true,"description":"Cursor for next page when using cursor based pagination."}},"additionalProperties":false},"TicketResponse":{"type":"object","description":"A ticket response","properties":{"storeid":{"type":"integer"},"content":{"$ref":"#/components/schemas/Ticket"}},"additionalProperties":false},"TicketRequest":{"type":"object","description":"The body of the request used for creating / updating tickets","properties":{"content":{"$ref":"#/components/schemas/Ticket"}},"additionalProperties":false},"TicketStoreCapacityResponse":{"type":"object","description":"Response when requesting the store's daily ticket capacity for a startdate","properties":{"content":{"type":"object","properties":{"remainingTicketCapacity":{"type":"number"}},"additionalProperties":false}},"additionalProperties":false},"TicketTemplate":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique ticket ID"},"label":{"type":"string","example":"Bestillingsvarer"},"expected_minutes":{"type":"integer","nullable":true,"minimum":0,"maximum":65535,"example":15,"description":"Expected work time in minutes for this task. Null means no estimate has been given; 0 means the task takes no time. Omitting it on update keeps the current value."},"groupid":{"type":"integer","readOnly":true,"description":"Which TicketTemplateGroup this TicketTemplate applies to"},"created_at":{"type":"string","readOnly":true,"nullable":true},"updated_at":{"type":"string","readOnly":true,"nullable":true},"handle":{"type":"string","nullable":true,"description":"Unique handle for tasktemplates. Will be set automatically if not set"},"position":{"type":"number","description":"Number used to determine the order of the TaskTemplate"},"note":{"type":"string","readOnly":false,"nullable":true},"duedate":{"type":"string","readOnly":false,"nullable":true}}},"TemplateRelationStatus":{"type":"string","nullable":false,"default":"initialized","enum":["initialized","completed"]},"TicketTemplateRelation":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"An id for the relation."},"ticketid":{"type":"integer","readOnly":true,"example":1,"description":"Task Id for the relation"},"templateid":{"type":"integer","readOnly":true},"template":{"readOnly":true,"$ref":"#/components/schemas/TicketTemplate"},"note":{"type":"string","maxLength":1000,"nullable":true,"example":"Task template relation note"},"duedate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","nullable":true,"example":"2024-08-03 17:15:00"},"updated_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","nullable":true,"example":"2023-08-03 17:15:00"},"created_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","nullable":true,"example":"2023-08-03 17:15:00"},"notified_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}[T ]?\\d{2}:\\d{2}:\\d{2}","nullable":true,"example":"2023-08-03 17:15:00"},"status":{"nullable":true,"$ref":"#/components/schemas/TemplateRelationStatus"},"status_changed_by_userid":{"type":"integer","nullable":true,"example":3,"description":"The ID of the employee who last check-marked the task template."},"timespent":{"type":"integer","nullable":true,"description":"Allocated time on task"},"expected_minutes":{"type":"integer","nullable":true,"readOnly":true,"example":15,"description":"Expected work time in minutes, copied from the task template when it was added to the ticket. Use this rather than template.expected_minutes, which reflects the current template."},"position":{"type":"number","description":"Number used to determine the order of the TaskTemplate"},"label":{"type":"string","deprecated":true,"readOnly":true,"description":"use template.label"},"handle":{"type":"string","readOnly":true,"deprecated":true,"description":"use template.handle"},"groupid":{"readOnly":true,"type":"integer","deprecated":true,"description":"use template.groupid"}}},"AutoCreateServiceNotices":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","description":"Array of customer article ids","items":{"type":"number"}},"protect":{"type":"boolean","default":true,"description":"only allow to add servicenotices to customer articles that have no servicenotices beforehand"},"useoriginaldate":{"type":"boolean","default":false,"description":"Use the latest selling date from each customer article as the origin date instead of using the date of today. Only servicenotifications that are on dates after today are generated"}}},"AutoCreateServiceNoticesResponse":{"type":"object","description":"Responses for autocreating for each customerarticle","additionalProperties":false,"properties":{"content":{"type":"array","description":"Array of responses with success status","items":{"$ref":"#/components/schemas/AutoCreateServiceNoticesResponseItem"}}}},"AutoCreateServiceNoticesResponseItem":{"type":"object","description":"Response for a customerarticle","additionalProperties":false,"properties":{"id":{"type":"integer","description":"customer article id"},"success":{"type":"boolean","description":"true if success, false if it failed to create servicenotices"},"message":{"nullable":true,"type":"string","description":"Exception message of a failed creation of servicenotices"}}},"BulkDeleteServiceNotices":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","description":"Array of customer article ids","items":{"type":"number"}}}},"BulkDeleteServiceNoticesResponse":{"type":"object","description":"Response for bulk deleting service notices for each customerarticle","additionalProperties":false,"properties":{"content":{"type":"array","description":"Array of responses with success status","items":{"$ref":"#/components/schemas/BulkDeleteServiceNoticesResponseItem"}}}},"BulkDeleteServiceNoticesResponseItem":{"type":"object","description":"Response for a customerarticle","additionalProperties":false,"properties":{"id":{"type":"integer","description":"customer article id"},"success":{"type":"boolean","description":"true if success, false if it failed to delete servicenotices"},"message":{"nullable":true,"type":"string","description":"Exception message of a failed deletion of servicenotices"}}},"TicketTemplateResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/TicketTemplate"}}},"SetTicketTemplate":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/TicketTemplate"},"positionAfterId":{"type":"number","nullable":true,"description":"If this is set, the position of this TicketTemplate will be between positionaftermaterialid and the TicketTemplate below if (if it exists)"},"positionBeforeId":{"type":"number","nullable":true,"description":"If this is set, the position of this TicketTemplate will be between positionbeforematerialid and the TicketTemplate above if (if it exists)"}}},"SearchTicketTemplate":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/TicketTemplate"}}}},"TicketTemplateGroupResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/TicketTemplateGroup"}}},"SetTicketTemplateGroup":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/TicketTemplateGroup"},"positionAfterId":{"type":"number","nullable":true,"description":"If this is set, the position of this TicketTemplateGroup will be between positionafterid and the TicketTemplateGroup below it (if it exists)"},"positionBeforeId":{"type":"number","nullable":true,"description":"If this is set, the position of this TicketTemplateGroup will be between positionbeforeid and the TicketTemplateGroup above it (if it exists)"},"widgetids":{"type":"array","nullable":true,"description":"Optional list of booking widget IDs to attach this new group to. Only applied on create when tickettype is booking.","items":{"type":"integer"}}}},"TicketTemplateGroup":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique group ID"},"name":{"type":"string","example":"Food"},"tickettype":{"$ref":"#/components/schemas/TicketTemplateType"},"created_at":{"type":"string","readOnly":true},"updated_at":{"type":"string","readOnly":true},"position":{"type":"number","description":"Number used to determine the order of the TicketTemplateGroup"}}},"SearchTicketTemplateGroup":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/TicketTemplateGroup"}}}},"TicketTemplateType":{"type":"string","enum":["repair","sale","booking"]},"TicketTemplateMaterialResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/TicketTemplateMaterial"}}},"SetTicketTemplateMaterial":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/TicketTemplateMaterial"}}},"TicketTemplateMaterial":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","readOnly":true,"example":1,"description":"A unique group ID","nullable":true},"amount":{"type":"number","description":"Quantity of the material"},"price":{"type":"number","format":"double","nullable":true,"description":"Set to non-null value to overwrite the price from the product"},"title":{"type":"string","nullable":true,"description":"Set to non-null value to overwrite the title from the product"},"derivedprice":{"type":"number","format":"double","readOnly":true,"description":"this will be price if this.price set or product.price"},"productno":{"type":"string","description":"Productno of the associated product"},"tasktemplateid":{"type":"integer","description":"ID of the associated ticket template"},"product":{"nullable":true,"readOnly":true,"description":"A reference to the product object refered to by productid","$ref":"#/components/schemas/Product"},"created_at":{"type":"string","readOnly":true,"nullable":true},"updated_at":{"type":"string","readOnly":true,"nullable":true}},"required":["amount"]},"SearchTicketTemplateMaterial":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/TicketTemplateMaterial"}}}},"SetTicketTemplateRelation":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/TicketTemplateRelation"},"positionAfterId":{"type":"number","nullable":true,"description":"If this is set, the position of this TicketTemplateRelation will be between positionaftermaterialid and the TicketTemplateRelation below if (if it exists)"},"positionBeforeId":{"type":"number","nullable":true,"description":"If this is set, the position of this TicketTemplateRelation will be between positionbeforematerialid and the TicketTemplateRelation above if (if it exists)"}}},"SearchTicketTemplateRelationResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/TicketTemplateRelation"}},"materialsChanged":{"type":"boolean","readOnly":true}}},"TicketTemplateRelationResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/TicketTemplateRelation"}}},"UserRespond":{"additionalProperties":false,"type":"object","properties":{"content":{"$ref":"#/components/schemas/User"},"apitoken":{"type":"string","nullable":true}}},"User":{"additionalProperties":false,"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string"},"email":{"type":"string","nullable":true,"format":"email"},"phone":{"type":"string","nullable":true,"example":"+4533608586","description":"Phone number in E.164 format. Numbers without a country code are interpreted using the store's country."},"amount":{"type":"integer","deprecated":true},"shopuser":{"type":"integer","description":"User is used for selling stuff","enum":[0,1]},"apiuser":{"type":"integer","description":"Api user that cannot login.","enum":[0,1]},"hasPasscode":{"type":"integer","description":"Whether or not the user is protected by a (4 digit) passcode","readOnly":true},"hasPassword":{"type":"integer","description":"Whether or not the user is protected by a password","readOnly":true},"hasPasskey":{"type":"boolean","description":"Whether or not the user has a passkey registered","readOnly":true},"apitoken":{"deprecated":true,"readOnly":true,"type":"string","nullable":true},"restrictions":{"nullable":true,"type":"array","items":{"$ref":"#/components/schemas/UserRestriction"}},"deleted":{"type":"integer","readOnly":true,"description":"1 if the user is a deleted user, 0 otherwise"},"mainuser":{"nullable":false,"type":"number","readOnly":true,"description":"Whether or not the user is the store's main user. This is set on store creation and cannot be changed."},"showincalendar":{"type":"integer","nullable":true,"description":"Whether or not the user should be shown in the calendar."},"newauthuser":{"type":"integer","nullable":true,"deprecated":true,"description":"Whether or not the user is using the new auth system."},"require_mfa":{"type":"integer"},"email_verified_at":{"type":"string","nullable":true}}},"SetUser":{"additionalProperties":false,"type":"object","properties":{"content":{"$ref":"#/components/schemas/User"}}},"SearchUsers":{"additionalProperties":false,"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/User"}}}},"UserRestriction":{"type":"string","enum":["POSBalanceModule","POSBalanceRead","OverviewModule","SettingsModule","StatisticsModule","ProductModule","POSModule","CustomerModule","AdminModule","CustomerEdit","CustomerDelete","CustomerArticleBulk","CustomerBulk","ProductCreate","ProductEdit","ProductDelete","ProductEditBulk","ProductEditStock","ProductEditCostprice","TaskModule","TaskCreate","TaskDelete","TaskEdit","TaskEditCardNo","SettingsUserRestrictions","ViewCostprice","GiftCardModule","GiftCardDelete","EditLoyaltyConfigs","AdjustLoyaltyBalance","OrderingProductsDeleteAll","SalesOrderModule","PromotionsModule","POSManualDiscount","POSEditPrice"]},"SetPasswordResponse":{"type":"object","properties":{"apitoken":{"type":"string","description":"The API token of the new user"}},"additionalProperties":false},"IdentityCredential":{"type":"object","additionalProperties":true,"description":"Credential for verifying user identity. Either currentPassword (password-based) or passkey fields.","properties":{"email":{"type":"string","nullable":true,"description":"Required when not authenticated via API token"},"currentPassword":{"type":"string","nullable":true,"description":"Required if user has a password and not using passkey"},"id":{"type":"string","nullable":true,"description":"Passkey credential ID"},"rawId":{"type":"string","nullable":true,"description":"Passkey raw credential ID"},"response":{"type":"object","nullable":true,"description":"Passkey assertion response","properties":{"authenticatorData":{"type":"string"},"clientDataJSON":{"type":"string"},"signature":{"type":"string"},"userHandle":{"type":"string","nullable":true}},"additionalProperties":false},"type":{"type":"string","nullable":true,"description":"Passkey credential type"},"remember":{"type":"boolean","nullable":true},"sessionKey":{"type":"string","nullable":true,"description":"Session key for passkey challenge lookup"}}},"UpdateUserProfileRequest":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string"},"email":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true,"example":"+4533608586","description":"Phone number in E.164 format. Leave out to keep the current phone number."},"newPassword":{"type":"string","nullable":true,"description":"Leave empty to keep current password"},"credential":{"nullable":true,"$ref":"#/components/schemas/IdentityCredential"}}},"UpdateUserProfileResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/User"},"apitoken":{"type":"string","nullable":true,"description":"New API token if password was changed"}}},"SupplierSalesReportRow":{"type":"object","additionalProperties":false,"required":["storeid","productid","productno","barcode","quantity_sold","quantity_returned","cost_price_sum","sales_price_sum"],"properties":{"storeid":{"type":"integer","description":"Connected store these sales belong to."},"productid":{"type":"integer","description":"Unique id of the product within the connected store."},"productno":{"type":"string","nullable":true,"description":"Product number of the sold product."},"barcode":{"type":"string","description":"Barcode of the sold product."},"quantity_sold":{"type":"number","minimum":0,"description":"Amount of times the product has been sold."},"quantity_returned":{"type":"number","minimum":0,"description":"Amount of times the product has been returned."},"cost_price_sum":{"type":"number","description":"Sum of the cost price on the product."},"sales_price_sum":{"type":"number","description":"Sum of sale on the product including VAT subtracted any discounts."}}},"SupplierInventoryReportRow":{"type":"object","additionalProperties":false,"required":["storeid","productid","productno","barcode","stockno","updated_at"],"properties":{"storeid":{"type":"integer","description":"Connected store this product belongs to."},"productid":{"type":"integer","description":"Product this stock belongs to, unique within the connected store."},"productno":{"type":"string","nullable":true,"description":"Product number of last updated product."},"barcode":{"type":"string","description":"Barcode of the last updated product."},"stockno":{"type":"integer","description":"Stock number for this product as it stands now; may be zero or negative."},"updated_at":{"type":"string","description":"When the stock level was last touched."}}},"SupplierSalesReportResponse":{"type":"object","additionalProperties":false,"required":["content","hasMore","nextCursor"],"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/SupplierSalesReportRow"}},"hasMore":{"type":"boolean"},"nextCursor":{"type":"string","nullable":true,"description":"Opaque forward cursor; null when there are no more rows."}}},"SupplierInventoryReportResponse":{"type":"object","additionalProperties":false,"required":["content","hasMore","nextCursor"],"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/SupplierInventoryReportRow"}},"hasMore":{"type":"boolean"},"nextCursor":{"type":"string","nullable":true,"description":"Opaque forward cursor; null when there are no more rows."}}},"SupplierStockTransactionCreate":{"type":"object","additionalProperties":false,"required":["barcode","quantity"],"properties":{"barcode":{"type":"string","description":"Barcode of the product","example":"5701234567890"},"quantity":{"type":"integer","description":"Amount of units.","minimum":1,"example":3}}},"SupplierStockReceptionCreateRequest":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","additionalProperties":false,"required":["storeid"],"properties":{"storeid":{"type":"integer","description":"Store to create the stocktransactionlist in. Must have the authenticated store as verified supplier."},"note":{"type":"string","nullable":true},"invoicenumber":{"type":"string","nullable":true},"invoicedate":{"type":"string","nullable":true,"description":"ISO 8601 date, e.g. 2026-09-02."},"stocktransactions":{"type":"array","description":"Stocktransactions to add together with the stocktransactionlist.","items":{"$ref":"#/components/schemas/SupplierStockTransactionCreate"}}}}}},"SupplierStockTransactionCreateRequest":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/SupplierStockTransactionCreate"}}},"SupplierProduct":{"type":"object","additionalProperties":false,"required":["id","productno","title","barcode"],"properties":{"id":{"type":"integer"},"productno":{"type":"string"},"title":{"type":"string","nullable":true},"barcode":{"type":"string","nullable":true}}},"SupplierStockTransaction":{"type":"object","additionalProperties":false,"required":["id","addtostock"],"properties":{"id":{"type":"integer"},"product":{"$ref":"#/components/schemas/SupplierProduct","nullable":true,"description":"The store's product this transaction resolved to."},"addtostock":{"type":"number","description":"Number of units added."}}},"SupplierStockReception":{"type":"object","additionalProperties":false,"required":["id","stocktransactions"],"properties":{"id":{"type":"integer"},"stocktransactions":{"type":"array","items":{"$ref":"#/components/schemas/SupplierStockTransaction"}}}},"SupplierStockReceptionResponse":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/SupplierStockReception"}}},"SupplierStockTransactionResponse":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/SupplierStockTransaction"}}},"StoreVerifiedSupplier":{"type":"object","additionalProperties":false,"required":["id","name","email"],"properties":{"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string"},"image_url":{"type":"string","nullable":true,"description":"URL of the supplier's logo, if one has been uploaded."},"connected_supplier":{"$ref":"#/components/schemas/Supplier","nullable":true,"description":"The store's own supplier that is connected to this verified supplier, if any"}}},"OwnVerifiedSupplier":{"type":"object","additionalProperties":false,"required":["id","name","email"],"properties":{"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string"}}},"OwnVerifiedSupplierListResponse":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/OwnVerifiedSupplier"}}}},"StoreVerifiedSupplierListResponse":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/StoreVerifiedSupplier"}}}},"ConnectedStore":{"type":"object","additionalProperties":false,"required":["id","title"],"properties":{"id":{"type":"integer"},"title":{"type":"string"}}},"ConnectedStoreListResponse":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ConnectedStore"}}}},"VerifiedSupplierProductRequest":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"$ref":"#/components/schemas/ProductMasterData"}}},"VerifiedSupplierProductBulkRequest":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"array","maxItems":1000,"items":{"$ref":"#/components/schemas/ProductMasterData"}}}},"VerifiedSupplierProductFailure":{"type":"object","additionalProperties":false,"required":["suppliername","count","message"],"description":"One group of products the store is not a verified supplier for, and therefore was not written.","properties":{"suppliername":{"type":"string"},"count":{"type":"integer"},"message":{"type":"string"}}},"VerifiedSupplierProductFailedResponse":{"type":"object","additionalProperties":false,"required":["failed"],"description":"Returned with 403 when no group in the request could be written.","properties":{"failed":{"type":"array","items":{"$ref":"#/components/schemas/VerifiedSupplierProductFailure"}}}},"VerifiedSupplierProductBulkResponse":{"type":"object","additionalProperties":false,"required":["content","failed"],"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ProductMasterDataResponse"},"description":"One entry per written product, in the same shape as POST /productmasterdata/bulk."},"failed":{"type":"array","items":{"$ref":"#/components/schemas/VerifiedSupplierProductFailure"}}}},"VerifiedSupplierProductDeleteResponse":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","additionalProperties":false,"required":["deleted"],"properties":{"deleted":{"type":"integer"}}}}},"VerifiedSupplierProductCountResponse":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","additionalProperties":false,"required":["count"],"properties":{"count":{"type":"integer"}}}}},"VerifiedSupplier":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer"},"store_id":{"type":"integer"},"store_title":{"type":"string","nullable":true,"description":"Title of the store the supplier is verified for."},"name":{"type":"string","example":"Abus"},"segment":{"type":"string","example":"bikeshop"},"email":{"type":"string","example":"kontakt@abus.dk"},"country":{"type":"string","example":"DK","description":"ISO 3166-1 alpha-2 country code."},"active":{"type":"boolean"},"created_at":{"type":"string"},"approved_by":{"type":"string","nullable":true,"description":"Name of the admin who created this entry."},"image_url":{"type":"string","nullable":true,"description":"URL of the supplier's logo, if one has been uploaded."}}},"VerifiedSupplierListResponse":{"type":"object","additionalProperties":false,"required":["content","hasMore"],"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/VerifiedSupplier"}},"hasMore":{"type":"boolean","description":"True if there are more rows beyond the current page."}}},"VerifiedSupplierResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"$ref":"#/components/schemas/VerifiedSupplier"}}},"VerifiedSupplierCreateRequest":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","additionalProperties":false,"required":["store_id","name","segment","email","country"],"properties":{"store_id":{"type":"integer"},"name":{"type":"string"},"segment":{"type":"string"},"email":{"type":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code."}}}}},"VerifiedSupplierUpdateRequest":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","additionalProperties":false,"required":["name","segment","email","country"],"properties":{"name":{"type":"string"},"segment":{"type":"string"},"email":{"type":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code."}}}}},"VerifiedSupplierSetActiveRequest":{"type":"object","additionalProperties":false,"required":["content"],"properties":{"content":{"type":"object","additionalProperties":false,"required":["active"],"properties":{"active":{"type":"boolean"}}}}},"VippsPayment":{"type":"object","properties":{"amount":{"type":"number","minimum":1,"maximum":650000},"currency":{"type":"string","enum":["NOK","DKK","EUR"]},"phonedata":{"description":"Required if customerToken is not provided","type":"object","nullable":true,"additionalProperties":false,"properties":{"phone":{"type":"string"},"country":{"type":"string"}},"required":["phone","country"]},"postpone":{"type":"boolean","nullable":true},"createCustomer":{"type":"boolean","nullable":true,"default":"false,"},"customerToken":{"type":"string","nullable":true,"description":"Customer token is used to identify the customer in Vipps when using QR flow. Required if phonedata is not provided"},"paymentMethodRelationId":{"type":"number","description":"Required if customerToken is provided"}},"additionalProperties":false},"VippsPaymentRequest":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/VippsPayment"}},"additionalProperties":false},"VippsUpsertCallbackQrRequest":{"type":"object","properties":{"locationDescription":{"description":"The location description is visible to the customer in the Vipps app","type":"string"},"merchantQrId":{"description":"The codeId is a merchantQrId og beacon-id for the QR code","type":"string"},"isMobilepayBeacon":{"type":"boolean","deprecated":true}},"required":["locationDescription","merchantQrId","isMobilepayBeacon"],"additionalProperties":false},"VippsMerchantCallbackQr":{"type":"object","properties":{"locationDescription":{"description":"The location description is visible to the customer in the Vipps app","type":"string"},"merchantQrId":{"description":"The codeId is a merchantQrId og beacon-id for the QR code","type":"string"},"merchantSerialNumber":{"type":"string"},"qrContent":{"type":"string"},"qrImageUrl":{"type":"string"},"category":{"type":"string"}},"additionalProperties":false},"VippsMerchantCallbackQrResponse":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/VippsMerchantCallbackQr"}},"additionalProperties":false},"VippsResthooksListResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/VippsResthook"}}},"additionalProperties":false},"VippsResthook":{"type":"object","properties":{"id":{"type":"string"},"events":{"type":"array","items":{"type":"string"}},"url":{"type":"string"},"installed":{"type":"boolean"}},"additionalProperties":false},"VippsMerchantInfoResponse":{"type":"object","properties":{"content":{"type":"object","properties":{"webhooks":{"type":"array","items":{"$ref":"#/components/schemas/VippsResthook"}}},"additionalProperties":false}},"additionalProperties":false},"VippsCurrentCustomerResponse":{"type":"object","properties":{"content":{"type":"object","properties":{"customerToken":{"type":"string","nullable":true}},"additionalProperties":false}},"additionalProperties":false},"Widget":{"anyOf":[{"$ref":"#/components/schemas/ServiceWidget"},{"$ref":"#/components/schemas/BookingWidget"}]},"PublicWidget":{"type":"object","properties":{"token":{"type":"string"},"config":{"$ref":"#/components/schemas/WidgetServiceConfig"},"title":{"type":"string"},"logo":{"type":"string"}},"additionalProperties":false},"WidgetServiceConfig":{"type":"object","additionalProperties":true,"properties":{"showLogo":{"type":"boolean","nullable":true},"showTime":{"type":"boolean","nullable":true},"requirePhone":{"type":"boolean","nullable":true}}},"WidgetBookingConfig":{"type":"object","additionalProperties":false,"properties":{"assignee":{"type":"integer","nullable":true},"tagids":{"type":"array","nullable":true,"items":{"type":"integer"}},"tickettemplategroupids":{"type":"array","nullable":true,"items":{"type":"integer"}},"bookingLimit":{"type":"integer","nullable":true},"bookingDateLimitStart":{"type":"string","nullable":true,"description":"Start of the access period; the widget is unavailable before this date"},"allowSmsOtp":{"type":"boolean","nullable":false},"allowEmailOtp":{"type":"boolean","nullable":false},"showTimeslots":{"type":"boolean","nullable":true},"timeslotLimit":{"type":"integer","nullable":true},"timeslotMinutes":{"type":"integer","nullable":true,"minimum":1,"description":"Length of each timeslot in minutes."},"bookingDateLimitEnd":{"type":"string","nullable":true,"description":"End of the access period; the widget is unavailable after this date"},"bookingPeriodStart":{"type":"string","nullable":true,"description":"Earliest date a booking may be placed on. Dates before are unavailable in the calendar"},"bookingPeriodEnd":{"type":"string","nullable":true,"description":"Latest date a booking may be placed on. Dates after are unavailable in the calendar"},"allowNewCustomer":{"type":"boolean","nullable":true},"allowNewCustomerArticle":{"type":"boolean","nullable":true},"customerArticleRequired":{"type":"boolean","nullable":true},"ticketType":{"type":"string","description":"Type of the Ticket that is created when a booking is created","enum":["repair","sale"]},"noteDescription":{"type":"string","nullable":true,"description":"Instructional text shown above the booking note field"},"noteTemplate":{"type":"string","nullable":true,"description":"Template pre-filled into the booking note field, which the customer must edit before confirming"},"noteRequired":{"type":"boolean","nullable":true,"description":"Whether the customer must fill in the booking note to confirm"}}},"WidgetType":{"type":"string","enum":["booking","service"]},"WidgetRequest":{"type":"object","properties":{"name":{"type":"string"},"config":{"anyOf":[{"$ref":"#/components/schemas/WidgetServiceConfig"},{"$ref":"#/components/schemas/WidgetBookingConfig"}]},"type":{"$ref":"#/components/schemas/WidgetType"}},"additionalProperties":false},"WidgetsResponse":{"type":"object","additionalProperties":false,"properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/Widget"}}}},"BookingWidget":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"token":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["booking"]},"config":{"nullable":true,"$ref":"#/components/schemas/WidgetBookingConfig"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}},"additionalProperties":false},"ServiceWidget":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"token":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["service"]},"config":{"nullable":true,"$ref":"#/components/schemas/WidgetServiceConfig"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}},"additionalProperties":false}},"parameters":{"id":{"in":"path","name":"id","required":true,"description":"Id to the relevant resource","schema":{"minimum":0,"type":"integer"}},"balanceId":{"in":"path","name":"balanceId","required":true,"description":"Balance id","schema":{"type":"integer","minimum":0}},"cursor":{"in":"query","name":"cursor","description":"Cursor for pagination. If parameter is set, paginationStart will be ignored. Only allowed for default sorting or based on id.","schema":{"type":"string"},"examples":{"Get first page":{"value":"","summary":"Enable and get first page using cursorbased pagination"},"Get second page":{"value":"eyJQcm9kdWN0LmlkIjoxMjM0LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9","summary":"Get second page using cursorbased pagination"}}},"updated_after":{"in":"query","name":"updated_after","description":"Get items updated after the date time","schema":{"example":"1991-03-10 22:00:00","type":"string"}},"paymentId":{"in":"path","name":"paymentId","required":true,"description":"payment id","schema":{"minimum":0,"type":"integer"}},"paymentArticleId":{"in":"path","name":"paymentArticleId","required":true,"description":"Payment article id","schema":{"minimum":0,"type":"integer"}},"ticketId":{"in":"path","name":"ticketId","required":true,"schema":{"minimum":0,"type":"integer"}},"ticketTemplateId":{"in":"path","name":"ticketTemplateId","required":true,"schema":{"minimum":0,"type":"integer"}},"SupplierReportStore":{"in":"query","name":"storeid","required":true,"description":"Connected store ID from GET /verified-suppliers/connected-stores. Report one store at a time.","schema":{"type":"integer","minimum":1}},"SupplierSoldAfter":{"in":"query","name":"sold_after","required":true,"description":"Report sales made after this point in time. ISO 8601; without an offset it is read as UTC.","schema":{"type":"string"},"example":"2026-09-17T10:00:00Z"},"SupplierSoldBefore":{"in":"query","name":"sold_before","required":false,"description":"Report sales made strictly before this point in time, so consecutive windows neither overlap nor skip a sale. Defaults to now if left unset. ISO 8601; without an offset it is read as UTC.","schema":{"type":"string"},"example":"2026-09-18T10:00:00Z"},"SupplierInventoryUpdatedAfter":{"in":"query","name":"inventory_updated_after","required":true,"description":"Report products whose stock level changed after this point in time. ISO 8601; without an offset it is read as UTC.","schema":{"type":"string"},"example":"2026-09-17T10:00:00Z"},"SupplierReportCursor":{"in":"query","name":"cursor","description":"Omit on the first request. For the next page, pass nextCursor unchanged with the same other parameters. Offset pagination is not supported.","schema":{"type":"string","maxLength":2048}},"SupplierReportPageLength":{"in":"query","name":"paginationPageLength","description":"Maximum rows per page.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}}},"responses":{"ClientErrorResponse":{"description":"Client Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"x-tagGroups":[{"name":"Endpoints","tags":["Billing","Bundle - Experimental","BundleFilter - Experimental","CustomerArticles","CustomerTags","Customers","CustomFields","DiscountTags","ExchangeRate","Finance","GiftCards","RestHooksLog","RestHooks","Inventory levels","Loyalty","Notifications","PartnerInventory","PartnerPermissions","PaymentTypes","PaymentTypeRelations","POSBalances","POSPayments","Cart","pospaymentmaterialreturntag","POSRegisters","ProductImage","Products","ProductAddon","ProductMasterData","ProductTags","Promotions","RecurringPayment - Experimental","SalesOrderFulfillmentMaterials","SalesOrderFullfillments","SalesOrdersMaterials","SalesOrders","ServicePlan","ServiceSubscription","Settings","ShoppingLists","ShoppingListOrders","StockTransactions","StockTransactionLists","StockTransactionTags","Suppliers","TicketComments","TicketFiles","TicketMaterials","TicketTags","Tickets","PaymentLink","ServiceNotifications","TicketTemplate","TicketTemplateRelation","Users","VerifiedSupplier - Experimental","VerifiedSupplier"]}],"servers":[{"url":"https://api.c1st.com/api"}],"security":[{"bearerAuth":[]}]}