spicyapiDokumentacja
Konto i rozliczenia
Treść główna

Rozliczenia

Poznaj rozliczenia SpicyAPI w USD: wyceny żądań, rezerwacje środków, ostateczne opłaty, zasady odmów dla modeli, zasilanie konta, limity wydatków i faktury.

Dolary, a nie punkty

Ceny podajemy w dolarach amerykańskich: „$0.008 za obraz”, „$0.042 za sekundę wygenerowanego materiału”. Środki wpłacone z góry, środki promocyjne i przyznany kredyt są wyrażone w dolarach, ale limit kredytowy nie jest saldem gotówkowym.

Celowo nie stosujemy punktów. System punktowy dodaje przelicznik między „wpłać X, otrzymaj Y bonusu” a „ile właściwie wart jest punkt”, przez co trudno obliczyć rzeczywisty koszt jednostkowy. Płacisz cenę, którą widzisz.

Jak działa płatność — w skrócie

  1. Najpierw zasil konto. Nowe konto ma saldo $0 i nie obejmuje bezpłatnego planu. Zadanie wysłane przed zasileniem konta zostanie odrzucone z kodem 40201 i nie spowoduje naliczenia opłaty.
  2. Po przyjęciu zadania rezerwujemy jego szacowany koszt. Jest to rezerwacja środków. Środki nadal należą do Ciebie, ale w tym samym czasie nie mogą pokryć kosztu innego zadania.
  3. Jeżeli zadanie zakończy się powodzeniem, płacisz za rzeczywiste wykorzystanie — nigdy więcej niż zarezerwowano. Niewykorzystana część wraca na saldo.
  4. Zadania zakończone niepowodzeniem lub wygaśnięciem zwykle zwalniają całą rezerwację. Niektóre odmowy dotyczące treści są rozliczane według przyjętej wyceny, ale tylko wtedy, gdy strona modelu wyraźnie podaje taki wyjątek. Ostateczną opłatę sprawdzisz w settled i cost.
  5. Limity wydatków, które ustawiasz dla poszczególnych kluczy API, chronią saldo przed wyczerpaniem przez skrypt działający bez kontroli.

Dalsza część strony szczegółowo wyjaśnia każdy z tych etapów.

Zasilanie konta

Zasil konto w sekcji Rozliczenia w konsoli: kartą, kryptowalutą lub przelewem ręcznym, jeżeli ta opcja jest widoczna. Możesz również włączyć automatyczne zasilanie, aby długie zadania nie zatrzymywały się przy niskim saldzie. Wpłacone środki nie wygasają; środki promocyjne wygasają w terminie wskazanym w sekcji Rozliczenia.

Instrukcję krok po kroku — dostępne metody płatności, czas zaksięgowania środków i działanie automatycznego zasilania — znajdziesz na stronie Konfiguracja konta. Wpłaty zasadniczo nie podlegają zwrotowi w gotówce; zasady zwrotów opisują wyjątki, na przykład podwójne obciążenie.

Trzy etapy

Każde zadanie przechodzi te same trzy etapy rozliczenia. Nie wymagają one od Ciebie żadnego działania; opisujemy je, aby historia salda była zrozumiała.

hold
settlerelease
Kwota jest blokowana przy przyjęciu zadania i rozliczana tylko raz: według faktycznego zużycia albo zwracana w całości.

Rezerwacja

Przy tworzeniu zadania rezerwujemy środki na szacowane wykorzystanie. Kwota dokładnie odpowiada wartości estimatedCost zwróconej przez createTask.

Rezerwacja blokuje źródła finansowania używane przez zadanie; nie jest ostateczną opłatą. Zarezerwowane środki wpłacone z góry, dostępne środki promocyjne lub zatwierdzony kredyt nie mogą w tym samym czasie finansować innego zadania. Rezerwacja jest widoczna jako held w GET /api/v1/chat/credit oraz jako „Zarezerwowane” w konsoli.

Rezerwacja i rekord zadania są zapisywane w jednej transakcji bazy danych. Nie istnieje stan pośredni, w którym zadanie jest zapisane bez rezerwacji lub rezerwacja bez zadania.

Rozliczenie lub zwolnienie środków

  • succeeded → rozliczenie według rzeczywistego wykorzystania, do wysokości przyjętej rezerwacji. Niewykorzystane środki wracają do pierwotnych źródeł finansowania; później nie pobieramy żadnej kwoty ponad tę rezerwację.
  • failed / expired → zwykle cała rezerwacja zostaje zwolniona. Strona modelu może wyraźnie informować, że określone niepowodzenia z kodem content_rejected są rozliczane według przyjętej wyceny. Historyczne rekordy canceled również zwalniają całą rezerwację, jednak obecnie nie można anulować przyjętych zadań.

Po zakończeniu rozliczenia recordInfo zwraca settled: true, a cost jest ostateczne. Dopóki settled ma wartość false, cost może się jeszcze zmienić.

Proces porządkujący

Jeżeli nasz proces zatrzyma się w trakcie obsługi, proces porządkujący znajduje rezerwacje powiązane z zadaniami, które mają już stan końcowy, i kończy rozliczenie lub zwolnienie środków zgodnie z zapisanym wynikiem.

Rozliczenie i zwolnienie środków mają wspólny klucz deduplikacji, dlatego cykl rozliczenia zadania kończy się dokładnie raz — ponowienia nie mogą zaksięgować go drugi raz.

Sprawdzaj rozliczenie, nie tylko stan zadania

Zadania zakończone niepowodzeniem lub wygaśnięciem zwykle zwalniają całą rezerwację. Niektóre odmowy dotyczące treści są rozliczane według przyjętej wyceny, ale tylko wtedy, gdy strona modelu wyraźnie podaje taki wyjątek. Ostateczną opłatę sprawdzisz w settled i cost. Odmowa, za którą naliczono opłatę, nadal ma state: "failed" i errorCode: "content_rejected"; po rozliczeniu settled ma wartość true, a cost jest dodatnie. Inne niepowodzenia i zadania, które wygasły, automatycznie zwalniają całą rezerwację.

Sprawdzanie salda

Najszybciej sprawdzisz je na stronie Rozliczenia w konsoli: pokazuje dostępne saldo, aktualnie zarezerwowaną kwotę i wszystkie zmiany salda. W kodzie wywołaj:

GET /api/v1/chat/credit
curl
curl https://api.spicyapi.ai/api/v1/chat/credit \
  -H "Authorization: Bearer $SPICY_API_KEY"
JavaScript
const res = await fetch('https://api.spicyapi.ai/api/v1/chat/credit', {
  headers: { Authorization: `Bearer ${process.env.SPICY_API_KEY}` },
});
const body = await res.json();
if (body.code !== 200) throw new Error(`${body.code} ${body.msg}`);

const balance = body.data;
console.log(balance.funding ?? balance);
Python
import os, requests

res = requests.get(
    "https://api.spicyapi.ai/api/v1/chat/credit",
    headers={"Authorization": f"Bearer {os.environ['SPICY_API_KEY']}"},
)
body = res.json()
if body["code"] != 200:
    raise RuntimeError(f'{body["code"]} {body["msg"]}')

balance = body["data"]
print(balance.get("funding", balance))
{
  "code": 200,
  "msg": "success",
  "data": {
    "available": "128.42",
    "held": "0.36",
    "total": "128.78"
  }
}
PoleZnaczenie
availableKwota netto w portfelu; może być ujemna po wykorzystaniu zatwierdzonego kredytu i sama nie rozstrzyga, czy żądanie zostanie przyjęte
heldŚrodki zablokowane przez zadania w toku
totalSuma tych dwóch wartości

Jeżeli finansowanie dostępne dla wybranego modelu w danym czasie nie wystarcza na pokrycie wyceny, createTask zwraca 40201. Na przyjęcie żądania mogą również wpływać wygaśnięcie kredytu, wyczerpane limity i niedobór wynikający z odzyskania płatności. Nie zastępuj kontroli serwera sprawdzeniem po stronie klienta, czy available jest dodatnie lub ujemne.

Nie musisz sprawdzać salda przed każdym generowaniem: przyjęcie zadania już uwzględnia dostępne środki i limity wydatków.

W API kwoty są ciągami znaków — bez symbolu dolara

„$0.008” to zapis ceny używany na tej stronie dla czytelników. API zwraca dziesiętny ciąg znaków bez symbolu waluty: estimatedCost, cost i wszystkie trzy pola salda wyglądają jak "0.008" — bez $, bez separatorów, zawsze w USD.

// Keep the exact decimal string for display
const usd = task.cost;

Celowo używamy ciągów znaków zamiast liczb JSON: liczba JSON w większości języków trafia do typu float64, a 0.008 nie ma dokładnej reprezentacji binarnej. Jeżeli kwota ma trafić do ksiąg, odczytaj ją jako liczbę dziesiętną:

from decimal import Decimal
usd = Decimal(task["cost"])   # not float()

Limity wydatków

Limit wydatków określa maksymalną kwotę, którą można wydać. Do zadania może mieć zastosowanie sześć limitów; osiągnięcie któregokolwiek z nich powoduje odrzucenie z kodem 40202, zanim powstanie zadanie lub rezerwacja:

LimitKto go ustawiamsg po osiągnięciu limitu
Łączny limit kluczaTy, na stronie kluczy API. Maksymalna kwota dla całego okresu używania kluczaThis key has reached its total spend cap
Miesięczny limit kluczaTy, na stronie kluczy API. Budżet na dany miesiąc kalendarzowyThis key has reached its monthly budget
Dzienny limit kluczaTy, na stronie kluczy API. Nowe klucze nie mają limitu, dopóki go nie ustawiszThis key has reached its daily spend cap
Dzienny limit zespołuWłaściciele zespołu, administratorzy i osoby zarządzające budżetem, na stronie zespołu. Dotyczy tylko kluczy należących do zespołuWorkspace daily budget has been reached
Miesięczny limit zespołuJak wyżejWorkspace monthly budget has been reached
Dzienny limit platformyMy. To nasze zabezpieczenie; nie możesz go podnieśćPlatform quota for today is exhausted, please try again later

Limity dzienne odnawiają się o 00:00 UTC; miesięczne obowiązują w miesiącu kalendarzowym UTC i odnawiają się pierwszego dnia miesiąca. Łączny limit klucza nigdy się nie odnawia. Po osiągnięciu limitu platformy spróbuj ponownie po 00:00 UTC lub skontaktuj się z pomocą techniczną, jeżeli sytuacja się powtarza.

Nierozliczona rezerwacja wlicza się do każdego limitu — łącznego, miesięcznego i dziennego — do czasu rozliczenia zadania, niezależnie od dnia lub miesiąca: środków jeszcze nie wydano, ale nie można też wydać ich dwa razy. Limity zespołowe opisuje strona Konsola i zespoły.

Puste pole limitu nie wszędzie oznacza to samo

  • Tworzenie lub edycja klucza: pusty limit oznacza brak ograniczenia, podobnie jak 0. Nowe klucze nie mają limitu, dopóki go nie ustawisz. Wyczyszczenie limitu istniejącego klucza usuwa go; aby zachować ograniczenie, pozostaw liczbę w polu.
  • Limity wydatków zespołu: puste pole zachowuje bieżącą wartość; 0 oznacza brak ograniczenia.

Limity służą Twojej ochronie. Pętla, która bez kontroli wydaje dużą kwotę w ciągu kilku godzin, to częsty problem w tej branży. Niemal zawsze występuje na koncie, na którym nie ustawiono limitu.

Rejestr operacji

Strona Rozliczenia w konsoli pokazuje każdą zmianę salda z czytelnymi oznaczeniami, takimi jak Zasilenie, Zarezerwowane, Naliczono i Zwrócono. Po pobraniu listy przez Eksport CSV kolumna kind zawiera jeden z tych stałych kodów:

RodzajZnaczenie
topupWpłacone przez Ciebie środki dodane do salda
bonusDodatkowa kwota z oferty zasilenia, zaksięgowana oddzielnie od wpłaty
trialŚrodki z kampanii próbnej, oddzielne od wpłat i bonusów
holdSzacowana kwota zarezerwowana przy przyjęciu zadania; nie jest opłatą
settleOstateczna opłata za zadanie, w tym odmowę dotyczącą treści rozliczoną zgodnie z zasadami modelu; niewykorzystana część rezerwacji wraca
refundCała rezerwacja zwrócona, ponieważ zadanie nie powiodło się lub przekroczyło czas
adjustRęczna korekta wykonana przez nasz zespół; zawsze zawiera tożsamość operatora i powód
chargebackŚrodki odebrane po sporze dotyczącym płatności
forfeitPozostałe saldo, z którego zrezygnowano przy zamknięciu konta
grant_expireNiewykorzystane środki promocyjne usunięte po wygaśnięciu
grant_revokeNiewykorzystane środki promocyjne wycofane

Rejestr operacji jest wyłącznie uzupełniany. Żaden zapis nie jest później zmieniany — zwolnienie rezerwacji tworzy nowy wpis, zamiast usuwać pierwotny. Dzięki temu każde saldo można ponownie obliczyć od początku, a pytanie „dlaczego kwoty się nie zgadzają?” ma odpowiedź, którą można udowodnić.

Bonus jest księgowany oddzielnie od wpłaty, ponieważ zwrot płatności (środki odesłane na kartę) obejmuje tylko wpłaconą kwotę; bonus nie ma wartości gotówkowej. To inna operacja niż opisane wyżej wpisy refund, które zwracają na saldo rezerwację zadania zakończonego niepowodzeniem.

Zmiany salda przechowujemy przez 10 lat, oddzielnie od treści zadań, aby były dostępne do uzgodnień i rozpatrywania sporów długo po usunięciu promptów oraz wyników. Zobacz Przechowywanie danych.

Faktury i zestawienia wykorzystania

W sekcji Rozliczenia → Faktury w konsoli możesz samodzielnie wystawić dwa rodzaje dokumentów, oba dostępne do pobrania jako PDF:

DokumentCo obejmujeCzy potwierdza płatność?
Faktura za płatnośćJedno już opłacone zasilenie, na kwotę pobraną przy płatnościTak. Ten dokument służy do rozliczenia poniesionego wydatku
Zestawienie wykorzystaniaRzeczywiste wydatki w jednym zamkniętym miesiącuNie. Środki opłacono przy zasileniu konta, więc rozliczenie obu dokumentów oznaczałoby dwukrotne wykazanie tego samego wydatku

Wprowadź swoje dane raz, u góry sekcji Rozliczenia → Faktury. Wymagane są nazwa firmy lub imię i nazwisko, pierwszy wiersz adresu, miasto i kraj; numer podatkowy (VAT, GST itp.) jest opcjonalny. Dane drukujemy dokładnie w podanej postaci — przekazujesz je samodzielnie, a my nie weryfikujemy żadnego z nich, także numeru podatkowego. Możemy wydrukować tylko znaki alfabetu łacińskiego, greckiego i cyrylicy, dlatego japońską lub koreańską nazwę firmy wpisz w jej zarejestrowanej postaci zromanizowanej. Wystawiony dokument zachowuje dane obowiązujące przy jego utworzeniu; późniejsze zmiany dotyczą tylko nowych dokumentów.

  • Każde opłacone zasilenie i każdy zamknięty miesiąc można udokumentować raz. Jeżeli dokument już istnieje, pobierz go zamiast wystawiać kolejny.
  • Aby poprawić błędne dane, wybierz Wystaw ponownie: stary dokument zostanie unieważniony, a nowy numer będzie dotyczył tego samego zasilenia lub miesiąca. Opcji Unieważnij bez wystawiania nowego używaj wyłącznie wtedy, gdy dokument dotyczy niewłaściwego zasilenia lub miesiąca.
  • Wyciągi z konta, widoczne niżej na tej samej stronie, są innymi dokumentami: to niezmienny miesięczny zapis wszystkich zmian salda do własnej księgowości. Nie są dowodem płatności ani dokumentem podatkowym.

Podatek jest wykazany jako zero: jesteśmy dostawcą ze Stanów Zjednoczonych, nie pobieramy ani nie odprowadzamy za Ciebie VAT, GST lub podatku od sprzedaży, a każdy dokument zawiera informację o odwrotnym obciążeniu. Rozliczenie ewentualnego podatku należnego w Twojej lokalizacji pozostaje więc Twoim obowiązkiem. Wystawionej faktury nigdy nie edytujemy — unieważniamy ją i wystawiamy ponownie, zapisując powód i powiązanie z dokumentem zastępczym.

Jednostki rozliczeniowe

Każdy model ma dokładnie jedną jednostkę rozliczeniową.

JednostkaZnaczenieKtóre pole input podaje ilość
per_imageZa wygenerowany obrazPole wskazane przez model; domyślnie 1
per_secondZa sekundę wyniku. Niektóre endpointy zaokrąglają długość w górę do stałego bloku — zobacz Rozliczanie długości w pełnych blokachOdczytaj aktualne quantityField i schemat; standardowym polem czasu jest duration_seconds. Nie zakładaj, że pominięcie czasu wybiera najkrótszy wariant.
per_requestZa wywołanie, niezależnie od parametrów—
per_1k_tokensZa token. Jednostką API jest per_1k_tokens; strona i katalogowe price.perMillionTokens pokazują te same ceny za milion tokenów. Tokeny wejściowe, wejście z pamięci podręcznej, zapis do pamięci podręcznej i wyjście mogą mieć oddzielne ceny—

Nie musisz zgadywać nazwy pola: quantityField w endpoincie katalogu podaje ją dla danego modelu, a pusty ciąg znaków oznacza jedną jednostkę za wywołanie.

Model może mieć różne ceny dla różnych wariantów cenowych. Rozdzielczość, czas, opcje dźwięku i materiały referencyjne mogą wpływać na wycenę zależnie od schematu. pricing[].variant identyfikuje wariant w cenniku; w treści żądania nie ma pola variant. Nie zakładaj, że tę etykietę zawsze można wysłać jako resolution, ani że cenę każdego modelu oblicza się jako cenę początkową × czas. Wyślij kompletne dane wejściowe do jobs/quote, aby uzyskać dokładną wycenę i maksymalną opłatę.

Zawsze odczytuj ilość i cenę z aktualnego katalogu

Nie zapisuj na stałe jednego pola ilości dla całej kategorii modeli. Puste quantityField oznacza jedną jednostkę rozliczeniową za wywołanie; w przeciwnym razie odczytaj szacowaną ilość ze wskazanego pola wejściowego. Warianty modeli, wartości domyślne i sposób rozliczania mogą zmieniać się wraz z katalogiem. Opłata nie przekroczy kwoty zarezerwowanej przy przyjęciu zadania: niewykorzystane środki zostaną zwolnione, a później nie pobierzemy kwoty ponad rezerwację.

Rozliczanie długości w pełnych blokach

Większość modeli per_second rozlicza dokładną długość wygenerowanego materiału. Niektóre stosują stałe bloki: przed wyceną zmierzona długość jest zaokrąglana w górę do następnego pełnego bloku. Dla bloku 8-sekundowego klipy 6- i 8-sekundowe kosztują tyle samo, a klip 9-sekundowy kosztuje dwa bloki. Nie dotyczy to wszystkich modeli rozliczanych za sekundę — tylko endpointów, które deklarują taki sposób rozliczania i wyjaśniają go na swojej stronie modelu.

Te endpointy mają jeszcze jedną wspólną cechę, która wyjaśnia zaokrąglenie widoczne w wycenie: długość ustalają na podstawie filmu dostarczonego przez Ciebie, a nie wybranej wartości duration_seconds. Dlatego długość wyniku jest nieznana, dopóki klip nie zostanie odczytany. Ich quantityField jest puste, a kwota wyceniona przed wysłaniem odpowiada maksymalnemu przypadkowi — najdłuższemu klipowi przyjmowanemu przez endpoint:

{
  "estimatedCost": "0.96",
  "maxCharge": "0.96",
  "quantity": "32",
  "unit": "per_second"
}

Kwoty są przykładowe; quantity oznacza tutaj górną granicę w sekundach, nie wynik pomiaru. Wycena określa zarezerwowaną kwotę; ostateczna opłata wynika z zaokrąglonego czasu i nigdy nie przekracza rezerwacji. Reszta zostaje zwolniona przy rozliczeniu zadania, zgodnie z trzema etapami opisanymi wyżej.

Rezerwacja będzie większa od ostatecznej opłaty

To oczekiwane działanie tych endpointów, nie zawyżona opłata. Między przyjęciem a rozliczeniem zadania saldo pokazuje zarezerwowaną kwotę maksymalną, ponieważ długość wyniku jest nieznana do czasu odczytania klipu. Przy rozliczeniu płacisz za rzeczywistą długość zaokrągloną do bloku, a różnica automatycznie wraca na saldo. Rejestr zapisuje obie operacje, dlatego zawsze możesz porównać hold i settle.

Warto uwzględnić dwie konsekwencje:

  • Planuj budżet według wyceny, nie długości klipu. Do rozliczenia zadania rezerwowana jest kwota maksymalna, która wlicza się do limitów wydatków jak każda rezerwacja.
  • Krótki klip nadal kosztuje pełny blok. Skrócenie z 9 do 8 sekund może obniżyć cenę endpointu z blokiem 8-sekundowym o połowę; skrócenie z 8 do 5 sekund nie zmienia jej wcale.

Dokładne jednostki i ceny znajdziesz na stronie cenowej oraz na stronie danego modelu.

Rabaty i promocje dla klientów

Oferty mogą obejmować wszystkich lub jedno konto, wszystkie modele albo wybrane modele. Oferty bezterminowe działają do wyłączenia; czasowe obowiązują wyłącznie między rzeczywistym początkiem a końcem. Ceny indywidualne są stosowane po zalogowaniu na dane konto lub wycenie z jego kluczem API i nigdy nie są publikowane jako cena innego klienta.

Oferty nie łączą się. Automatycznie obowiązuje najniższa cena, do której masz uprawnienie. Przy standardowej opłacie $10 publiczna promocja 10% i rabat konta 20% dają cenę $8, a nie skumulowaną cenę $7.20. Gdy oferta wygasa lub zostaje wyłączona, nowe wyceny korzystają z najlepszej pozostałej dostępnej oferty, a jeżeli żadna nie obowiązuje — z ceny standardowej.

Oferty na stronie głównej, w katalogu i na stronach modeli pomagają porównać opcje. Rzeczywistą wycenę uzyskasz z jobs/quote, podając swoją tożsamość, model i kompletne dane wejściowe. Odliczanie nie rezerwuje ceny: odśwież wycenę po zmianie oferty, danych wejściowych lub ceny. Przyjęte zadania zachowują ustaloną cenę nawet wtedy, gdy oferta kończy się w trakcie wykonania; ostateczna opłata nie może przekroczyć kwoty zarezerwowanej przy przyjęciu.

Oferty automatycznie obejmują opłaty za wykorzystanie API, a nie kwotę zasilenia konta, i nie zapewniają zwrotu części wpłaty. Przykłady budżetów dziennych lub miesięcznych są wyliczane na podstawie aktualnej ceny; oferta czasowa może skończyć się przed końcem tego okresu, dlatego sprawdź również jej termin zakończenia.

Środki promocyjne i kredyt

GET /api/v1/chat/credit zachowuje available, held i total oraz może zawierać zestawienie źródeł funding. Starsze odpowiedzi mogą pomijać funding; brak danych nie oznacza zera. W SDK użyj client.getBalance(), a w CLI spicyapi balance --json.

  • funding.prepaidAvailableUsd zawiera dostępne środki wpłacone z góry lub starsze środki bez ograniczeń; grantAvailableUsd sumuje aktualnie aktywne przydziały promocyjne. Każdy wpis w grants podaje kwoty przyznane, dostępne, zarezerwowane i wydane, stan, początek, termin wygaśnięcia oraz modelSlugs. Pusta lista modeli oznacza wszystkie modele; w przeciwnym razie przydział pokrywa tylko modele z listy. Lista zawiera do 100 przydziałów, najpierw te z pozostałym lub zarezerwowanym saldem, a następnie w kolejności od najnowszych. grantsHasMore sygnalizuje dodatkowe rekordy. Nie zastępuj sumy konta sumą widocznej listy.
  • funding.credit opisuje zatwierdzony kredyt z płatnością późniejszą. limitUsd to jego maksymalna wysokość, availableUsd — niewykorzystany dostępny kredyt, usedUsd — rozliczona i pozostająca do spłaty kwota główna, heldUsd — część zarezerwowana na przyjęte zadania, a expiresAt — termin wygaśnięcia. Limit kredytowy nie jest wpłatą, przydziałem promocyjnym ani saldem gotówkowym. Wygaśnięcie, wyłączenie lub przekroczenie limitu ogranicza nowe żądania; istniejące zadłużenie nadal wymaga spłaty.
  • Środków promocyjnych nie można wypłacić. Rabaty określają cenę żądania; przydziały promocyjne i kredyt określają sposób jej finansowania. Przydział nie obniża ceny w cenniku modelu. Obowiązują jego zakres modeli i okres ważności, a niewykorzystane kwoty mogą wygasnąć lub zostać wycofane. Zadania zakończone niepowodzeniem i niewykorzystane rezerwacje zwalniają środki do pierwotnego źródła; nie przywraca to wygasłego lub wycofanego przydziału.
  • Dodatnie funding.cashShortfallUsd oznacza niedobór wynikający z odzyskania płatności zewnętrznej. Przydziały promocyjne i kredyt nie mogą go pokryć; nowe wywołania pozostają zablokowane do czasu jego uzupełnienia. Ujemne available może natomiast wynikać z użycia zatwierdzonego kredytu. Nie wnioskuj o odrzuceniu na podstawie znaku tej wartości ani nie dodawaj jej bezpośrednio do limitu kredytowego. Serwer sprawdza źródła finansowania, kwalifikację modelu, okres ważności i limity wydatków.

Kwoty pozostają dokładnymi dziesiętnymi ciągami znaków w USD, a daty mają format RFC3339. Przy wyświetlaniu dat podawaj strefę czasową. Strona rozliczeń w konsoli pokazuje źródła finansowania i przydziały; zmiany obowiązują dopiero po ręcznym zatwierdzeniu przez administratora. Aby zapytać o środki promocyjne lub kredyt, rozpocznij rozmowę w sekcji Pomoc w konsoli lub napisz na support@spicyapi.ai. Publiczne API nie pozwala zwiększać własnego limitu ani przyznawać sobie środków promocyjnych.

Wykorzystanie bieżącego klucza API

Wykres wydatków według dni i modeli dla całego konta lub zespołu znajdziesz w sekcji Rozliczenia → Wykorzystanie w konsoli. Poniższy endpoint API raportuje wyłącznie klucz, który go wywołuje:

curl 'https://api.spicyapi.ai/api/v1/usage?from=2026-09-01&to=2026-09-06' \
  -H "Authorization: Bearer $SPICY_API_KEY"

Daty używają UTC i przedziału [from,to), więc ten przykład obejmuje 1–5 września. Pomiń daty, aby uzyskać ostatnie siedem dni wraz z dzisiejszym; maksymalny zakres wynosi 92 dni. Wyniki dotyczą tylko bieżącego klucza API. Nie ma parametru wyboru innego klucza ani raportu dla całego konta; saldo portfela sprawdzisz przez chat/credit.

data.totalCalls liczy wszystkie zadania; data.totalSpend obejmuje tylko rozliczone opłaty. days i models grupują te same zadania według daty utworzenia i modelu, podając dokładne dziesiętne ciągi znaków w USD. Oczekujące rezerwacje są wyłączone, a późniejsze rozliczenie może zmienić wcześniejsze daty. Ukryta historia zadań nadal jest uwzględniana; dni bez wywołań są pomijane. Nie sumuj obu sposobów grupowania.

W SDK użyj client.getUsage({ from, to }), a w CLI spicyapi usage --from 2026-09-01 --to 2026-09-06. Ten endpoint ma własny, niższy limit częstotliwości — zobacz Limity częstotliwości.

Na tej stronie