Vai al contenuto principale
L’API REST di Flowella vi permette di inviare messaggi WhatsApp, gestire contatti e opt-out, lavorare con template e Flows e leggere le analisi dal vostro codice. Questa pagina illustra ciò che dovete sapere prima di chiamare un endpoint. La sezione Endpoints di questo riferimento API documenta le singole richieste. Per l’elenco completo e aggiornato, usate il documento OpenAPI attivo o la documentazione API interattiva nell’app.

URL di base

Ogni endpoint si trova sotto questa base, ad esempio https://api.flowella.io/v1/messages. Usatela anche dove l’app mostra un indirizzo che termina con /api/v1, come API base URL nel Developer hub.
Le richieste all’host dell’app, https://app.flowella.io/api/v1/..., vengono reindirizzate in modo permanente (308) a https://api.flowella.io/v1/.... Molti client HTTP eliminano l’intestazione Authorization quando seguono un reindirizzamento verso un altro host, quindi la richiesta reindirizzata può non riuscire con 401. Chiamate direttamente https://api.flowella.io/v1.

Autenticazione

Inviate un bearer token nell’intestazione Authorization di ogni richiesta:
Flowella accetta due tipi di token. Entrambi agiscono su una sola organizzazione. Usate una chiave API per i vostri script e le vostre integrazioni. Usate un’app OAuth quando altre organizzazioni Flowella installano la vostra integrazione.
Trattate chiavi e token come password. Non inseriteli mai nel controllo del codice sorgente e non incollateli in chat o documenti condivisi. Revocate una chiave che non vi serve più in Chiavi API.

Verificare le credenziali

Chiamate l’endpoint ping per confermare che una chiave o un token funzionino:
Una risposta 200 OK significa che siete autenticati. organizationId è l’ID numerico della vostra organizzazione:
Una risposta 401 ha il codice UNAUTHORIZED e uno di questi messaggi: Missing bearer token, Invalid or expired API key, Invalid or expired access token o Unsupported bearer token.

Scope

Ogni endpoint richiede uno scope. Le chiavi API create nell’app hanno tutti gli scope. I token di accesso OAuth hanno solo gli scope concessi al momento dell’autorizzazione. GET /v1/ping e GET /v1/rate-limits non richiedono alcuno scope. GET /v1/capabilities (scope account:read) elenca gli scope del vostro token. Una richiesta priva dello scope necessario restituisce 403 con il codice INSUFFICIENT_SCOPE. details.required elenca gli scope mancanti:

Errori

Gli errori usano la stessa struttura. requestId identifica la richiesta quando contattate il supporto e details contiene informazioni aggiuntive, come problemi di validazione, quando presenti:
Il valore error.code è stabile, quindi il vostro codice può farvi affidamento. Il testo error.message è destinato alle persone e può cambiare.

Limiti di frequenza

Ogni chiave API e ogni token di accesso OAuth ha un proprio limite di richieste al minuto. Flowella conteggia le richieste in finestre fisse di un minuto che iniziano allo scoccare del minuto (UTC). Le risposte alle richieste che superano i controlli di autenticazione e di scope includono queste intestazioni: Quando superate il limite, Flowella restituisce 429 con il codice RATE_LIMITED e un’intestazione Retry-After con il numero di secondi da attendere. GET /v1/rate-limits restituisce i vostri valori limit, remaining e reset in formato JSON. Per invii di grandi dimensioni, usate POST /v1/templates/send, che accetta fino a 50.000 destinatari in un’unica richiesta. La richiesta accetta anche un campo facoltativo throttlePerHour, un numero intero da 1 a 100.000, ma al momento non regola il ritmo degli invii, quindi non fatevi affidamento. Per distribuire un invio di grandi dimensioni nel tempo, suddividete l’elenco dei destinatari in lotti più piccoli e inviate ciascun lotto separatamente.

ID delle richieste

Le risposte includono un’intestazione X-Request-Id e i corpi degli errori la ripetono come error.requestId. POST /v1/templates/send fa eccezione: vedere Invii di template in blocco. Per usare un vostro ID, inviate un’intestazione X-Request-Id di massimo 128 caratteri e Flowella la riutilizza. Comunicate l’ID della richiesta quando contattate il supporto. Per cercare autonomamente una richiesta, chiamate GET /v1/requests/{requestId} (scope account:read): restituisce la richiesta registrata con gli eventi, i job e le consegne webhook collegati. Il Developer hub elenca le richieste recenti e i relativi ID.

Idempotenza

Le chiavi di idempotenza vi permettono di ripetere una richiesta di scrittura dopo un timeout o un errore di rete senza eseguire il lavoro due volte. POST /v1/templates/send segue regole proprie, descritte più avanti.

La maggior parte delle richieste di scrittura

Le richieste POST, PATCH, PUT e DELETE accettano un’intestazione facoltativa Idempotency-Key:
  • La chiave deve contenere da 8 a 255 caratteri. Altre lunghezze restituiscono 400.
  • Flowella ricorda ogni chiave per la vostra organizzazione per 24 ore.
  • Una ripetizione con la stessa chiave, lo stesso metodo, lo stesso percorso e lo stesso corpo restituisce la risposta memorizzata senza eseguire di nuovo la richiesta.
  • Una ripetizione con la stessa chiave ma con metodo, percorso o corpo diversi restituisce 409 IDEMPOTENCY_KEY_CONFLICT.
  • Una ripetizione inviata mentre la prima richiesta è ancora in esecuzione restituisce 409 IDEMPOTENCY_KEY_IN_FLIGHT. Attendete e riprovate.
  • Le risposte riportano la chiave in un’intestazione Idempotency-Key.
Le richieste senza l’intestazione vengono eseguite normalmente, senza protezione contro i duplicati.

Invii di template in blocco

Gli invii di template in blocco sono asincroni. POST /v1/templates/send convalida la richiesta, la mette in coda in modo persistente e restituisce subito 202 Accepted:
Flowella consegna il lotto in background e ripete automaticamente gli errori temporanei di WhatsApp. I destinatari vengono elaborati singolarmente, quindi un numero non valido non blocca il resto del lotto. Seguite l’avanzamento delle consegne nella scheda Statistics del template nell’app. Passate un’intestazione Idempotency-Key che identifichi ciascun lotto:
Questo endpoint gestisce le chiavi in modo diverso dalle altre richieste di scrittura:
  • La chiave può contenere fino a 200 caratteri. Una chiave più lunga restituisce 400.
  • Una ripetizione con la stessa chiave entro 7 giorni restituisce l’id originale e non invia nulla, anche se il corpo è cambiato.
  • Senza l’intestazione, Flowella usa come chiave un hash del corpo della richiesta. Se inviate di nuovo un corpo identico byte per byte entro 7 giorni, ricevete l’id originale e non viene inviato nulla. Usate una nuova chiave per ogni lotto che intendete inviare.
Anche altri comportamenti di questo endpoint sono diversi:
  • Chiamatelo con una chiave API. I token di accesso OAuth vengono rifiutati con 401.
  • Le sue risposte non includono le intestazioni X-Request-Id, API-Version o X-RateLimit-*. Le sue richieste contano comunque ai fini del limite di frequenza della chiave.

Versioni

Potete fissare la versione dell’API con l’intestazione API-Version:
2026-08-11 è l’unica versione supportata ed è quella predefinita quando omettete l’intestazione. Qualsiasi altro valore, o un valore che non è una data YYYY-MM-DD, restituisce 400 con il messaggio Unsupported API-Version. Le risposte riportano la versione nelle intestazioni API-Version e X-Flowella-Api-Version.

Sandbox

La sandbox vi permette di testare un’integrazione senza inviare nulla a WhatsApp. Funziona sulla vostra organizzazione reale: non esiste un account di test separato. Potete usarla in due modi:
  • Una chiave sandbox, che riguarda solo le richieste effettuate con quella chiave. Vedere Chiavi sandbox.
  • L’API sandbox a livello di organizzazione nel Developer hub, che un Owner o un Admin può attivare. Vedere API sandbox.
Quando la sandbox è attiva, POST /v1/messages memorizza il messaggio e restituisce "sandbox": true senza contattare Meta, e l’invio di un template per approvazione restituisce una decisione simulata immediata. Gli strumenti di test della sandbox in /v1/test/ e /v1/sandbox richiedono lo scope sandbox:manage.

Paginazione

Gli endpoint di elenco, come /v1/conversations, /v1/contacts e /v1/templates, usano la paginazione a cursore:
  • Passate limit (da 1 a 100, predefinito 25) e un cursor facoltativo.
  • La risposta contiene items e, quando ci sono altri risultati, un nextCursor.
  • Passate nextCursor come parametro cursor per recuperare la pagina successiva.
  • Quando nextCursor è assente o null, avete raggiunto la fine.

Data e ora

Tutti i timestamp sono stringhe ISO 8601 in UTC, ad esempio 2025-01-15T14:30:00.000Z. Dove l’API accetta date, funzionano sia i valori con la sola data (2025-01-15) sia i valori ISO 8601 completi.

Numeri di telefono

Passate i numeri di telefono in formato E.164 (+15551234567) quando possibile. Flowella normalizza le varianti più comuni, ma E.164 è il formato più sicuro.

Canali

Molti endpoint accettano un whatsappChannelId. Se la vostra organizzazione ha un solo canale e lo omettete, Flowella usa il canale predefinito. Se avete più canali, passate l’ID in modo esplicito per non inviare dal numero sbagliato. Per lo schema completo degli URL e il cambio di canale, vedere Multicanale.

Specifica OpenAPI

La specifica attiva e leggibile dalle macchine è pubblica:
Importatela in Postman, Insomnia o in un generatore di codice. Descrive sia l’autenticazione con chiave API sia quella OAuth.

Risorse per sviluppatori

L’app offre altro materiale per sviluppatori. Queste pagine sono pubbliche, quindi potete aprirle senza accedere: Il Developer hub in Settings riunisce questi link insieme alle vostre richieste API recenti e all’interruttore dell’API sandbox.
Abbinate questa pagina al riferimento sui webhook per reagire agli eventi invece di interrogare periodicamente le modifiche.
Ultima modifica il 24 ottobre 2026