MODULO ECOSISTEMA


Indice

1 Introduzione

L'Ecosistema di InforYou è un modulo software che permette ad applicazioni di terze parti di interrogare il database di InforYou mediante l'invocazione di webservices JSON REST.

2 Requisiti

Ogni istanza di Ecosistema viene installata localmente presso il centro. Richiede quindi:

  • IP pubblico statico in caso sia necessario accedervi dall'esterno della LAN del centro.
  • Server IIS ver. 6 o superiore.

3 Installazione

Si veda la pagina Installazione InforYou Ecosistema.

4 Autenticazione

Per invocare i metodi esposti dall'Ecosistema è necessaria una doppia autenticazione: a livello di applicazione e di utente. InforYou si riserva la facoltà di gestire liberamente la scadenza dei token da essa rilasciati. Conseguentemente è best practice, al fine di ottimizzare il numero di invocazioni ai webservice di InforYou, utilizzare sempre in ogni request HTTP un eventuale token già utilizzato in precedenza. Solo nel caso in cui il server ritorni un errore di autenticazione sarà necessario chiedere nuovamente un token rieffettuando il login presso http://iyes.inforyou.it/v1/token/GuidApp.

4.1 Autenticazione applicazione

Prima di utilizzare i metodi dell’ecosistema installato presso il cliente ogni app deve disporre di un token di autenticazione. Per ottenere questo token l'applicazione deve prima autenticarsi presso il server centrale di InforYou http://iyes.inforyou.it invocando il servizio LeggiAppToken esposto al seguente URL:
http://iyes.inforyou.it/v1/token/GuidApp
dove il parametro GuidApp è un GUID rilasciato da InforYou allo sviluppatore per l'autenticazione di una specifica app in relazione ad uno specifico centro. Questo metodo ritorna come response il token che dovrà essere esibito nell'header HTTP di tutte le richieste ai metodi dell'Ecosistema locale al centro. Il token dovrà essere inserito nell'header HTTP con il nome di "AppToken".

4.2 Autenticazione utente

Si veda il metodo authenticate nel seguito del documento. Il token restituito dal server a valle dell'autenticazione dovrà essere inserito nell'header HTTP in tutte le chiamate successive che lo richiedono. Il token dovrà essere inserito nell'header HTTP con il nome di "AuthToken".

5 JSON objects

5.1 Card

Property Type Description
CardID string Identificativo della tessera.
Owner User
ActivationDate string Data di attivazione della tessera.
LastAccessedZone string
EPurses IEnumerable<EPurse>
Coupon Coupon
DebitItems IEnumerable<PurchaseItem>
DisplayItem IEnumerable<PurchaseItem>
AdditionalInfo string proprietà personalizzabile.

5.2 Coupon

Property Type Description
CouponId string Unique code to identifying the coupon.
CurrentAmount int Current amount of the coupon. A coupon can be used multiple times decrementing its current amount that runs from its initial value to zero. It is expressed in euro cents.
InitialAmount int Initial amount of the coupon expressed in Euro cents.
Description string Text describing the coupon
EmissionDate string
ValidityDate string
Duration int expressed in days
Items PurchaseItem array In case the coupon has a default offer (i.e. it's not purely money but it has been created to buy a specific collection of goods) this array contains the list of items. If the coupon is purely money (i.e. 30€ coupon with no further specification) this field should be null.
PurchasePaymentID int Reference to the payment in which the coupon has been purchased.
Rechargeable boolean Whether the coupon is rechargeable
AdditionalInfo string General purpose text field

5.3 CouponBookEntry

Property Type Description
CouponId string Unique code to identify the coupon.
ChargeAmount int Amount which has to be decremented from the current value of the coupon. It has a positive sign and it is expressed in euro cents.

5.4 Payment

Property Type Description
PaymentId string Unique code to identifying the operation.
DebitAmount int The amount that has/had to be paid (in euro cents).
CashedAmount int The encashed amount (in euro cents).
ReturnedChangeAmount int The change given back to the user (in euro cents).
Items PurchaseItem array Array of the items involved in the payment.
PaymentResult int Result of the payment:

1 = Pending
0 = Completed
-1 = Canceled by user
-2 = Change not fully dispensed
-3 = Cannot dispense receipt
-4 = Generic error

PaymentMethod Enum "CASH",
"CARD",
"BANCOMAT",
"EPURSE",
"PAYPAL",
"BANK ACCOUNT",
"FREE",
"OTHER"
InvoiceNumber string In case the invoker issues an invoice associated to the payment, this is the identification code.
CouponBookEntries CouponBookEntry array Array of CouponBookEntry that indicates the list of all the coupons used (also partially) in the payment.
Buyer User JSON object containing the buyer info.
CardId string The UID of the customer wristband/card (if applicable).
Date string The date the payment has been requested or executed. Formatted according to the standard ISO8601 (yyyy-MMddThh:mm:ss)
ShippingCost int Expressed in eurocents.
FiscalDocumentType string Type of fiscal document:

"NULL"
"SCONTRINO"
"RICEVUTA NON FISCALE"
"RICEVUTA FISCALE"
"FATTURA"

AdditionalInfo string Free field for any additional info.


5.5 PurchaseItem

Property Type Description
PurchaseItemId string Unique code to identifying the item.
Description string Description of the item. For example: "cheese and ham sandwitch".
UnitPrice int Expressed in euro cents.
Quantity int Number of items in case of a collection.
IVA int Expressed as the percentage value in absolute value. For example use 22 meaning 22%.
Discount int The discount applied to the item
EffectivePrice int Expressed in euro cents
RevenueCenterID int The unique identifier of the revenue center
AdditionalInfo string custom property

5.6 ResponseData

Property Type Description
Successful boolean
Result string
ErrorMessage string
Comment string

5.7 User

Property Type Description
UserID int Codice identificativo dell'utente.
FirstName string
LastName string
Login string
Password string
Street string residenza/domicilio
CivicNumber string
Province string provincia (2 caratteri)
City string
ZipCode string CAP
Country string
Source string La persona o fonte che ha segnalato l'utente ad InforYou.
EnableEmail boolean Determina se l'utente desidera ricevere notifiche via email.
EnablePaper boolean Determina se l'utente desidera ricevere notifiche cartacee.
EnableSMS boolean Determina se l'utente desidera ricevere notifiche via SMS.
ReceiptFiscalCode string Il codice fiscale da usare nelle ricevute. E' diverso da FiscalCode nel caso di utente minorenne in cui il ReceiptFiscalCode è generalmente quello di un genitore.
ReceiptName string Il nome da usare nelle ricevute. Nel caso di utente minorenne è generalmente il nome di un genitore.
FiscalCode string Codice fiscale.
Phone1 string
Phone2 string
Mobile string
Email string
Gender enum "M", "F"
BirthDate string Data di nascita formattata come "1974-07-12T00:00:00"
BirthPlace string Comune di nascita
BirthProvince string Provincia di nascita (2 caratteri)
BirthCountry string Nazione di nascita
CategoryID int Identificativo della categoria di appartenenza.
InternalNote string
CompanyID string

5.8 Category

Property Type Description
CategoryID int Codice identificativo della categoria.
Description string

5.9 Service

Property Type Description
Category string Categoria d'appartenenza del servizio
ServiceID int Identificativo del servizio
Description string Descrizione della prenotazione
Price int Prezzo del servizio
Type int Riservato per scopi futuri

5.10 Slot

Property Type Description
BookingID int Identificativo della prenotazione.
Date string Data formattata come "2015-07-03T00:00:00"
StartDateTime string Data/ora inizio lezione formattata come "2015-07-03T00:00:00"
EndDateTime string Data/ora fine lezione formattata come "2015-07-03T00:00:00"
MaxBookings int Numero massimo di prenotazioni
BookNumber int Numero di prenotazioni
WaitNumber int Numero di persone in lista d'attesa
AvailablePlaces int Posti disponibili
UserBooked int L'utente loggato ha prenotato
UserWaiting int L'utente loggato è in lista d'attesa
BookingLessonID int ID lezione
Description string Descrizione lezione
Note string Note lezione
CategoryDescription string Descrizione categoria
Price int Prezzo prenotazione
ThresholdPlaces int Posti "soglia"
MaxUserPlaces int Numero massimo di posti prenotabili dall'utente
IsFree boolean Se la lezione è gratuita o no

5.11 Reservation

Property Type Description
BookingReservationID int Identificativo della prenotazione.
BookingID int ID Servizio
Description string Descrizione del servizio
StartDate string Data/Ora inizio lezione (formattata come "2015-07-02T16:19:00")
EndDate string Data/Ora fine lezione (formattata come "2015-07-02T16:19:00")
OperationDate string Data/Ora in cui è stata effettuata la prenotazione (formattata come "2015-07-02T16:19:00")
BookingLessonID int ID lezione
Note string Note lezione
CategoryDescription string Descrizione categoria
WaitingList int Lista d'attesa (1) o prenotazione valida (0)
BookFor int Numero di posti prenotati

5.12 Referral

Property Type Description
FirstName string
LastName string
MobileNumber string Numero di telefono

5.13 StatusItem

Property Type Description
Text string Descrizione
Contents StatusItem array Ricorsivo

5.14 EPurse

5.15 EPurseItem

Property Type Description
UserEPurseID int ID borsellino utente
Code string Codice borsellino
Description string Descrizione del borsellino
EPurseID int ID borsellino
Balance int saldo
ExpireDate string Data di scadenza del borsellino formattata come "2015-04-30T09:42:56"

5.16 EPurseMovement

Property Type Description
EPurseName string Descrizione borsellino
Cause string Causale
MovementDateTime string Data/ora del movimento formattata come "2015-04-30T09:42:56"
Amount int Totale movimento
GiftAmount int Omaggio movimento
Residual amount int Residuo borsellino
Balance int Saldo
ServiceType string Tipo di addebito

5.17 EPurseCreditRecord

Property Type Description
EPurseID int Identificativo della tipologia di borsellino
Amount Number Importo da ricaricare (al netto degli omaggi)
GiftAmount Number Omaggio
Causal string causale della ricarica
OperatorID int identificativo dell'operatore (se disponibile)
SellerID int identificativo del venditore (se disponibile)
RevenueCenterID int identificativo del centro di ricavo (se disponibile)

5.18 EPurseBookEntry

Property Type Description
EUserPurseID int Identificativo dell'istanza specifica del borsellino di un utente.
UserID int Identificativo dell'utente. In alternativa ad EUserPurseID è possibile specificare una coppia di valori UserID e EPurseType non nulli.
EPurseType int Identificativo della tipologia di borsellino. In alternativa a EUserPurseID è possibile specificare una coppia di valori UserID e EPurseType non nulli.
Amount int L'ammontare dell'operazione che va addebitato o accreditato a seconda del segno. Espresso in centesimi di Euro.
Reason string causale dell'operazione
RevenueCenterID int Identificativo del centro di ricavo movimentato (se applicabile).
GiftAmount int Eventuale importo omaggio espresso in centesimi di Euro.
AdditionalNote string campo di testo libero.

5.19 LoyaltyContest

Property Type Description
ContestID int Identificativo del concorso
Description string Descrizione del concorso
StartDate string Data di inizio del concorso formattata come "2015-07-31T00:00:00"
EndDate string Data di fine del concorso formattata come "2015-07-31T00:00:00"
PrizeExpireDate string Data di scadenza del premio formattata come "2015-07-31T00:00:00"
PointBalance int Saldo dei punti dell'utente loggato
UserPointsID int IDPuntiUtente

5.20 LoyaltyContestEntry

Property Type Description
UserPointEntryID int Identificativo del movimento
OperationDate string Data dell'operazione formattata come "2015-07-31T00:00:00"
Description string Descrizione
Points int Punti

5.21 LoyaltyContestPrize

Property Type Description
ContestID int Identificativo del concorso
PrizeContestID int Identificativo del concorso premio
ContestDescription string Descrizione del concorso
PrizeDescription string Descrizione del premio
Note string Campo descrittivo libero
PointsValue int Valore corrente dei punti
PrizeExpireDate string Data di scadenza del premio formattata come "2015-07-31T00:00:00"


5.22 SuspensionRequest

Property Type Description
IDSubscription int Identificativo dell'iscrizione
SuspensionStartDate string Data di inizio sospensione
GiorniSospensione int Numero giorni di sospensione
Motivo string Motivo della sospensione


5.23 Subscription

Property Type Description
IDIscrizione int Identificativo dell'iscrizione
DescrizioneAbbonamento string Descrizione dell'abbonamento
DescrizioneDurata string Descrizione della durata d'iscrizione
DescrizioneIscrizione string Descrizione dell'iscrizione
DataInizio DateTime Data d'inizio iscrizione
DataFine DateTime Data di fine iscrizione
DescCategoria string Descrizione della categoria alla quale si è iscritto l'utente
DescMacroCategoria string Descrizione della macro-categoria alla quale si è iscritto l'utente
Durata int Durata iscrizione
Periodo string
RinnovoAutomaticoIDIscrizione int?
RinnovoAutomatico Int16
DataDisdetta DateTime? Data in cui è stata annullata l'iscrizione dell'utente
Note string



5.24 TicketType

Property Type Description
TycketTypeID int Identificativo del ticket
Name string Nome del ticket
Descrizione string Descrizione del Ticket
CompanyID int Identificativo dell'azienda
WebCategoryID int
Price Decimal Prezzo del biglietto



5.25 WaitingListPosition

Property Type Description
ReservationID int Identificativo della prenotazione
StartDateTime string
StopDateTime string


6 Servizi disponibili

6.1 security/hello

  • Tipo: GET
  • Profilo chiamante: Operatore/Cliente
  • Descrizione: Metodo di test, utilizzato per verificare la raggiungibilità del servizio dopo aver effettuato l’autenticazione dell’app
  • URL: <serverUrl>/v1/security/hello
  • Token richiesti: AppToken
  • Dati request: N.A.
  • Dati response: (string) "Hello from InforYou Integration Services (IYES)."

6.2 security/authenticate

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Metodo per l’autenticazione di un utente. Riceve in input login, password e IDazienda. Ritorna un oggetto con una proprietà Item che rappresenta un Token di sicurezza

(stringa) da utilizzare per tutte le altre comunicazioni.

  • URL: <serverUrl>/v1/security/authenticate
  • Token richiesti: AppToken
  • Dati request: QueryString login=[login]&password=[password]&companyID=[companyID].
  • Dati response: (JSON object)
{
"Item": "...",
ResponseData
}

La proprietà Item contiene l’AuthToken.

6.3 security/authenticateoperator

  • Tipo: GET
  • Profilo chiamante: Operatore
  • Descrizione: Metodo per l’autenticazione di un operatore. Riceve in input login, password. Ritorna un oggetto con una proprietà Item che rappresenta un Token di sicurezza

(stringa) da utilizzare per tutte le altre comunicazioni.

  • URL: <serverUrl>/v1/security/authenticateoperator
  • Token richiesti: AppToken
  • Dati request: QueryString login=[login]&password=[password].
  • Dati response: (JSON object)
{
"Item": "...",
ResponseData
}

La proprietà Item contiene l’AuthToken.

6.4 security/passwordrecovery

  • Tipo: GET
  • Profilo chiamante: Cliente/Operatore
  • Descrizione: Metodo per il recupero password
  • URL: <serverUrl>/v1/security/passwordrecovery
  • Token richiesti: AppToken
  • Dati request: QueryString email=[email]&sms=[sms]&token=[token].
  • Dati response: (JSON object)
{
"Item": "...",
ResponseData
}

La proprietà Item contiene l’AuthToken. La proprietà Item contiene l’AuthToken.

6.5 user/me

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Ritorna I dati base dell’utente loggato sotto forma di oggetto JSON
  • URL: <serverUrl>/v1/user/me
  • Token richiesti: AppToken, AuthToken
  • Dati request: N.A.
  • Dati response: (JSON object)
{
"Item": ShortUser,
ResponseData
}

Esempio:

{
"Item": {
    "UserID": 1400,
    "FirstName": "Mario",
    "LastName": "Rossi",
    "BirthDate": "1974-07-12T00:00:00",
    "Gender": "M",
    "Email": "assistenza@inforyou.it"
},
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

La proprietà Item contiene l’oggetto Utente.

6.6 user/addreffeal

  • Tipo: POST
  • Profilo chiamante: Cliente
  • Descrizione: Aggiunge un referral per l’utente corrente. Se l’utente presentato esiste già nel DB (SMS già presente) viene scartato e ritorna un errore (Duplicato)
  • URL: <serverUrl>/v1/user/addreferral
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) Referral
  • Dati response: (JSON object) ResponseData


NOTA BENE: (Aggiungere Header Content-Type: application/json)

6.7 user/myreferrals

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Ritorna i referral dell’utente loggato
  • URL: <serverUrl>/v1/user/myreferrals
  • Token richiesti: AppToken, AuthToken
  • Dati request: N.A.
  • Dati response: (JSON object)
{
"Items": [
    Referral1,
    ... 
    ReferralN
],
ResponseData
}

Esempio:

{
"Items": [
    {
        "FirstName": "Andrea",
        "LastName": "Verdi",
        "MobileNumber": null
    },
    {
        "FirstName": "Valentina",
        "LastName": "Rossi",
        "MobileNumber": null
    },
    {
        "FirstName": "Franco",
        "LastName": "Neri",
        "MobileNumber": "3345677221"
    },
    {
        "FirstName": "Mario",
        "LastName": "Verdi",
        "MobileNumber": "3338877654"
    }
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.8 user/mystatus

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Ritorna lo stato dell’utente loggato (documento informativo)
  • URL: <serverUrl>/v1/user/mystatus
  • Token richiesti: AppToken, AuthToken
  • Dati request: N.A.
  • Dati response: (JSON object) StatusItem innestati


Esempio:

{
"Item": {
    "Text": "Documento Informativo",
    "Contents": [
            {
                "Text": "Rossi Mario",
                "Contents": []
            },
            {
                "Text": "QUOTA ASSOCIATIVA",
                "Contents": [
                    {
                        "Text": "Quota associativa non valida.",
                        "Contents": []
                    }
                ]
            },
            {
                "Text": "CERTIFICATO MEDICO",
                "Contents": [
                    {
                        "Text": "Certificato medico OK.",
                        "Contents": []
                    }
                ]
             },
             {
                "Text": "ABBONAMENTI E PAGAMENTI",
                "Contents": [
                    {
                        "Text": "OPEN 12 M dal 23/07/2014 al 22/08/2015",
                        "Contents": [
                            {
                                "Text": "23/07/2012 € 50,00 (SCADUTO)",
                                 "Contents": []
                             }
                         ]
                    }
                ]
            },
            {
                "Text": "BORSELLINI",
                "Contents": [
                    {
                        "Text": "BORSELLINO GENERALE Euro 476,00 ",
                        "Contents": []
                    }
                ]
            }
        ]
    },
    "Successful": true,
    "Comment": "",
    "Result": "0",
    "ErrorMessage": ""
}

6.9 user/activeuserbycell

  • Tipo: GET
  • Profilo chiamante: Cliente/Operatore
  • Descrizione: Metodo per attivare l'utente da cellulare
  • URL: <serverUrl>/v1/user/activeuserbycell
  • Token richiesti: AppToken, AuthToken
  • Dati request: (Querystring) cell=[cell]
  • Dati response: (JSON object) ResponseData


6.10 user/userread

  • Tipo: GET
  • Profilo chiamante: Operatore
  • Descrizione: Metodo che controlla se un utente può prenotare dal sito
  • URL: <serverUrl>/v1/user/userread
  • Token richiesti: AppToken, AuthToken
  • Dati request: (Querystring) userID=[UserID]&bookingDate=[bookingDate]
  • Dati response: (JSON object)
{
"Item": bool,
ResponseData
}


6.11 user/upsert

  • Tipo: POST
  • Profilo chiamante: Operatore
  • Descrizione: Inserisce o aggiorna un utente
  • URL: <serverUrl>/v1/user/upsert
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object)

Esempio:

{
"Item": {
                   "IDUtente" = 23,
                   "Cognome" = "Rossi",
                   Nome = "Mario",
                   Indirizzo_Via = "Roma",
                   Indirizzo_NumeroCivico = "99", 
                   Indirizzo_Pv = "VI",
                   Indirizzo_Citta = "Vicenza",
                   Indirizzo_Cap = "36100",
                   Indirizzo_Stato = "Italia",
                   CodiceFiscale = "",
                   Telefono_1 = "1234567890" ,
                   Telefono_2 = "3123456789",
                   SMS = "",
                   Email = "mario.rossi@gmail.com",
                   Sesso = "M",
                   Data_Nascita = 1990-01-01T00:00:00 ,
                   Luogo_Nascita = "Vicenza",
                   Provincia_Nascita = "Vicenza",
                   Stato_Nascita = "Italia",
                   Note = "",
                   IDOperatore = 12
},
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}
  • Dati response: (JSON object)
{
"Item": User,
ResponseData
}

6.12 reservation/categories

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Legge categorie prenotazioni
  • URL: <serverUrl>/v1/reservation/categories
  • Token richiesti: AppToken, AuthToken
  • Dati request: N.A.
  • Dati response: (JSON object)
{
"Items": [
    Category1,
    ... 
    CategoryN
],
ResponseData
}

Esempio:

{
"Items": [
    {
        "CategoryID": 7,
        "Description": "CAMPI CALCETTO"
    },
    {
        "CategoryID": 1,
        "Description": "CORSI"
    }
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.13 reservation/services

  • Tipo: GET
  • Profilo chiamante: Operatore/Cliente
  • Descrizione: Ritorna i servizi prenotazioni relativi ad una categoria
  • URL: <serverUrl>/v1/reservation/services
  • Token richiesti: AppToken, AuthToken
  • Dati request: (Querystring) bookingCategoryID=[bookingCategoryID]
  • Dati response: (JSON object)
{
"Items": [
    Service1,
    ... 
    ServiceN
],
ResponseData
}

Esempio:

{
"Items": [
    {
        "Category": "CORSI",
        "ServiceID": 8,
        "Description": "ACQUAGYM",
        "Price": 10,
        "Type": 0
    },
    {
        "Category": "CORSI",
        "ServiceID": 2,
        "Description": "FIT BOXE",
        "Price": 10,
        "Type": 0
    },
    {
        "Category": "CORSI",
        "ServiceID": 24,
        "Description": "PANCAFIT",
        "Price": 9,
        "Type": 0
    },
    {
        "Category": "CORSI",
        "ServiceID": 1,
        "Description": "SPINNING",
        "Price": 0,
        "Type": 0
    },
    {
        "Category": "CORSI",
        "ServiceID": 26,
        "Description": "WALKING",
        "Price": 1,
        "Type": 0
    }
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.14 reservation/slots

  • Tipo: GET
  • Profilo chiamante: Operatore/Cliente
  • Descrizione: Ritorna il calendario prenotazioni per un servizio
  • URL: <serverUrl>/v1/reservation/slots
  • Token richiesti: AppToken, AuthToken
  • Dati request: (Querystring) bookingID=[ bookingID]&bookingcategoryid=[bookingcategoryid]&daysinterval=[daysinterval]&startdate=[startdate]&starttime=[starttime]&endtime=[endtime]

dove: bookingID = ID Servizio, bookingcategoryid = ID Categoria, daysinterval = Intevallo giorni da visualizzare, startdate = Data inizio intervallo giorni, starttime = Fascia oraria inizio, endtime = Fascia oraria fine.

  • Dati response: (JSON object)
{
"Items": [
    Slot1,
    ... 
    SlotN
],
ResponseData
}

Esempio:

{
"Items": [
    {
        "BookingID": 1,
        "Date": "2015-07-02T00:00:00",
        "StartDateTime": "2015-07-02T20:00:00",
        "EndDateTime": "2015-07-02T21:30:00",
        "MaxBookings": 5,
        "BookNumber": 0,
        "WaitNumber": 0,
        "AvailablePlaces": 5,
        "UserBooked": 0,
        "UserWaiting": 0,
        "BookingLessonID": 148,
        "Description": "SPINNING",
        "Note": "Intensiva",
        "CategoryDescription": "CORSI",
        "Price": 0,
        "ThresholdPlaces": 3,
        "MaxUserPlaces": 4,
        "IsFree": true
    },
    {
        "BookingID": 1,
        "Date": "2015-07-03T00:00:00",
        "StartDateTime": "2015-07-03T10:00:00",
        "EndDateTime": "2015-07-03T11:00:00",
        "MaxBookings": 5,
        "BookNumber": 0,
        "WaitNumber": 0,
        "AvailablePlaces": 5,
        "UserBooked": 0,
        "UserWaiting": 0,
        "BookingLessonID": 139,
        "Description": "SPINNING",
        "Note": "",
        "CategoryDescription": "CORSI",
        "Price": 0,
        "ThresholdPlaces": 3,
        "MaxUserPlaces": 4,
        "IsFree": true
    }
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.15 reservation/myreservations

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Ritorna le prenotazioni dell’utente loggato
  • URL: <serverUrl>/v1/reservation/myreservations
  • Token richiesti: AppToken, AuthToken
  • Dati request: N.A.
  • Dati response: (JSON object)
{
"Items": [
    Reservation1,
    ... 
    ReservationN
],
ResponseData
}

Esempio:

{ 
"Items": [
    {
        "BookingReservationID": 2627,
        "BookingID": 1,
        "Description": "SPINNING",
        "StartDate": "2015-07-03T10:00:00",
        "EndDate": "2015-07-03T11:00:00",
        "OperationDate": "2015-07-02T16:19:00",
        "BookingLessonID": 148,
        "Note": "Intensiva",
        "CategoryDescription": "CORSI",
        "WaitingList": 0,
        "BookFor": 0
    }
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.16 reservation/add

  • Tipo: POST
  • Profilo chiamante: Cliente
  • Descrizione: Prenota una lezione per l'utente loggato
  • URL: <serverUrl>/v1/reservation/add
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) Reservation
  • Dati response: (JSON object) ResponseData


NOTA BENE: (Aggiungere Header Content-Type: application/json)

6.17 reservation/cancel

  • Tipo: POST
  • Profilo chiamante: Cliente
  • Descrizione: Elimina la prenotazione di una lezione per l’utente loggato
  • URL: <serverUrl>/v1/reservation/cancel
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) Reservation
  • Dati response: (JSON object) ResponseData


NOTA BENE: (Aggiungere Header Content-Type: application/json)

6.18 waitinglist/add

  • Tipo: POST
  • Profilo chiamante: Cliente
  • Descrizione: Inserisce l'utente loggato in lista d'attesa per un servizio
  • URL: <serverUrl>/v1/waitinglist/add
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) Reservation
  • Dati response: (JSON object) ResponseData


NOTA BENE: (Aggiungere Header Content-Type: application/json)

6.19 waitinglist/cancel

  • Tipo: POST
  • Profilo chiamante: Cliente
  • Descrizione: Elimina l'utente loggato dalla lista d'attesa per un servizio
  • URL: <serverUrl>/v1/waitinglist/cancel
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) Reservation
  • Dati response: (JSON object) ResponseData


NOTA BENE: (Aggiungere Header Content-Type: application/json)


6.20 waitinglist/position

  • Tipo: POST
  • Profilo chiamante: Cliente,Operatore
  • Descrizione: Metodo che ritorna una posizione specifica della lista d'attesa
  • URL: <serverUrl>/v1/waitinglist/position
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) WaitingListPosition
  • Dati response: int


6.21 epurse/myepurses

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Ritorna i borsellini elettronici dell’utente loggato (documento informativo)
  • URL: <serverUrl>/v1/user/myepurses
  • Token richiesti: AppToken, AuthToken
  • Dati request: N.A.
  • Dati response: (JSON object)
{ 
"Items": [
    EPurseItem1,
    ...,
    EPurseItemN
],
ResponseData
}


Esempio:

{
"Items": [
    {
    "EPurseID": 526,
    "Code": "2-526",
    "Description": "BORSELLINO GENERALE",
    "EPurseID": 2,
    "Balance": 476,
    "ExpireDate": null
    }
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.22 epurse/balance

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Ritorna il saldo del borsellino indicato in query string
  • URL: <serverUrl>/v1/epurse/balance
  • Token richiesti: AppToken, AuthToken
  • Dati request: (Querystring) userEPurseID=[userEPurseID]
  • Dati response: (JSON object)
{ 
"Item": EPurseItem,
ResponseData
}

Esempio:

{
"Item": {
    "EPurseID": 526,
    "Code": "2-526",
    "Description": "BORSELLINO GENERALE",
    "EPurseID": 2,
    "Balance": 476,
    "ExpireDate": null
},
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.23 epurse/movements

  • Tipo: GET
  • Profilo chiamante: Operatore/Cliente
  • Descrizione: Ritorna i movimenti del borsellino indicato in query string
  • URL: <serverUrl>/v1/epurse/movements
  • Token richiesti: AppToken, AuthToken
  • Dati request: (Querystring) userEPurseID=[userEPurseID]
  • Dati response: (JSON object)
{ 
"Items": EPurseMovement,
ResponseData
}

Esempio:

{
"Items": [
   {
       "EPurseName": "BORSELLINO GENERALE",
       "Cause": "PRENOTAZIONE: SPINNING del 03/07/2015 10:00:00",
       "MovementDateTime": "2015-07-02T16:18:59",
       "Amount": 0,
       "GiftAmount": 0,
       "ResidualAmount": 472,
       "Balance": 0,
       "ServiceType": "P"
   },
   ...
   {
       "EPurseName": "BORSELLINO GENERALE",
       "Cause": "PRENOTAZIONE: FIT BOXE del 30/04/2015 10:00:00",
       "MovementDateTime": "2015-04-30T09:42:56",
       "Amount": 0,
       "GiftAmount": -10,
       "ResidualAmount": 472,
       "Balance": -10,
       "ServiceType": "P"
   }
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.24 epurse/credit

  • Tipo: POST
  • Profilo chiamante: Cliente
  • Descrizione: Accredita il borsellino dell'utente loggato di un certo importo eventualmente comprensivo di un omaggio. Non movimenta i centri di ricavo
  • URL: <serverUrl>/v1/epurse/credit
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) EPurseCreditRecord

Esempio:

{
"EPurseID": 12,
"Amount": 50.0,
"GiftAmount": 0.0,
"Causal": "Accredito per ricarica",
"OperatorID": null,
"SellerID": null,
"RevenueCenterID": null
}

Esempio:

{
"Successful": true,
"Comment": "Accredito effettuato.",
"Result": null,
"ErrorMessage": null
}

6.25 epurse/debit

  • Tipo: POST
  • Profilo chiamante: Cliente
  • Descrizione: Addebita il borsellino dell'utente loggato di un certo importo eventualmente comprensivo di un omaggio. Movimenta i centri di ricavo
  • URL: <serverUrl>/v1/epurse/debit
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) EPurseCreditRecord

Esempio:

{
"EPurseID": 12,
"Amount": 10.0,
"GiftAmount": 0.0,
"Causal": "Addebito per prenotazione",
"OperatorID": null,
"SellerID": null,
"RevenueCenterID": null
}

Esempio:

{
"Successful": true,
"Comment": "Accredito effettuato.",
"Result": null,
"ErrorMessage": null
}


6.26 epurse/balancebycard

  • Tipo: POST
  • Profilo chiamante: Operatore
  • Descrizione: Legge il saldo del borsellino identificato dell'utente identificato dal codice passato come input
  • URL: <serverUrl>/v1/epurse/balancebycard
  • Token richiesti: AppToken, AuthToken
  • Dati request: (Querystring) card=[card]&epurseid=[epurseid]
  • Dati response: (JSON object)

Esempio:

{
"Item": {
    "Description": "BORSELLINO GENERALE",
    "EPurseID": 526,
    "UserEPurseID": 2,
    "Balance": 476
},
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}


6.27 epurse/entryrecord

  • Tipo: POST
  • Profilo chiamante: Operatore/Cliente
  • Descrizione: Addebita il borsellino dell'utente indicato in EPurseBookEntry. Movimenta i centri di ricavo coinvolti. Il parametro Amount va considerato con segno e viene interpretato dal server con la seguente convenzione:
Positivo = accredito sul BE di un importo pari al valore assoluto di Amount
Negativo = addebito sul BE di un importo pari al valore assoluto di Amount
  • URL: <serverUrl>/v1/epurse/entryrecord
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) EPurseBookEntry

Esempio:

{
"EUserPurseID": 0,
"UserID  ": 123456,
"EPurseType": 2,
"Amount": 100,
"Reason": "Accredito ",
"SellerID": null,
"RevenueCenterID": null
"GiftAmount": 0
"AdditionalNote": ""
}

Esempio:

{
"Successful": true,
"Comment": "Accredito effettuato.",
"Result": null,
"ErrorMessage": null
}

6.28 company/getparameter

  • Tipo: GET
  • Profilo chiamante: Operatore/Cliente
  • Descrizione: Ritorna il valore di un parametro di un’azienda dato il nome parametro e l’ID Azienda
  • URL: <serverUrl>/v1/epurse/getparameter
  • Token richiesti: AppToken, AuthToken
  • Dati request: (QueryString) name=[name]&companyID=[companyID]
  • Dati response: (JSON object)
{
"Item": "valore del parametro richiesto",
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}


6.29 company/categories

  • Tipo: GET
  • Profilo chiamante: Operatore/Cliente
  • Descrizione: Ritorna le categorie di un’azienda dato l’ID Azienda
  • URL: <serverUrl>/v1/company/categories
  • Token richiesti: AppToken, AuthToken
  • Dati request: (QueryString) IDAzienda=[IDAzienda]
  • Dati response: (JSON object)
{
"Items": [
    Category1,
    ... 
    CategoryN
],
ResponseData
}

Esempio:

{
"Items": [
    {
        "CategoryID": 7,
        "Description": "Palestra"
    },
    {
        "CategoryID": 1,
        "Description": "Piscina"
    }
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}


6.30 company/all

  • Tipo: GET
  • Profilo chiamante: Operatore/Cliente
  • Descrizione: Ritorna la lista di tutte le aziende attive.
  • URL: <serverUrl>/v1/company/all
  • Token richiesti: AppToken, AuthToken
  • Dati request:
  • Dati response: (JSON object)
{
"Items": [
    Company1,
    ... 
    CompanyN
],
ResponseData
}

Esempio:

{
"Items": [
    {
        "CompanyID": 5,
        "Name": "AziendaX srl"
    },
    {
        "CompanyID": 3,
        "Name": "AziendaY ssd a rl"
    }
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}


6.31 loyalty/contest

  • Tipo: GET
  • Profilo chiamante: Operatore/Cliente
  • Descrizione: Ritorna il valore di un parametro di un’azienda dato il nome parametro e l’ID Azienda
  • URL: <serverUrl>/v1/epurse/getparameter
  • Token richiesti: AppToken, AuthToken
  • Dati request: (QueryString) name=[name]&companyID=[companyID]
  • Dati response: (JSON object)
{
"Items": [
        LoyaltyContest1,
        [...]
        LoyaltyContestN
    ],
    ResponseData
}

Esempio:

{
"Items": [
    {
    "ContestID": 1089,
    "Description": "Porta un amico",
    "StartDate": "2015-01-01T00:00:00",
    "EndDate": "2015-06-30T00:00:00",
    "PrizeExpireDate": "2015-07-31T00:00:00",
    "PointBalance": 900,
    "UserPointsID": 1234
    },
…
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""

}

6.32 loyalty/contestentries

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Ritorna i movimenti dei punti accumulati dall'utente loggato
  • URL: <serverUrl>/v1/loyalty/contestentries
  • Token richiesti: AppToken, AuthToken
  • Dati request: (QueryString) name=[name]&userPointsID=[userPointsID]
  • Dati response: (JSON object)
{
"Items": [
        LoyaltyContestEntry1,
        [...]
        LoyaltyContestEntryN
    ],
    ResponseData
}

Esempio:

{
"Items": [
    {
        "UserPointEntryID": 12455,
        "OperationDate": "2015-04-30T09:42:56",
        "Description": "Acquisto bibita energetica",
        "Points": 10
    },
…
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.33 loyalty/useravailableprizes

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Ritorna i premi disponibili per l'utente loggato
  • URL: <serverUrl>/v1/loyalty/useravailableprizes
  • Token richiesti: AppToken, AuthToken
  • Dati request: N.A.
  • Dati response: (JSON object)
{
"Items": [
        LoyaltyContestPrize1,
        [...]
        LoyaltyContestPrizeN
    ],
    ResponseData
}

Esempio:

{
"Items": [
    {
        "ContestID": 100,
        "PrizeContestID": 122,
        "ContestDescription": "Porta un amico",
        "PrizeDescription": "Asciugamano con logo",
        "Note": "",
        "PointsValue": 200,
        "PrizeExpireDate": "2015-04-30T00:00:00",
    },
…
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.34 loyalty/reclaimprize

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Segnala che il premio passato in querystring è stato ritirato. Si applica solo a premi non materiali come le ricariche.
  • URL: <serverUrl>/v1/loyalty/reclaimprize
  • Token richiesti: AppToken, AuthToken
  • Dati request: (Querystring) contestPrizeID=[contestPrizeID]
  • Dati response: (JSON object) - La proprietà "Item" contiene il valore true o false a seconda che sia stato possibile o meno ritirare il premio.
{
    "Item": true/false,
     ResponseData
}

Esempio:

{
    "Item": true,
    "Successful": true,
    "Comment": "",
    "Result": "0",
    "ErrorMessage": ""
}

6.35 user/add

  • Tipo: POST
  • Profilo chiamante: Operatore
  • Descrizione: Aggiunge un utente al database di InforYou Manager.
  • URL: <serverUrl>/v1/user/add
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) User


Esempio:

{
"FirstName":"Mario",
"LastName":"Neri",
"Login":"mario.neri",
"Password":"pwd1",
"Street":"Via Roma",
"CivicNumber":"22",
"Province":"TV",
"City":"Treviso",
"ZipCode":"31100",
"Country":"IT",
"Source":"Amici",
"EnableEmail":True,
"EnablePaper //Autorizza
"EnableSMS //AutorizzaS
"ReceiptFiscalCode":"",
"ReceiptName":"",
"FiscalCode":"",
"Phone1":"",
"Phone2":"",
"Mobile":"",
"Email":"",
"Gender":"",
"BirthDate":"",
"BirthPlace":"",
"BirthProvince":"",
"BirthCountry":"",
"CategoryID": 14,
"InternalNote":"",
"CompanyID":2
}


Esempio:

{
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}

6.36 payments/createpayment

  • Tipo: POST
  • Profilo chiamante: Operatore
  • Descrizione: This service is called from any third-party application that has to notify InforYou Ecosystem about a confirmed payment or request InforYou Ecosystem to authorize a new payment.
  • URL: <serverUrl>/v1/payments/createpayment
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object) Payment
  • Dati response: (JSON object) ResponseData che contiene l'ID (generato dal server) del pagamento appena creato.


Esempio:

{
"Successful": true,
"Comment": "PaymentID=123456",
"Result": "0",
"ErrorMessage": ""
}


NOTA BENE: (Aggiungere Header Content-Type: application/json)

6.37 Delete payment (to be confirmed)

  • Tipo: DELETE
  • Profilo chiamante: Operatore
  • Descrizione: This service is called from any third-party application in order to cancel a previously-created payment
  • URL: <serverUrl>/v1/payments/<paymentID>
  • Token richiesti: AppToken, AuthToken
  • Dati request:: N.A.
  • Dati response: (JSON object) ResponseData

6.38 Retrieve info about coupon

  • Tipo: GET
  • Profilo chiamante: Operatore
  • Descrizione: Restituisce tutte le informazioni relative al coupon identificato dal codice passato come input
  • URL: <serverUrl>/v1/Coupons/coupon?code={code}
  • Token richiesti: AppToken, AuthToken
  • Dati request:: (string) coupon code
  • Dati response: (JSON object)
{ 
"Item": Coupon,
ResponseData
}

6.39 Create coupon

  • Tipo: POST
  • Profilo chiamante: Operatore
  • Descrizione: This service is called to create a coupon
  • URL: <serverUrl>/v1/Coupons/createcoupon
  • Token richiesti: AppToken, AuthToken
  • Dati request:: (JSON object) Coupon
  • Dati response: (JSON object) ResponseData

6.40 Retrieve card information

  • Tipo: GET
  • Profilo chiamante: Operatore
  • Descrizione: Metodo che restituisce le informazioni relative all'utente che possiede la carta identificata dal codice passato come input.
  • URL: <serverUrl>/v1/cards/card?code={code}
  • Token richiesti: AppToken, AuthToken
  • Dati request:: (string) card/wristband code
  • Dati response: (JSON object)
{ 
"Item": Card,
ResponseData
}

6.41 medicalcertificate/medicalcertificate

  • Tipo: POST
  • Profilo chiamante: Operatore/Cliente
  • Descrizione: Ritorna il certificato medico dell'utente
  • URL: <serverUrl>/v1/medicalcertificate/medicalcertificate
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object)
{
    "Item": [
           "IDUtente": 12
   ]
}


6.42 suspension/suspension

  • Tipo: POST
  • Profilo chiamante: Cliente
  • Descrizione: Metodo per la sospensione di un abbonamento
  • URL: <serverUrl>/v1/suspension/suspension
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object)
{
    "Item": [
           "IDSubscription": (int),
           "SuspensionStartDate": (string),
           "GiorniSospensione": (int),
           "Motivo": (string)
   ]
}


6.43 suspension/activesubscription

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Metodo che ritorna la lista degli abbonamenti attivi
  • URL: <serverUrl>/v1/suspension/activesubscription
  • Token richiesti: AppToken, AuthToken
  • Dati request: N.A.
  • Dati response: (JSON object)
{
"Items": [
        Subscription1,
        [...]
        SubscriptionN
    ],
    ResponseData
}

Esempio:

{
"Items": [
    {
        "IdIscrizione": 45,
        "Descrizione abbonamento": "Open" ,
        "DataDisdetta": "2018-01-01T00:00:00",
        "DataFine": "2019-03-03T00:00:00",
        "DataInizio": "2018-03-03T00:00:00",
        "DescCategoria": "Fitness",
        "DescMacroCategoria": "Abbonamenti",
        "DescrizioneDurata": "3 mesi",
        "DescrizioneIscrizione": "Abbonamenti Fitness Open 3 mesi dal 3-3-2018 al 3-3-2019",
        "Durata": 3,
        "Periodo": "M",
        "Note": "",
        "RinnovoAutomatico": 0,
        "RinnovoAutomaticoIDIscrizione": null
    },
…
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}


6.44 suspension/suspensionperiods

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Metodo che ritorna tutti i possibili periodi di sospensione
  • URL: <serverUrl>/v1/suspension/suspensionperiods
  • Token richiesti: AppToken, AuthToken
  • Dati request: (Querystring) idiscriszione=[idiscrizione]
  • Dati response: (JSON object)

Esempio:

{
        "Item": (int)
        "Successful": true,
        "Comment": "",
        "Result": "0",
        "ErrorMessage": ""
},


6.45 suspension/suspensiondays

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Metodo che ritorna tutti i possibili giorni di sospensione
  • URL: <serverUrl>/v1/suspension/suspensiondays
  • Token richiesti: AppToken, AuthToken
  • Dati request: (Querystring) idiscriszione=[idiscrizione]
  • Dati response: (JSON object)

Esempio:

{
        "Item": (string)
        "Successful": true,
        "Comment": "",
        "Result": "0",
        "ErrorMessage": ""
},


6.46 suspension/suspensionreason

  • Tipo: GET
  • Profilo chiamante: Cliente
  • Descrizione: Metodo che ritorna le ragioni di sospensione
  • URL: <serverUrl>/v1/suspension/suspensionreason
  • Token richiesti: AppToken, AuthToken
  • Dati request:
  • Dati response: (JSON object)

Esempio:

{
        "Item": (string)
        "Successful": true,
        "Comment": "",
        "Result": "0",
        "ErrorMessage": ""
},


6.47 ticket/gettickettypes

  • Tipo: GET
  • Profilo chiamante: Operatore
  • Descrizione: Metodo che ritorna tutti tipi di ticket disponibili per un'azienda specifica
  • URL: <serverUrl>/v1/ticket/tickettypes
  • Token richiesti: AppToken, AuthToken
  • Dati request: N.A.
  • Dati response: (JSON object)
{
"Items": [
    TicketType1,
    ... 
    TicketTypeN
],
TicketType
}

Esempio:

{
"Items": [
    {
        "TicketType": 412,
        "CompanyID": 765,
        "WebCategoryID": 54,
        "Name": "Adulto",
        "Description": "Giornaliero",
        "Price": 10
    },
   ...
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}


6.48 ticket/buyticket

  • Tipo: GET
  • Profilo chiamante: Operatore
  • Descrizione: Metodo per effettuare il pagamento di un biglietto
  • URL: <serverUrl>/v1/ticket/buyticket
  • Token richiesti: AppToken, AuthToken
  • Dati request: (JSON object)
  • Dati response: (JSON object)
{
"Items": [
    PurchaseTicketResult1,
    ... 
    PurchaseTicketResultN
],
ResponseData
}

Esempio:

{
"Items": [
    {
        "transactionID": 3F2504E04F8911D39A0C0305E82C3301 ,
        "CompanyID": 3,
        "UserID": 81,
        "TicketQuantity": 3,
        "OrderTotal": [decimal],
        "OrderStatus": 0,
        "PurchaseDateTime": 2018-02-02T11:34:17 ,
        "Message": "Order for specified UserId already exists."
    },
    ...
],
"Successful": true,
"Comment": "",
"Result": "0",
"ErrorMessage": ""
}


6.49 Increment/Decrement EPurse

  • Tipo: POST
  • Profilo chiamante: Operatore
  • Descrizione: This service is called by an operator to increment/decrement a customer epurse.
  • URL: <serverUrl>/v1/epurse/bookentries
  • Token richiesti: AppToken, AuthToken
  • Dati request:: (JSON object) EPurseBookEntry
  • Dati response: (JSON object) ResponseData