과금
USD 종량제의 견적, 선점·최종 과금, 모델별 거절 조건, 충전, 지출 한도와 청구서를 설명합니다.
크레딧이 아닌 실제 금액
가격은 이미지당 $0.008, 출력 1초당 $0.042처럼 USD입니다. 선불 잔액, 프로모션 지원금과 신용 한도도 달러로 표시하지만 신용 한도는 현금 잔액이 아닙니다.
크레딧 단위를 쓰지 않는 것은 의도된 선택입니다. 크레딧은 ‘X 충전·Y 보너스’와 실제 가치 사이에 환산을 추가하여 단위 비용 계산을 어렵게 합니다. 표시 가격이 결제 가격입니다.
결제 흐름
- 먼저 충전하세요. 새 계정은 $0이며 무료 요금제가 없습니다. 충전 전 작업은
40201로 거절되고 비용은 없습니다. - 승인 시 예상 가격을 선점합니다. 여전히 이용자의 돈이지만 다른 작업에 동시에 쓸 수 없습니다.
- 성공하면 실제 사용량을 결제하며 선점액을 넘지 않습니다. 나머지는 잔액으로 돌아갑니다.
- 실패·만료는 보통 전액 해제합니다. 모델 페이지에 명시한 일부 콘텐츠 거절만 승인 견적 과금입니다.
settled,cost를 확인하세요. - 키별 지출 한도로 통제되지 않는 스크립트의 잔액 소진을 막습니다.
각 단계를 자세히 설명합니다.
충전
콘솔 과금에서 카드, 암호화폐 또는 표시되는 경우 수동 송금으로 충전하세요. 잔액 부족으로 긴 작업이 멈추지 않도록 자동 충전도 설정할 수 있습니다. 유료 잔액은 만료되지 않으며 프로모션 잔액은 과금에 표시한 날짜에 만료됩니다.
결제 방법, 반영 시점과 자동 충전은 계정 설정을 참고하세요. 충전은 일반적으로 현금 환불되지 않습니다. 중복 결제 등 예외는 환불 정책에 있습니다.
세 단계
모든 작업은 같은 세 과금 단계를 거칩니다. 별도 동작은 필요 없으며 잔액 내역을 정확히 읽기 위한 설명입니다.
holdsettlerelease선점
생성 시 예상 사용량에 해당하는 금액을 선점합니다. createTask의 estimatedCost와 정확히 같습니다.
선점은 작업의 자금원을 예약하며 최종 과금이 아닙니다. 예약된 선불 잔액, 사용 가능한 지원금과 승인 신용은 다른 작업에 동시에 쓸 수 없습니다. GET /api/v1/chat/credit의 held와 콘솔의 ‘선점 중’으로 표시됩니다.
선점과 작업 기록은 하나의 DB 트랜잭션으로 기록됩니다. 선점 없이 작업만 존재하거나 그 반대인 중간 상태는 없습니다.
정산 또는 해제
succeeded→ 실제 사용량으로 정산하되 승인 선점액을 넘지 않습니다. 미사용액은 원래 자금원으로 해제하며 나중에 초과 금액을 추가 징수하지 않습니다.failed/expired→ 보통 전액 해제합니다. 모델 페이지가 일부content_rejected를 승인 견적 과금으로 명시할 수 있습니다. 과거canceled도 전액 해제하지만 현재 승인 작업은 취소할 수 없습니다.
정산 완료 시 recordInfo는 settled: true이고 cost가 확정됩니다. settled가 false이면 cost는 아직 바뀔 수 있습니다.
자동 복구
처리 중 프로세스가 중단되면 자동 정리 작업이 이미 종료된 작업의 선점을 찾아 기록된 결과에 따라 정산·해제를 완료합니다.
정산과 해제는 같은 중복 제거 키를 사용하므로 과금 수명 주기가 정확히 한 번 종료됩니다. 재시도로 두 번 기록하지 않습니다.
상태뿐 아니라 정산을 확인하세요
실패·만료는 보통 전액 해제합니다. 명시된 일부 콘텐츠 거절만 승인 견적 과금입니다. settled, cost를 확인하세요. 과금 거절도 state: "failed", errorCode: "content_rejected"이며 정산 후 settled는 true, cost는 양수입니다. 그 외 실패·만료는 자동 전액 해제입니다.
잔액 확인
콘솔 과금이 가장 빠릅니다. 사용 가능 잔액, 현재 선점액과 모든 변동을 표시합니다. 코드에서는 다음을 호출하세요.
GET /api/v1/chat/creditcurl https://api.spicyapi.ai/api/v1/chat/credit \
-H "Authorization: Bearer $SPICY_API_KEY"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);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"
}
}| 필드 | 의미 |
|---|---|
available | 지갑 순금액. 승인 신용 사용 후 음수 가능. 단독 승인 검사 기준이 아님 |
held | 진행 작업에 묶인 금액 |
total | 둘의 합계 |
선택 모델과 시간에 유효한 자금으로 견적을 충당하지 못하면 createTask는 40201입니다. 신용 만료·한도 소진·결제 회수 부족도 영향을 줍니다. 서버 검사를 available의 양수·음수 확인으로 대체하지 마세요.
승인 시 잔액·한도를 이미 검사하므로 생성마다 미리 확인할 필요는 없습니다.
API 금액은 달러 기호 없는 문자열입니다
이 페이지의 $0.008은 사람이 읽는 표시입니다. API는 통화 기호 없는 십진 문자열을 반환합니다. estimatedCost, cost, 잔액 세 필드는 "0.008"처럼 $·구분자 없이 항상 USD입니다.
// Keep the exact decimal string for display
const usd = task.cost;의도적으로 JSON 숫자 대신 문자열입니다. 대부분 언어에서 숫자는 float64이고 0.008은 정확한 이진 표현이 없습니다. 회계용이라면 십진수로 파싱하세요.
from decimal import Decimal
usd = Decimal(task["cost"]) # not float()지출 한도
직접 설정하는 지출 상한입니다. 최대 여섯 한도가 적용되며 먼저 도달한 한도가 생성·선점 전에 40202로 거절합니다.
| 한도 | 설정 주체 | 도달 시 msg |
|---|---|---|
| 키 누적 한도 | API 키 페이지에서 이용자 설정. 키 전체 기간 상한 | This key has reached its total spend cap |
| 키 월 한도 | API 키 페이지에서 이용자 설정. 현재 달 예산 | This key has reached its monthly budget |
| 키 일 한도 | API 키 페이지에서 이용자 설정. 직접 설정하지 않으면 새 키에 한도 없음 | This key has reached its daily spend cap |
| 팀 일 한도 | 팀 페이지의 소유자·관리자·예산 관리자. 팀 소속 키만 적용 | Workspace daily budget has been reached |
| 팀 월 한도 | 위와 동일 | Workspace monthly budget has been reached |
| 플랫폼 일 한도 | 플랫폼의 안전장치. 이용자는 상향 불가 | Platform quota for today is exhausted, please try again later |
일 한도는 UTC 00:00, 월 한도는 UTC 기준 달의 1일에 초기화됩니다. 누적은 초기화하지 않습니다. 플랫폼 한도는 UTC 00:00 후 재시도하거나 지속되면 지원에 문의하세요.
미정산 선점은 모든 일·월·누적 한도에 포함됩니다. 날짜·월이 바뀌어도 정산까지 유지됩니다. 아직 지출은 아니지만 두 번 쓸 수도 없기 때문입니다. 팀 한도는 콘솔과 팀을 참고하세요.
빈 한도 필드의 의미는 화면마다 다릅니다
- 키 생성·편집: 빈 값과
0모두 제한 없음입니다. 직접 설정하지 않으면 새 키에 한도 없습니다. 기존 한도를 지우면 제거하므로 유지하려면 숫자를 남겨 두세요. - 팀 지출 한도: 빈 값은 현재 값 유지,
0은 제한 없음입니다.
한도는 이용자 보호를 위한 것입니다. 수시간에 큰 금액을 소진하는 루프는 흔한 사고이며 대부분 한도 없는 계정에서 발생합니다.
원장
콘솔 과금은 충전·선점·결제·반환 등 쉬운 라벨로 변동을 표시합니다. CSV 내보내기의 kind는 다음 고정 코드입니다.
| 종류 | 의미 |
|---|---|
topup | 결제하여 잔액에 추가한 금액 |
bonus | 충전 혜택의 추가 금액. 결제액과 별도 기록 |
trial | 체험 캠페인 지원금. 충전·보너스와 별도 |
hold | 승인 시 예상액 예약. 결제 아님 |
settle | 모델 조건의 유료 거절을 포함한 최종 과금. 선점 미사용액 반환 |
refund | 실패·시간 초과로 전액 선점 반환 |
adjust | 팀의 수동 조정. 항상 운영자 신원·이유 포함 |
chargeback | 결제 분쟁 후 잔액 회수 |
forfeit | 계정 폐쇄 시 포기한 잔액 |
grant_expire | 만료된 미사용 프로모션 금액 제거 |
grant_revoke | 미사용 프로모션 금액 회수 |
원장은 추가만 가능합니다. 기존 기록은 바꾸지 않으며 선점 반환도 삭제가 아닌 새 항목입니다. 처음부터 잔액을 재계산할 수 있어 숫자 불일치를 증명 가능한 방법으로 확인합니다.
보너스는 실제 결제와 별도입니다. 카드로 돌려주는 결제 환불은 실제 지불액만 포함하며 보너스는 현금 가치가 없습니다. 위 refund는 실패 작업 선점을 잔액에 반환하는 것으로 별개입니다.
변동 내역은 작업 콘텐츠와 별도로 10년 보관하여 프롬프트·결과 삭제 후에도 정산 대조·분쟁에 사용할 수 있습니다. 데이터 보관 참조.
청구서와 사용 명세서
콘솔 과금 → 청구서에서 두 문서를 직접 발급하고 PDF로 받습니다.
| 문서 | 대상 | 결제 증빙 |
|---|---|---|
| 결제 청구서 | 이미 결제한 충전 하나의 결제액 | 예. 비용 환급에 사용 |
| 사용 명세서 | 종료된 한 달의 실제 지출 | 아니요. 충전 때 이미 결제하여 둘 다 제출하면 중복 청구 |
페이지 위에 정보를 한 번 입력하세요. 회사·개인 이름, 주소 첫 줄, 도시·국가는 필수이며 VAT·GST 등 세금 번호는 선택입니다. 입력 그대로 인쇄하며 세금 번호를 포함해 검증하지 않습니다. 라틴·그리스·키릴 문자만 인쇄할 수 있어 한국·일본 회사명은 등록된 로마자 이름을 사용하세요. 발급 문서는 당시 정보를 유지하고 이후 수정은 새 문서에만 적용합니다.
- 결제 충전·종료 월마다 한 번 발급합니다. 이미 있으면 다시 발급하지 말고 다운로드하세요.
- 정보 오류는 재발급하세요. 기존 문서는 무효화하고 새 번호로 같은 항목을 발급합니다. 잘못된 충전·월의 문서만 대체 없이 무효화하세요.
- 같은 페이지 아래 계정 명세서는 회계용 월별 잔액 변동 고정 사본이며 영수증·세금 문서가 아닙니다.
세금은 0으로 표시합니다. 미국 서비스 제공자로서 이용자 대신 VAT·GST·판매세를 징수·납부하지 않으며 문서에 역외 거래 세금 책임 안내가 있습니다. 현지 납세 책임은 이용자에게 있습니다. 발급 청구서는 수정하지 않고 이유·대체 문서를 기록하여 무효화·재발급합니다.
과금 단위
모델마다 과금 단위는 하나입니다.
| 단위 | 의미 | 수량을 제공하는 input 필드 |
|---|---|---|
per_image | 생성 이미지당 | 모델 선언 필드, 기본 1 |
per_second | 출력 초당. 일부는 고정 블록으로 올림(블록 과금) | 현재 quantityField·스키마 확인. 표준 길이는 duration_seconds. 생략을 최단 구간으로 가정하지 않기 |
per_request | 매개변수와 무관한 호출당 | — |
per_1k_tokens | 토큰당. API 단위는 per_1k_tokens, 웹·카탈로그 price.perMillionTokens는 같은 요율을 백만 토큰당 표시. 입력·캐시 입력·캐시 쓰기·출력은 별도 요율 가능 | — |
필드명을 추측하지 마세요. 카탈로그의 quantityField가 알려 주며 빈 문자열이면 호출당 한 단위입니다.
모델은 구간별 가격이 다를 수 있습니다. 스키마에 따라 해상도·길이·오디오·참조가 영향을 줍니다. pricing[].variant는 가격표 구간이며 요청 본문에 variant 필드는 없습니다. 항상 resolution으로 보낼 수 있다고 가정하거나 최저가×길이로 계산하지 마세요. 전체 입력의 jobs/quote로 정확한 견적·과금 상한을 받습니다.
수량과 가격은 최신 카탈로그에서 읽으세요
모델 분류 전체에 수량 필드를 하드코딩하지 마세요. 빈 quantityField는 호출당 한 단위, 아니면 명시한 입력 필드에서 수량을 읽습니다. 구간·기본값·과금 동작은 카탈로그와 함께 바뀔 수 있습니다. 과금 상한은 승인 선점액이며 나머지는 해제하고 이후 초과 징수하지 않습니다.
길이를 전체 블록으로 과금
대부분 per_second는 실제 길이지만 일부는 고정 블록입니다. 측정 길이를 다음 전체 블록으로 올림합니다. 8초 블록이면 6·8초는 같고 9초는 두 블록입니다. 모든 초당 모델에 적용되지 않으며 선언한 엔드포인트의 모델 페이지에서 설명합니다.
이들은 선택한 duration_seconds가 아닌 이용자가 제공한 영상에서 길이를 읽어 파일을 확인해야 결과 길이를 알 수 있습니다. quantityField가 비어 제출 전 견적은 최악의 경우인 허용 최장 영상입니다.
{
"estimatedCost": "0.96",
"maxCharge": "0.96",
"quantity": "32",
"unit": "per_second"
}금액은 설명용이며 quantity는 측정이 아닌 초 상한입니다. 견적액을 선점하며 최종 과금은 올림 길이로 계산하고 선점액을 넘지 않습니다. 나머지는 정산 시 해제합니다.
선점액이 최종 비용보다 클 수 있습니다
이 엔드포인트의 정상 동작이며 과다 과금이 아닙니다. 승인·정산 사이에는 길이를 아직 몰라 상한을 선점합니다. 실제 길이를 블록으로 올림해 정산하면 차액은 자동 반환됩니다. 원장이 두 변동을 기록하여 hold·settle를 대조할 수 있습니다.
다음 두 점을 계획하세요.
- 파일 길이가 아닌 견적으로 예산을 잡으세요. 정산 전에는 상한이 예약되고 다른 선점처럼 한도에 포함됩니다.
- 짧아도 한 블록입니다. 8초 블록의 9→8초는 반값일 수 있지만 8→5초는 같습니다.
정확한 단위·가격은 가격 페이지와 모델 페이지에 있습니다.
고객 할인과 프로모션
혜택은 전체·개별 계정, 전체·특정 모델에 적용됩니다. 상시 혜택은 해제까지, 기간 혜택은 실제 시작·종료 사이에만 적용합니다. 계정 가격은 로그인·키 견적에 적용되며 다른 고객의 가격으로 공개하지 않습니다.
중복 적용하지 않고 자격을 충족하는 최저가를 자동 적용합니다. 표준 $10에 공개 10%와 계정 20%면 $8이지 복리 $7.20이 아닙니다. 종료·해제되면 남은 최적 혜택이나 표준 가격입니다.
홈·카탈로그·모델 혜택은 비교용입니다. 신원·모델·전체 입력을 가진 jobs/quote로 실제 견적을 받으세요. 카운트다운은 가격 예약이 아니므로 혜택·입력·가격 변경 후 갱신합니다. 승인 작업은 실행 중 혜택이 끝나도 동결 가격을 유지하며 최종 금액은 선점액을 넘지 않습니다.
API 이용료에 자동 적용하며 충전액 할인·캐시백이 아닙니다. 일·월 예산 예시는 현재 가격으로 계산합니다. 기간 혜택이 예산 기간 전에 끝날 수 있으므로 종료도 확인하세요.
프로모션 자금과 신용 한도
GET /api/v1/chat/credit는 available, held, total을 유지하며 funding 내역을 포함할 수 있습니다. 이전 응답에 funding이 없다고 0은 아닙니다. SDK의 client.getBalance()나 CLI spicyapi balance --json을 사용하세요.
funding.prepaidAvailableUsd는 선불·이전 무제한 사용 가능 자금,grantAvailableUsd는 현재 활성 지원금 합계입니다.grants별 지급·사용 가능·선점·지출, 상태·시작·만료·modelSlugs를 제공합니다. 빈 모델 목록은 전체이며 아니면 해당 모델만 결제합니다. 최대 100개로 잔액·선점 있는 지원금을 우선하고 최신순으로 나열합니다.grantsHasMore는 추가 기록입니다. 보이는 소계로 계정 총액을 대체하지 마세요.funding.credit는 승인된 후불 신용입니다.limitUsd상한,availableUsd미사용 유효 신용,usedUsd정산된 미납 원금,heldUsd승인 작업 예약,expiresAt만료입니다. 신용 한도는 충전·지원금·현금 잔액이 아닙니다. 만료·해제·초과는 새 요청을 제한하나 기존 채무는 남습니다.- 프로모션 자금은 인출 불가입니다. 할인은 요청 가격, 지원금·신용은 자금원을 정합니다. 지원금이 가격표를 낮추지는 않습니다. 모델 범위·유효 기간을 따르며 미사용액은 만료·회수될 수 있습니다. 실패·미사용 선점은 원래 자금원으로 해제하며 만료·회수 지원금을 재활성화하지 않습니다.
- 양수
funding.cashShortfallUsd는 외부 결제 회수의 부족액입니다. 지원금·신용으로 충당할 수 없으며 해소 전 새 호출을 제한합니다. 음수available은 승인 신용 사용일 수 있으므로 부호로 거절을 판단하거나 신용 한도에 직접 더하지 마세요. 서버가 자금원·모델 자격·유효 기간·지출 한도를 확인합니다.
금액은 정확한 USD 십진 문자열, 날짜는 RFC3339입니다. 표시 시 시간대를 명시하세요. 콘솔 과금에서 자금·지원금을 보며 변경은 관리자 수동 승인 후 적용됩니다. 지원 또는 support@spicyapi.ai로 문의하세요. 공개 API는 자신의 한도 증액·지원금 발급 쓰기를 제공하지 않습니다.
현재 API 키 사용량
전체 계정·팀의 일·모델별 지출 차트는 콘솔 과금 → 사용량입니다. 아래 API는 호출한 키만 보고합니다.
curl 'https://api.spicyapi.ai/api/v1/usage?from=2026-09-01&to=2026-09-06' \
-H "Authorization: Bearer $SPICY_API_KEY"UTC [from,to)로 예시는 9월 1–5일을 포함합니다. 생략하면 오늘 포함 최근 7일, 최대 92일입니다. 다른 키·계정 전체 매개변수는 없습니다. 지갑 잔액은 chat/credit입니다.
data.totalCalls는 모든 작업, data.totalSpend는 정산 비용만입니다. days, models는 같은 작업을 생성 날짜·모델로 나누며 정확한 USD 문자열입니다. 선점은 제외하고 늦은 정산은 이전 날짜를 바꿀 수 있습니다. 숨긴 내역도 포함하고 호출 없는 날짜는 생략합니다. 두 그룹을 합산하지 마세요.
SDK의 client.getUsage({ from, to })나 CLI spicyapi usage --from 2026-09-01 --to 2026-09-06을 사용하세요. 별도의 더 엄격한 제한이 있습니다. 호출 제한 참조.

