Free cash register

Kash.click, free online POS software since 2011

Follow Us

Help Center

This help will guide you through the setup and usage of our point of sale cash register software.

Search by keyword in the help section:

Record sales in the software

Submit a complete order: items, customer, payment method, delivery, etc.

POST /workers/webapp.php

Submit a complete order: items, customer, payment method, delivery, etc.

POST parameters

NameTypeNecessaryDescription
shopIDstringYesYour shop ID (SHOPID)
keystringYesYour token (APIKEY)
idUserintNoUser ID. If not specified, the software creates a user account with the "webservice" login if it does not already exist, and uses it.
paymentintYes-2 = Not paid, not validated; -1 = Not paid, validated; a payment method identifier to indicate a payment (can be an identifier of a refund method)
paymentAmountintNoThe amount paid, if "payment" indicates a payment method (if absent, the payment is considered cash)
idClientintNoExisting customer ID to assign to the order
clientarrayNoA customer account needs to be created and assigned to the order.*
idtableintNoTable ID to assign to the order
idcaisseintNoCash register ID to assign to the order
numcouvertsintNoNumber of place settings served at the table
publicCommentstringNoComment attached to the order (public)
privateCommentstringNoComment attached to the order (private)
pagerNumintNoPager number
deliveryMethodintNoDelivery method*
itemsListarrayYesPager number

Additional information

Create a new customer in the same query

If the customer does not exist, you can create it with the following fields (to be sent directly by POST):

client[nom]=[nom]client[prenom]=[Prénom]client[email]=[Email]client[telephone]=[nom]client[adresseligne1]=[Adresse ligne 1]client[adresseligne2]=[Adresse ligne 2]client[commentaireadresse]=[nom]client[codepostal]=[Code postal]client[ville]=[Ville]client[pays]=FRclient[numtva]=[Numéro TVA]client[rcs]=[Numéro RC]client[codeBarre]=[Code barre]client[telephone2]=[Téléphone secondaire]client[lat]=[latitude]client[lng]=[longitude]

Delivery method

The deliveryMethod field can have values ranging from 0 to 6:

AmountMeaning
0Take away
1To be delivered
2On site
3Drive-Thru
4Counter sales
5Relay point
6To be shipped

itemsList[] — Structure

The itemsList field is an array of strings, each element of which can be of one of the following types::

  • [idArticle] — add an item (quantity 1)
  • [idArticle]_[quantite] — specify the quantity
  • [idArticle]_[quantite]_[titre personnalisé]_[prix personnalisé] — force the title and price
  • [idArticle]_[quantite]_[titre]_[prix]_[idDéclinaison1]_[idDéclinaison2]_[idDéclinaison3]_[idDéclinaison4]_[idDéclinaison5] — add up to 5 variations
  • Over-the-counter sale : -[idRayon]_[prix]_[titre] — creates a free line attached to the ray
  • Over-the-counter sale : Free_[prix]_[titre] — creates a free line
Reminder: if idUser is omitted, the software automatically uses/creates a “webservice” user.

JavaScript Examples

Simple sale

async function recordSaleWithExistingClient(){ const body = new URLSearchParams({  shopID: SHOPID,  key: APIKEY,  payment: -1 }); body.append("itemsList[]", "Free_12.99_Item"); body.append("itemsList[]", "Free_9.99_Other item"); const res = await fetch("https://kash.click/workers/webapp.php", {  method: "POST",  headers: { "Content-Type": "application/x-www-form-urlencoded" },  body }); let payload; try{ payload = await res.json(); }catch{ payload = await res.text(); } console.log(payload);}

Existing customer

async function recordSaleWithExistingClient(){ const body = new URLSearchParams({  shopID: SHOPID,  key: APIKEY,  payment: -1,  idClient: 123 }); body.append("itemsList[]", "12_2_Pizza 4 fromages_14.50_3_8"); body.append("itemsList[]", "-5_9.99_Vente libre"); const res = await fetch("https://kash.click/workers/webapp.php", {  method: "POST",  headers: { "Content-Type": "application/x-www-form-urlencoded" },  body }); let payload; try{ payload = await res.json(); }catch{ payload = await res.text(); } console.log(payload);}

New customer

async function recordSaleWithNewClient(){ const body = new URLSearchParams({  shopID: SHOPID,  key: APIKEY,  payment: -1 }); body.append("client[nom]", "Durand"); body.append("client[prenom]", "Zoé"); body.append("client[email]", "zoe.durand@example.com"); body.append("client[telephone]", "+33 6 12 34 56 78"); body.append("client[adresseligne1]", "10 rue des Écoles"); body.append("client[adresseligne2]", "Bât. B"); body.append("client[commentaireadresse]", "Sonner 2 fois"); body.append("client[codepostal]", "75005"); body.append("client[ville]", "Paris"); body.append("client[pays]", "FR"); body.append("client[numtva]", "FRXX999999999"); body.append("client[rcs]", "RCS Paris 123 456 789"); body.append("client[codeBarre]", "CUST-0001"); body.append("client[telephone2]", "+33 1 23 45 67 89"); body.append("client[lat]", "48.848"); body.append("client[lng]", "2.347"); body.append("itemsList[]", "Free_19_Item"); body.append("itemsList[]", "Free_5.4_OtherItem"); const res = await fetch("https://kash.click/workers/webapp.php", {  method: "POST",  headers: { "Content-Type": "application/x-www-form-urlencoded" },  body }); let payload; try{ payload = await res.json(); }catch{ payload = await res.text(); } console.log(payload);}

Expected JSON response

Order confirmed, but not paid.

{ "success": true, "orderID":17724460, "paymentLink":"A link the client can use to pay the order", "invoice":"URL of the PDF invoice"}

Order not validated, not paid

{ "success": true, "orderID":17724461, "paymentLink":"A link the client can use to pay the order", "quote":"URL of the PDF qduote"}

Order confirmed and paid for.

{ "success": true, "orderID":17724461, "invoice":"URL of the PDF qduote"}

Failure

{ "success": false, "result": "Error message"}
Register now
Licence Creative Commons This document is made available under the terms of the licence Creative Commons Attribution 4.0 International (CC BY 4.0) .