| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761 |
- # yaml-language-server: $schema=https://schemas.sourcemeta.com/openapi/v3.1/schema/2025-09-15.json
- openapi: 3.1.0
- info:
- title: Edison Next Panorama - Integration API
- description: |-
- API standard di integrazione di *Edison Next Panorama* con sistemi esterni
- contact:
- name: API Support
- email: support@panorama.edisonnext.it
- version: 0.9.3
-
- license:
- name: © 2025 - 2030 Copyright Edison Next Spa. All rights reserved
- url: https://edisonnext.it
- externalDocs:
- description: Edison Next Panorama - Specifiche di Integrazione v.1.0
- url: https://panorama.edisonnext.it/
- # security di default (richiesta anche per accedere ai dati in lettura)
- security:
- - panorama_consumer_api_key: []
- #servers:
- # - url: https://panorama.edisonnext.it/api/v1
- # description: Main (production) API server
- # - url: <Here staging API server>
- # description: Staging API server
- # - url: <Here development API server>
- # description: Development API server
- tags:
- - name: Data Source
- description: operations for data sources
- - name: Type
- description: operations for data types
- - name: Entity
- description: operations to browse and manage entities
- - name: Device
- description: Operations about Devices
- paths:
- /type:
- get:
- summary: Restituisce i Tipi di Entità definiti
- tags: [Type]
- operationId: getTypes
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Type'
- post:
- summary: Crea un nuovo Tipo di Entità (admin only)
- tags: [Type]
- security:
- - panorama_administrator_api_key: []
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Type'
- responses:
- '201':
- description: Tipo creato
- /type/{id}:
- get:
- summary: Restituisce un singolo Tipo di Entità
- tags: [Type]
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Tipo trovato
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Type'
- '404':
- description: Tipo non trovato
- put:
- summary: Modifica un Tipo esistente (admin only)
- tags: [Type]
- security:
- - panorama_administrator_api_key: []
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Type'
- responses:
- '200':
- description: Tipo aggiornato
- delete:
- summary: Elimina un Tipo (senza istanze di elementi) esistente (admin only)
- tags: [Type]
- security:
- - panorama_administrator_api_key: []
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- responses:
- '204':
- description: Tipo eliminato
- /source:
- get:
- summary: Restituisce le fonti dati disponibili
- tags: [Data Source]
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Source'
- post:
- summary: Aggiunge una Fonte Dati (admin only)
- tags: [Data Source]
- security:
- - panorama_administrator_api_key: []
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Source'
- responses:
- '201':
- description: Fonte Dati creata
- /source/{id}:
- put:
- summary: Modifica una sorgente dati esistente (admin only)
- tags: [Data Source]
- security:
- - panorama_administrator_api_key: []
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Source'
- responses:
- '200':
- description: Data Source aggiornata
- delete:
- summary: Elimina una sorgente dati (vuota) esistente (admin only)
- tags: [Data Source]
- security:
- - panorama_administrator_api_key: []
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- responses:
- '204':
- description: Sorgente Dati eliminata
- /terminology:
- get:
- summary: Restituisce le Nomenclature definite
- tags: [Type]
- operationId: getTerminologies
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Terminology'
- post:
- summary: Crea una nuova Nomenclatura (admin only)
- tags: [Type]
- security:
- - panorama_administrator_api_key: []
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Terminology'
- responses:
- '201':
- description: Nomenclatura creata
- /terminology/{id}:
- get:
- summary: Restituisce una singola Nomenclatura
- tags: [Type]
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Tipo trovato
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Type'
- '404':
- description: Tipo non trovato
- put:
- summary: Modifica una Nomenclatura esistente (admin only)
- tags: [Type]
- security:
- - panorama_administrator_api_key: []
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Terminology'
- responses:
- '200':
- description: Nomenclatura aggiornata
- delete:
- summary: Elimina una Nomenclatura (senza riferimenti in qualche tipo) esistente (admin only)
- tags: [Type]
- security:
- - panorama_administrator_api_key: []
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- responses:
- '204':
- description: Nomenclatura eliminata
- /entity:
- get:
- summary: Ricerca di entità
- tags: [Entity]
- parameters:
- - name: type
- in: query
- description: Filter by entity type
- required: false
- explode: true
- schema:
- type: string
- - name: catalog
- in: query
- description: Filter by data catalog
- required: false
- explode: true
- schema:
- type: string
- - name: state
- in: query
- description: Filter by entity state
- required: false
- explode: true
- schema:
- type: string
- responses:
- '200':
- description: Lista di entità
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Entity'
- post:
- summary: Crea una nuova entità
- tags: [Entity]
- security:
- - panorama_provider_api_key: []
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Entity'
- responses:
- '201':
- description: Entità creata
- /entity/{id}:
- get:
- summary: Ottiene una singola entità
- tags: [Entity]
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Entità trovata
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Entity'
- '404':
- description: Entità non trovata
- put:
- summary: Modifica un'entità esistente (escluso lo stato)
- tags: [Entity]
- security:
- - panorama_provider_api_key: []
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Entity'
- responses:
- '200':
- description: Entità aggiornata
- delete:
- summary: Elimina un'entità
- tags: [Entity]
- security:
- - panorama_provider_api_key: []
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- responses:
- '204':
- description: Entità eliminata
- /state/{id}:
- put:
- summary: Modifica lo stato di un'Entità
- tags: [Entity]
- security:
- - panorama_provider_api_key: []
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- requestBody:
- required: true
- content:
- application/json:
- schema:
- type: string
- responses:
- '200':
- description: Stato Entità aggiornato
- /history/{id}:
- get:
- summary: Ottiene la storia delle variazioni di stato di un'Entità
- tags: [Entity]
- parameters:
- - in: path
- name: id
- description: l'ID dell'entità di cui ottenere la storia
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Entità trovata
- content:
- application/json:
- schema:
- type: array
- items:
- type: object
- properties:
- timestamp:
- type: string
- format: date-time
- state:
- type: string
- examples: ['off', '22°C']
- '404':
- description: Entità non trovata
- /device:
- get:
- summary: Elenco di tutti i dispositivi
- tags: [Device]
- responses:
- '200':
- description: Lista di dispositivi
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Device'
- /device/{id}:
- get:
- summary: Ottiene informazioni su un singolo dispositivo
- tags: [Device]
- parameters:
- - in: path
- name: id
- required: true
- schema:
- type: string
- responses:
- '200':
- description: Dispositivo trovato
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Device'
- '404':
- description: Dispositivo non trovato
- components:
- schemas:
- Terminology:
- type: object
- description: Nomenclatura di riferimento per i Tipi di Entità. Può essere interna o esterna (schema.gov.it, UCUM, Google Knowledge Graph)
- required: [id, name, syntax]
- properties:
- id:
- type: string
- format: uri
- description: Identificativo univoco della Nomenclatura (terminology)
- examples:
- - http://dati.beniculturali.it/cis
- name:
- type: string
- description: Nome canonico della Nomenclatura
- description:
- type: string
- description: Descrizione della Nomenclatura
- documentation:
- type: string
- format: uri
- description: Link alla documentazione della Nomenclatura
- examples:
- - 'https://schema.gov.it/'
- subject:
- type: string
- description: Soggetto titolare del Tipo
- examples:
- - 'Ministero per i Beni e le Attività Culturali'
- uri:
- type: string
- format: uri
- description: URI autoritativa della Nomenclatura
- examples:
- - http://dati.beniculturali.it/cis
- Type:
- type: object
- description: Tipi di entità, comprensivi di riferimento al nomenclatore e definizione della struttura del payload specifico
- required: [id, name, syntax]
- properties:
- id:
- type: string
- format: uri
- description: Identificativo univoco del Tipo di Entità
- examples:
- - http://dati.beniculturali.it/cis/CulturalInstituteOrSite
- name:
- type: string
- description: Nome canonico del Tipo di Entità
- examples:
- - Istituti e Luoghi Della Cultura Italiani (musei, biblioteche, cinema, ecc)
- native:
- type: boolean
- description: Se il Tipo è nativo di piattaforma o importato
- default: false
- stateType:
- $ref: '#/components/schemas/State'
- syntax:
- type: string
- format: json
- description: Definizione (JSON-LD) della sintassi del Tipo di Entità
- terminology:
- $ref: '#/components/schemas/Terminology'
- examples:
- - http://dati.beniculturali.it/cis
- uri:
- type: string
- format: uri
- description: URI autoritativo del Tipo (se non nativo)
- examples:
- - http://dati.beniculturali.it/cis/CulturalInstituteOrSite
- State:
- type: object
- description: Definisce una possibile rappresentazione della situazione attuale nel «divenire» delle Entità di un certo Tipo
- examples:
- - Aperto o Chiuso
- - Acceso o Spento
- - (StatoSemaforo) Rosso, Giallo, Verde, Lampeggiante, Spento
- - TemperaturaAmbiente - la temperatura attuale di un ambiente in gradi centigradi
- properties:
- id:
- type: string
- format: uri
- description: ID univoco del Tipo di Stato
- name:
- type: string
- description: Nome canonico del Tipo di Stato
- uom:
- type: string
- description: Unità di misura (per grandezze scalari)
- kind:
- type: string
- description: La tipologia elementare del Tipo di Stato (grandezza con unità di misura, stringa, eccetera)
- examples:
- - Enumeration
- - Number
- - String
- Entity:
- type: object
- description: rappresenta un generico oggetto urbano, è di uno specifico Tipo, afferisce a una Sorgente Dati, ha uno Stato dinamico, è dotato di proprietà type-specific, può avere un Device associato, è tipicamente geo-localizzabile
- required: [id, type, source, createdDate, updatedDate]
- properties:
- id:
- type: string
- description: ID univoco dell'Entità sulla piattaforma
- name:
- type: string
- description: Nome canonico dell'Entità sulla piattaforma
- examples:
- - Antiquarium e Acquedotto romano di Trieste
- geometry:
- type: object
- description: Coordinate geografiche dell'Entità
- properties:
- lat:
- type: Number
- description: Latitudine dell'Entità
- examples: [45.61809]
- long:
- type: Number
- description: Longitudine dell'Entità
- examples: [13.827805]
- type:
- $ref: '#/components/schemas/Type'
- parent:
- $ref: '#/components/schemas/Entity'
- source:
- $ref: '#/components/schemas/Source'
- externalId:
- type: string
- description: Identificativo dell'Entità nel sistema sorgente
- examples:
- - http://dati.beniculturali.it/mibact/luoghi/resource/CISNameInTime/20738
- state:
- type: object
- description: Stato dell'entità
- properties:
- value:
- type: string
- description: Valore dello stato (determinato da Type.stateType)
- timestamp:
- type: string
- format: date-time
- description: Data/ora dello stato
- validity:
- type: object
- properties:
- from:
- type: string
- format: date-time
- description: Inizio validità
- to:
- type: string
- format: date-time
- description: Fine validità
- payload:
- type: object
- description: Attributi personalizzati in base al tipo di entità
- additionalProperties: true
- examples:
- - { chiusura: 'Lunedì|Giovedì|Domenica' }
- deviceId:
- description: Device associato all'entità
- $ref: '#/components/schemas/Device'
- createdDate:
- type: string
- format: date-time
- description: Data e ora di creazione dell'entità (timestamp ISO 8601)
- updatedDate:
- type: string
- format: date-time
- description: Data e ora dell'ultima modifica all'entità, escluse le modifiche di stato (timestamp ISO 8601)
- Source:
- type: object
- description: Fonte dati, interna o esterna, relativa a un soggetto alimentante
- properties:
- id:
- type: string
- format: uri
- description: ID univoco della Fonte Dati
- examples:
- - 'fvg_ispfor_tsgo'
- - 'fvg_ispfor'
- name:
- type: string
- description: Nome canonico della Fonte Dati
- examples:
- - 'Ministero per i Beni e le Attività Culturali'
- - 'Vincolo idrogeologico. L. 3267/1923 Comune di Trieste'
- - 'Ispettorati forestali'
- - 'Recupero energetico di biogas da digestione anaerobica o da discarica R1 (BDAD)'
- - 'Area golenale'
- - 'Copertura 2019 della banda larga in Italia secondo i criteri di rilevazione DESI 2020'
- internal:
- type: boolean
- description: Indica se la fonte dati è nativa della piattaforma o meno
- default: false
- organization:
- type: string
- description: Organizzazione di riferimento (ovvero soggetto alimentante) per la Fonte Dati
- examples:
- - 'Ministero per i Beni e le Attività Culturali'
- - 'Regione Autonoma Friuli Venezia Giulia - ISPETTORATO FORESTALE DI TRIESTE E GORIZIA'
- - 'RAFVG - DC Risorse agroalimentari, forestali e ittiche - Area foreste e territorio'
- - 'Regione Autonoma Friuli Venezia Giulia - SERVIZIO DISCIPLINA GESTIONE RIFIUTI E SITI INQUINATI'
- - 'Regione Autonoma Friuli Venezia Giulia - SERVIZIO GEOLOGICO'
- - 'Autorità per le Garanzie nelle Comunicazioni - AGCOM'
- processor:
- type: string
- description: Organizzazione che gestisce tecnicamente la Fonte Dati
- examples:
- - 'Insiel S.p.A.'
- - 'Regione autonoma Friuli Venezia Giulia'
- required: [id, name, organization, internal]
- Device:
- type: object
- description: Dispositivo IoT gestito nativamente in piattaforma
- required: [id, fk_firmware_id, fk_tenant_code, fk_device_service_id, created_date, updated_date]
- properties:
- id:
- type: string
- format: uri
- description: Identificativo univoco del dispositivo
- serial:
- type: string
- description: Seriale del dispositivo
- fk_firmware_id:
- type: string
- format: uri
- description: Identificativo univoco del firmware del dispositivo
- fk_tenant_code:
- type: string
- format: uri
- description: Identificativo univoco del tenant appartenente il dispositivo
- fk_device_service_id:
- type: string
- format: uri
- description: Identificativo univoco del servizio
- decrypt_key:
- type: string
- description: Chiave di decrypting del dispositivo
- auth_key:
- type: string
- description: Chiave di authentication del dispositivo
- logical_device_name:
- type: string
- description: Logical device name del dispositivo
- mac_address:
- type: string
- description: Mac address del dispositivo
- createdDate:
- type: string
- format: date-time
- description: Data di creazione
- updatedDate:
- type: string
- format: date-time
- description: Ultimo aggiornamento
- securitySchemes:
- panorama_auth:
- type: oauth2
- flows:
- implicit:
- authorizationUrl: https://panorama.edisonnext.it/oauth/authorize
- scopes:
- "write:entities": Panorama data provider
- "read:entities": Panorama data consumer
- "write:types": Panorama tenant administrator
- panorama_consumer_api_key:
- type: apiKey
- name: consumerApiKey
- in: header
- panorama_provider_api_key:
- type: apiKey
- name: providerApiKey
- in: header
- panorama_administrator_api_key:
- type: apiKey
- name: administratorApiKey
- in: header
|