Developer Portal

GISMart API

API REST per entità territoriali, logistica, CRM, immobili, fornitori e intelligence geografica. Autenticazione Bearer, risposta JSON versionata, quota per tenant.

Base URL
https://your-host/api/v1
Autenticazione
Authorization: Bearer gsm_...
Il tuo token (salvato da login):

Quick Start

Tre passi per la prima integrazione funzionante.

Ottieni un token API

  1. Vai su /register (se non hai ancora un account) e crea il tuo tenant.
  2. Copia il Bootstrap Token mostrato una sola volta.
  3. Oppure accedi ad /admin-centerToken APICrea token.
  4. Incolla il token nel campo in alto per pre-compilare tutti gli esempi.
Il token viene mostrato una sola volta. Salvalo in un secret manager (es. GitHub Secrets, Vault).

Verifica che il token sia valido:

curl -H "Authorization: Bearer " \
     https://your-host/api/v1/auth/me
Risposta attesa: il tuo tenant_id, user_id e permessi.
Risposta /auth/me
{
  "tenant_id": "xxxxxxxx-...",
  "user_id":   "yyyyyyyy-...",
  "role":      "owner",
  "permissions": [
    "entities.read", "entities.write",
    "logistics.read", "logistics.write",
    "sales.read", "sales.write", ...
  ],
  "auth_mode": "api_token"
}

Crea la prima entità

Le entità territoriali sono il cuore del tuo CRM geografico: clienti, magazzini, property, cantieri.

curl -X POST \
  -H "Authorization: Bearer " \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sede Principale",
    "entity_type": "customer",
    "city": "Milano",
    "address_line": "Via Torino 12",
    "latitude": 45.4642,
    "longitude": 9.1900,
    "metadata": { "sector": "tech" }
  }' \
  https://your-host/api/v1/entities

Tipi disponibili: customer, lead, prospect, property, warehouse, site, building, unit, e altri.

Risposta
{
  "id": "aaaaaaaa-...",
  "code": "ENT-0001",
  "name": "Sede Principale",
  "entity_type": "customer",
  "status": "active",
  "city": "Milano",
  "address_line": "Via Torino 12",
  "latitude": 45.4642,
  "longitude": 9.19,
  "metadata": { "sector": "tech" },
  "created_at": "2026-04-11T10:00:00Z"
}
Salva l'id per le operazioni successive.

Prima query geografica

Cerca le entità vicine a un punto GPS entro un raggio (PostGIS).

curl -H "Authorization: Bearer " \
  "https://your-host/api/v1/entities/nearby\
?latitude=45.4642\
&longitude=9.19\
&radius_meters=5000\
&entity_type=customer"

Profilo completo di una città (meteo + business + demo):

curl -H "Authorization: Bearer " \
  "https://your-host/api/v1/cities/Milano\
?country=IT"
Risposta /entities/nearby
[
  {
    "id": "aaaaaaaa-...",
    "name": "Sede Principale",
    "entity_type": "customer",
    "city": "Milano",
    "latitude": 45.4642,
    "longitude": 9.19,
    "distance_meters": 120.5
  },
  ...
]
Il campo distance_meters viene calcolato da PostGIS con ST_Distance in proiezione metrica. Ordine: dal più vicino al più lontano.

API Reference

Riferimento live generato dalla spec OpenAPI (sempre allineato all'API). Documentazione interattiva su Swagger · ReDoc · spec grezza openapi.json.

Endpoint live · da openapi.json

endpoint totali nella spec.

Entities — Entità territoriali entities.read / entities.write
MetodoEndpointDescrizionePermesso
GET/api/v1/entitiesLista entità con filtri (entity_type, status, city, limit, offset)entities.read
POST/api/v1/entitiesCrea una nuova entitàentities.write
GET/api/v1/entities/{id}Dettaglio singola entitàentities.read
PATCH/api/v1/entities/{id}Aggiorna campi (parziale)entities.write
DELETE/api/v1/entities/{id}Elimina entitàentities.write
GET/api/v1/entities/nearbyEntità entro raggio GPS (PostGIS)entities.read
POST/api/v1/entities/bulkImport massivo (JSON/CSV)entities.write
GET/api/v1/entities/{id}/locationsStorico posizioni GPSentities.read
Sales — CRM commerciale sales.read / sales.write / sales.manage
MetodoEndpointDescrizionePermesso
GET/api/v1/leadsLista lead (status, owner, limit)sales.read
POST/api/v1/leadsCrea leadsales.write
PATCH/api/v1/leads/{id}Aggiorna lead (status, assignee, note)sales.write
GET/api/v1/opportunitiesLista opportunità commercialisales.read
POST/api/v1/opportunitiesCrea opportunitàsales.write
GET/api/v1/customersLista clientisales.read
POST/api/v1/activitiesLog attività (visita, chiamata, email)sales.write
GET/api/v1/territoriesZone commerciali (poligoni GIS)sales.read
Logistics — Consegne e flotta logistics.read / logistics.write
MetodoEndpointDescrizionePermesso
GET/api/v1/deliveriesLista consegne (status, date_range, assignee)logistics.read
POST/api/v1/deliveriesCrea consegnalogistics.write
PATCH/api/v1/deliveries/{id}/statusAggiorna stato consegna (+ GPS opzionale)logistics.write
GET/api/v1/vehiclesLista veicoli del tenantlogistics.read
GET/api/v1/warehousesLista magazzini e hub logisticilogistics.read
GET/api/v1/routing/routeCalcolo percorso ottimale tra puntilogistics.read
POST/api/v1/routing/optimizeOttimizzazione multi-stop (async job)logistics.write
Suppliers — Fornitori e procurement suppliers.read / suppliers.write
MetodoEndpointDescrizionePermesso
GET/api/v1/suppliersLista fornitori con filtrisuppliers.read
POST/api/v1/suppliersCrea fornitoresuppliers.write
GET/api/v1/suppliers/nearbyFornitori nel raggio GPSsuppliers.read
PATCH/api/v1/suppliers/{id}Aggiorna fornitoresuppliers.write
City Intelligence — Dati territoriali utilities.read (pubblica per /metadata)
MetodoEndpointDescrizionePiano
GET/api/v1/cities/{city}Risolve città in coordinate e metadati canoniciBase
GET/api/v1/cities/{city}/weatherMeteo corrente e previsioni (1-7 giorni)Base
GET/api/v1/cities/{city}/businessIndicatori economici e densità impreseBusiness
GET/api/v1/cities/{city}/real-estateIndicatori immobiliari (potere d'acquisto, mercato)Business
GET/api/v1/cities/{city}/populationDemografica ISTAT (fasce età, densità)Premium
GET/api/v1/cities/{city}/profileAggregato multi-dominio (tutto in una sola call)Premium
GET/api/v1/metadata/sourcesCatalogo fonti dati
GET/api/v1/metadata/plansPiani con quota RPM ed endpoint inclusi
Utilities — Geocoding e bulk utilities.read / utilities.write
MetodoEndpointDescrizionePermesso
GET/api/v1/geocodeGeocoding singolo indirizzo → lat/lonutilities.read
GET/api/v1/reverse-geocodeReverse geocoding lat/lon → indirizzoutilities.read
POST/api/v1/bulk/geocodeBatch geocoding (async, fino a 800 indirizzi)utilities.write
GET/api/v1/jobs/{id}Stato job async (polling)utilities.read
Mobile API — PWA Field Agent prefix /api/v1/mobile/v1
MetodoEndpointDescrizionePermesso
POST/auth/loginLogin con API token → JWT mobile
GET/tasks/assignedConsegne assegnate all'agente correntelogistics.read
PATCH/tasks/{id}/statusAggiorna stato consegna + GPS opzionalelogistics.write
GET/map/pointsBundle mappa: consegne + hub nel raggiologistics.read
GET/sales/itemsLead e opportunità assegnate all'agentesales.read
POST/sales/visitLog visita/chiamata sul camposales.write
GET/propertiesEntità immobiliari del tenantentities.read
PATCH/properties/{id}/noteAggiungi nota di campo a un immobileentities.write
GET/suppliers/nearbyFornitori nel raggio GPS correntesuppliers.read
GET/sync/statusStato sincronizzazione offlinelogistics.read

Esempi pratici

Snippets pronti all'uso. Il token viene pre-compilato se lo hai inserito in alto.

Crea entità + query nearby
City profile + logistica
Mobile — login + sync
Gestione errori

Schema risposta — City API

{
  "request_id": "uuid",
  "version": "v1",
  "query": { "city": "Milano", "country": "IT" },
  "location": {
    "canonical_name": "Milano",
    "istat_code": "015146",
    "boundary_level": "comune",
    "latitude": 45.4642,
    "longitude": 9.19,
    "country_code": "IT",
    "source": "admin_boundaries_name"
  },
  "data": { ... },
  "sources": ["ISTAT", "open-meteo"],
  "warnings": [],
  "generated_at": "2026-04-11T10:30:00Z"
}
location.source
admin_boundaries_codeTrovato in DB per codice ISTAT/NUTS
admin_boundaries_nameTrovato in DB per nome
geocoderRisolto via geocoder esterno
geocoder+reverseGeocoder + reverse lookup
Il campo warnings non vuoto indica che alcuni domini non erano disponibili. La risposta è comunque valida per i domini presenti.
Header risposta notevoli
X-Request-IdUUID della request, utile per debug
Retry-AfterSecondi da attendere (solo su 429)
X-API-VersionVersione contratto endpoint

Tester live

Prova qualsiasi endpoint direttamente da questa pagina.


        

Piani di accesso

Da /api/v1/metadata/plans