API rivenditori, versione 1
Pagina per il webmaster. L'API dà al tuo sito il catalogo Citygraph (prodotti, foto, prezzi rivenditore, disponibilità) in formato JSON. La chiave personale la riceve chi ha una richiesta approvata: richiedila qui.
Indirizzo del servizio
https://www.citygraph.it/api/rivenditori/v1Risposte in JSON UTF-8 (Content-Type: application/json; charset=utf-8), mai in cache (Cache-Control: no-store). Sono ammesse solo richieste GET, con CORS aperto (*).
Autenticazione
Invia la chiave nell'intestazione X-Api-Key. Sono accettate anche Authorization: Bearer <chiave> e, solo per il feed CSV, il parametro ?chiave=. La chiave inizia con cgr_: tienila sul server, mai nel codice che gira nel browser.
X-Api-Key: cgr_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxEndpoint
GET /stato
Verifica la chiave e restituisce il numero di prodotti.
{"ok":true,"negozio":"citygraph.it","versione_api":"1","rivenditore":"Rossi Srl","prodotti":1716,"aggiornato":"2026-10-16T08:00:00.000Z"}GET /prodotti
Elenco paginato. Parametri (tutti facoltativi):
pagina(da 1) eper_pagina(default 100, massimo 250)catalogo:tutti(default),gadgetoingrossocategoria: slug della categoria ·q: testo da cercaremodificati_dal: data ISO 8601, per scaricare solo le novità
{
"pagina": 1, "per_pagina": 100, "totale": 1716, "pagine": 18,
"prodotti": [
{
"sku": "TSRA150",
"nome": "T-shirt 150 manica corta",
"catalogo": "ingrosso",
"marca": "JHK",
"categoria": "TSHIRT",
"categoria_slug": "tshirt",
"descrizione": "<p>...</p>",
"immagini": ["https://www.citygraph.it/ingrosso/TSRA150.jpg"],
"prezzo_rivenditore": 2.08,
"prezzo_consigliato": 2.24,
"iva": 22,
"valuta": "EUR",
"quantita_minima": 1,
"disponibile": 5320,
"varianti": [
{"sku":"TSRA150MWH","colore":"Bianco","hex":"#ffffff","taglia":"M","ean":"8445000000000",
"disponibile":120,"in_arrivo":500,"prezzo_rivenditore":2.08,"prezzo_consigliato":2.24,
"immagine":"https://www.citygraph.it/ingrosso/TSRA150.jpg"}
],
"aggiornato": "2026-10-16T08:00:00.000Z"
}
]
}I prezzi sono numeri a 2 decimali, per pezzo, IVA esclusa. Un prodotto senza varianti ha varianti: [] e la disponibilità sul prodotto. Le immagini sono URL assoluti.
GET /prodotti/{sku}
Un singolo prodotto, con lo stesso formato. Lo sku è quello del prodotto base (maiuscole o minuscole non contano). Se non esiste: errore non_trovato.
GET /disponibilita
Solo le giacenze, leggere e veloci. Con ?sku=A,B,C (massimo 500 codici, di prodotto o di variante); senza sku restituisce tutte le varianti, paginate con pagina e per_pagina (massimo 1000).
{
"aggiornato": "2026-10-16T08:00:00.000Z",
"articoli": [
{"sku":"TSRA150MWH","sku_prodotto":"TSRA150","disponibile":120,"in_arrivo":500,"stato":"disponibile"}
]
}stato vale disponibile, esaurito oppure su_ordinazione (non c'è giacenza ma è in arrivo o ordinabile).
GET /feed.csv
Tutto il catalogo in un file, una riga per variante, separatore ;, UTF-8 con BOM, prezzi con il punto decimale. Si può chiamare anche dal browser con ?chiave=. Parametro facoltativo catalogo.
sku_prodotto;sku;nome;marca;categoria;colore;taglia;ean;prezzo_rivenditore;prezzo_consigliato;iva;disponibile;in_arrivo;immagine;immagini_extraEsempi
curl -H "X-Api-Key: LA_TUA_CHIAVE" \
"https://www.citygraph.it/api/rivenditori/v1/disponibilita?sku=TSRA150MWH,TSRA150LWH"<?php
$chiave = 'LA_TUA_CHIAVE'; // tienila nel server, non nel browser
$ch = curl_init('https://www.citygraph.it/api/rivenditori/v1/prodotti?catalogo=ingrosso&per_pagina=50');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-Api-Key: ' . $chiave],
CURLOPT_TIMEOUT => 20,
]);
$risposta = curl_exec($ch);
$codice = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$dati = json_decode($risposta, true);
if ($codice !== 200) { die($dati['messaggio'] ?? 'Errore'); }
foreach ($dati['prodotti'] as $p) {
echo $p['sku'], ' ', $p['nome'], ' ', $p['prezzo_rivenditore'], " EUR\n";
}Regola dei prezzi
prezzo_rivenditore è il nostro costo +30%, e non supera mai il prezzo pubblico della stessa quantità. È il prezzo a cui compri da noi. prezzo_consigliato è il prezzo che il nostro sito applica al pubblico per 1 pezzo: puoi usarlo come riferimento, ma il prezzo al tuo cliente lo decidi tu. Entrambi sono IVA esclusa (aliquota nel campo iva).
Limiti ed errori
Massimo 120 richieste al minuto per chiave. Per tenere il catalogo aggiornato bastano il feed CSV o /prodotti?modificati_dal=… una volta al giorno e /disponibilita ogni ora.
Gli errori hanno sempre questa forma, con il codice HTTP indicato:
{"errore":"chiave_non_valida","messaggio":"La chiave API non è valida."}| Codice | HTTP | Significato |
|---|---|---|
| chiave_mancante | 401 | Non hai inviato la chiave. |
| chiave_non_valida | 401 | La chiave non esiste o è sbagliata. |
| chiave_sospesa | 403 | La chiave è stata sospesa: contattaci. |
| non_trovato | 404 | Prodotto o codice non trovato. |
| troppe_richieste | 429 | Oltre 120 richieste al minuto con la stessa chiave. |
| errore_interno | 500 | Problema nostro: riprova tra poco. |
Condizioni d'uso di foto e dati
- Foto, descrizioni e dati del catalogo si usano solo per vendere i prodotti Citygraph sul tuo sito, e solo finché il programma rivenditori è attivo.
- È vietato cedere, pubblicare o rivendere i dati a terzi, o usarli per altri cataloghi.
- La chiave è personale: non condividerla. Possiamo sospenderla in caso di uso anomalo.
- Se cessa il rapporto, rimuovi foto e dati dal tuo sito.
Connettore WooCommerce
Plugin pronto da installare: importa prodotti e foto dal catalogo, applica il prezzo rivenditore e aggiorna le disponibilità ogni ora. Dopo l'installazione inserisci l'indirizzo del servizio e la tua chiave.
Scarica il connettore (.zip)Non hai ancora la chiave? Richiedi maggiori informazioni. Per domande tecniche scrivi a info@citygraph.it.