Vai al contenuto
PuraPura Developers

SDK in abbonamento

OAuth per utente · limiti del piano condivisi tra le app · modello gestito da Pura.

Cerchi le API a consumo?
Developers/Chat e streaming

Chat e streaming

Contratto OpenAI-compatible degli endpoint delegati.

Richiesta chat

POST /v1/integrations/inference/chat/completions richiede Authorization: Bearer ACCESS_TOKEN, lo scope inference e messages. Non inviare model: il servizio sceglie il modello per la richiesta in abbonamento. Usa lo stesso endpoint per chat e streaming. I campi model e gli override di routing, credenziali e metadata non sono supportati e restituiscono 422.

bash
curl https://ai.puradigital.it/v1/integrations/inference/chat/completions \
  -H "Authorization: Bearer YOUR_OAUTH_ACCESS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"messages":[{"role":"user","content":"Hello"}]}'

Verifica i servizi disponibili

GET /v1/integrations/inference/capabilities restituisce services.chat e services.audio_transcription. Controlla questi valori prima di offrire una funzione all’utente. La risposta descrive i servizi disponibili, non un catalogo di modelli. Nelle risposte chat e streaming il campo model è pura.

SSE e cancellazione

Imposta stream=true per ricevere text/event-stream. Interpreta gli eventi SSE fino a [DONE], senza trattare l’intera risposta come un singolo JSON. Un’interruzione della connessione non garantisce l’annullamento della richiesta: il consumo può aggiornarsi anche dopo la chiusura dello stream.

Ammissione e richieste in corso

Puoi avere al massimo due richieste in corso per account, condivise fra tutte le app e fra chat e audio. Gestisci 429 subscription_requests_pending attendendo prima di riprovare; mostra le percentuali aggiornate restituite da usage(), anche se cambiano dopo la risposta.

Timeout e risultato incerto

Se la connessione si interrompe senza una risposta completa, l’esito della richiesta è incerto. Non ripetere automaticamente l’inferenza come se fosse idempotente: una seconda chiamata può consumare nuovamente il piano. Controlla usage() e lascia all’utente la scelta di riprovare.