Integrazione front-end cassa base - Terminal API
Per avviare l'integrazione base con il front-end di cassa, seguire il flusso:
-Autenticazione,
-Avvio cassa, recupero regole epermessi campagna.
Per registrazione una card, seguire il flusso:
-Autenticazione,
-Registrazione Card.
Per effettuare un movimento di vendita, seguire il flusso:
-Autenticazione,
-Lettura Card,
-Chiusura scontrino,
-Acquisto.
Per integrare e gestire la feature Gift Card, seguire il flusso:
-Autenticazione,
-Gift Card lettura e uso.
Eliminazione ultimo movimento
-Autenticazione,
-Eliminazione ultimo movimento.
Autenticazione
Per eseguire un accesso terminal, effettuare la chiamata all’endpoint POST /auth, inserendo i seguenti parametri:
• username (username dell’operatore che richiede l’accesso),
• password (password associata all’operatore che richiedel’accesso),
• serialnumber (numero seriale legato al terminaleassociato all’operatore che richiede l’accesso),
• campaignid (l'id della campagna del tuo brand relativoall’ambiente di produzione),
• devicetype (tipo di device da cui il cliente tenta difare l’accesso 1=Browser 2=Android device 3=iOS Device)
• scope (‘terminal’ o ‘terminal-backoffice’).
In caso di esitopositivo, nella risposta otterremo anche il bearer token (tokenautorizzativo) che dovrà essere inserito nell’header delle successive chiamatealle API di tipo Terminal.
Ecco un esempiodel body in una request all’endpoint POST /auth per effettuareun’autenticazione terminal:
{
"username":"opwsDemo",
"password":"123456",
"serialnumber": 444001,
"foreignid": "",
"scope": "terminal"
}'
Avvio cassa, recupero regole epermessi campagna
Per eseguirel’integrazione di front-end di cassa, è necessario registrare le regole e ipermessi della campagna associata al terminale interessato.
1.Effettuare una chiamataall’endpoint GET /terminal/ campaign/{campaignid}, specificando nell’url ilvalore “campaignid”, ovvero l’id della campagna.
In caso di esitopositivo, in risposta otterremo un oggetto JSON “campaign” che mostra tutte leinformazioni relative e un oggetto “terminal” contenente i dettagli delterminale.
Le informazionicontenute nell’oggetto “campaign” ci interesseranno per le successive azioni.
Per permettere alfront-end di cassa di gestire la movimentazione, è importante ottenere leponderazioni di tutte le categorie di card che possono essere utilizzatedall’account terminal loggato.
2.Effettuare una chiamataall’endpoint GET /terminal/cardcategories.
In caso di esitopositivo, in risposta otterremo un oggetto JSON “category” contenente un arraycon tutte le categorie di card utilizzabili e le corrispettive informazioni.
Quelle piùrilevanti sono quelle relative alle ponderazioni, ovvero la corrispondenzapunti/denaro.
I campiinteressati sono:
· weightChargePointMoney e weightChargePointPoints (definiscono i punti da ottenere inbase ai soldi spesi)
· weightPointValueMoney e weightPointValuePoint (definisconolo sconto ottenibile in base ai punti caricati sulla card)
Ecco un esempiodi risposta all’endpoint GET /terminal/cardcategories:
{
"answerCode": 0,
"category": [
{
"id":463,
"shopId": 1112,
"weightPointValueMoney": 0.01,
"weightPointValuePoint": 1,
"weightChargeCreditMoney": 0,
"weightChargeCreditPoints": 0,
"weightChargePointMoney": 0.1,
"weightChargePointPoints": 0.01,
"weightDischargeCreditMoney": 0,
"weightDischargeCreditPoints": 0,
"weightExchangePrizePoints": 1,
"weightExchangePrizeMoney": 1,
"pointsInActivation": 0,
"initialCharge": 0,
"currencyId": 0,
"currencySymbol": "",
"minLimitDischargePoint": 0,
"weightPointValueMoneyCashBack":0,
"weightPointValuePointsCashBack": 0,
"code": 83,
"campaign": 362,
"name": "Categoria Card Test",
"flags": {
"flags": 34952,
"isGIFT": false,
"deliverPointsInChargeCredits": false,
"deliverPointsInDischargeCredits": false,
"deliverPointsInSale": true,
"deliverPointsInActivation": false,
"showPointsInActivationTicket": false,
"showMoney4PointsInTicket": false,
"useExpirationCard": true,
"customerOnlyAllowInActivationShop": false,
"registerActivationPointsInCampaign": false,
"onlyOneUse": false,
"sellerCategory": false,
"checkMinimalLimitDischargePoints": false,
"checkCanNotTransaction": false,
"dealerCategory": false,
"deliverPointsInCashback": false
},
"urlImage": ""
}
],
"pagination": {
"initLimit": 0,
"rowCount":100,
"recordsTotal": 10,
"actualPage":1,
"totalPages": 1
}
}
Se la campagnainteressata include la presenza di campi dinamici nell’anagrafe del customer, ènecessario:
3. Effettuare una chiamataall’endpoint GET /terminal/dynamicfields/{campaignid}, specificando nell’url ilvalore “campaignid”, ovvero l’id della campagna.
In caso di esitopositivo, in risposta otterremo un array di oggetti JSON “dynamicFields”,rappresentante la lista di campi dinamici definiti all’interno della campagna.
Se la campagnainteressata include la gestione di prodotti, è necessario:
4.Effettuare una chiamataall’endpoint GET /terminal/product, specificando nell’url solo i dettagli perl’impaginazione, ovvero:
· initlimit (limite iniziale),
rowcount (numero di record da mostrare).
Registrazione Card
Card anonima ???
Card con inserimento dati congestione consensi privacy
Per registrare eattivare una nuova card, è necessario:
1.Effettuare una chiamata all’endpoint POST /terminal/customers, inserendo idati anagrafici di interesse.
Tramite front-enddi cassa è possibile creare e attivare una card fisica oppure una cardvirtuale. I campi che ci interessano in questa fase sono “card”, “fidelycode” e “categoryid”, dainserire nel body della request.
Nel caso in cuiintendiamo attivare una card fisica, è necessario valorizzare i campi “card” e“fidelycode” con i codici indicati sulla card interessata, lasciando vuoto ilcampo “categoryid”.
Se inveceintendiamo attivare una card virtuale, i campi “card” e “fidelycode” devono essere lasciati vuoti mentre il campo“categoryid” deve essere valorizzato con l’id della categoria che la nuova carddovrà assumere e da cui deriva la numerazione automatica.
A questo punto pervisualizzare i campi visibili e obbligatori da richiedere al customer einserire nel body della request, è necessario valutare l’oggetto JSON campaign->completeCustomerFieldsottenuto dalla chiamata all’endpoint GET /terminal/campaign/{campaignid}analizzata nel flusso Avvio cassa, recupero regole e permessi campagna.
Ecco un esempio delbody in una request all’endpoint POST /terminal/customers per la creazione diun nuovo customer, con assegnazione automatica del nr di card, con solo alcunidati essenziali (nome, cognome, data di nascita, cellulare, consensi privacy edun campo dinamico):
{
"campaignid": 362,
"categoryid": 463,
"card”:"",
"fidelycode": "",
"parentcustomerid": "",
"mlmcustomerid": "",
"mlmcustomercard": "",
"zoneid":"",
"zoneforeignid": "",
"identitycard": "",
"identitycardtypeid": "0",
"name":"Mario",
"surname":"Rossi",
"gender":"M",
"birthdate": "1970-10-01",
"username": "mario.rossi@myemail.it",
"usedforpromotions": true,
"usedforstatistics": true,
"usedbyothers": false,
"cangetcurrentlocation": false,
"cancomunicaverification": false,
"expdateusedprom": "2025-10-31",
"expdateusedstatis": "2025-10-31",
"expdateusedothers": "2025-10-31",
"expdateusedgen": "2025-10-31",
"mailcontactdata": "mario.rossi@myemail.it",
"mobilecontactdata": "33311122777",
"telephonecontactdata": "",
"faxcontactdata": "",
"addressprefix": "",
"address":"",
"addressnumber": "",
"zip":"",
"country":0,
"geolevel1": 0,
"geolevel2": 0,
"geolevel3": 0,
"geolevel4": 0,
"geolevel5": 0,
"facebookid": "",
"twitterid": "",
"instagramid": "",
"youtubeid": "",
"customerdynamicfields": [
{
"id": 648,
"value":"valore di test"
}
],
"accountnumber": "",
"frequentflyernumber": "",
"pathimage": "",
"foreignid": "",
"notsendwelcomemail": false,
"invitor_code": "",
"notes": "" }
Per la gestionedei consensi privacy, prima di inserire le preferenze relative nel body dellaquery alle chiamate POST /terminal/customers o PUT /terminal/customers (modificadelle informazioni della card),è necessario confermare le scelte del customer tramite una verifica double OTP.
1.Come primo passo, servegenerare e inviare al customer un codice OTP per ogni consenso da inserire omodificare. É necessario quindi effettuare chiamate all’endpoint POST/terminal/customers/genotpcodeconsents, inserendo i seguenti parametri:
· customerid (id del customer, ricevuto in risposta allachiamata all’endpoint POST /terminal/customers),
· mobile (numero di cellulare del customer | se inseritonon serve valorizzare il campo email),
· email (indirizzo email del customer | se inserito nonserve valorizzare il campo mobile).
2.Inviati i codici OTP interessati, per verificare le scelte del customerbisogna effettuare una chiamata all’endpoint POST /terminal/customers/verifyOotpcodeconsents,inserendo per ogni consenso legato alla campagna il codice OTP consegnato e lascelta del cliente relativa al consenso specificato.
Ecco un esempio delbody di una request all’endpoint POST /terminal/customers/verifyOotpcodeconsentsdove sono stati richiesti tutti i consensi, ma accettati solo il consenso per lepromozioni e per la geolocalizzazione.
{
"customerid": 123456,
"promotioncode": "055832",
"promotionconsent": true,
"statisticcode": "274829",
"statisticconsent": false,
"othercode": "235267",
"otherconsent": false,
"geolocationcode": "028474",
"geolocationconsent": true
}
5.Lettura Card
Al momento diinterazione tra un customer registrato e il front-end di cassa, è necessarioeffettuare la lettura della card posseduta.
1.Effettuare una chiamataall’endpoint GET /terminal/customers{nrcard}, specificando nell’url il valore “nrcard”,ovvero il numero di card.
In caso di esitopositivo, in risposta otterremo anche un oggetto JSON “customer” contenentetutte le informazioni della card, sia anagrafiche che contabili (saldo punti,crediti, badge, ecc).
Nel caso in cuiil “answerCode” non è valorizzato a 0, significa che la chiamata non è andata abuon fine.
Le casistiche dirisposta da tenere in considerazione sono:
> “answerCode”= 53
La card richiesta non esiste, ma il numero è comunque tra quelli validi per lacampagna. Quindi potrebbe essere il caso di una nuova card che va attivata.
> “answerCode”= 59
La card non è presente in white list. Vuol dire che si è inserito un numero dicard che NON può essere utilizzato per la campagna.
> “answerCode”= 60
Card in blacklist. Vuol dire che il nr di card inserito è relativo ad una cardnon più esistente, molto probabilmente è stata sostituita con un'altra card.
Questa chiamatapermette di recuperare le ponderazioni della card, utili per un’eventuale spesao movimento successivo.
Ecco un esempiodi risposta che otteniamo dalla chiamata all’endpoint GET/terminal/customers{nrcard} :
{
"answerCode": 0,
"customer": {
"id": 123456789,
"campaignId": 111,
"card": 50,
"fidelyCode": 12345678901234,
"parentCustomerId": 0,
"mlmCustomerId": 0,
"totalMlmChildren": 0,
"registration_shop_id": 123456789,
"registration_net_id": 123456789,
"registration_shop_foreign_id": 0,
"registration_net_foreign_id": 0,
"zoneId": 0,
"zoneForeignId": 0,
"customer_area_status": 1,
"mailContactData": "nomail@nomail.com",
"mobileContactData": "3334445566",
"totalExchangedPrizes": 10,
"totalMoneyInSale": 0,
"paidMoneyInSale": 0,
"totalManualDischargedPoints": 100,
"totalDischargedPointsInSale": 50,
"totalDischargedPointsInExchanged": 150,
"expiredPoints": 0,
"personalInfo": {
"identityCard":"ggghhh00a00b111x",
"identityCardTypeId": 0,
"name": "Mario",
"surname": "Rossi",
"gender": "M",
"birthdate":"1978-04-08T00:00:00.000+01:00",
"notes": "",
"userName":"nomail@nomail.com",
"privacy": {
"flags": 3,
"usedForPromotions": true,
"usedForStatistics": true,
"usedByOthers": false,
"canGetCurrentLocation":false,
"canComunicaVerification":false,
"expDateUsedProm":"2020-12-02T11:24:07.000+01:00",
"expDateUsedStatis":"2021-02-02T11:36:51.000+01:00",
"expDateUsedGen":"2021-07-03T11:17:02.000+02:00"
},
"mailContactData":"nomail@nomail.com",
"mobileContactData": "3334445566",
"telephoneContactData": "",
"faxContactData":"",
"address":"della Repubblica",
"addressNumber":"10",
"addressPrefix":"Piazza",
"zip": "50100",
"country": 3,
"geoLevel1": 20,
"geoLevel2": 87,
"geoLevel3": 1512,
"geoLevel4": 4579,
"geoLevel5": 0,
"facebookId": "",
"twitterId": "",
"instagramId": "",
"youtubeId": "",
"principalCard": false,
"customerDynamicFields": [
{
"id": 12,
"value": "any kind ofvalue"
}
],
"foreignid": ""
},
"balanceData": {
"category": 101,
"status": 1,
"cardType": 0,
"pointsCharged": 1210,
"pointsUsed": 423,
"creditsCharged": 12,
"creditsUsed": 6,
"creditsGiftCharged": 0,
"creditsGiftUsed": 0,
"rechargesCard": 23,
"usesCard": 47,
"balance_points": 787,
"balance_credits": 6,
"balance_gift_credits": 0,
"total_money_in_sale": 4268,
"paid_money_in_sale": 3472,
"pointsChargedCount": 87,
"pointsUsedCount": 42,
"creditsUsedCount": 15,
"creditsGiftUsedCount": 0,
"expiredPoints": 0,
"pointsToMoney": 0,
"pointsMLMCharged": 0,
"pointsMLMUsed": 0,
"customerInformationToExpired":{
"pointToExpire": 0,
"periodoForeignid": 0
}
},
"issuedDate": "2015-12-01+01:00",
"customerAreaFlags": {
"flags": 7,
"useWeb": true,
"useAndroid": true,
"useiOS": false,
"useJME": false,
"useBB": false
},
"levelBadge": {
"ID": 1,
"name": "nomelevel",
"campaingID": 0,
"minPointsStatus": 0,
"maxPointsStatus": 100,
"icon": "pathimage",
"flags": {
"enabled": true
}
},
"pointStatus": 25,
"badges": [
{
"ID": 121,
"name":"BadgeName",
"description": "Badgeshort description",
"longDescription":"Badge long description",
"onIcon":"https://www.somewhere.com/onicon.png",
"onOff":"https://www.somewhere.com/officon.png",
"image":"https://www.somewhere.com/badgeimage.png",
"points": 0,
"pointsStatus": 10,
"flags": {
"enabled": true
},
"categoryBadge": {
"ID": 0,
"campaignID": 0
}
}
],
"giftCardCustomerOwnerId": 0,
"umbralCampaign": 20,
"pccu": true,
"flags": {
"flags": 0,
"activatedFromPointsCharge":false,
"nameChanged": false,
"failCardActivation": false,
"migratedFromFNet1": false,
"migratedFromFNet2": false,
"fatherExtension": false,
"activatedOfflineWithoutPoints": false,
"merged": false,
"imported": false,
"wonPointsByCompleteAllData":false,
"decrementCardStockByImpor":false,
"notGivePointsOnActivationFromExternalComponent": false,
"principalCard": false,
"fatherFamilyCard": false,
"verifiedEmail": true,
"verifiedMobile":true
}
}
}
Chiusura scontrino
Al momento dellachiusura dello scontrino, prima del pagamento, è necessario valutare se per ilcustomer che sta effettuando l’acquisto ha a disposizione possibili sconti ovouchers.
Relativamenteagli sconti, i passi da seguire sono:
1.Recuperare gli oggetti JSON “categories”e “customer” ottenuti dai flussi Avvio cassa, recupero regole epermessi campagna e Lettura della card.
2.Dall’oggetto JSON “customer”,recuperare la categoria relativa al customer interessato (customer->balanceData->category)e i punti disponibili (customer->balanceData->balance_points).
3.Dall’oggetto JSON “categories”,recuperare le ponderazioni relative alla categoria interessata.
4.Eseguire i calcoli in base alleponderazioni ottenute per valutare la presenza di sconti.
Per quantoriguarda i vouchers invece, le API di tipo Terminal offrono l’endpoint GET /terminal/vouchers,permettendo di ottenere l’elenco dei vouchers in possesso del customer.
MARTA indentificacome voucher i buoni sconto, dividendoli in buoni sconto in percentuale e buonisconto per importo.
1.Effettuare una chiamataall’endpoint GET /terminal/vouchers, specificando nella query:
· campaignid (id della campagna, presente anche nell’oggettoJSON “customer” utilizzato nei passaggi precedenti),
· customer id (id del customer),
· card (numero della card relativa, presente nell’oggettoJSON “customer”).
· initlimit (limite iniziale),
· rowcount (numero di record da mostrare).
In caso di esitopositivo, in risposta otterremo un oggetto JSON “voucherList” contenenteun array di voucher.
Per informazioniprecise sulla risposta ed ulteriori dettagli tecnici fare riferimento a: https://martaapidemo.keyx.it/doc/#/API%20Terminal/get_terminal_vouchers.
I campi degli oggettidell’array “vouchersList” che ci interessano sono:
· id (id del voucher),
· voucherCode (Barcode del voucher, da usareper il riconoscimento del voucher),
· title (Descrizione breve del voucher),
· description (Descrizioneestesa del voucher),
· expirationDate (Datadi scadenza del voucher),
· kind (Tipologiadel voucher. 1=sconto in % 2=sconto per importo),
· value (Valore del voucher in percentuale oimporto a seconda del kind).
Ecco un esempiodi request all’endpoint GET /terminal/vouchers:
curl --location 'https://martaapidemo.keyx.it/terminal/vouchers?campaignid=362&customerid=195580&card=4&initlimit=0&rowcount=50'\
--header 'Authorization:••••••'
Acquisto
L’acquisto rappresentail momento più complesso se parliamo di interazione tra card e terminale.
Durante l’acquistoinfatti, si effettua la maggior parte della movimentazione eseguibile su unpunto vendita, perché oltre a registrare l’atto da parte del cliente, vengonogestiti:
> l’utilizzodi benefit per ottenere degli sconti come lo scarico punti, sconti diretti, l’utilizzo di coupon sconto emolto altro,
> l’ottenimentodei punti in base all’importo netto dell’acquisto,
> la ricezionedi eventuali benefit.
1.Effettuare una chiamata all’endpointPOST /terminal/sale, inserendo principalmente i seguenti parametri:
· totalmoney (Importototale della vendita),
· dischargedcredits (Importodei crediti da scalare all’importo totale della vendita),
· dischargedpoints (Quantitadi punti da scaricare, che vengono convertiti in sconto sull’importo totaledella vendita),
· voucherid (iddel voucher sconto eventualmente utilizzato, da scalare dall’importo totaledella vendita),
Se la campagnaprevede l’utilizzo dei prodotti, bisogna completare l’array:
· productlist (arraycontenente la lista dei prodotti utilizzati nella vendita)
prizecode //codicedel prodotto
price //prezzounitario del prodotto
amount //quantità del prodotto
La sommatoria ditutti gli importi di vendita dei singoli prodotti deve corrispondereall’importo totale della vendita contenuto nel campo “totalmoney”. Nel caso nonsi volesse far calcolare in automatico a MARTA i punti da caricare sulla cardper l’acquisto di questo prodotto, è necessario valorizzare i seguenti campi:
useChargeDirectPoints // impostare a true
productChargeDirectPoints //punti da caricare sulla card
· pincode (pincodedel cliente, se il movimento di vendita contiene punti da scaricare e lacampagna prevede il pincode per lo scarico di punti),
· customerpincodedc (pincodecreditdel cliente, se il movimento di vendita contiene crediti da scaricare e lacampagna prevede il pincode per lo scarico di crediti),
· paymentmethod (metododel pagamento, se nella campagna viene registato),
L’array “paymentmethod”contiene l’elenco dei metodi di pagamento utilizzati e i campi obbligatori dainserire nell’oggetto sono:
id //id del tipo di pagamento
money //importo pagato
La sommatoria degliimporti dei vari metodi di pagamento deve corrispondere all’importo netto dellavendita ottenuto sottraendo al campo “totalmoney” il valore di “dischargedcredits”,il valore monetario di “dischargedpoints” e il valore del voucher indicato da “voucherid”.
Nel caso non sivolesse far calcolare in automatico a MARTA i punti da caricare sulla card perl’acquisto, è necessario valorizzare i seguenti campi:
· usechargedirectpoints (davalorizzare a true nel caso non si volesse far calcolare automatico a MARTA ipunti da caricare in base alle ponderazioni impostate),
· chargedirectpoints (quantitàdi punti da caricare scelta, da inserire nel caso usechargedirectpoints siastato valorizzato a true).
$ É importantenotare che la possibilità di definre il caricamento forzato di punti sulla cardsi presenta due volte: nella compilazione dell’array productlist e allafine del body della request. Questi campi sono autoesclusivi, di conseguenza ènecessario valorizzare i valori corretti o nel dettaglio prodotti o nel totaledel movimento, mai in entrambi per evitare incongruenze.
Come annunciatoprima, per calcolare l’effettivo importo netto della vendita è necessario sottrarreal valore del campo “totalmoney” il valore di “dischargedcredits”, ilvalore monetario di “dischargedpoints” e il valore del voucher indicato da “voucherid”.
Il valore monetariodi “dischargedpoints” e il valore dell’eventuale voucher indicato in “voucherid”sono recuperabili seguendo la sezione Chiusura Scontrino.
Per il contenutodella risposta ed altri dettagli tecnici consultare:
https://martaapidemo.keyx.it/doc/#/API%20Terminal/post_terminal_movements_sale
Ecco un esempiodi request con curl all’endpoint POST /terminal/sale.
In questo esempio viene registrata una una spesa di 10 euro con 2 prodotti, dicui su uno è stato forzato l’assegnazione di 8 punti escludendo laponderazioine, l’utilizzo di crediti per 5 euro, e l’utilizzo di un metodo dipagamento.
curl --location'https://martaapidemo.keyx.it/terminal/movements/sale' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: ••••••' \
--data '{
"campaignid": 362,
"customerid": 195580,
"card": 4,
"dischargedcredits":5,
"dischargedpoints":0,
"totalmoney": 10,
"totalBenefits": 0,
"ticketid": "",
"discountid": "",
"voucherid": "",
"operatorforeignid": "",
"paymentmethod": [
{
"id":46,
"money": 5
}
],
"foreignid": "",
"productlist": [
{
"code" : "pro2",
"price" : 7,
"amount" : 1
},
{
"code" : "pro1",
"price" : 3,
"amount" : 1,
"useChargeDirectPoints":true,
"productChargeDirectPoints": 8
}
],
"note":"Any string note you want",
"customerpincodedc": 1234
}
Eliminazione ultimo movimento
Per eseguire l’eliminazionedell’ultimo movimento effettuato su una Card, è necessario:
1.Seguire il flusso Lettura della Card.
2.Effettuare una chiamata all’endpoint DELETE /terminal/movements/last,inserendo nel body della request i seguenti parametri:
· customerid (l’id del customer, ottenuto dal passo precedente| campo obbligatorio),
· sellercard (il numero della card, ottenuto dal passoprecedente),
· notes (note relative all’eliminazione se è necessario).
É importarenotare che esiste una parametrizzazione a livello campagna che permette diimpostare un limite di tempo entro il quale effettuare questa eliminazione.
Ecco un esempiodel body in una request all’endpoint DELETE /terminal/movements/last:
{
"customerid":123456,
"sellercard":123456,
"notes”:"”
}
Gift card lettura e uso
All’interno dellatua campagna, puoi intraprendere e gestire la feature delle Gift card.
Prima di integrarequesta funzionalità, è essenziale aver recuperato gli oggetti JSON “categories”e “customer” ottenuti dai flussi Avvio cassa, recupero regole epermessi campagna e Lettura della card.
Per attivare unagift card da terminale è necessario:
1.Effettuare una chiamata all’endpointPOST /terminal/gift, passando nel body della request i seguenti parametri:
· campaignid
· card
· initialamount (valore dell’importo da caricare sulla Gift card),
· notes.
Nel caso ilparametro initialamount venga passato a zero, la gift card viene caricata conl’importo di default definito sulla categoria della card ??? , altrimenti vienecaricata con l’importo inserito.
Per il contenutodella risposta ed altri dettagli tecnici consultare:
https://martaapidemo.keyx.it/doc/#/API%20Terminal/post_terminal_gift
Ecco un esempio delbody di una request all’endpoint POST /terminal/gift:
{
"campaignid": 362,
"card":6029,
"initialamount": 50,
"notes":""
}
Per poterscaricare crediti da una gift card occorre:
1.Effettuare una chiamata all’endpointPOST /terminal/movements/dischargecreditsgift, inserendo nel body della requesti seguenti parametri:
· campaignid
· customerid
· card
· dischargegiftcredits
· customerpincodepc.
Nel caso lacampagna abbia attivato la gestione del pincode crediti, è obbigatorio passareanche il campo customerpincodepc che deve contenere il pincode.
Per il contenutodella risposta ed altri dettagli tecnici consultare:https://martaapidemo.keyx.it/doc/#/API%20Terminal/post_terminal_movements_dischargecreditsgift
Ecco un esempio di request all’endpoint POST / terminal/movements/dischargecreditsgift:
curl --location'https://martaapidemo.keyx.it/terminal/movements/dischargecreditsgift' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"campaignid": 362,
"customerid": 463874,
"card":6029,
"dischargegiftcredits": 15,
"notes":"",
"customerpincodepc": null
}’