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:

Accès rapide : gestes du quotidien

Authentication

Accessing the API requires providing your APIKEY and SHOPID.

Pour une intégration, demandez à un administrateur de créer une clé API dédiée avec les seules autorisations nécessaires, puis utilisez-la avec SHOPID. Guide administrateur : créer, limiter, tester et révoquer une clé API.

1) Get an auth token

Different methods:

  1. Méthode recommandée : clé dédiée : Configuration → Webservices → Clés API, depuis une session administrateur. Choisissez un nom, les autorisations nécessaires et éventuellement une expiration.
  2. Compatibilité par confirmation du courriel : https://kash.click/workers/getOTPForAccount.php
  3. Compatibilité par login et mot de passe : https://kash.click/workers/getAuthTokenWithPassword.php

Ces routes délivrent une nouvelle clé API gérée, sans expiration et avec toutes les autorisations, uniquement à un administrateur actif. Un collaborateur reçoit api_admin_required (HTTP 403), même si son courriel ou son mot de passe est correct. Contactez un administrateur pour configurer une clé dédiée. Les clés déjà émises restent valides avec leurs autorisations existantes.

1.1.1 POST /workers/getOTPForAccount.php

Demandez un code de confirmation pour votre courriel. La réponse ne révèle pas si des comptes existent. Une adresse valide reçoit un code, même si aucun compte ne lui est encore associé ; aucun compte n’est créé par cette demande.

NameErforderlichDescription
emailYesAdresse de courriel à confirmer
accountIDNoLimite la confirmation à ce profil ; omettre ce champ pour découvrir tous les profils associés

La réponse contient success: true, un texte générique result, challengeId (32 caractères hexadécimaux) et expiresIn: 600. Conservez challengeId pour transmettre le code reçu par courriel.

const response = await fetch('/workers/getOTPForAccount.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ email })});const challenge = await response.json();// Demander à la personne le code reçu par courriel.// Conserver challenge.challengeId pour la confirmation.

Le code de six chiffres expire après dix minutes et admet cinq essais au maximum. Les envois sont espacés de soixante secondes, avec des quotas par courriel et par IP. Une limitation retourne rate_limited (HTTP 429).

1.1.2 POST /workers/getAuthTokenWithOTP.php

Confirmez le courriel et choisissez un profil administrateur pour recevoir APIKEY et SHOPID. La liste des profils ne constitue pas une autorisation de délivrer une clé. Cette route ne renvoie et ne crée aucun cookie de connexion.

NameErforderlichDescription
emailYesLe courriel de la demande
challengeIdYesRéférence reçue lors de la demande de code
otpÀ la confirmationCode de six chiffres reçu par courriel ; OTP reste un alias accepté
emailProofAprès confirmationPreuve retournée après confirmation, à la place du code
accountIDSi plusieurs profilsIdentifiant du profil choisi parmi les comptes confirmés

Avec un seul profil, accountID est facultatif. Avec plusieurs profils et sans choix, HTTP 409 retourne code: account_selection_required, accounts et emailProof. Recommencez avec cette preuve et le profil choisi, sans réutiliser le code.

Vous pouvez également confirmer le code par POST sur /workers/listShops.php avec email, challengeId et otp : la réponse contient accounts, emailProof et expiresIn. Le courriel seul ne révèle aucune liste et retourne email_confirmation_required (HTTP 401), sans déclencher un envoi.

La confirmation consomme le code. La preuve expire après cinq minutes au maximum, sans prolongation, et est consommée une seule fois lors de la délivrance de la clé. Elle reste limitée au courriel et, si précisé à la demande, au profil initial.

const response = await fetch('/workers/getAuthTokenWithOTP.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ email, challengeId, emailProof, accountID })});const credentials = await response.json();// Utiliser credentials.APIKEY et credentials.SHOPID pour l’intégration.
{ "success": true, "result": "Here are your credentials", "APIKEY": "[votre clé API]", "SHOPID": "[identifiant de boutique]"}

Le rôle administrateur est vérifié à nouveau avant la délivrance. Une confirmation de courriel ne contourne pas les protections de l’identité ou du second facteur : connectez-vous dans Kash.click et utilisez une clé dédiée si ces protections sont actives. Les accès suspendus ou révoqués, les établissements fermés et les webservices désactivés sont refusés.

Utilisez POST uniquement. Ne placez jamais de code, preuve ou clé dans une URL ou un journal. Les anciens liens GET et codes émis avant cette mise à jour ne fonctionnent plus : demandez un nouveau code. Les codes incorrects, expirés ou déjà utilisés retournent invalid_credential (HTTP 401).

1.2 POST /workers/getAuthTokenWithPassword.php

Cette route de compatibilité échange le login et le mot de passe d’un administrateur actif contre une nouvelle clé API gérée, sans expiration et avec toutes les autorisations. /workers/getAuthToken.php applique les mêmes autorisations, avec son format de succès historique.

Les deux routes partagent les mêmes limites : 10 tentatives par login et par 15 minutes, 30 par IP et par 15 minutes, 200 par IP et par jour, et 600 par minute pour l’ensemble du service. Les succès sont également comptés. Une limitation retourne HTTP 429 avec success: false, error: rate_limited, message et Retry-After en secondes. Attendez ce délai avant de réessayer ; alterner les routes ne remet pas les compteurs à zéro.

Utilisez uniquement des champs POST : login (254 octets maximum) et password (1024 octets maximum). Une requête mal formée retourne HTTP 400, une autre méthode HTTP 405. Un schéma ou service indisponible retourne HTTP 503 avec migration_required ou service_unavailable. Les réponses ne sont pas mises en cache.

Pour une nouvelle intégration, préférez une clé dédiée créée dans Configuration → Webservices → Clés API, plutôt que de transmettre le mot de passe d’une personne.

POST parameters

NameErforderlichDescription
loginYesYour existing account login
passwordYesYour existing account password

Expected JSON response (success)

{ "success": true, "result":"Here are your credentials", "APIKEY": "[your token]", "SHOPID": "[shop account ID]"}

Expected JSON response (failure)

{ "success": false, "result": "Authentication error"}

Un profil non administrateur reçoit HTTP 403 avec success: false, error: api_admin_required et message. Une identité ou un second facteur peut imposer la connexion interactive, puis une clé dédiée. Les clés existantes et les connexions au logiciel ne sont pas révoquées par ce contrôle.

JavaScript example (fetch)

const login = "mon.email@example.com";const password = "myPassword";fetch("https://kash.click/workers/getAuthTokenWithPassword.php", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ login, password })}) .then(r => r.json()) .then(data => {  if (data.success) {   console.log("Token:", data.APIKEY);   console.log("Shop:", data.SHOPID);  } else {   console.error("Auth error", data);  } });

2) With the API key you can…

  • Download your sales data
  • Download items, customers, departments, etc.
  • Record sales
Sign up 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) .