1. Avvio rapido
L’API Regunow usa HTTPS, autenticazione Bearer e il prefisso versionato /api/v1. La documentazione è consultabile senza account. Le richieste API richiedono accesso Pro attivo e accettazione delle politiche vigenti.
- Accedi a Regunow e crea una chiave in Impostazioni → Chiavi API.
- Conserva il segreto in modo sicuro. Viene mostrato una sola volta, alla creazione della chiave.
- Imposta host e chiave, poi invia la prima domanda da un backend o da un’automazione affidabile.
# Use your Regunow host and a key from Settings → API Keys.
export REGUNOW_BASE_URL="https://YOUR_REGUNOW_HOST"
export REGUNOW_API_KEY="YOUR_API_KEY"
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/chat/completions" \
-H "Authorization: Bearer $REGUNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: first-question-001" \
-d '{
"messages": [{
"role": "user",
"content": "Which EU product-safety obligations apply to a connected consumer device?"
}],
"mode": "jurisdiction",
"jurisdiction": "eu"
}'La risposta si trova in output.content. Include i riferimenti alle fonti e i crediti addebitati. Questa richiesta consuma crediti. Usa una nuova chiave di idempotenza per ogni nuova domanda.
Esempio JavaScript (Node.js)
// Node.js: set REGUNOW_BASE_URL and REGUNOW_API_KEY in your environment.
// Generate one key per operation; keep it unchanged when retrying that operation.
import { randomUUID } from "node:crypto";
const idempotencyKey = randomUUID();
const response = await fetch(
process.env.REGUNOW_BASE_URL + "/api/v1/chat/completions",
{
method: "POST",
headers: {
Authorization: "Bearer " + process.env.REGUNOW_API_KEY,
"Content-Type": "application/json",
"Idempotency-Key": idempotencyKey,
},
body: JSON.stringify({
messages: [{ role: "user", content: "Summarize EU product-safety obligations." }],
mode: "jurisdiction",
jurisdiction: "eu",
}),
},
);
const result = await response.json();
if (!response.ok) {
throw new Error(result.error.code + ": " + result.error.message);
}
console.log(result.output.content);2. Autenticazione
Invia la chiave API nell’intestazione HTTP Authorization di ogni richiesta. Le chiavi negli URL, nei cookie o nei corpi delle richieste non sono accettate.
Authorization: Bearer rgn_live_...Memorizza le chiavi in una variabile d’ambiente o in un gestore di segreti. Non inserirle nel codice del browser, nei pacchetti di app mobili, nei repository pubblici o nei log. L’accesso da browser di altre origini non è abilitato: invia le richieste tramite il tuo server.
Le chiavi disabilitate, eliminate o scadute cessano subito di autenticare. Regunow conserva solo un hash del segreto e non può mostrarlo di nuovo. Crea una chiave sostitutiva quando serve.
L’accesso Pro e l’accettazione delle politiche vengono verificati a ogni richiesta. Se ricevi legal_acceptance_required, il titolare della chiave deve accedere e aprire Accettazione legale. Una chiave API non può accettare politiche.
3. Modelli e opzioni
GET/api/v1/models
Consulta modelli, livelli di impegno, giurisdizioni, lingue di risposta e funzionalità supportati. Questo endpoint autenticato non addebita crediti separatamente ed è utile per verificare una chiave prima di una richiesta di chat.
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/models" \
-H "Authorization: Bearer $REGUNOW_API_KEY"| Campo | Contenuto |
|---|---|
models | ID e nomi dei modelli, impegno predefinito e valori di impegno supportati. |
default | La selezione predefinita di modello e impegno. |
jurisdictions | Identificatori delle giurisdizioni supportate e relative etichette. |
languages | Codici e nomi delle lingue di risposta supportate. |
capabilities | Supporto per streaming e file, con limiti di quantità e dimensione. |
Usa i valori del catalogo del tuo ambiente. In modalità Giurisdizione, ometti model e effort per usare i valori predefiniti accettati. Se li specifichi, devono corrispondere a Sonnet 4.6 / Alto. Senza allegati, il servizio di recupero gestisce il modello di risposta; il campo del modello descrive la selezione validata.
4. Risposte di chat
POST/api/v1/chat/completions
Invia un corpo JSON contenente un array messages. Per impostazione predefinita, l’API restituisce la risposta completa in JSON. Imposta stream su true per ricevere il testo progressivamente.
| Campo | Predefinito | Descrizione |
|---|---|---|
messages | Obbligatorio | 1–20 messaggi alternati di user e assistant, terminando con user. Ciascuno contiene role e content come stringa. |
mode | freestyle | freestyle per ricerca normativa flessibile, oppure jurisdiction per una giurisdizione supportata. |
jurisdiction | null | Obbligatorio in modalità Giurisdizione. Usa gli identificatori del catalogo. In Freestyle deve essere omesso oppure null. |
model | Predefinito del catalogo | Un ID di modello supportato. La modalità Giurisdizione richiede la selezione Sonnet predefinita. |
effort | Predefinito del modello | Un valore di impegno supportato dal modello. La modalità Giurisdizione richiede Alto. |
web_search | auto / off | auto, on oppure off in Freestyle; il predefinito è auto. La modalità Giurisdizione accetta solo off. |
response_language | en | Un codice di lingua di risposta del catalogo. La lingua della documentazione non limita quella delle risposte. |
stream | false | Imposta true per gli eventi inviati dal server (SSE). |
file_ids | Nessuno | Fino a cinque UUID distinti di file disponibili nell’account del titolare della chiave. |
{
"messages": [{
"role": "user",
"content": "What retention period does this policy specify? Cite the document."
}],
"mode": "freestyle",
"web_search": "off",
"response_language": "en",
"file_ids": ["YOUR_FILE_ID"]
}Sostituisci YOUR_FILE_ID con l’UUID restituito da un caricamento riuscito. A ogni domanda successiva, invia la cronologia pertinente di utente e assistente e reinvia i file_ids desiderati. L’API non ricorda automaticamente cronologia e allegati.
I messaggi di sistema e i campi sconosciuti vengono rifiutati. L’API non espone generazione di immagini o report, ingresso audio né accesso alle memorie salvate. Le immagini caricate possono essere usate come input per le domande.
5. Risposte e citazioni
Una richiesta riuscita restituisce object: "regunow.chat.completion", risposta, metadati delle fonti, utilizzo e tempi. I valori seguenti sono illustrativi.
{
"id": "request-uuid",
"request_id": "request-uuid",
"object": "regunow.chat.completion",
"created": 1790812800,
"model": "jp.anthropic.claude-sonnet-4-6",
"latency": {
"time_to_first_token_ms": 2345,
"time_to_answer_completion_ms": 9876
},
"output": {
"input_files": [],
"role": "assistant",
"content": "The complete answer...",
"finish_reason": "end_turn",
"citations": [],
"sources": [],
"web_search": false
},
"usage": {
"input_tokens": 1234,
"output_tokens": 456,
"charged_microcredits": 789000,
"charged_credits": 0.789
}
}output.contentcontiene il testo definitivo della risposta. Le posizioni delle citazioni si riferiscono a questa stringa finale;sourceIndexesidentifica elementi inoutput.sources.- Le fonti includono titolo, nome del file, tipo MIME, URI ed estratto recuperato. Mostra estratti e citazioni accanto alla risposta.
- Un URI di fonte indica una posizione, che può trovarsi in un archivio privato. Presenta come link accessibili solo gli URL pubblici degli editori. L’API non espone download o traduzione dei file sorgente normativi.
- Quando ci sono allegati,
output.input_filesidentifica i file forniti. Le fonti degli allegati hanno unfile_id; quelle normative e web hannofile_id: null. Gli URI degli allegati sononull. - La presenza di un file di input non dimostra che sostenga ogni affermazione. I modelli possono omettere citazioni nel testo; immagini e scansioni possono avere estratti vuoti.
I conteggi dei token possono essere null se il servizio di recupero non li espone: significa sconosciuto, non zero. charged_credits è l’addebito registrato al cliente. created è un timestamp Unix in secondi; le latenze sono in millisecondi.
Ogni risposta degli endpoint contiene un’intestazione X-Request-Id. Conserva l’identificatore per la diagnosi. Anche il JSON delle risposte di chat e degli errori contiene request_id.
6. Trasmissione in streaming
Imposta "stream": true. La risposta usa text/event-stream. Con cURL aggiungi -N per disabilitare il buffering dell’output.
curl --fail-with-body -N \
"$REGUNOW_BASE_URL/api/v1/chat/completions" \
-H "Authorization: Bearer $REGUNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: streaming-question-001" \
-d '{
"messages": [{"role":"user","content":"Summarize EU product-safety obligations."}],
"mode": "jurisdiction",
"jurisdiction": "eu",
"stream": true
}'Leggi eventi SSE completi separati da righe vuote; un blocco di rete può contenere parte di un evento o più eventi. Accoda choices[0].delta.content quando arriva. Ignora i commenti di mantenimento della connessione che iniziano con :.
data: {"choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
data: {"choices":[{"index":0,"delta":{"content":"The answer begins..."},"finish_reason":null}]}
data: {"choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"choices":[],"usage":{"prompt_tokens":1234,"completion_tokens":456,"total_tokens":1690},"regunow":{"output":{},"latency":{},"usage":{"charged_credits":0.789,"charged_microcredits":789000}}}
data: [DONE]L’evento finale dei metadati ha un array choices vuoto. Leggi risposta definitiva, citazioni e fonti da regunow.output, tempi da regunow.latency e crediti da regunow.usage. I conteggi dei token usano usage.prompt_tokens e usage.completion_tokens.
Recupero e gestione delle citazioni possono causare pause. Considera il testo provvisorio fino ai metadati finali. Un errore dopo l’avvio dello streaming arriva come oggetto error seguito da [DONE]; HTTP 200 da solo non conferma il successo. Errori precedenti di autenticazione o validazione restituiscono normali risposte JSON.
La ripetizione di un’operazione completata resta SSE e restituisce la risposta salvata in un solo blocco di testo con X-Idempotent-Replayed: true.
7. File
Carica documenti o immagini, poi allega i loro ID a una richiesta di chat. Condividono Libreria e quota di archiviazione del titolare della chiave. I documenti possono arrivare a 10 MiB e le immagini a 5 MiB.
| Categoria | Formati |
|---|---|
| Documenti | PDF, TXT, CSV, TSV, Markdown, DOC, DOCX, ODT, RTF, XLSX, ODS, PPTX, ODP |
| Immagini | JPEG, PNG, WebP, GIF |
Caricamento diretto (consigliato)
Questo flusso in tre passaggi invia i byte originali direttamente all’archivio, evitando i limiti del corpo di richiesta dell’applicazione. Usalo per integrazioni ospitate, soprattutto con file grandi.
POST/api/v1/files/upload-intents
Invia solo name, mime_type e bytes (la dimensione esatta). Una richiesta riuscita restituisce HTTP 201 con l’ID di un file in attesa e un URL firmato valido per 300 secondi.
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/files/upload-intents" \
-H "Authorization: Bearer $REGUNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: policy-intent-001" \
-d '{"name":"policy.txt","mime_type":"text/plain","bytes":16384}'{
"id": "YOUR_FILE_ID",
"status": "pending",
"upload_method": "PUT",
"upload_url": "SIGNED_UPLOAD_URL",
"upload_headers": {"Content-Type": "text/plain"},
"expires_in": 300
}Imposta FILE_ID sull’id restituito. Usa upload_method, upload_url e upload_headers ricevuti per caricare esattamente i byte originali. Imposta la Content-Length esatta. Non inviare la chiave API Regunow all’URL di caricamento e non registrare gli URL firmati nei log.
# Set UPLOAD_URL from the intent response. Use its returned upload_headers.
# This example assumes policy.txt is exactly 16,384 bytes.
curl --fail-with-body -X PUT "$UPLOAD_URL" \
-H "Content-Type: text/plain" \
-H "Content-Length: 16384" \
--data-binary @./policy.txtPOST/api/v1/files/{fileId}/complete
Invia {} con una chiave di idempotenza diversa. La finalizzazione valida i byte e restituisce HTTP 200 con un file disponibile. Il suo ID può essere usato in file_ids solo dopo il successo.
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/files/$FILE_ID/complete" \
-H "Authorization: Bearer $REGUNOW_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: policy-complete-001" \
-d '{}'Se l’URL scade, elimina il file in attesa inutilizzato e prepara un nuovo caricamento con una nuova chiave. Ripetere la preparazione non prolunga la validità dell’URL. Se l’esito della finalizzazione è incerto, recupera prima lo stato del file. Se è ancora in attesa, riprova con una nuova chiave di idempotenza; quella precedente restituisce l’esito salvato. Finalizzare un file già disponibile restituisce i metadati.
Caricamento multipart
POST/api/v1/files
Per file piccoli, invia un campo multipart/form-data chiamato file. Invia i byte originali, non base64 o URL remoti. Il gateway di hosting può imporre un limite di corpo inferiore al limite dei file dell’API.
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/files" \
-H "Authorization: Bearer $REGUNOW_API_KEY" \
-H "Idempotency-Key: policy-upload-001" \
-F "file=@./policy.pdf;type=application/pdf"Un caricamento riuscito restituisce HTTP 201 con un file disponibile; non serve una chiamata di finalizzazione separata.
{
"id": "YOUR_FILE_ID",
"object": "regunow.file",
"name": "policy.pdf",
"mime_type": "application/pdf",
"category": "file",
"bytes": 16384,
"status": "available",
"created_at": "2026-10-01T00:00:00Z",
"request_id": "request-uuid",
"usage": {"charged_microcredits":500,"charged_credits":0.0005}
}Elencare, recuperare ed eliminare file
| Metodo | Endpoint API | Comportamento |
|---|---|---|
| GET | /api/v1/files | Elenca i file disponibili. limit è 20 per impostazione predefinita e accetta 1–100. I risultati contengono data, has_more e next_after. Passa next_after come after per la pagina successiva. |
| GET | /api/v1/files/{fileId} | Recupera metadati e stato del file (in attesa, disponibile o non riuscito). |
| DELETE | /api/v1/files/{fileId} | Elimina definitivamente il file dalla Libreria e gli artefatti di analisi e anteprima. Restituisce object: "regunow.file.deleted" e deleted: true. |
curl --fail-with-body \
"$REGUNOW_BASE_URL/api/v1/files?limit=20" \
-H "Authorization: Bearer $REGUNOW_API_KEY"Le chiavi dello stesso account accedono ai file disponibili nella sua Libreria. I file mancanti e quelli di altri account restituiscono entrambi 404. Se servi più utenti tramite un account, applica le tue autorizzazioni prima di allegare o eliminare file.
I caricamenti in attesa o non riusciti occupano quota finché la pulizia non termina correttamente. Quelli incompleti da oltre 24 ore possono essere ripuliti. Un file disponibile ha superato la validazione del caricamento; l’estrazione avviene alla domanda, quindi documenti corrotti, cifrati o illeggibili possono ancora fallire nell’analisi.
8. Crediti e limiti
Richieste di chat, caricamenti ed eliminazioni registrano l’utilizzo misurato. Catalogo dei modelli e letture dei metadati non hanno addebiti separati in crediti. Estrazione dei documenti e analisi delle immagini sono addebitate nella richiesta di chat.
Leggi il costo di un’operazione in usage.charged_credits. Un credito equivale a 1.000.000 di microcrediti. I limiti delle chiavi sono separati dai crediti dell’account; entrambi possono bloccare una richiesta. Controlla l’utilizzo e imposta i limiti in Impostazioni → Chiavi API.
| Limite | Quantità consentita |
|---|---|
| Chiavi API | 25 per account |
| Richieste di chat e modifiche ai file simultanee | 10 per chiave |
| Corpo JSON della richiesta di chat | 192 KiB |
| Messaggi per richiesta di chat | 1–20 |
| Testo dei messaggi | 32.000 caratteri per messaggio; 64.000 in totale |
| Allegati per richiesta di chat | 5 file distinti |
| Dimensione del documento | 10 MiB per file |
| Dimensione dell’immagine | 5 MiB per file |
| Spazio della Libreria | 5 GiB condivisi con la Libreria dell’account |
| Chiave di idempotenza | 1–120 caratteri ASCII stampabili, esclusi gli spazi |
| Finestra di ripetizione | 24 ore dopo la contabilizzazione |
I limiti di contesto e visione del modello continuano ad applicarsi anche se ogni messaggio e allegato rispetta i limiti API. I budget delle chiavi si azzerano su periodi mobili giornalieri, settimanali o mensili, dalla creazione della chiave o dal rinnovo del periodo precedente.
Una richiesta avviata con budget disponibile può superare leggermente un piccolo saldo residuo, poiché il costo finale è noto dopo la generazione. Al raggiungimento del limite si fermano nuove richieste di chat e modifiche ai file. Le prenotazioni impediscono alle richieste simultanee di spendere lo stesso budget disponibile.
9. Tentativi sicuri
Invia un Idempotency-Key per ogni richiesta di chat, caricamento, finalizzazione ed eliminazione. È facoltativo, ma fortemente consigliato per evitare lavoro e addebiti duplicati dopo errori di connessione.
Idempotency-Key: a-unique-key-for-this-operation- Genera una chiave univoca per ogni nuova operazione e salvala insieme alla richiesta originale.
- Riprova con la stessa chiave API, chiave di idempotenza e input invariati. Dopo la contabilizzazione, stato e risposta salvati possono essere riprodotti per 24 ore senza nuove chiamate al fornitore né addebiti.
- Una ripetizione include
X-Idempotent-Replayed: true. Riutilizzare la chiave con input diversi o mentre la prima richiesta è in corso restituisce 409. - Gli esiti in cache possono includere errori. La stessa chiave può restituire lo stesso errore invece di rieseguire. Controlla l’esito prima di una nuova operazione.
- Scaduta la finestra di ripetizione, riutilizzare una chiave avvia una nuova richiesta che può comportare un altro addebito.
Usa attese esponenziali per errori temporanei di rete, limiti di frequenza o servizio. Mantieni la chiave di idempotenza mentre risolvi una richiesta dall’esito incerto. Correggi prima input non validi, credenziali scadute o crediti esauriti.
Eliminare un file non cancella una risposta di chat o caricamento in cache durante la sua finestra di ripetizione. Ripetere un caricamento dopo l’eliminazione restituisce la risposta originale senza ricreare il file.
10. Errori
Gli errori usano una struttura JSON stabile. Controlla error.code per gestirli e conserva request_id o l’intestazione X-Request-Id per l’assistenza.
{
"error": {
"type": "request_error",
"code": "invalid_request",
"message": "messages must contain 1 to 20 alternating user/assistant messages, end with a user message, and stay within 64,000 characters."
},
"request_id": "request-uuid"
}| Stato | Codici comuni | Cosa fare |
|---|---|---|
| 400 | invalid_request | Controlla JSON, campi consentiti, messaggi, opzioni del modello e ID dei file. |
| 401 | invalid_api_key | Controlla l’intestazione Bearer. Sostituisci chiavi scadute, disabilitate o eliminate. |
| 402 | account_quota_exceeded, api_key_limit_exceeded | Controlla i crediti dell’account e il limite di crediti della chiave. |
| 403 | pro_required, legal_acceptance_required | Ripristina l’accesso Pro o chiedi al titolare di accettare le politiche vigenti in Regunow. |
| 404 | file_not_found | Usa un file dell’account del titolare della chiave. |
| 409 | idempotency_conflict, request_in_progress | Usa una nuova chiave per input modificati. Se la richiesta è in corso, attendi e riprova l’operazione originale. |
| 413 | request_too_large | Riduci la dimensione del messaggio o file. Usa il caricamento diretto se il limite del corpo del gateway è la causa. |
| 415 | unsupported_media_type | Usa il Content-Type richiesto dall’endpoint e un corpo di richiesta non compresso. |
| 429 | concurrency_limit_exceeded, upstream_rate_limited | Riduci la concorrenza e riprova con attese esponenziali. |
| 502–504 | upstream_unavailable, upstream_timeout, service_unavailable, usage_settlement_failed | Riprova gli errori temporanei con attese crescenti e la stessa chiave di idempotenza. Un errore salvato può essere riprodotto. |
