[ blog · deep-dive ]7 min read

Perché le API dovrebbero addebitare solo in caso di successo — il caso della fatturazione su HTTP 200

Sarah ChoyPubblicato il 3 maggio 20267 min di lettura
Perché le API dovrebbero addebitare solo in caso di successo — il caso della fatturazione su HTTP 200

La maggior parte delle API addebita ogni chiamata fatturabile. Gli agenti IA ritentano di continuo contro servizi upstream instabili — il che significa che il modello legacy del 'addebita sempre' di fatto tassa la resilienza. Ecco il caso a favore della fatturazione solo su HTTP 200, e cosa cambia nel modo in cui progetti gli agenti.

In breve

  • Gli agenti IA ritentano, giustamente, di fronte a fallimenti transitori (5xx, timeout, rate limit). Sotto la fatturazione 'addebita sempre', ogni retry è un addebito reale — trasformando un upstream con il 99,5% di uptime in una penalità di costo di 5× durante quel brutto 0,5%.
  • 'Addebita solo su HTTP 200' allinea l'incentivo del fornitore a quello del cliente: i fornitori sistemano l'instabilità, i clienti non la pagano.
  • Sblocca anche pattern di progettazione — budget di retry aggressivi, prefetching ottimistico, chiamate ridondanti — che 'addebita sempre' rende proibitivamente costosi.
  • La maggior parte dei fornitori non lo fa perché la loro infrastruttura legacy lega la misurazione alla chiamata upstream, non alla risposta. È una limitazione del sistema di fatturazione mascherata da policy.

Il comportamento che stiamo cercando di incoraggiare

Gli agenti IA sono un nuovo tipo di client di API. Non sono le integrazioni enterprise attente del 2015 che intercettavano un errore e mandavano un'email a un ingegnere reperibile. Sono loop che, quando qualcosa fallisce, dormono un po' e riprovano — a volte cinque o dieci volte — e non mostrano nemmeno il risultato a un essere umano. L'intero senso del loop è che i fallimenti transitori siano invisibili all'utente finale.

È un ottimo pattern. Produce prodotti resilienti. Nasconde agli utenti la realtà caotica della rete pubblica. Il problema è che il modello di fatturazione delle API è stato fissato in un'era in cui ritentare era raro e abbastanza costoso da scoraggiarlo di default. E continua a funzionare così. Ogni retry è una chiamata fatturabile, indipendentemente dal fatto che abbia restituito qualcosa.

In concreto: un agente che colpisce un'API con il 99,5% di uptime e ritenta fino a cinque volte di fronte a fallimenti transitori genererà, durante quel brutto 0,5%, fino a 5× le chiamate — e 5× la fattura. L'agente ha fatto la cosa giusta. Il cliente paga l'instabilità dell'upstream.

L'alternativa più semplice

Addebita solo su HTTP 200. Nello specifico, solo su una risposta riuscita con la forma di risposta documentata. Tutto il resto — 4xx per errori del chiamante, 5xx per errori nostri, timeout, rate limit, risposte parziali-ma-malformate — è gratis.

Sembra un cambiamento da poco. Non lo è. Cambia ciò che è economicamente razionale da entrambe le parti:

  • Il fornitore ora ha un incentivo finanziario diretto a sistemare l'instabilità. Ogni 503 instabile è una vendita persa, non un pasto gratis. Abbiamo scoperto che adottare la fatturazione solo in caso di successo è stata la singola forza più grande nel portare il nostro lavoro sull'affidabilità in cima alla roadmap — non esiste trucco da foglio di calcolo che faccia sembrare accettabile il downtime quando stai rinunciando ai ricavi di quelle chiamate.
  • Il cliente può dimensionare i budget di retry in modo aggressivo. Un loop con 5 retry e backoff esponenziale è una scelta ovvia quando il caso peggiore per un fallimento transitorio è una chiamata pagata (il successo finale) invece di sei (una pagata per ogni tentativo).
  • Il mercato può confrontare le API in base ai dollari-per-chiamata-riuscita invece che ai dollari-per-tentativo. Quella è l'unità giusta. Se due API pubblicano entrambe '$0.001 per chiamata' ma una è al 99,9% di uptime e l'altra al 95%, i costi visibili all'utente differiscono di 5× sotto 'addebita sempre', e esattamente dello 0% sotto 'solo in caso di successo'. Quale dovrebbe preferire un acquirente è ovvio — e il 'solo in caso di successo' lo rende visibile.

Cosa cambia nel modo di costruire gli agenti

1. I budget di retry diventano gratis

Sotto la fatturazione 'addebita sempre', il budget di retry corretto per un handler di fallimenti transitori è all'incirca 1–2 tentativi — oltre quello il costo dei fallimenti ripetuti inizia a contare. Sotto 'solo in caso di successo', il budget è 'finché l'utente può aspettare'. Vediamo regolarmente loop di agente con pattern a 5 retry, backoff esponenziale e jitter che sarebbero sconsiderati sotto la fatturazione legacy.

2. Il prefetching ottimistico diventa economico

Un pattern proibitivamente costoso sotto 'addebita sempre': lanciare una chiamata di ricerca in modo speculativo mentre l'utente sta ancora digitando, nel caso in cui la query prevista sia quella giusta. Se la previsione è sbagliata, butti via il risultato. Sotto 'solo in caso di successo' questo è economico perché le chiamate annullate / inutilizzate restituiscono successo ma tu scarti la risposta — quindi paghi un piccolo sovrapprezzo per prevedibilità e latenza. Sotto 'addebita sempre', ogni previsione sbagliata è una chiamata pagata, il che rende l'euristica troppo costosa per metterla in produzione.

3. Le chiamate ridondanti diventano uno strumento di affidabilità

A volte la strategia di affidabilità più economica è lanciare due richieste a due API diverse, prendere quella che risponde per prima e scartare la più lenta. Sotto 'addebita sempre' questo raddoppia la tua fattura. Sotto 'solo in caso di successo' è gratis per la chiamata scartata (non hai usato la risposta, non l'hai pagata). All'improvviso strategie di hedging che erano astrazioni costose diventano pratiche.

Cosa deve significare 'successo'

Il modello funziona solo se 'successo' è inequivocabile. Lo definiamo in modo rigoroso:

  • HTTP 200 con lo schema di risposta documentato — fatturabile.
  • HTTP 200 con un errore avvolto nel body della risposta — non fatturabile (sarebbe la scappatoia che rompe l'intero modello).
  • HTTP 4xx — non fatturabile. Questo include 401 (auth), 402 (crediti insufficienti), 422 (validazione), 404 (non trovato in alcuni contesti).
  • HTTP 5xx — non fatturabile.
  • HTTP 429 (rate limit) — non fatturabile.
  • Errori di rete / timeout prima del nostro edge — non fatturabili.

Per gli endpoint in batch (es. URL Extract con 25 URL in una sola chiamata), la chiamata nel suo complesso è un HTTP 200 se almeno una URL ha avuto successo, addebitata alla tariffa per URL. Il campo status per URL dice al chiamante quali URL sono fallite. Il lavoro è stato fatto; è fatturabile.

Perché la maggior parte dei fornitori non lo fa

Tre ragioni, in ordine di quanto ciascuna conta:

  • Infrastruttura di fatturazione. Il pattern standard è misurare all'API gateway, prima che la risposta sia nota. Il gateway emette un evento fatturabile su Kafka, il sistema di fatturazione lo aggrega, la fattura viene inviata. Ricablare la misurazione perché scatti dopo che il servizio upstream ha risposto con un codice di status richiede o (a) accoppiare il gateway alla salute del backend (creando nuovi modi di fallimento) oppure (b) scrivere una pipeline di riconciliazione che accrediti retroattivamente le chiamate fallite. Entrambi sono lavoro di ingegneria reale.
  • Abitudine. Il pattern è stato fissato da backend affidabili — Twilio, AWS, Stripe. Funziona bene quando il tuo upstream è al 99,99% di uptime. Le API che incapsulano LLM, fanno scraping del web o chiamano partner di dati lenti sono molto meno affidabili, ma il pattern di fatturazione è stato ereditato dall'era affidabile e non è mai stato aggiornato.
  • Ricavi. 'Addebita sempre' è semplicemente più soldi. La maggior parte dei fornitori non ha dovuto competere su questa dimensione perché la maggior parte dei loro clienti non era traffico di agenti, e gli utenti umani sincroni tollerano i fallimenti occasionali meglio di quanto tollerino leggersi un modello di fatturazione.

La prima è ingegneria reale. La seconda e la terza sono inerzia. Entrambe cederanno man mano che il traffico di agenti diventerà la maggioranza del consumo di API — cosa che, secondo le linee di tendenza, sta accadendo entro 18 mesi per la maggior parte delle API pubbliche.

Cosa cercare come acquirente

Se stai valutando API di dati per un carico di lavoro a base di agenti, tre domande esplicite:

  • 'Addebitate solo su HTTP 200, o su ogni tentativo fatturabile?' — è richiesta una risposta diretta. Non accettare 'di solito' né 'dipende dal piano'.
  • 'Come viene fatturato l'HTTP 207 / successo parziale?' — fa emergere la risposta della scappatoia.
  • 'Qual è il vostro uptime pubblicato, e qual è il meccanismo di rimborso dell'SLA se non lo raggiungete?' — 'solo in caso di successo' è un segnale forte ma non sostituisce un vero SLA. Entrambi dovrebbero essere presenti.

Il cambiamento a cui tutto questo punta

Gli agenti IA cambiano l'economia unitaria di ogni API che toccano. Le API progettate per l'era degli agenti hanno un altro aspetto — forme più semplici, schemi prevedibili, auth a misura di macchina, pricing trasparente — e anche i loro modelli di fatturazione hanno un altro aspetto. 'Solo in caso di successo' è uno dei cambiamenti più semplici. Quello difficile, ancora davanti a noi, è capire come prezzare i workflow di agente multi-step tra fornitori quando nessuna singola parte possiede l'intero percorso.

Per ora, pretendi il 'solo in caso di successo' dai fornitori dove puoi. Costruisci agenti che ne traggano vantaggio. E quando vai a comprare un'API, fai i conti in dollari-per-chiamata-riuscita, non in dollari-per-tentativo.

Domande frequenti

Il 'solo in caso di successo' non incentiva i fornitori a classificare i successi come fallimenti?

In teoria sì, ma la pressione inversa è più forte: gli sviluppatori confrontano le API in base ai dollari-per-chiamata-utile nel mondo reale, ed è esattamente ciò che il 'solo in caso di successo' misura. Un fornitore che riclassificasse di nascosto i successi come fallimenti si troverebbe di fronte a una coda di supporto arrabbiata e a una scia di recensioni pubbliche nel giro di pochi giorni. Il mercato è abbastanza piccolo da autocorreggersi.

E se la mia chiamata ha un successo parziale — per esempio un extract in batch in cui 2 URL su 25 falliscono?

Due modelli ragionevoli. (a) L'intera chiamata è HTTP 200 se almeno una URL ha avuto successo; i fallimenti per singola URL vengono riportati nello status per URL. Il lavoro è stato fatto, quindi è fatturabile. (b) HTTP 207 (multi-status) per il parziale — ogni URL viene fatturata individualmente. Abbiamo scelto (a) perché rende il pricing prevedibile: gli agenti sanno che un HTTP 200 riuscito significa che il caso peggiore è il costo in crediti annunciato. (b) è più 'equo' ma più difficile da preventivare.

Cosa conta come fallimento?

La nostra regola: un HTTP 4xx che è chiaramente colpa del chiamante (body malformato, auth mancante, crediti insufficienti) non viene addebitato. Un HTTP 5xx non viene mai addebitato — è un problema nostro. Gli errori di rete e i timeout dalla nostra parte non vengono mai addebitati. I rate limit (429) non vengono mai addebitati. L'unica cosa che viene addebitata è un HTTP 200 con la forma di risposta annunciata.

Perché la maggior parte dei fornitori addebita ogni chiamata?

Tre ragioni, per lo più storiche. (1) I sistemi di fatturazione legacy misurano all'API gateway, prima che la risposta sia nota. Cablare la fatturazione perché scatti retroattivamente in base allo status della risposta non è banale. (2) Il pattern è stato fissato da Twilio e AWS in un'era di backend affidabili; le API che incapsulano LLM o fanno scraping del web sono molto meno affidabili, quindi l'assunzione smette di reggere. (3) Sono più ricavi. Le prime due sono scuse; la terza è la verità.

Ci sono casi in cui 'addebita sempre' ha senso?

Quando la chiamata consuma davvero un costo fisso a ogni invocazione a prescindere dall'esito — per esempio, un'azione hardware (SMS inviato), una mutazione atomica al confine (aggiornamento DNS), o un servizio il cui backend non riesce a distinguere 'ci abbiamo provato e abbiamo fallito' da 'l'abbiamo fatto e tu non te ne sei accorto'. Per le API di dati in lettura e le API di ricerca il modello non calza.

API usate in questo articolo

Sarah Choy
Scritto da
Sarah Choy
CEO, API Pick

Sarah Choy è la CEO di API Pick. Scrive sulla creazione di API pronte per la produzione per agenti IA e flussi di lavoro con LLM.