curl --request PUT \
--url https://api.finseo.ai/v1/projects/67a1c2d3e4f5061728394a5b \
--header "Authorization: Bearer $FINSEO_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"name": "Finseo — Growth", "description": "Primary Finseo GTM project"}'
curl --request PUT \
--url https://api.finseo.ai/v1/projects/67a1c2d3e4f5061728394a5b \
--header "Authorization: Bearer $FINSEO_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"models": ["chatgpt", "perplexity", "ai_overview", "claude"]}'
import requests
project_id = "67a1c2d3e4f5061728394a5b"
r = requests.put(
f"https://api.finseo.ai/v1/projects/{project_id}",
headers={"Authorization": "Bearer sk_live_xxxxxxxx"},
json={"models": ["chatgpt", "perplexity", "ai_overview", "claude"]},
)
if r.status_code == 403:
print("blocked:", r.json()["error"]["details"]["reason"])
else:
print(r.json()["data"]["models"])
{
"data": {
"id": "67a1c2d3e4f5061728394a5b",
"updated": true
}
}
{
"data": {
"id": "67a1c2d3e4f5061728394a5b",
"updated": true,
"models": ["chatgpt", "perplexity", "ai_overview", "claude"],
"syncedPromptCount": 15
}
}
{
"error": {
"code": "FORBIDDEN",
"message": "Running 4 models would need 58,400 AI answers per month, above the 40,000 included in your solo package.",
"details": {
"reason": "agency_limit",
"package": "solo",
"nextPackage": "starter",
"includedResults": 40000,
"projectedMonthlyAnswers": 58400
}
}
}
{
"data": {
"id": "67a1c2d3e4f5061728394a5b",
"updated": true,
"convertedFromPitch": true
}
}
Projects
Aggiorna un progetto
PUT
/
v1
/
projects
/
{projectId}
curl --request PUT \
--url https://api.finseo.ai/v1/projects/67a1c2d3e4f5061728394a5b \
--header "Authorization: Bearer $FINSEO_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"name": "Finseo — Growth", "description": "Primary Finseo GTM project"}'
curl --request PUT \
--url https://api.finseo.ai/v1/projects/67a1c2d3e4f5061728394a5b \
--header "Authorization: Bearer $FINSEO_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"models": ["chatgpt", "perplexity", "ai_overview", "claude"]}'
import requests
project_id = "67a1c2d3e4f5061728394a5b"
r = requests.put(
f"https://api.finseo.ai/v1/projects/{project_id}",
headers={"Authorization": "Bearer sk_live_xxxxxxxx"},
json={"models": ["chatgpt", "perplexity", "ai_overview", "claude"]},
)
if r.status_code == 403:
print("blocked:", r.json()["error"]["details"]["reason"])
else:
print(r.json()["data"]["models"])
{
"data": {
"id": "67a1c2d3e4f5061728394a5b",
"updated": true
}
}
{
"data": {
"id": "67a1c2d3e4f5061728394a5b",
"updated": true,
"models": ["chatgpt", "perplexity", "ai_overview", "claude"],
"syncedPromptCount": 15
}
}
{
"error": {
"code": "FORBIDDEN",
"message": "Running 4 models would need 58,400 AI answers per month, above the 40,000 included in your solo package.",
"details": {
"reason": "agency_limit",
"package": "solo",
"nextPackage": "starter",
"includedResults": 40000,
"projectedMonthlyAnswers": 58400
}
}
}
{
"data": {
"id": "67a1c2d3e4f5061728394a5b",
"updated": true,
"convertedFromPitch": true
}
}
Aggiorna un progetto esistente. Invia solo i campi che vuoi modificare.
string
obbligatorio
Identificatore del progetto.
string
Nuovo nome visualizzato (1–200 caratteri).
string
URL canonico aggiornato.
string
Dominio radice aggiornato.
boolean
Imposta su
true per convertire un progetto pitch in un progetto cliente completo, ad esempio dopo aver acquisito il prospect. La conversione verifica uno slot cliente libero e che il budget di risposte copra i prompt, quindi riattiva i prompt sospesi. Non riesce se il progetto non è un pitch.string
Descrizione aggiornata (max 500 caratteri).
array
Modelli AI su cui vengono eseguiti i prompt del progetto — l’equivalente API
delle Impostazioni modelli della dashboard. Sostituisce l’intero set e
risincronizza tutti i prompt del progetto (
syncedPromptCount nella risposta);
la prossima esecuzione pianificata usa il nuovo set. Valori ammessi: chatgpt,
perplexity, ai_overview, google_ai_mode, copilot, claude, gemini,
grok, mistral, deepseek.Si applicano gli stessi limiti della dashboard: il numero massimo di modelli
del tuo piano (3 sui piani Brand, salvo aumenti), il budget di prompt sui piani
Brand e la fascia di risposte AI inclusa nei pacchetti Agency. Sul pacchetto
Agency più alto la chiamata riesce e restituisce un meteredNotice quando la
proiezione supera le risposte incluse — l’eccedenza viene fatturata come
consumo extra, esattamente come nella UI.Errori
Le violazioni dei limiti restituiscono403 con error.code = "FORBIDDEN" e
un error.details.reason leggibile dalla macchina:
details.reason | Significato |
|---|---|
model_limit | Più modelli di quanti il tuo piano consenta (details.limit). |
model_not_available | Motore non disponibile nel tuo piano (details.models). |
prompt_budget_exceeded | Piano Brand: il nuovo set di modelli supererebbe il budget di prompt (promptLimit, slotsUsed, projectedSlots). |
agency_limit | Agency: le risposte mensili previste superano la fascia inclusa ed esiste un pacchetto superiore (package, nextPackage, includedResults, projectedMonthlyAnswers) — oppure, per convertFromPitch, nessuno slot cliente è libero (details.limit = "projects"). |
curl --request PUT \
--url https://api.finseo.ai/v1/projects/67a1c2d3e4f5061728394a5b \
--header "Authorization: Bearer $FINSEO_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"name": "Finseo — Growth", "description": "Primary Finseo GTM project"}'
curl --request PUT \
--url https://api.finseo.ai/v1/projects/67a1c2d3e4f5061728394a5b \
--header "Authorization: Bearer $FINSEO_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"models": ["chatgpt", "perplexity", "ai_overview", "claude"]}'
import requests
project_id = "67a1c2d3e4f5061728394a5b"
r = requests.put(
f"https://api.finseo.ai/v1/projects/{project_id}",
headers={"Authorization": "Bearer sk_live_xxxxxxxx"},
json={"models": ["chatgpt", "perplexity", "ai_overview", "claude"]},
)
if r.status_code == 403:
print("blocked:", r.json()["error"]["details"]["reason"])
else:
print(r.json()["data"]["models"])
{
"data": {
"id": "67a1c2d3e4f5061728394a5b",
"updated": true
}
}
{
"data": {
"id": "67a1c2d3e4f5061728394a5b",
"updated": true,
"models": ["chatgpt", "perplexity", "ai_overview", "claude"],
"syncedPromptCount": 15
}
}
{
"error": {
"code": "FORBIDDEN",
"message": "Running 4 models would need 58,400 AI answers per month, above the 40,000 included in your solo package.",
"details": {
"reason": "agency_limit",
"package": "solo",
"nextPackage": "starter",
"includedResults": 40000,
"projectedMonthlyAnswers": 58400
}
}
}
{
"data": {
"id": "67a1c2d3e4f5061728394a5b",
"updated": true,
"convertedFromPitch": true
}
}