Cette aide est disponible pour vous guider dans l'utilisation de notre logiciel de caisse
Rechercher par mot clé dans l'aide :
API kash.click
Documentation technique complète et opérationnelle. Chaque section inclut des exemples JavaScript (fetch) prêts à l’emploi.
1) Authentification — Obtenir un auth token
Différentes méthodes :
- 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.
- Compatibilité par confirmation du courriel :
https://kash.click/workers/getOTPForAccount.php - Compatibilité par login et mot de passe :
https://kash.click/workers/getAuthTokenWithPassword.php
Les anciennes routes getAuthToken.php, getAuthTokenWithPassword.php et getAuthTokenWithOTP.php exigent un administrateur actif pour délivrer une nouvelle clé gérée, sans expiration et avec tous les droits. Un collaborateur reçoit api_admin_required (HTTP 403) ; contactez un administrateur pour obtenir une clé dédiée. Les protections d’identité et de second facteur restent applicables. Les clés déjà émises et les connexions existantes restent valides.
1.1 POST /workers/getAuthToken.php
Route de compatibilité pour le login et le mot de passe d’un administrateur. La route getAuthTokenWithPassword.php applique les mêmes contrôles et ajoute success: true à sa réponse de succès. Préférez une clé dédiée pour toute nouvelle intégration.
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.
Paramètres POST
login— le login de votre compte existantpassword— le mot de passe de votre compte existant
Réponse JSON attendue (succès)
{ "result": "OK", "APIKEY": "[votre Token]", "SHOPID": "[identifiant de compte boutique]"} Exemple JavaScript (fetch)
const login = "mon.email@example.com";const password = "monMotDePasse";fetch("https://kash.click/workers/getAuthToken.php", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ login, password })}) .then(r => r.json()) .then(data => { if (data.result === "OK") { console.log("Token:", data.APIKEY); console.log("Boutique:", data.SHOPID); } else { console.error("Erreur d'authentification", data); } }); 2) Avec la clé API, vous pouvez…
- Télécharger vos données de ventes
- Télécharger articles, clients, rayons, etc.
- Enregistrer des ventes
- Consulter les emails, envoyer des messages et gérer les dossiers de la boutique — Messagerie des boutiques
3) Télécharger vos ventes (journalier)
GET /workers/getSales.php
URL de base : https://kash.click/workers/getSales.php
Paramètres
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
shopID | string | Oui | Identifiant de compte boutique (SHOPID) |
key | string | Oui | Votre token (APIKEY) |
d | int | Non | Jour (si non précisé, la veille est utilisée) |
m | int | Non | Mois |
y | int | Non | Année |
formatExport | string | Oui | Std (rapport HTML), PDF, XLS, CSV, frafec (FEC), saft |
Exemples JavaScript
// Aide pour construire une URL GETfunction buildUrl(path, params){ const qs = new URLSearchParams(params); return `${path}?${qs.toString()}`;}const SHOPID = "[SHOPID]";const APIKEY = "[APIKEY]";// 1) Export CSV pour date préciseconst urlCsv = buildUrl("https://kash.click/workers/getSales.php", { shopID: SHOPID, key: APIKEY, d: 16, m: 10, y: 2025, formatExport: "CSV"});fetch(urlCsv).then(r=>r.text()).then(csv=>console.log(csv));// 2) Rapport HTML (Std) pour la veille (sans date)const urlStd = buildUrl("https://kash.click/workers/getSales.php", { shopID: SHOPID, key: APIKEY, formatExport: "Std"});fetch(urlStd).then(r=>r.text()).then(html=>{ document.getElementById("rapport").innerHTML = html;});// 3) Rapport PDF (Blob)const urlPdf = buildUrl("https://kash.click/workers/getSales.php", { shopID: SHOPID, key: APIKEY, d: 16, m: 10, y: 2025, formatExport: "PDF"});fetch(urlPdf).then(r=>r.blob()).then(pdf=>{ const a = document.createElement("a"); a.href = URL.createObjectURL(pdf); a.download = "rapport-ventes.pdf"; a.click();}); 4) Télécharger la liste des articles, rayons, clients, etc
Tous les endpoints suivants acceptent &format=json, &format=csv ou &format=html.
4.1 Endpoints disponibles
| Ressource | Endpoint |
|---|---|
| Articles | /workers/getPlus.php |
| Rayons | /workers/getDepartments.php |
| Groupes de rayons | /workers/getDepartmentGroups.php |
| Clients | /workers/getClients.php |
| Déclinaisons d'articles | /workers/getDeclinaisons.php |
| Méthodes de livraison | /workers/getLivraisons.php |
| Méthodes de paiement | /workers/getPaymentModes.php |
| Caisses | /workers/getCashbox.php |
| Zones de livraison | /workers/getDeliveryZones.php |
| Points relais | /workers/getRelayDeposit.php |
| Réductions | /workers/getDiscounts.php |
| Utilisateurs | /workers/getUsers.php |
| Tables | /workers/getTables.php |
| Commandes en cours | /workers/getPending.php |
Patron d’URL
https://kash.click/workers/[endpoint].php?shopID=[SHOPID]&key=[APIKEY]&format=[csv|json|html] Exemples JavaScript
// Récupération d'une ressource génériquefunction buildUrl(path, params){ const qs = new URLSearchParams(params); return `${path}?${qs.toString()}`;}async function fetchResource(endpoint, format = "json"){ const url = buildUrl(`https://kash.click/workers/${endpoint}.php`, { shopID: SHOPID, key: APIKEY, format }); const res = await fetch(url); return format === "json" ? res.json() : res.text();}// 1) Articles en JSONfetchResource("getPlus", "json").then(data => console.log("Articles:", data));// 2) Clients en CSVfetchResource("getClients", "csv").then(csv => console.log("Clients (CSV):\n", csv));// 3) Rayons en HTML (injection)fetchResource("getDepartments", "html").then(html => { document.getElementById("rayons").innerHTML = html;}); 5) Enregistrer des ventes dans le logiciel
POST /workers/webapp.php
Envoyez une commande complète : articles, client, mode de paiement, livraison, etc.
Paramètres POST
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
shopID | string | Oui | Votre identifiant de boutique (SHOPID) |
key | string | Oui | Votre Token (APIKEY) |
idUser | int | Non | Identifiant d'utilisateur. Si non précisé, le logiciel crée un compte utilisateur avec le login "webservice" s'il n'existe pas déjà, et l'utilise. |
payment | int | Oui | -2 = Non payée, non validée ; -1 = Non payée, validée ; un identifiant de mode de paiement pour indiquer un paiement (peut être un identifiant d'un mode de remboursement) |
idClient | int | Non | Identifiant du client existant pour l'affecter à la commande |
idtable | int | Non | Identifiant de la table pour l'affecter à la commande |
idcaisse | int | Non | Identifiant de la caisse pour l'affecter à la commande |
numcouverts | int | Non | Nombre de couverts servis à la table |
publicComment | string | Non | Commentaire adossé à la commande (public) |
privateComment | string | Non | Commentaire adossé à la commande (privé) |
pagerNum | int | Non | Numéro de bippeur |
Créer un nouveau client dans la même requête
Si le client n'existe pas, vous pouvez le créer avec les champs suivants (à envoyer directement en 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] deliveryMethod
| Valeur | Signification |
|---|---|
| 0 | À emporter |
| 1 | À livrer |
| 2 | Sur place |
| 3 | Service au volant |
| 4 | Vente au comptoir |
| 5 | Point relai |
| 6 | À expédier |
itemsList[] — Structure et exemples
[idArticle]— ajoute un article (quantité 1)[idArticle]_[quantite]— préciser la quantité[idArticle]_[quantite]_[titre personnalisé]_[prix personnalisé]— forcer le titre et le prix[idArticle]_[quantite]_[titre]_[prix]_[idDéclinaison1]_[idDéclinaison2]_[idDéclinaison3]_[idDéclinaison4]_[idDéclinaison5]— ajouter jusqu'à 5 déclinaisons- Vente libre en rayon :
-[idRayon]_[prix]_[titre]— crée une ligne libre rattachée au rayon - Vente libre :
Free_[prix]_[titre]— crée une ligne libre
Exemple JavaScript — client existant
async function enregistrerVenteAvecClientExistant(){ const body = new URLSearchParams({ shopID: SHOPID, key: APIKEY, idUser: 1, payment: -1, deliveryMethod: 0, 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);} Exemple JavaScript — nouveau client + vente
async function enregistrerVenteAvecNouveauClient(){ const body = new URLSearchParams({ shopID: SHOPID, key: APIKEY, payment: 2, deliveryMethod: 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[]", "42_1_Menu midi_12.90"); body.append("itemsList[]", "15_3_Canette Cola_2.50"); 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);} 6) Bonnes pratiques & remarques
- Toutes les requêtes doivent être effectuées en HTTPS.
- Pour les POST, utilisez Content-Type: application/x-www-form-urlencoded.
- Encodage : UTF-8.
- Les exports PDF/XLS/CSV se manipulent comme des Blob côté navigateur.
Les nouvelles clés délivrées par authentification ou création de boutique sont des clés gérées, sans expiration et avec toutes les autorisations. Elles apparaissent dans Configuration ? Webservices ? Clés API et peuvent ensuite être limitées ou révoquées. Les anciennes clés déjà utilisées restent valides.
Inscrivez-vous maintenant
Ce document est mis à disposition selon les termes de la licence Creative Commons Attribution 4.0 International (CC BY 4.0) .