Back to top

Tempora API

Tempora API è una API di tipo REST che permette di accedere ai dati di Tempora da codice di programmazione, script o applicazioni.

L’API scambia dati in formato JSON con codifica UTF-8. Richieste e risposte si intendono tutte in formato JSON. Eventuali eccezioni sono indicare ove opportuno.

Risorse disponibili

Tempora API copre attualmente un nucleo di risorse fondamentali di Tempora in sola lettura.

Progressivamente verrà reso accessibile un numero più ampio di dati, anche in modifica, seguendo le esigenze espresse dagli utenti di Tempora interessati all’utilizzo delle API.

Utilizi comuni

Gli utilizzi più comuni di una API includono:

  • Esecuzione di operazioni ripetitive

  • Aggiornamento automatico di certe informazioni

  • Sincronizzazione dei dati con quelli di un software esterno

  • Generazione di report

  • Creazione di nuove funzionalità

  • Personalizzazioni del flusso di lavoro (workflow)

Autenticazione - OAuth 2.0

Tempora API supporta il metodo di autenticazione OAuth 2.0.

Il procedimento per l’abilitazione e l’autenticazione alle API comprende questi passaggi, illustrati nei paragrafi successivi:

  • Registrazione di una Applicazione API in Tempora e rilascio delle credenziali

  • Utilizzo delle credenziali per ottenere un token temporaneo di autenticazione

  • Utilizzo del token per accedere alle API

Registrare un’Applicazione API

I seguenti paragrafi illustrano i passaggi necessari a registrare un’Applicazione API, configurarne le autorizzazioni e ottenere le credenziali di accesso.

Applicazione API

In Tempora, dalle funzioni di amministrazione, aprire la pagina delle Applicazioni API. Creare una nuova Applicazione API e fornire un nome descrittivo.

Impostarne le autorizzazioni di accesso, tenendo presente che, per ragioni di sicurezza, è sempre bene limitare le autorizzazioni allo stretto necessario. In ogni caso è sempre possibile ampliarle in un momento successivo. Se opportuno, definire più applicazioni API, ognuna con le autorizzazioni minime necessarie alle operazioni da eseguire.

Se, ad esempio, si vogliono utilizzare le credenziali di accesso sia per uno script che per un’applicazione web, è consigliabile definire due diverse applicazioni API, ognuna con le autorizzazioni essenziali alle operazioni da eseguire. Oltre che dal punto di vista della sicurezza, è opportuno farlo anche per semplificare la diagnosi di possibili problemi. Infatti, in caso di problemi, il servizio di supporto sarà in grado di individuare quali operazioni sono state eseguite da quale Applicazione API.

Restrizioni e Autorizzazioni

È possibile limitare l’accesso dell’Applicazione API a uno specifico gruppo di aziende. In caso contrario l’impostazione predefinita autorizza l’accesso a tutte le aziende del dominio.

Le autorizzazioni richiedono di specificare quali risorse sono accessibili e se l’accesso è in lettura o in scrittura. Accesso in lettura e scrittura sono indipendenti: questo vuol dire che l’accesso in scrittura non implica l’accesso in lettura. Esempio: se si fornisce l’accesso in scrittura, ma non in lettura, alle timbrature, sarà possibile usare le API per registrare una nuova timbratura, ma non per leggere le timbrature esistenti.

Le autorizzazioni sono indicate secondo il formato nome_risorsa:accesso. Il nome della risorsa è anche detto “scope” perché individua un ambito di accesso. Ad esempio clockings:read individua la risorsa “timbrature” (clockings) e il livello di accesso “lettura” (read), mentre clockings:write individua il livello di accesso scrittura (write). Per fornire accesso in lettura e scrittura sulle timbrature bisognerà selezionare clockings:read e clockings:write.

Non per tutte le risorse sono disponibili sia il livello di accesso in lettura che in scrittura.

Applicazione nuove autorizzazioni

Le modifiche alle autorizzazioni potrebbero non venire rilevate immediatamente dalla API, perché, per ragioni di efficienza, le autorizzazioni vengono memorizzate in una cache e rilette dopo un certo intervallo di tempo. Per assicurarsi che le nuove autorizzazioni vengano rilevate immediatamente si può inviare una richiesta alla risorsa /auth/refreshrequests. Per dettagli consultare la documentazione corrispondente.

Credenziali di accesso

Le credenziali di accesso sono disponibili nella finestra di registrazione dell’Applicazione API.

Le credenziali sono composte da un ClientId, un nome utente che identifica l’applicazione, e da un ClientSecret, una password.

Attenzione

ClientId e ClientSecret forniscono l’accesso ai vostri dati, in lettura o scrittura, secondo quanto configurato nell’Applicazione API registrata in Tempora. Devono perciò essere usati con tutta la cautela necessaria: non devono essere condivisi ne inclusi in codice caricato lato client (ad es. in un browser) e non devono essere accessibili a personale non autorizzato. Ogni danno derivante dall’utilizzo non corretto di questi dati di accesso (es. sottrazione o perdita di dati) è responsabilità esclusiva del cliente.

Autenticazione - Bearer token

Le credenziali (ClientId e ClientSecret) non vengono usate direttamente per autorizzare le richieste inviate alle API. Vengono invece usate per ottenere un token (una chiave) che deve essere utilizzato per autorizzare le richieste.

Il token così rilasciato ha una validità temporanea di 48 ore. Entro questo periodo di tempo è necessario richiedere un nuovo token di autenticazione. Il nuovo token può essere richiesto anche prima della scadenza del token in uso.

Il token che viene rilasciato è in formato JWT - JSON Web Token.

Viene chiamato “bearer” (al portatore) perché ogni richiesta inviata alle API deve essere accompagnata un token di autenticazione (valido).

Ottenere il Bearer token

Per ottenere il token di autenticazione inoltrare una richiesta all’endpoint di autenticazione (vedi i messaggi nella sezione Autenticazione).

Autorizzare le richieste

Tutte le richieste inviata alle API, tranne quelle dirette all’endpoint di autenticazione, devono essere accompagnate da un token valido. Il token deve essere indicato nell’intestazione della richiesta nel modo seguente:

Authorization: bearer {token}

dove {token} è il token ottenuto in precedenza.

Limitazioni

Per garantire l’efficienza del servizio e la disponibilità per tutti i clienti, l’utilizzo delle Tempora API è sottoposto a limiti di utilizzo.

Il numero massimo di richieste che è possibile inviare è di 100 ogni 60 secondi. Questo livello di risposta non è garantito e dipende dal carico dei server. Questo vuol dire che il limite massimo è questo, ma non è sicuro che i server siano in ogni momento in grado di supportare un carico di questo numero di richieste nel tempo indicato.

Una volta superato tale limite, le successive richieste non verranno elaborate e verrà restituito un errore HTTP 429 e un header Retry-After con l’indicazione del tempo, espresso in secondi, dopo il quale sarà di nuovo possibile inviare richieste al server.

Il tipo di limitazione può essere soggetta a revisione, in base a valutazioni legate all’efficienza del sistema. Se si dovessere ricevere l’errore HTTP 429 in modo inaspettato, tornare prima di tutto a verificare eventuali variazioni nelle limitazioni indicate in questo paragrafo.

Informazioni sullo stato attuale di erosione delle limitazioni vengono fornite nelle intestazioni delle risposte HTTP, nel modo seguente:

X-Rate-Limit-Limit: 60s

Indica l’intervallo di tempo a cui si riferisce il limite. In questo caso 60 secondi.

X-Rate-Limit-Remaining: 99

Indica il numero di richieste che è ancora possibile fare prima di raggiungere il limite.

X-Rate-Limit-Reset: 2018-01-18T11:44:13.8466754Z

Indica il momento in cui il limite verrà reimpostato (cioè trascorso il tempo indicato da X-Rate-Limit-Limit)

Intestazioni delle richieste

L’unica intestazione obbligatoria per tutte le richieste (tranne quella per la generazione del token di autenticazione) è quella che indica il token per l’autorizzazione della richiesta:

Authorization: bearer {token}

Altre intestazioni sono opzionali, perché se omesse vengono usati i valori predefiniti, o perché al momento non sono disponibili valori differenti:

Content-Type: application/json
Accept: application/json

Errori e codici di stato

Le risposte includono sempre un codice di stato HTTP. A volte una richiesta inviata alla API può non essere elaborata correttamente. In questi casi la riposta conterrà un codice di stato HTTP che permette di identificare il problema.

In linea generale, ai fini di queste API, sono rilevanti tre classi di codici di stato. Classe 2xx - indica la corretta elaborazione della richiesta Classe 4xx - indica un problema con la richiesta dovuto alla richiesta stessa Classe 5xx - indica un problema causato da un errore imprevisto del server

Quello che segue è un elenco dei codici di stato più comuni.

Codice Significato Descrizione
200 OK La richiesta è stata elaborata correttamente
201 Created La richiesta è stata elaborata correttamente e una nuova risorsa è stata creata
204 No Content La richiesta è stata elaborata e la risposta non include dati da elaborare
400 Bad Request La richiesta non era valida
401 Unauthorized La richiesta è stata ignorata perché il richiedente non è autenticato
403 Forbidden Autorizzazione negata per l’operazione richiesta
404 Not Found La richiesta faceva riferimento a una risorsa che non esiste
409 Conflict Si è cercato di creare una risorsa che esiste già
422 Unprocessable entity La convalida dei dati ha dato esito negativo
500 Internal Server Error Un errore imprevisto del server ha impedito la corretta elaborazione della richiesta

Paginazione dei dati

Tutte le risorse restituiscono risultati paginati.

Questo è necessario per permettere di richiedere e ottenere i dati in modo rapido ed efficiente, soprattutto con riguardo alle collezioni di risorse molto numerose come, ad esempio, quella delle timbrature.

Le risposte ottenute da richieste inoltrate a una risorsa paginata contengono un’intestazione X-Pagination che contiene le informazioni necessarie a procedere attraverso le pagine dei dati.

Ad esempio, se si invia una richiesta a una risorsa paginata senza fornire informazioni sulla pagina di dati richiesti, verrà restituita la prima pagina di dati e l’intestazione X-Pagination conterrà dei valori simili ai seguenti:

{
  "TotalCount":91,
  "PageSize":20,
  "CurrentPage":1,
  "TotalPages":5,
  "PreviousPageLink":"https://temporasystem.com/api/companiesgroups/1/basevoices?pageNumber=0&pageSize=20",
  "NextPageLink":"https://temporasystem.com/api/companiesgroups/1/basevoices?pageNumber=2&pageSize=20"
}

TotalCount: indica il numero totale di elementi presenti nella risorsa. In questo caso 91 basevoices (causali).

PageSize: è la dimensione attuale della pagina dati. In questo caso 20 elementi.

CurrentPage: è la pagina che è stata restituita.

TotalPages: è il numero totale di pagine dati disponibili.

PreviousPageLink e NextPageLink: contengono rispettivamente l’URL che punta alla pagina precedente e successiva a quella corrente (se non è disponibile una delle due - ad esempio perché la pagina corrente è la prima e non esiste una pagina precedente - contengono l’URL alla pagina corrente).

Per richiedere una specifica pagina dati utilizzare i seguenti argomenti da aggiungere nell’URL della richiesta:

pageSize: permette di personalizzare la dimensione della pagina dati. Il valore massimo è 500.

pageNumber: è la pagina dati da restituire.

Condizioni filtro

Esistono due meccanismi per filtrare gli elementi di una risorsa.

Alcune risorse accettano argomenti aggiuntivi che possono essere indicati nell’URL. Per sapere se una risorsa espone questo tipo di argomenti consultare la sua documentazione.

Se ad esempio una risorsa accetta gli argomenti fromDate e toDate, sarà possibile utilizzarli per indicare che si vogliono ottenere gli elementi inclusi in un certo intervallo di tempo, nel modo seguente:

/nome-risorsa/?fromDate=2017-01-01&toDate=2017-01-30

Più in generale tutte le risorse supportano un meccanismo generico di condizioni filtro.

Per filtrare i risultati aggiungere all’URL della richiesta un’espressione con il seguente formato:

filter=({nome-proprieta} {operatore} {valore})

Gli operatori utilizzabili sono i seguenti:

Operatore Significato Descrizione
eq Equal I due termini sono uguali
ne Not equal I due termini sono differenti
gt Greater than Il primo termine è più grande del secondo
ge Greater or equal than Il primo termine è più grande o uguale al secondo
lt Lesser than Il primo termine è più piccolo del secondo
le Lesser or equal than Il primo termine è più piccolo o uguale al secondo
contains(…) Contains Applicato a proprietà di tipo testo: proprieta.contains(‘x’)
startsWith(…) Starts with Applicato a proprietà di tipo testo: proprieta.startsWith(‘prefix’)
endsWith(…) Ends with Applicato a proprietà di tipo testo: proprieta. endsWith(‘suffiix’)

Alcuni esempi di filtro:

filter=(computingType eq 'AsHours')

filter=(badge eq '123456')

filter=(badge.contains('123'))

filter=(idClockingCausal gt 100)

filter=(souceDateTimeClocking gt '2018-01-01T08:00:00')

filter=(lastName gt 'g')

Data e ora nei filtri

Nei filtri si usa lo stesso formato di data e ora usato nel resto di queste API ma, oltre al formato “completo” 2018-01-01T08:00:00, per brevità si possono usare anche i seguenti due formati:

2018-01-01 (sola data)
2018-01-01T08:00 (con l'ora ma omettendo i secondi)

Valori di enumerazione nei filtri

Alcune proprietà delle entità restituite dalla API possono avere solo alcuni valori. Questi valori sono definiti da alcune costanti. L’insieme delle costanti applicabili a una certa proprietà definiscono una enumerazione.

Un esempio di enumerazione è dato dai valori della proprietà SourceDirection dell’entità Clocking, che descrivono la direzione di entrata o uscita della timbratura come è stata registrata. I valori disponibili, cioè i valori dell’enumerazione, sono tre: In, Out, Undefined.

Se si vogliono usare questi valori nei filtri bisogna indicarli all’interno di apici semplici, in questo modo: filter=(sourceDirection eq 'Out'), per ottenere solo le timbrature con direzione di uscita.

Ordinamento dei dati

È possibile, e può anche diventare necessario, indicare l’ordine in cui restituire gli elementi di una risorsa. In particolare diventa necessario in relazione alla paginazione dei risultati.

Per indicare l’ordine aggiungere un’espressione del tipo seguente all’URL:

orderBy={order-expression1},{order-expression2},{order-expressionN}

Dove {order-expression} è il nome di una proprietà semplice, oppure prefissato con i segni + e - per indicarne rispettivamente l’ordine crescente e o descrescente.

Esempi:

orderBy=description (equivalente a: orderBy=+description)

orderBy=-description (ordinamento decrescente)

Dati da restituire

Per ragioni di efficiente è possibile specificare quali dati restituire degli elementi di una risorsa. Certe risorse dispongono di molti dati (ad esempio i dipendenti), ma per l’elaborazione da eseguire potrebbero servirne molto pochi. In tal caso è conveniente istruire il server a restituire solo i campi necessari.

Per farlo aggiungere un’espressione del tipo seguente all’URL:

fields=fieldName1,fieldName2,fieldNameN

Ad esempio:

fields=id,code,description

Formato delle date

Il formato normalmente utilizzato per le informazioni di data e ora è ISO-8601, in particolare nella seguente versione “completa”:

Alcuni esempi di valori di data e ora:

2016-06-06T04:05:05 - Una data e ora senza indicazione di fuso orario.

2018-02-20T10:26:16Z - Una data e ora in tempo UTC

Autenticazione

Bearer Token

Ottenere il token
POST/token

clientId e clientSecret sono le credenziali, mentre granttype deve essere sempre uguale a client_credentials. La risposta contiene il token e la data/ora di termine validità.

Example URI

POST https://temporasystem.com/api/token
Request  with body
HideShow
Headers
Content-Type: application/json
Body
{
  "clientId": "20051c7f098214832f3b37291401",
  "clientSecret": "A9t7aygLM7iThfAH2yOMvDka6XKp1koM+5/Y29ga6pA=",
  "granttype": "client_credentials"
}
Response  200
HideShow
Body
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVC....",
  "expiration": "2018-02-20T10:26:16Z"
}

Autorizzazioni: richiesta aggiornamento

Richieste aggiornamento autorizzazioni
POST/auth/refreshrequests

Se si sono appena modificate le autorizzazioni assegnate a una Applicazione API, perché le nuove autorizzazioni siano immediatamente riconosciute, bisogna inviare una richiesta di aggiornamento autorizzazioni. In questo modo la cache delle autorizzazioni viene rimossa e le nuove autorizzazioni verranno immediatamente caricate.

Example URI

POST https://temporasystem.com/api/auth/refreshrequests
Request  Richiesta aggiornamento autorizzazioni.
HideShow
Body
{}
Response  200

Dominio

Il dominio rappresenta la raccolta di tutte le informazioni gestite da Tempora per il cliente.

Il dominio è identificato da un nome.

All’interno del dominio sono definiti i gruppi di aziende e le singole aziende.

Il dominio è accompagnato dalle informazioni di licenza, che indicano quali moduli sono abilitati e altre risorse sono disponibili.

Il dominio corrente

È quello all’interno del quale è stata registrata l’Applicazione API le cui credenziali sono state usate per l’autenticazione.

Dominio
GET/domain

Example URI

GET https://temporasystem.com/api/domain
Response  200
HideShow
Body
{
  "name": "azienda",
  "displayName": "AZIENDA SRL",
  "guid": "112e2343"
}
Schema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "displayName": {
      "type": "string"
    },
    "guid": {
      "type": "string",
      "description": "e09e-47d3-a31e-78cf5fedf885 (string)"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Gruppo aziende

All’interno del dominio le aziende sono organizzate in gruppi di aziende. Se non si utilizzano i gruppi di aziende, esisterà comunque un gruppo predefinito del quale faranno parte tutte le aziende gestite nel dominio.

Tutte le aziende all’interno di uno stesso gruppo condividono una serie di informazioni: causali di presenza, tipi di qualifiche, livello dipendenti, ecc.

Gruppi aziende

Gruppi aziende
GET/companiesgroups

Example URI

GET https://temporasystem.com/api/companiesgroups
Response  200
HideShow
Body
[
  {
    "id": 1,
    "name": "FILIALI",
    "isDomainDefault": true
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "name": {
        "type": "string"
      },
      "isDomainDefault": {
        "type": "boolean"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Gruppo aziende

Gruppo aziende
GET/companiesgroups/{id}

Example URI

GET https://temporasystem.com/api/companiesgroups/1
URI Parameters
HideShow
id
number (required) Example: 1

ID del gruppo aziende.

Response  200
HideShow
Body
{
  "id": 1,
  "name": "FILIALI",
  "isDomainDefault": true
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "name": {
      "type": "string"
    },
    "isDomainDefault": {
      "type": "boolean"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Centri di costo

Centri di costo
GET/companiesgroups/{idCompaniesGroup}/costcenters

Example URI

GET https://temporasystem.com/api/companiesgroups/123/costcenters
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartengono i centri di costo.

Response  200
HideShow
Body
[
  {
    "id": 1,
    "code": "AMMIN",
    "name": "AMMINISTRAZIONE"
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "code": {
        "type": "string"
      },
      "name": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Centro di costo

Centro di costo
GET/companiesgroups/{idCompaniesGroup}/costcenters/{id}

Example URI

GET https://temporasystem.com/api/companiesgroups/123/costcenters/1
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartiene il centro di costo.

id
number (required) Example: 1

ID del centro di costo.

Response  200
HideShow
Body
{
  "id": 1,
  "code": "AMMIN",
  "name": "AMMINISTRAZIONE"
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "code": {
      "type": "string"
    },
    "name": {
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Livelli dipendenti

Livelli dipendenti
GET/companiesgroups/{idCompaniesGroup}/employeelevels

Example URI

GET https://temporasystem.com/api/companiesgroups/123/employeelevels
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartengono i livelli dipendenti.

Response  200
HideShow
Body
[
  {
    "id": 1,
    "code": "Liv.1",
    "name": "LIVELLO 1"
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "code": {
        "type": "string"
      },
      "name": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Livello dipendenti

Livello dipendenti
GET/companiesgroups/{idCompaniesGroup}/employeelevels/{id}

Example URI

GET https://temporasystem.com/api/companiesgroups/123/employeelevels/1
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartiene il livello dipendenti.

id
number (required) Example: 1

ID del livello dipendenti.

Response  200
HideShow
Body
{
  "id": 1,
  "code": "Liv.1",
  "name": "LIVELLO 1"
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "code": {
      "type": "string"
    },
    "name": {
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Mansioni

Mansioni
GET/companiesgroups/{idCompaniesGroup}/employeetasks

Example URI

GET https://temporasystem.com/api/companiesgroups/123/employeetasks
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartengono le mansioni.

Response  200
HideShow
Body
[
  {
    "id": 1,
    "code": "FATT",
    "name": "FATTURAZIONE"
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "code": {
        "type": "string"
      },
      "name": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Mansioni

Mansione
GET/companiesgroups/{idCompaniesGroup}/employeetasks/{id}

Example URI

GET https://temporasystem.com/api/companiesgroups/123/employeetasks/1
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartiene la mansione.

id
number (required) Example: 1

ID della mansione.

Response  200
HideShow
Body
{
  "id": 1,
  "code": "FATT",
  "name": "FATTURAZIONE"
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "code": {
      "type": "string"
    },
    "name": {
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Qualifiche

Qualifiche
GET/companiesgroups/{idCompaniesGroup}/qualifications

Example URI

GET https://temporasystem.com/api/companiesgroups/123/qualifications
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartengono le qualifiche.

Response  200
HideShow
Body
[
  {
    "id": 1,
    "code": "OP",
    "name": "OPERAIO"
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "code": {
        "type": "string"
      },
      "name": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Qualifica

Qualifica
GET/companiesgroups/{idCompaniesGroup}/qualifications/{id}

Example URI

GET https://temporasystem.com/api/companiesgroups/123/qualifications/1
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartiene la qualifica.

id
number (required) Example: 1

ID della qualifica.

Response  200
HideShow
Body
{
  "id": 1,
  "code": "OP",
  "name": "OPERAIO"
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "code": {
      "type": "string"
    },
    "name": {
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Tipi contratto

Tipi contratto
GET/companiesgroups/{idCompaniesGroup}/contracttypes

Example URI

GET https://temporasystem.com/api/companiesgroups/123/contracttypes
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartengono i tipi contratto.

Response  200
HideShow
Body
[
  {
    "id": 1,
    "name": "METALMECCANICI"
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "name": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Tipo contratto

Tipo contratto
GET/companiesgroups/{idCompaniesGroup}/contracttypes/{id}

Example URI

GET https://temporasystem.com/api/companiesgroups/123/contracttypes/1
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartiene il tipo contratto.

id
number (required) Example: 1

ID del tipo contratto.

Response  200
HideShow
Body
{
  "id": 1,
  "name": "METALMECCANICI"
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "name": {
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Azienda

Aziende

Aziende
GET/companies

Example URI

GET https://temporasystem.com/api/companies
Response  200
HideShow
Body
[
  {
    "id": 1,
    "idCompaniesGroup": 3,
    "address": "Via dei tigli 12",
    "city": "Milano",
    "clockingsFilesPrefix1": "az",
    "clockingsFilesPrefix2": "",
    "clockingsFilesSuffix1": "trn",
    "clockingsFilesSuffix2": "",
    "configurationNotes": "",
    "name": "Azienda Srl",
    "notes": "",
    "payCode": "A001",
    "postalCode": "40121"
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "idCompaniesGroup": {
        "type": "number"
      },
      "address": {
        "type": "string"
      },
      "city": {
        "type": "string"
      },
      "clockingsFilesPrefix1": {
        "type": "string"
      },
      "clockingsFilesPrefix2": {
        "type": "string"
      },
      "clockingsFilesSuffix1": {
        "type": "string"
      },
      "clockingsFilesSuffix2": {
        "type": "string"
      },
      "configurationNotes": {
        "type": "string"
      },
      "name": {
        "type": "string"
      },
      "notes": {
        "type": "string"
      },
      "payCode": {
        "type": "string"
      },
      "postalCode": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Azienda

Azienda
GET/companies/{id}

Example URI

GET https://temporasystem.com/api/companies/1
URI Parameters
HideShow
id
number (required) Example: 1

ID dell’azienda.

Response  200
HideShow
Body
{
  "id": 1,
  "idCompaniesGroup": 3,
  "address": "Via dei tigli 12",
  "city": "Milano",
  "clockingsFilesPrefix1": "az",
  "clockingsFilesPrefix2": "",
  "clockingsFilesSuffix1": "trn",
  "clockingsFilesSuffix2": "",
  "configurationNotes": "",
  "name": "Azienda Srl",
  "notes": "",
  "payCode": "A001",
  "postalCode": "40121"
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "idCompaniesGroup": {
      "type": "number"
    },
    "address": {
      "type": "string"
    },
    "city": {
      "type": "string"
    },
    "clockingsFilesPrefix1": {
      "type": "string"
    },
    "clockingsFilesPrefix2": {
      "type": "string"
    },
    "clockingsFilesSuffix1": {
      "type": "string"
    },
    "clockingsFilesSuffix2": {
      "type": "string"
    },
    "configurationNotes": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "notes": {
      "type": "string"
    },
    "payCode": {
      "type": "string"
    },
    "postalCode": {
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Dipendenti

Dipendenti
GET/companies/{idCompany}/employees

Example URI

GET https://temporasystem.com/api/companies/123/employees
URI Parameters
HideShow
idCompany
number (required) Example: 123

ID dell’azienda a cui appartengono i dipendenti.

Response  200
HideShow
Body
[
  {
    "id": 31,
    "badge1": "63262",
    "badge2": "",
    "branchCode": "001",
    "code": "01",
    "dismissalDate": "2015",
    "firstName": "JAVIER",
    "hiringDate": "2009",
    "idContractType": 32,
    "idCostCenter": 9,
    "idEmployeeCategory": 5,
    "idEmployeeLevel": 11,
    "idEmployeeTask": 56,
    "idQualification": 18,
    "lastName": "ALVAREZ",
    "legalIdentificationCode": "LXXJVR88D12L682X",
    "registrationNumber": "000141"
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "badge1": {
        "type": "string"
      },
      "badge2": {
        "type": "string"
      },
      "branchCode": {
        "type": "string"
      },
      "code": {
        "type": "string"
      },
      "dismissalDate": {
        "type": "string",
        "description": "05-04T00:00:00 (string)"
      },
      "firstName": {
        "type": "string"
      },
      "hiringDate": {
        "type": "string",
        "description": "09-14T00:00:00 (string)"
      },
      "idContractType": {
        "type": "number"
      },
      "idCostCenter": {
        "type": "number"
      },
      "idEmployeeCategory": {
        "type": "number"
      },
      "idEmployeeLevel": {
        "type": "number"
      },
      "idEmployeeTask": {
        "type": "number"
      },
      "idQualification": {
        "type": "number"
      },
      "lastName": {
        "type": "string"
      },
      "legalIdentificationCode": {
        "type": "string"
      },
      "registrationNumber": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Dipendente

Dipendente
GET/companies/{idCompany}/employees/{id}

Example URI

GET https://temporasystem.com/api/companies/123/employees/1
URI Parameters
HideShow
idCompany
number (required) Example: 123

ID dell’azienda a cui appartiene il dipendente.

id
number (required) Example: 1

ID del dipendente.

Response  200
HideShow
Body
{
  "id": 31,
  "badge1": "63262",
  "badge2": "",
  "branchCode": "001",
  "code": "01",
  "dismissalDate": "2015",
  "firstName": "JAVIER",
  "hiringDate": "2009",
  "idContractType": 32,
  "idCostCenter": 9,
  "idEmployeeCategory": 5,
  "idEmployeeLevel": 11,
  "idEmployeeTask": 56,
  "idQualification": 18,
  "lastName": "ALVAREZ",
  "legalIdentificationCode": "LXXJVR88D12L682X",
  "registrationNumber": "000141"
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "badge1": {
      "type": "string"
    },
    "badge2": {
      "type": "string"
    },
    "branchCode": {
      "type": "string"
    },
    "code": {
      "type": "string"
    },
    "dismissalDate": {
      "type": "string",
      "description": "05-04T00:00:00 (string)"
    },
    "firstName": {
      "type": "string"
    },
    "hiringDate": {
      "type": "string",
      "description": "09-14T00:00:00 (string)"
    },
    "idContractType": {
      "type": "number"
    },
    "idCostCenter": {
      "type": "number"
    },
    "idEmployeeCategory": {
      "type": "number"
    },
    "idEmployeeLevel": {
      "type": "number"
    },
    "idEmployeeTask": {
      "type": "number"
    },
    "idQualification": {
      "type": "number"
    },
    "lastName": {
      "type": "string"
    },
    "legalIdentificationCode": {
      "type": "string"
    },
    "registrationNumber": {
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Presenze

Raccoglie le risorse relative ai dati di presenza.

Causali di presenza

Causali di presenza
GET/companiesgroups/{idCompaniesGroup}/basevoices

Example URI

GET https://temporasystem.com/api/companiesgroups/123/basevoices
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartengono le causali di presenza.

Response  200
HideShow
Body
[
  {
    "id": 1,
    "code": "STR15",
    "description": "STRAORDINARIO 15",
    "voiceType": "Presence",
    "computingType": "AsHours",
    "forInternalUse": false
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "code": {
        "type": "string"
      },
      "description": {
        "type": "string"
      },
      "voiceType": {
        "enum": [
          "Presence",
          "Absence",
          "Overtime",
          "Other",
          "Numeric",
          "AsHours"
        ]
      },
      "computingType": {
        "enum": [
          "AsHours",
          "AsDays",
          "Numeric",
          "Overtime"
        ]
      },
      "forInternalUse": {
        "type": "boolean"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Causale di presenza

Causale di presenza
GET/companiesgroups/{idCompaniesGroup}/basevoices/{id}

Example URI

GET https://temporasystem.com/api/companiesgroups/123/basevoices/1
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartiene la causale di presenza.

id
number (required) Example: 1

ID della causale di presenza.

Response  200
HideShow
Body
{
  "id": 1,
  "code": "STR15",
  "description": "STRAORDINARIO 15",
  "voiceType": "Presence",
  "computingType": "AsHours",
  "forInternalUse": false
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "code": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "voiceType": {
      "enum": [
        "Presence",
        "Absence",
        "Overtime",
        "Other",
        "Numeric",
        "AsHours"
      ]
    },
    "computingType": {
      "enum": [
        "AsHours",
        "AsDays",
        "Numeric",
        "Overtime"
      ]
    },
    "forInternalUse": {
      "type": "boolean"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Timbrature

Timbrature
GET/company/{idCompany}/clockings

Example URI

GET https://temporasystem.com/api/company/123/clockings
URI Parameters
HideShow
idCompany
number (required) Example: 123

ID dell’azienda a cui appartengono le timbrature.

Response  200
HideShow
Body
[
  {
    "id": 1,
    "badge": "35",
    "causalCode": "CORSO",
    "dateCreated": "2018",
    "finalDateTimeClocking": "2018",
    "finalDirection": "In",
    "idAssociatedEmployee": 143,
    "idClockingCausal": 7,
    "idSourceEmployeeRequest": 0,
    "source": "Terminal",
    "sourceDateTimeClocking": "2018",
    "sourceDirection": "In",
    "terminalId": "00",
    "idJob": 36,
    "latitude": 45.488984,
    "longitude": 9.234843
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "badge": {
        "type": "string"
      },
      "causalCode": {
        "type": "string"
      },
      "dateCreated": {
        "type": "string",
        "description": "01-04T08:13:25 (string)"
      },
      "finalDateTimeClocking": {
        "type": "string",
        "description": "01-04T08:10:00 (string)"
      },
      "finalDirection": {
        "enum": [
          "In",
          "Out",
          "Undefined",
          "Out"
        ]
      },
      "idAssociatedEmployee": {
        "type": "number"
      },
      "idClockingCausal": {
        "type": "number"
      },
      "idSourceEmployeeRequest": {
        "type": "number"
      },
      "source": {
        "enum": [
          "Terminal",
          "Manual",
          "Imported",
          "Web",
          "EmployeeRequest",
          "ImportedSms",
          "ImportedMail",
          "WebMobile",
          "MobileApp",
          "Terminal"
        ]
      },
      "sourceDateTimeClocking": {
        "type": "string",
        "description": "01-04T08:10:45 (string)"
      },
      "sourceDirection": {
        "enum": [
          "In",
          "Out",
          "Undefined",
          "Out"
        ]
      },
      "terminalId": {
        "type": "string"
      },
      "idJob": {
        "type": "number"
      },
      "latitude": {
        "type": "number"
      },
      "longitude": {
        "type": "number"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Timbratura

Timbratura
GET/company/{idCompany}/clockings/{id}

Example URI

GET https://temporasystem.com/api/company/123/clockings/1
URI Parameters
HideShow
idCompany
number (required) Example: 123

ID dell’azienda a cui appartiene la timbratura.

id
number (required) Example: 1

ID della timbratura.

Response  200
HideShow
Body
{
  "id": 1,
  "badge": "35",
  "causalCode": "CORSO",
  "dateCreated": "2018",
  "finalDateTimeClocking": "2018",
  "finalDirection": "In",
  "idAssociatedEmployee": 143,
  "idClockingCausal": 7,
  "idSourceEmployeeRequest": 0,
  "source": "Terminal",
  "sourceDateTimeClocking": "2018",
  "sourceDirection": "In",
  "terminalId": "00",
  "idJob": 36,
  "latitude": 45.488984,
  "longitude": 9.234843
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "badge": {
      "type": "string"
    },
    "causalCode": {
      "type": "string"
    },
    "dateCreated": {
      "type": "string",
      "description": "01-04T08:13:25 (string)"
    },
    "finalDateTimeClocking": {
      "type": "string",
      "description": "01-04T08:10:00 (string)"
    },
    "finalDirection": {
      "enum": [
        "In",
        "Out",
        "Undefined",
        "Out"
      ]
    },
    "idAssociatedEmployee": {
      "type": "number"
    },
    "idClockingCausal": {
      "type": "number"
    },
    "idSourceEmployeeRequest": {
      "type": "number"
    },
    "source": {
      "enum": [
        "Terminal",
        "Manual",
        "Imported",
        "Web",
        "EmployeeRequest",
        "ImportedSms",
        "ImportedMail",
        "WebMobile",
        "MobileApp",
        "Terminal"
      ]
    },
    "sourceDateTimeClocking": {
      "type": "string",
      "description": "01-04T08:10:45 (string)"
    },
    "sourceDirection": {
      "enum": [
        "In",
        "Out",
        "Undefined",
        "Out"
      ]
    },
    "terminalId": {
      "type": "string"
    },
    "idJob": {
      "type": "number"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Causali di timbratura

Causali di timbratura
GET/companiesgroups/{idCompaniesGroup}/clockingcausals

Example URI

GET https://temporasystem.com/api/companiesgroups/123/clockingcausals
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartengono le causali di timbratura.

Response  200
HideShow
Body
[
  {
    "id": 1,
    "causalType": "Reclassification",
    "code": "EXT",
    "computeWithoutRounding": false,
    "description": "ATTIVITA' ESTERNA",
    "doNotPrintOnTimeSheet": false,
    "doNotRemoveClockings": true,
    "doNotShowOnTimeSheet": false,
    "excludeFromAbsenceCounters": true,
    "idBaseVoice": 37,
    "ignoreForAbsentsPresentsComputation": false,
    "ignoreForComputation": false,
    "idReclassificationSchema": 0,
    "parameters": "",
    "value": 0
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "causalType": {
        "enum": [
          "Reclassification",
          "JustifyFullInterval",
          "GenerateVoice",
          "Mark",
          "MarkAndRemove",
          "GenerateVoiceFixedValue",
          "CanteenReservation",
          "GenerateVoice"
        ]
      },
      "code": {
        "type": "string"
      },
      "computeWithoutRounding": {
        "type": "boolean"
      },
      "description": {
        "type": "string"
      },
      "doNotPrintOnTimeSheet": {
        "type": "boolean"
      },
      "doNotRemoveClockings": {
        "type": "boolean"
      },
      "doNotShowOnTimeSheet": {
        "type": "boolean"
      },
      "excludeFromAbsenceCounters": {
        "type": "boolean"
      },
      "idBaseVoice": {
        "type": "number"
      },
      "ignoreForAbsentsPresentsComputation": {
        "type": "boolean"
      },
      "ignoreForComputation": {
        "type": "boolean"
      },
      "idReclassificationSchema": {
        "type": "number"
      },
      "parameters": {
        "type": "string"
      },
      "value": {
        "type": "number"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Causale di timbratura

Causale di timbratura
GET/companiesgroups/{idCompaniesGroup}/clockingcausals/{id}

Example URI

GET https://temporasystem.com/api/companiesgroups/123/clockingcausals/1
URI Parameters
HideShow
idCompaniesGroup
number (required) Example: 123

ID del gruppo aziende a cui appartiene la causale di timbratura.

id
number (required) Example: 1

ID della causale di timbratura.

Response  200
HideShow
Body
{
  "id": 1,
  "causalType": "Reclassification",
  "code": "EXT",
  "computeWithoutRounding": false,
  "description": "ATTIVITA' ESTERNA",
  "doNotPrintOnTimeSheet": false,
  "doNotRemoveClockings": true,
  "doNotShowOnTimeSheet": false,
  "excludeFromAbsenceCounters": true,
  "idBaseVoice": 37,
  "ignoreForAbsentsPresentsComputation": false,
  "ignoreForComputation": false,
  "idReclassificationSchema": 0,
  "parameters": "",
  "value": 0
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "causalType": {
      "enum": [
        "Reclassification",
        "JustifyFullInterval",
        "GenerateVoice",
        "Mark",
        "MarkAndRemove",
        "GenerateVoiceFixedValue",
        "CanteenReservation",
        "GenerateVoice"
      ]
    },
    "code": {
      "type": "string"
    },
    "computeWithoutRounding": {
      "type": "boolean"
    },
    "description": {
      "type": "string"
    },
    "doNotPrintOnTimeSheet": {
      "type": "boolean"
    },
    "doNotRemoveClockings": {
      "type": "boolean"
    },
    "doNotShowOnTimeSheet": {
      "type": "boolean"
    },
    "excludeFromAbsenceCounters": {
      "type": "boolean"
    },
    "idBaseVoice": {
      "type": "number"
    },
    "ignoreForAbsentsPresentsComputation": {
      "type": "boolean"
    },
    "ignoreForComputation": {
      "type": "boolean"
    },
    "idReclassificationSchema": {
      "type": "number"
    },
    "parameters": {
      "type": "string"
    },
    "value": {
      "type": "number"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Progetti

Clienti

Clienti
GET/companies/{idCompany}/customers

Example URI

GET https://temporasystem.com/api/companies/123/customers
URI Parameters
HideShow
idCompany
number (required) Example: 123

ID dell’azienda a cui appartengono i clienti.

Response  200
HideShow
Body
[
  {
    "id": 1,
    "name": "Azienda Cliente Srl",
    "externalReference": "CA0012"
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "name": {
        "type": "string"
      },
      "externalReference": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Cliente

Cliente
GET/companies/{idCompany}/customers/{id}

Example URI

GET https://temporasystem.com/api/companies/123/customers/1
URI Parameters
HideShow
idCompany
number (required) Example: 123

ID dell’azienda a cui appartiene il cliente.

id
number (required) Example: 1

ID del cliente.

Response  200
HideShow
Body
{
  "id": 1,
  "name": "Azienda Cliente Srl",
  "externalReference": "CA0012"
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "name": {
      "type": "string"
    },
    "externalReference": {
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Progetti

Progetti
GET/companies/{idCompany}/jobs

Example URI

GET https://temporasystem.com/api/companies/123/jobs
URI Parameters
HideShow
idCompany
number (required) Example: 123

ID dell’azienda a cui appartengono i progetti.

Response  200
HideShow
Body
[
  {
    "id": 1,
    "idCustomer": 21,
    "idSecondaryCustomer": 27,
    "code": "MANUT",
    "name": "Manutezione periodica",
    "externalReference": "",
    "latitude": 45.488984,
    "longitude": 9.234843,
    "closed": false
  }
]
Schema
{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "number"
      },
      "idCustomer": {
        "type": "number"
      },
      "idSecondaryCustomer": {
        "type": [
          "number",
          "null"
        ]
      },
      "code": {
        "type": "string"
      },
      "name": {
        "type": "string"
      },
      "externalReference": {
        "type": "string"
      },
      "latitude": {
        "type": "number"
      },
      "longitude": {
        "type": "number"
      },
      "closed": {
        "type": "boolean"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Progetto

Progetto
GET/companies/{idCompany}/jobs/{id}

Example URI

GET https://temporasystem.com/api/companies/123/jobs/1
URI Parameters
HideShow
idCompany
number (required) Example: 123

ID dell’azienda a cui appartiene il progetto.

id
number (required) Example: 1

ID del progetto.

Response  200
HideShow
Body
{
  "id": 1,
  "idCustomer": 21,
  "idSecondaryCustomer": 27,
  "code": "MANUT",
  "name": "Manutezione periodica",
  "externalReference": "",
  "latitude": 45.488984,
  "longitude": 9.234843,
  "closed": false
}
Schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "number"
    },
    "idCustomer": {
      "type": "number"
    },
    "idSecondaryCustomer": {
      "type": [
        "number",
        "null"
      ]
    },
    "code": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "externalReference": {
      "type": "string"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    },
    "closed": {
      "type": "boolean"
    }
  },
  "$schema": "http://json-schema.org/draft-04/schema#"
}

Generated by aglio on 23 Feb 2018