SciFig

Riferimento API

Crediti

L’API usa i tuoi crediti SciFig: un solo saldo per sito, API e MCP.

Consulta il saldo#

GET /credits, con ambito figures:read, restituisce il saldo, i crediti riservati dai processi in esecuzione, il piano e i suoi limiti delle attività:

{
  "balance": 2950,
  "reserved": 100,
  "granted_scopes": ["figures:read", "figures:generate"],
  "plan": "plus",
  "plan_level": 2,
  "limits": { "concurrent_tasks": 5, "tasks_per_hour": 200 },
  "top_up_url": "https://scifig.ai/pricing?utm_source=api"
}
  • plan è free, starter, plus o pro. Un account con saldo positivo di crediti acquistati in pacchetti viene trattato come pro finché il saldo dura.
  • tasks_per_hour è 200 per tutti i piani; concurrent_tasks dipende dal piano.
  • top_up_url include utm_source=api per le richieste dirette all’API e utm_source=mcp per quelle effettuate tramite il server MCP.
  • granted_scopes elenca le autorizzazioni delle credenziali attuali: figures:read e, quando consentito, figures:generate.

GET /pricing restituisce tutti i prezzi senza autenticazione; i prezzi su queste pagine provengono dalla stessa tabella. Non esiste un piano API separato: acquista crediti o un abbonamento sulla pagina dei prezzi.

Ciclo di vita della riserva#

  • Creare un processo ne riserva il prezzo in modo atomico; due richieste non possono mai spendere gli stessi crediti.
  • Senza crediti sufficienti, la risposta è 402 INSUFFICIENT_CREDITS con details.top_up_url: non viene riservato né eseguito nulla. La richiesta rifiutata rimane in GET /jobs come processo fallito con quell’errore e ripetere la sua chiave restituisce la stessa risposta.
  • Un processo riuscito addebita la riserva esattamente una volta; un processo fallito o annullato la restituisce integralmente. I tentativi interni non riservano altri crediti e ripetere un Idempotency-Key riutilizza la riserva iniziale.
  • Ogni processo riporta credits.reserved, credits.charged e credits.refunded, letti dal registro contabile.
  • I crediti vengono usati nello stesso ordine del sito: prima quelli che scadono prima e, per ultimi, quelli dei pacchetti, che non scadono.

cURL#

curl https://scifig.ai/api/v1/credits \
  -H "Authorization: Bearer $SCIFIG_API_KEY"

JavaScript#

const response = await fetch('https://scifig.ai/api/v1/credits', {
  method: 'GET',
  headers: {
    Authorization: `Bearer ${process.env.SCIFIG_API_KEY}`,
  },
});
const result = await response.json();
console.log(response.status, result);

Python#

import os

import requests

headers = {
    "Authorization": f"Bearer {os.environ['SCIFIG_API_KEY']}",
}
response = requests.get(
    "https://scifig.ai/api/v1/credits",
    headers=headers,
    timeout=60,
)
print(response.status_code, response.json())