📖 Overview
Le API di SentimentBitcoin.it forniscono accesso programmatico a:
- BMSI (Bitcoin Media Sentiment Index) real-time (aggiornato ogni ora)
- Storico giornaliero completo
- Notizie analizzate con AI (GPT-4)
- Prezzo Bitcoin live (EUR/USD)
Le API richiedono autenticazione tramite API key e restituiscono dati in formato JSON. Disponibile piano FREE gratuito e piano PRO a pagamento.
🔐 Autenticazione
Tutte le richieste API devono includere l'header X-API-Key con la tua chiave API.
curl -H "X-API-Key: free_abc123xyz789..." \
https://sentimentbitcoin.it/api/index_today.php
📋 Piani Disponibili
| Piano | Costo | Rate Limit | Descrizione |
|---|---|---|---|
| FREE | Gratuito | 3 req/minuto | Perfetto per progetti personali e test |
| PRO | A pagamento | 100 req/minuto | Per applicazioni professionali e trading bot |
🚀 Ottieni la tua API Key in 30 Secondi
Registrati gratuitamente e ricevi subito la tua chiave API FREE.
Nessuna carta di credito richiesta.
🌐 Base URL
https://sentimentbitcoin.it/api/
Tutti gli endpoint sono relativi a questo URL base.
Esempio completo: https://sentimentbitcoin.it/api/index_today.php
⚠️ Rate Limits
Piano FREE: 3 richieste al minuto. Ideale per test e sviluppo.
Piano PRO: 100 richieste al minuto. Per applicazioni in produzione.
Header HTTP Rate Limit
Ogni risposta dell'API include header standard per monitorare il tuo utilizzo:
X-RateLimit-Limit: Limite massimo di richieste (per minuto)X-RateLimit-Remaining: Richieste rimanenti nel minuto correnteX-RateLimit-Reset: Timestamp Unix del prossimo reset (inizio prossimo minuto)
HTTP/1.1 200 OK X-RateLimit-Limit: 3 X-RateLimit-Remaining: 2 X-RateLimit-Reset: 1734652860
Errore 429 - Too Many Requests
Se superi il limite, riceverai un errore 429 Too Many Requests
con dettagli sul reset:
{
"error": "Too Many Requests",
"message": "Rate limit exceeded (3 req/min)",
"limit": 3,
"remaining": 0,
"reset": 1734652860,
"reset_readable": "2025-12-20 00:01:00 UTC",
"upgrade_info": "Upgrade to PRO plan for unlimited requests"
}
Errore 401: Se ricevi 401 Unauthorized, verifica che l'header X-API-Key sia corretto e la tua chiave sia attiva.
Best Practice: Monitora gli header di rate limit e implementa backoff automatico quando ti avvicini al limite.
🔗 Endpoints Disponibili
| Endpoint | Descrizione | Metodo |
|---|---|---|
/index_today.php |
Sentiment di oggi + ultime 24 ore | GET |
/index_history.php |
Storico giornaliero (ultimi 30 giorni) | GET |
/news_list.php |
Lista news con filtri avanzati | GET |
/price.php |
Prezzo Bitcoin live (EUR/USD) | GET |
/stats_correlation.php |
Dati grezzi per grafici (Sentiment/Prezzo) | GET |
/correlation_index.php |
Indice Pearson e Narrative Analysis | GET |
📊 GET /index_today.php
Parametri
Nessun parametro richiesto.
Response Structure
{
"status": "ok",
"date": "2025-12-11",
"sentiment": {
"global_score": 58.2,
"positive": 12,
"negative": 5,
"neutral": 10,
"timestamp": "2025-12-11 14:30:00"
},
"hourly": {
"latest": 60.1,
"timestamp": "2025-12-11 14:00:00",
"last_24h": [55.2, 57.8, 60.1, 58.9, ...]
},
"total_news": 247,
"top_news": [
{
"title": "Bitcoin ETF approval...",
"url": "https://...",
"sentiment_label": "positive",
"sentiment_score": 4,
"relevance_score": 95,
"category": "regulation",
"published_at": "2025-12-11 10:30:00"
}
]
}
Campi Response
| Campo | Tipo | Descrizione |
|---|---|---|
| global_score | float | BMSI (Bitcoin Media Sentiment Index): valore 0–100 calcolato dal sentiment delle notizie tramite analisi del tono (positivo/neutral/negativo). Non include dati di prezzo/volume/volatilità. |
| positive/negative/neutral | int | Conteggio notizie per sentiment |
| hourly.last_24h | array | Serie temporale ultime 24 ore |
| total_news | int | Totale notizie analizzate oggi |
| top_news | array | Top 10 notizie più rilevanti |
📅 GET /index_history.php
Parametri
Attualmente nessun parametro (futuro: ?days=60 per personalizzare)
Response Example
{
"status": "ok",
"days": 30,
"history": [
{
"date": "2025-11-12",
"global_score": 48.7,
"positive": 120,
"negative": 110,
"neutral": 95
}
]
}
Esempio Request
import requests
import matplotlib.pyplot as plt
data = requests.get("https://sentimentbitcoin.it/api/index_history.php").json()
dates = [item["date"] for item in data["history"]]
scores = [item["global_score"] for item in data["history"]]
plt.plot(dates, scores)
plt.title("Bitcoin Sentiment - Ultimi 30 giorni")
plt.xlabel("Data")
plt.ylabel("Sentiment Score")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
📰 GET /news_list.php
Query Parameters
| Parametro | Tipo | Required | Descrizione |
|---|---|---|---|
| category | string | Optional | Filtra per categoria: regulation, adoption, security, mining, market |
| sentiment | string | Optional | Filtra per sentiment: positive, negative, neutral |
| from | date | Optional | Data inizio (formato: YYYY-MM-DD) |
| to | date | Optional | Data fine (formato: YYYY-MM-DD) |
| search | string | Optional | Ricerca testuale nel titolo |
| offset | int | Optional | Offset per paginazione (default: 0) |
Response Example
{
"status": "ok",
"count": 20,
"next_offset": 20,
"items": [
{
"id": 1234,
"title": "SEC approves Bitcoin ETF...",
"url": "https://...",
"published_at": "2025-12-11 09:30:00",
"source": "CoinDesk",
"sentiment_label": "positive",
"relevance_score": 92,
"category": "regulation"
}
]
}
💰 GET /price.php
Query Parameters
| Parametro | Tipo | Required | Descrizione |
|---|---|---|---|
| currency | string | Optional | Valuta: eur (default) o usd |
Response Example
{
"success": true,
"price": 92847.50,
"currency": "eur",
"updated": "2025-12-11 14:25:00"
}
Example Request
fetch("https://sentimentbitcoin.it/api/price.php?currency=usd")
.then(r => r.json())
.then(d => console.log(d.price));
📈 Dati Grafico Correlazione
/stats_correlation.php
Piano FREE: Limitato alle ultime 24 ore con granularità 1 ora. Nessun filtro categoria.
Piano PRO: Fino a 30 giorni, granularità fine (fino a 1 minuto) e filtro per categoria.
Parametri (Query String)
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| days | integer | No | Numero di giorni di storico (Default: 1, Max PRO: 30) |
| granularity | string | No | Raggruppamento temporale: '1h', '30m', '15m', '5m', '1m'. (Default: '1h') |
| category | string | No | Filtra per categoria (es. 'bitcoin', 'regulation'). Solo PRO. |
Response Example (PRO)
{
"status": "ok",
"meta": {
"subscription_status": "pro",
"days": 1,
"granularity": "1h",
"record_count": 24
},
"data": [
{
"timestamp": "2025-12-20 10:00:00",
"avg_sentiment": 55.5,
"avg_price": 98050.20,
"news_count": 12
},
{
"timestamp": "2025-12-20 11:00:00",
"avg_sentiment": 62.1,
"avg_price": 98200.00,
"news_count": 8
}
]
}
brain Indice Pearson & Intelligence
/correlation_index.php
Identifica automaticamente, analizzando 5 narrative (Mining, ETF, Regulation, Macro, Security), quale ha la correlazione più forte con il prezzo nel periodo selezionato.
Interpretazione Index:
•
Strong Positive (> 0.7): Il prezzo segue fortemente il sentiment.•
Moderate/Weak: Correlazione parziale.•
Inverse: Il prezzo si muove in direzione opposta al sentiment (es. FUD che non impatta il prezzo).
Parametri (Query String)
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| days | integer | No | Finestra temporale in giorni (Default: 7, Max: 30) |
| category | string | No | Analizza una specifica narrativa (es. 'MINING'). Se omesso, calcola GLOBAL e trova la top narrative. |
Response Example
{
"category": "GLOBAL",
"correlation_score": 0.82,
"interpretation": "Strong Positive",
"top_impact_narrative": {
"category": "ETF",
"score": 0.89,
"interpretation": "Strong Positive"
},
"days": 7
}
⚠️ Gestione Errori
Tutte le API restituiscono uno status HTTP appropriato e un JSON con dettagli dell'errore.
Status Codes
| Code | Significato | Azione |
|---|---|---|
| 200 | OK | Request success |
| 400 | Bad Request | Verifica parametri query string |
| 500 | Internal Server Error | Errore lato server, riprova più tardi |