Fundraising Expert API
Integra l'AI specializzata nel fundraising direttamente nei tuoi strumenti, CRM, workflow e applicazioni. REST API semplice, autenticazione con API key.
Panoramica
L'API di Fundraising Expert ti permette di accedere al motore AI — con fine-tuning specializzato e knowledge base da 6.000+ blocchi — da qualsiasi applicazione esterna.
Base URL:
https://fundraisingexpert.eu/api/v1
Tutte le richieste e risposte usano JSON. L'API è stateless — ogni chiamata è indipendente, ma puoi passare la cronologia della conversazione per mantenere il contesto.
Autenticazione
Ogni richiesta deve includere la tua API key nell'header X-API-Key.
X-API-Key: fe_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Creare una API key
Vai su Impostazioni → API nella tua dashboard. Puoi avere fino a 5 chiavi attive contemporaneamente.
Prezzi
Le chiamate API sono a consumo, indipendentemente dal piano di abbonamento.
| Modello | Costo per chiamata | Note |
|---|---|---|
| Mistral Large + fine-tuning | €0.002 | Incluso in tutti i piani |
| Claude Sonnet 4.6 + fine-tuning | €0.008 | Solo piano Pro |
Limiti
- Piano Free: 150.000 token output/mese (condivisi con la chat web)
- Piano Pro: Mistral illimitato, Claude 200.000 token/mese
- Rate limit: 60 richieste/minuto per chiave
- Dimensione richiesta: max 50KB per payload
- Cronologia: max 20 messaggi passati per chiamata
Endpoint
Parametri richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| message | string | required | Il messaggio dell'utente |
| model | string | optional | mistral-large-latest (default) oppure claude-sonnet-4-20250514 |
| system_prompt | string | optional | System prompt personalizzato. Se omesso, usa il prompt fundraising di default. |
| history | array | optional | Cronologia conversazione. Array di oggetti {"role": "user"|"assistant", "content": "..."}. Max 20 elementi. |
Risposta
{
"ok": true,
"reply": "La DEM di fine anno dovrebbe iniziare con...",
"model": "mistral-large-latest"
}
Quickstart
Una chiamata minimale in meno di 30 secondi:
cURL
curl -X POST https://fundraisingexpert.eu/api/v1/chat \ -H "X-API-Key: fe_live_LA_TUA_CHIAVE" \ -H "Content-Type: application/json" \ -d '{"message": "Scrivi una CTA per una donazione di fine anno"}'
Python
# pip install requests import requests response = requests.post( "https://fundraisingexpert.eu/api/v1/chat", headers={"X-API-Key": "fe_live_LA_TUA_CHIAVE"}, json={"message": "Scrivi una CTA per una donazione di fine anno"} ) data = response.json() print(data["reply"])
JavaScript / Node.js
const res = await fetch("https://fundraisingexpert.eu/api/v1/chat", { method: "POST", headers: { "X-API-Key": "fe_live_LA_TUA_CHIAVE", "Content-Type": "application/json", }, body: JSON.stringify({ message: "Scrivi una CTA per una donazione di fine anno" }) }); const data = await res.json(); console.log(data.reply);
Esempi avanzati
Conversazione multi-turno
history = [] # Primo messaggio r1 = requests.post(url, headers=headers, json={ "message": "Scrivi una DEM per la campagna 5x1000", "history": history }).json() history.append({"role": "user", "content": "Scrivi una DEM per la campagna 5x1000"}) history.append({"role": "assistant", "content": r1["reply"]}) # Secondo messaggio — l'AI ricorda il contesto r2 = requests.post(url, headers=headers, json={ "message": "Rendila più emozionale, aggiungi una storia", "history": history }).json() print(r2["reply"])
System prompt personalizzato
requests.post(url, headers=headers, json={
"message": "Analizza questa campagna",
"system_prompt": "Sei un esperto di fundraising per organizzazioni culturali. "
"Rispondi sempre in modo formale e cita esempi dal settore culturale.",
"model": "claude-sonnet-4-20250514"
})
Errori
| Codice HTTP | Errore | Causa |
|---|---|---|
| 401 | API key non valida o revocata | Chiave mancante, errata o revocata |
| 400 | Campo 'message' obbligatorio | Body JSON mancante o campo vuoto |
| 429 | Limite mensile raggiunto | Token esauriti per il mese corrente |
| 500 | Errore interno | Problema temporaneo — riprova |
Tutte le risposte di errore hanno questa struttura:
{
"error": "Descrizione dell'errore"
}