MeterFlow

MeterFlow · Guida alla dashboard

Ogni finestra “Nuovo …”, spiegata in parole semplici

La dashboard di MeterFlow ha alcune finestre di dialogo che creano record reali nel database — meter, piani, abbonamenti, crediti, eventi di utilizzo, chiavi API. Questa pagina spiega cosa fa ciascuna, campo per campo, con esempi semplici. Non serve alcuna conoscenza pregressa di metering o fatturazione a consumo.

Inizia qui: il quadro generale

MeterFlow risponde a una sola domanda per il tuo prodotto: “chi ha usato quanto, di cosa — e quanto gli costa?” Tutto ciò che vedi nella dashboard esiste per rispondere a questa domanda.

Tu amministratore clienteLo sviluppatore o l’azienda che usa MeterFlow. Accedi a questa dashboard, definisci cosa misurare e imposti le regole di prezzo.
La tua applicazione l’SDKIl tuo backend, con l’SDK di MeterFlow installato. Invia gli eventi di utilizzo automaticamente man mano che i tuoi clienti usano il prodotto. Le finestre della dashboard per utilizzo/crediti/abbonamenti fanno a mano esattamente ciò che l’SDK fa nel codice.
Il tuo cliente ID clienteL’utente finale del tuo prodotto. Non accede mai a MeterFlow e non ha un account MeterFlow — qui esiste solo come una stringa identificativa scelta da te (es. user-842 o un’email).

Come si incastrano i pezzi

Perché alcuni pulsanti “Crea” sono disattivati?

Ogni finestra disattiva il pulsante di conferma finché tutti i campi obbligatori (contrassegnati con *) non sono compilati — es. “Create plan” resta disattivato finché il piano non ha un Nome. Se un pulsante sembra bloccato, controlla se c’è un campo obbligatorio vuoto più in alto.

Nuova organizzazione contenitore

Il contenitore più esterno — di solito la tua azienda. Tutto il resto (progetti, meter, piani…) vive dentro un’organizzazione. Ne hai ricevuta una automaticamente al momento della registrazione.

📍 Dashboard → il pulsante “New organization” (proposto anche al primo accesso, quando non ne hai ancora una)

  • Name *

    Il nome della tua azienda o del tuo team. È solo un’etichetta — puoi cambiarla in seguito.

  • Billing email

    Dove arriverebbero fatture e comunicazioni di fatturazione per il tuo account MeterFlow. Facoltativa; il formato viene validato, ma non viene inviato nulla per verificarla.

EsempioAcme Robotics crea l’organizzazione “Acme Robotics” con email di fatturazione finance@acme.dev. I suoi due prodotti diventeranno due progetti al suo interno.

Nuovo progetto contenitore

Un progetto = un prodotto o ambiente da misurare. Ogni meter, piano, chiave API, saldo cliente ed evento di utilizzo appartiene a un solo progetto — i progetti non vedono mai i dati l’uno dell’altro.

📍 Dashboard → il pulsante “New project” nell’intestazione della tabella Projects

  • Organization *

    A quale organizzazione appartiene il progetto. Pre-selezionata se ne hai già una attiva.

  • Name *

    Il nome del prodotto, es. “PixelForge AI”. Compare in tutta la dashboard e nel selettore di progetto.

  • Description

    Testo libero, per tuo riferimento.

EsempioAcme ha uno strumento per immagini e un chatbot. Crea due progetti — “PixelForge AI” e “ChatDesk” — così ogni prodotto ha i propri meter, piani e saldi clienti. Lo stesso ID cliente in due progetti viene trattato come due clienti diversi e non collegati.

Genera chiave API accesso

La credenziale che la tua applicazione usa per parlare con MeterFlow. Il tuo backend la passa all’SDK; ogni evento di utilizzo, operazione sui crediti e chiamata sugli abbonamenti viene autenticata — e limitata a un solo progetto — da questa chiave.

📍 Apri un progetto → API Keys → il pulsante nell’intestazione della tabella

  • Key name *

    Un’etichetta per ricordarti dove viene usata la chiave — “Backend di produzione”, “Staging”, “Test CI”. Nessun effetto tecnico.

  • Environment

    Le chiavi Live iniziano con mf_live_, quelle Test con mf_test_ — e accedono a due set di dati completamente separati nello stesso progetto. Abbonamenti, crediti e utilizzo creati con una chiave Test sono invisibili alle chiavi Live (e viceversa), mentre meter e piani sono condivisi: i test girano sempre sulla tua configurazione di fatturazione reale. Usa le chiavi Test per sviluppo, staging e CI; le Live solo per il traffico reale di produzione.

Importante — mostrata una volta solaLa chiave completa viene mostrata una sola volta, subito dopo la creazione. MeterFlow ne conserva solo un’impronta crittografica (un hash SHA-256) — la chiave vera non potrà mai più essere mostrata, nemmeno da noi. Copiala subito nel tuo gestore di segreti. Se la perdi, revocala e generane una nuova.
EsempioCrei “Production backend” / Live, ottieni mf_live_a1b2… una sola volta e la metti nelle variabili d’ambiente del tuo server: new MeterFlow({ apiKey: process.env.METERFLOW_KEY }). L’elenco nella dashboard mostrerà per sempre solo il prefisso e le ultime 4 cifre.

Nuovo meter concetto chiave

Un meter è la definizione di un contatore con un nome: dichiara una cosa del tuo prodotto che vale la pena misurare, e come gli eventi grezzi vanno trasformati in un numero. Immaginalo come creare una nuova colonna in un report di utilizzo, prima ancora che esistano i dati.

📍 Apri un progetto → Meters → il pulsante nell’intestazione della tabella

  • Name *

    L’etichetta leggibile mostrata nella dashboard — “Immagini generate”, “Secondi di rendering video”. Serve solo agli occhi umani.

  • Event name *

    La chiave “per le macchine” — e sì, viene salvata nel database e confrontata alla lettera. Quando la tua applicazione segnala un utilizzo, invia un nome evento; MeterFlow cerca nel progetto il meter attivo il cui event_name corrisponde esattamente, maiuscole/minuscole comprese. Se non esiste, l’evento viene rifiutato con un errore 404 (“No active meter found for event …”) e non viene registrato nulla. Ogni nome evento è unico all’interno di un progetto. Convenzione: minuscolo con punti, es. image.generated.

  • Aggregation type

    Come tanti eventi singoli vengono combinati in un unico numero nei riepiloghi di utilizzo. Vedi la tabella qui sotto — è il cuore del meter.

  • Aggregation field

    Obbligatorio per ogni tipo tranne Count. Indica quale campo numerico dell’evento contiene la quantità da aggregare — risponde alla domanda “somma di cosa?”. In pratica la tua app invia il numero nel campo value dell’evento, ed è quello che viene aggregato; l’aggregation field documenta cosa significa quel valore (es. seconds, tokens, megabytes), così chi legge il meter conosce l’unità di misura. Per Count è irrilevante — per contare basta che l’evento esista.

  • Description

    Testo libero per il tuo team.

I tipi di aggregazione, con un esempio

Supponiamo che il cliente user-842 generi 4 eventi questo mese con valori 3, 10, 2, 10. Per ogni meter viene riportato un solo numero — quale, dipende dal tipo di aggregazione:

TipoA quale domanda rispondeRisultato per 3, 10, 2, 10Uso tipico
CountQuante volte è successo? (valori ignorati)4Immagini generate, chiamate API, esportazioni
SumQuanto in totale?25Secondi di rendering, token consumati, GB trasferiti
MaxQual è stato il valore più alto?10Picco di job simultanei, upload più grande
MinQual è stato il valore più basso?2Raramente per fatturare — più che altro diagnostica
Unique countQuanti valori distinti sono comparsi?3  (3, 10, 2)Giorni attivi distinti, documenti distinti toccati
Esempio — un meter completoName “Video render seconds” · Event name video.rendered · Aggregazione Sum · Aggregation field seconds.
La tua app finisce il rendering di una clip di 42 secondi per user-842 e segnala l’evento video.rendered con valore 42. Fallo qualche volta e la pagina di utilizzo del cliente mostrerà una riga: Video render seconds — 3 eventi — 117.
Il nome evento deve corrispondere a quello che invia la mia app? E se c’è un refuso?

Sì — alla lettera, maiuscole comprese. Il nome evento del meter è salvato nel database e funziona come l’etichetta di indirizzo per gli eventi in arrivo. Se la tua app invia video.render ma il meter dice video.rendered, l’API risponde 404 “No active meter found for event 'video.render' in this project” e l’evento non viene salvato. È voluto: un refuso silenzioso farebbe perdere per sempre utilizzo non fatturato. Prima crea il meter, poi inizia a inviare eventi con lo stesso nome.

Posso cambiare il tipo di aggregazione in seguito?

No — dopo la creazione si possono modificare solo nome, descrizione e stato attivo. L’aggregazione definisce cosa significa lo storico già salvato, quindi cambiarla a posteriori riscriverebbe il passato. Se ti serve un calcolo diverso, crea un nuovo meter con un nuovo nome evento.

Perché “Aggregation field” è facoltativo nel modulo, se è indicato come obbligatorio?

Il modulo lo lascia compilabile a piacere perché è obbligatorio solo per i tipi diversi da Count — è il server a far rispettare la regola. Se scegli Sum/Max/Min/Unique count e lo lasci vuoto, la creazione viene rifiutata con un chiaro errore di validazione; con Count puoi ignorare del tutto il campo.

Nuovo piano concetto chiave

Un piano è una fascia di prezzo — “Free”, “Pro a 29 $/mese”… Abbina un prezzo ricorrente a un insieme di limiti sui meter che dicono quanto di ogni funzione misurata è incluso e cosa succede oltre. I clienti vengono collegati a un piano tramite un abbonamento.

📍 Apri un progetto → Plans → il pulsante nell’intestazione della tabella

  • Name *

    Il nome della fascia — “Free”, “Pro”, “Enterprise”. Obbligatorio; il pulsante di creazione resta disattivato finché non è compilato.

  • Description

    Testo libero, es. lo slogan della fascia per il marketing.

  • Price / Currency / Billing period

    Il canone ricorrente dell’abbonamento: Price è l’importo (0 va benissimo per una fascia gratuita), Currency un codice come USD, e Billing period la cadenza — mensile, annuale, settimanale o una tantum. Fissi dopo la creazione — modificando il piano in seguito non si possono cambiare (crea piuttosto un nuovo piano, così le condizioni degli abbonati esistenti non cambiano di nascosto).

  • Trial days

    Giorni gratuiti all’inizio di ogni nuovo abbonamento. Con 14, un nuovo abbonato passa 2 settimane in stato “trialing” prima che inizi il periodo a pagamento. 0 = nessuna prova.

  • Public

    Se il piano è visibile alla tua applicazione tramite l’elenco piani dell’SDK (es. per mostrare la tua pagina prezzi). Non spuntato = interno/nascosto — utile per accordi enterprise su misura o piani ancora in bozza.

Limiti sui meter — la sezione “+ Add limit”

Ogni riga di limite collega questo piano a un meter e risponde: quanto di quella cosa è incluso, e cosa succede oltre?

  • Meter *

    A quale grandezza misurata si applica il limite. Il menu elenca i meter che hai creato in questo progetto — niente di più, niente di meno. Non è un catalogo fisso: per ogni nuova funzionalità del prodotto basta creare prima un nuovo meter, e compare qui immediatamente.

  • Included units

    La quantità compresa nel prezzo del piano, per periodo di fatturazione. “Pro include 500 immagini al mese” → 500.

  • Overage rate

    Il prezzo in crediti per unità quando il cliente supera le unità incluse. 0.5 significa che ogni unità extra costa mezzo credito dal saldo del cliente. Ha senso solo con il tipo di limite Metered.

  • Limit type

    Hard (blocca) — l’utilizzo oltre le unità incluse va rifiutato; il cliente trova un muro. Soft (avvisa) — l’utilizzo continua, ma vieni avvisato così puoi spingere il cliente verso un upgrade. Metered (addebita) — l’utilizzo continua e ogni unità extra viene addebitata automaticamente dal saldo crediti del cliente alla tariffa di eccedenza. Metered è l’opzione “pay-as-you-go” ed è l’unica che muove denaro (crediti) da sola.

Esempio — un piano Pro realisticoPro · 29 $ USD · Mensile · 14 giorni di prova · Public ✓
Limite 1: meter Immagini generate, incluse 500, tipo Hard → dopo 500 immagini, la generazione si blocca fino al mese successivo o a un upgrade.
Limite 2: meter Secondi di rendering video, inclusi 1 000, eccedenza 0,02, tipo Metered → oltre i 1 000 secondi, ogni secondo extra costa in silenzio 0,02 crediti dal portafoglio del cliente.
Perché “+ Add limit” è disattivato?

Perché il progetto non ha ancora meter — un limite è sempre un tetto su un meter, quindi con zero meter non c’è nulla a cui agganciarlo. La finestra mostra il suggerimento “Create meters first to attach limits to this plan.” Vai su Meters → New meter, creane almeno uno, poi riapri questa finestra.

Perché il menu Meter mostra solo poche opzioni? E se il mio prodotto ha qualcosa di nuovo?

Il menu è semplicemente l’elenco dei tuoi meter nel progetto attualmente selezionato. Nei dati demo sono “Upscales processed”, “Video render seconds” e “Images generated” — ma quella lista è tua e può crescere. Non limita ciò che i clienti possono fare: i clienti non scelgono mai i meter; sei tu a definirli per qualunque cosa faccia il tuo prodotto. Nuova funzionalità domani? Crea un meter apposta e comparirà qui.

Perché non posso modificare prezzo o limiti di un piano esistente?

È voluto: gli abbonati esistenti hanno sottoscritto quelle condizioni, quindi prezzo, valuta, periodo di fatturazione e limiti sui meter vengono congelati alla creazione. Modificando un piano puoi cambiare solo nome, descrizione, giorni di prova, visibilità e stato attivo. Per cambiare i prezzi, crea un nuovo piano (es. “Pro 2026”) e indirizza lì i nuovi clienti.

Nuovo abbonamento collega cliente ⇄ piano

Un abbonamento collega un tuo cliente a un piano. Da quel momento il suo utilizzo viene valutato rispetto ai limiti sui meter di quel piano. In produzione di solito è il tuo backend a crearlo via SDK nell’istante in cui qualcuno sceglie una fascia al checkout — la finestra fa la stessa cosa a mano.

📍 Apri un progetto → Subscriptions → il pulsante nell’intestazione della tabella

  • Customer ID *

    Il tuo identificativo per il cliente finale — una stringa qualsiasi scelta da te: un ID utente del tuo database (user-842), un’email, uno slug del tenant. MeterFlow non lo verifica contro nulla; ciò che invii è ciò a cui appartiene l’abbonamento. Usa lo stesso ID ovunque (abbonamenti, crediti, utilizzo), altrimenti i pezzi non si collegano.

  • Plan *

    Su quale fascia di prezzo si trova — il menu elenca i piani di questo progetto. Se il piano ha giorni di prova, l’abbonamento parte in stato “trialing”; altrimenti “active”.

EsempioIl cliente user-842 clicca “Passa a Pro” nella tua app → il tuo backend chiama subscriptions.create({ customer_external_id: 'user-842', plan_id: … }). Da questo momento ogni evento di utilizzo di user-842 viene confrontato con i limiti del piano Pro.
E se un cliente non ha un abbonamento — i suoi eventi vanno persi?

No. Gli eventi vengono sempre salvati e compaiono sempre nei riepiloghi di utilizzo. Ma senza un abbonamento attivo non ci sono limiti di piano da applicare, quindi nulla viene bloccato e nulla viene addebitato — l’utilizzo viene semplicemente registrato. La logica di fatturazione si accende nel momento in cui esiste un abbonamento.

Accredita / Detrai crediti il portafoglio

I crediti sono un saldo prepagato per ciascun cliente (per progetto) — pensa a un portafoglio o a una carta ricaricabile. Sei tu a decidere quanto vale un credito nel tuo listino. L’eccedenza “metered” attinge da questo portafoglio automaticamente; le due finestre muovono i crediti a mano.

📍 Apri un progetto → Credits → cerca un cliente → “Grant” / “Deduct”

  • Amount *

    Quanti crediti aggiungere (Grant) o togliere (Deduct). Deve essere maggiore di zero — la direzione la decide il pulsante che ha aperto la finestra, non il segno meno.

  • Description

    Una nota facoltativa salvata sulla riga del registro — “Bonus di benvenuto”, “Rimborso per il disservizio”, “Cortesia del supporto”. Il te stesso del futuro ringrazierà.

EsempioIl nuovo iscritto user-842 riceve un accredito di 100 (“Bonus di benvenuto”). Poi renderizza 2 500 secondi di video su un piano con 1 000 inclusi ed eccedenza metered di 0,02 → 1 500 × 0,02 = 30 crediti detratti automaticamente. Saldo: 70.
Da sapere — il registro non mente maiI saldi non vengono mai modificati direttamente. Ogni accredito, detrazione e addebito automatico da utilizzo è una nuova riga permanente in un registro “solo aggiunta”, che annota il saldo prima e dopo — una traccia di controllo completa, come un estratto conto. Hai fatto un errore? Non cancelli la riga; ne aggiungi una di compensazione. E una detrazione più grande del saldo viene rifiutata subito (l’API restituisce un errore “402 saldo insufficiente”) — un portafoglio non può andare in negativo.

Registra evento di utilizzo concetto chiave

Un evento di utilizzo = “questo cliente ha appena fatto questa cosa, in questa quantità.” In produzione è la tua applicazione a inviarli via SDK automaticamente, migliaia di volte al giorno; la finestra esiste per inserirne uno a mano, per test e demo.

📍 Apri un progetto → Usage → cerca un cliente → “Record event”

  • Event name *

    Deve corrispondere esattamente al nome evento di un meter esistente e attivo in questo progetto (maiuscole/minuscole comprese). È grazie a questa corrispondenza che MeterFlow sa quale contatore alimenta l’evento. Nessun meter corrispondente → l’API rifiuta l’evento con un 404 e non viene salvato nulla. Controlla la pagina Meters per la grafia esatta.

  • Customer ID *

    Quale dei tuoi clienti l’ha fatto — la stessa stringa identificativa libera usata per abbonamenti e crediti. La coerenza è tutto: user-842 e USER-842 sono due clienti diversi.

  • Value

    La quantità, di default 1. Il suo significato dipende dall’aggregazione del meter: per un meter Count il valore viene ignorato (ogni evento conta come una occorrenza); per Sum è la quantità da sommare (42 secondi, 1 300 token); per Max/Min è la misura da confrontare; per Unique count è la cosa di cui si contano i valori distinti.

Cosa succede dopo aver premuto “Record” — il viaggio completo1. Il nome evento viene abbinato a un meter — es. video.rendered → “Video render seconds”. 2. L’evento viene salvato in modo permanente (grezzo — l’aggregazione avviene dopo, al momento della lettura). 3. In background, MeterFlow controlla se il cliente ha un abbonamento attivo e se quel piano ha un limite su questo meter. 4. Se il limite è Metered con una tariffa di eccedenza, l’addebito (valore × tariffa) viene detratto dal saldo crediti del cliente e viene scritta una riga nel registro. 5. Il riepilogo di utilizzo che vedi in questa pagina viene ricalcolato dagli eventi grezzi usando il tipo di aggregazione del meter.
Ho registrato un evento e ho ricevuto un errore — perché?

Quasi sempre è il nome evento: non corrisponde esattamente a nessun meter attivo in questo progetto. L’errore lo dice testualmente — “No active meter found for event '…' in this project.” Copia il nome evento dalla pagina Meters invece di riscriverlo. Ricorda anche che i meter sono per progetto: un meter di un altro progetto non conta.

Se la mia app ritenta una richiesta, l’evento viene conteggiato due volte?

No, se usi l’SDK correttamente: ogni scrittura accetta una chiave di idempotenza — un’etichetta univoca per “questa specifica azione”. Se la stessa chiave arriva due volte (un nuovo tentativo dopo un intoppo di rete), MeterFlow la riconosce e restituisce il risultato originale invece di salvare un duplicato. La finestra manuale non la invia, quindi premere Record due volte a mano crea davvero due eventi.

Invita membro accesso del team

Aggiunge un collega alla tua organizzazione, così può vedere (o gestire) i suoi progetti in questa dashboard. La persona deve già avere un account MeterFlow — prima la registrazione, poi l’invito.

📍 Dashboard → tabella Organizations → azione di riga “Invite member”

  • Email *

    L’email con cui è registrato il suo account MeterFlow.

  • Role

    Admin — gestione completa: progetti, meter, piani, chiavi, membri. Member — operatività quotidiana. Viewer — sola lettura. Nota che manca di proposito l’opzione “owner”: la proprietà non si può assegnare tramite invito.

EsempioInviti dana@acme.dev come Viewer, così il team finance può osservare utilizzo e saldi senza poter cambiare i prezzi.