Tips & Tricks (Diperbarui: 3/6/2026)

Kontrol Biaya Claude Code/API: Budget Token, Alert, dan Batas Aman

Perkirakan biaya Claude Code/API, catat token, pasang alert, dan cegah tagihan tak terduga dengan contoh jalan.

Kontrol Biaya Claude Code/API: Budget Token, Alert, dan Batas Aman

Claude Code jauh lebih mudah dipakai sehari-hari ketika biayanya bisa dijelaskan sebelum tagihan datang. Biaya tidak hanya ditentukan oleh model. Ukuran konteks, file yang dibaca, panjang jawaban, prompt cache, dan cara autentikasi ikut menentukan apakah kamu memakai kuota langganan Claude atau billing API Anthropic.

Panduan ini dicek pada 2026-06-03 terhadap sumber resmi: Anthropic API pricing, Claude Code cost management, Prompt caching, Token counting, dan Usage and Cost API. Harga dapat berubah, jadi selalu cek halaman resmi sebelum membeli, membuat proposal, atau memberi estimasi ke klien.

Cara berpikir soal biaya

IstilahArti praktisDampak biaya
TokenUnit yang dibaca dan ditulis ClaudeFile, log, prompt, dan kode panjang menaikkan pemakaian
KonteksRiwayat chat, file terbaca, CLAUDE.md, definisi toolKonteks lama ikut dibayar lagi pada request berikutnya
Prompt cacheMemakai ulang prefix prompt yang samaInput berulang menjadi jauh lebih murah
Batas budgetLimit per task, hari, user, atau workspaceMencegah workflow berguna berubah jadi biaya terbuka
estimasi biaya = token input * tarif input
               + token cache write * tarif cache write
               + token cache read * tarif cache read
               + token output * tarif output

Per 2026-06-03, tabel resmi mencantumkan Sonnet 4.6 pada $3/MTok input dan $15/MTok output. Haiku 4.5 pada $1 dan $5. Opus 4.8/4.7/4.6 pada $5 dan $25. Cache read bernilai 10% dari tarif input dasar, sedangkan cache write 5 menit bernilai 1.25x.

Biaya yang paling sering melebar adalah output. Ubah “jelaskan semuanya dengan detail” menjadi “maksimal 5 temuan, urut severity, masing-masing 2 baris”.

Alur kontrol biaya

flowchart LR
  A["Tentukan task"] --> B["Pangkas input"]
  B --> C["Pilih model"]
  C --> D["Estimasi token"]
  D --> E{"Masuk budget?"}
  E -- "Ya" --> F["Jalankan Claude"]
  E -- "Tidak" --> B
  F --> G["Catat usage"]
  G --> H{"Lewat threshold?"}
  H -- "Ya" --> I["Stop, alert, atau ganti model"]
  H -- "Tidak" --> A

Di Claude Code, mulai dari /usage dan /context. Pakai /clear saat pindah ke task yang tidak terkait, dan /compact saat kamu ingin menyimpan keputusan tanpa membawa seluruh riwayat. Angka di /usage adalah estimasi lokal; billing resmi tetap dicek di Console, dan untuk organisasi lewat Usage and Cost API.

Contoh 1: estimasi biaya bulanan

Script ini tidak memanggil API. Ia menghitung biaya bulanan dari pemakaian harian dalam MTok.

// claude-cost-estimator.mjs
const RATES = {
  opus48: { input: 5, output: 25, cacheRead: 0.5 },
  sonnet46: { input: 3, output: 15, cacheRead: 0.3 },
  haiku45: { input: 1, output: 5, cacheRead: 0.1 },
};

const [model = "sonnet46", days = "22", input = "0.25", output = "0.06", cacheRead = "0.20"] =
  process.argv.slice(2);

if (!RATES[model]) {
  throw new Error(`Unknown model: ${model}`);
}

const rate = RATES[model];
const dailyUsd =
  Number(input) * rate.input +
  Number(output) * rate.output +
  Number(cacheRead) * rate.cacheRead;

console.log({
  model,
  workDays: Number(days),
  dailyUsd: Number(dailyUsd.toFixed(4)),
  monthlyUsd: Number((dailyUsd * Number(days)).toFixed(2)),
});
node claude-cost-estimator.mjs sonnet46 22 0.25 0.06 0.20
node claude-cost-estimator.mjs haiku45 22 0.25 0.06 0.20

Tujuannya bukan menebak tagihan secara sempurna. Tujuannya melihat apakah workflow ini kira-kira $15, $50, atau $500 per bulan. Tambahkan buffer 20-30% untuk tool definitions, retry, cache writes, dan output yang lebih panjang dari rencana.

Contoh 2: API call dengan batas harian

Contoh ini menghitung token sebelum mengirim request, mencatat usage aktual ke JSONL, dan berhenti jika proyeksi biaya melewati DAILY_BUDGET_USD.

npm init -y
npm i @anthropic-ai/sdk
// budgeted-message.mjs
import Anthropic from "@anthropic-ai/sdk";
import fs from "node:fs";

const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const model = process.env.CLAUDE_MODEL ?? "claude-sonnet-4-6";
const maxTokens = Number(process.env.MAX_TOKENS ?? 700);
const dailyBudgetUsd = Number(process.env.DAILY_BUDGET_USD ?? 5);

const RATES = {
  "claude-opus-4-8": { input: 5, output: 25, cacheWrite5m: 6.25, cacheRead: 0.5 },
  "claude-sonnet-4-6": { input: 3, output: 15, cacheWrite5m: 3.75, cacheRead: 0.3 },
  "claude-haiku-4-5": { input: 1, output: 5, cacheWrite5m: 1.25, cacheRead: 0.1 },
};

function usdFromUsage(usage, rate) {
  return (
    (usage.input_tokens ?? 0) * rate.input +
    (usage.output_tokens ?? 0) * rate.output +
    (usage.cache_creation_input_tokens ?? 0) * rate.cacheWrite5m +
    (usage.cache_read_input_tokens ?? 0) * rate.cacheRead
  ) / 1_000_000;
}

function todayTotalUsd(path) {
  if (!fs.existsSync(path)) return 0;
  const today = new Date().toISOString().slice(0, 10);
  return fs.readFileSync(path, "utf8")
    .trim()
    .split("\n")
    .filter(Boolean)
    .map((line) => JSON.parse(line))
    .filter((row) => row.date === today)
    .reduce((sum, row) => sum + row.usd, 0);
}

const messages = [
  { role: "user", content: "List only the top three bug risks in this TypeScript function." },
];

const rate = RATES[model];
if (!rate) throw new Error(`No rate table for ${model}`);

const counted = await anthropic.messages.countTokens({ model, messages });
const worstCaseUsd = (counted.input_tokens * rate.input + maxTokens * rate.output) / 1_000_000;
const logPath = "claude-usage.jsonl";

if (todayTotalUsd(logPath) + worstCaseUsd > dailyBudgetUsd) {
  throw new Error(`Budget stop: projected daily spend exceeds $${dailyBudgetUsd}`);
}

const response = await anthropic.messages.create({
  model,
  max_tokens: maxTokens,
  cache_control: { type: "ephemeral" },
  system: "You are a concise senior code reviewer. Return only actionable findings.",
  messages,
});

const usd = usdFromUsage(response.usage, rate);
fs.appendFileSync(logPath, JSON.stringify({
  date: new Date().toISOString().slice(0, 10),
  model,
  usd: Number(usd.toFixed(6)),
  usage: response.usage,
}) + "\n");

console.log({ id: response.id, usd: Number(usd.toFixed(6)), usage: response.usage });
ANTHROPIC_API_KEY=sk-ant-...
DAILY_BUDGET_USD=5 node budgeted-message.mjs

Untuk pemula, jelaskan tiga hal: timbang request sebelum dikirim, simpan kuitansi setelah selesai, dan hentikan sebelum budget harian habis.

Contoh 3: laporan usage tim

Organisasi dapat memakai Admin Usage and Cost API untuk laporan harian. Ini membutuhkan Admin API key dan tidak tersedia untuk akun individual biasa.

curl "https://api.anthropic.com/v1/organizations/usage_report/messages?\
starting_at=2026-06-01T00:00:00Z&\
ending_at=2026-06-08T00:00:00Z&\
group_by[]=model&\
bucket_width=1d" \
  --header "anthropic-version: 2023-06-01" \
  --header "x-api-key: $ANTHROPIC_ADMIN_KEY"
SinyalRisikoTindakan
Porsi OpusTask ringan memakai model premiumArahkan ringkasan, terjemahan, formatting ke Sonnet/Haiku
Output tokensJawaban terlalu panjangBatasi temuan, baris, dan max_tokens
Cache readscache_read_input_tokens mendekati nolHapus timestamp dan nilai acak dari prefix cache

Tiga use case nyata

Developer solo: jadikan Sonnet default, simpan Opus untuk arsitektur dan debugging berat, lalu /clear saat berpindah task.

Konten dan lokalisasi: cache style guide dan glossary sebagai prefix stabil, lalu ganti hanya isi artikel. Untuk volume besar yang tidak real-time, pertimbangkan diskon 50% Batch API.

Training dan adopsi tim: hari pelatihan membuat concurrency naik. Tetapkan budget harian, threshold, dan aturan prompt sebelum sesi. Untuk program tim yang lebih terstruktur, lihat /training/.

Kesalahan umum

API key mengubah billing. Bantuan resmi menjelaskan bahwa ANTHROPIC_API_KEY bisa diprioritaskan dibanding subscription yang login di Claude Code. Cek dengan /status.

Cache diasumsikan, bukan diukur. Prompt cache perlu prefix yang stabil. Timestamp, UUID, atau daftar file dinamis di system prompt bisa merusak hit rate.

Output tidak dibatasi. Review perlu batas jumlah temuan, ringkasan perlu batas panjang, dan code generation perlu scope file yang jelas.

Harga lama disalin terus. Model dan harga berubah. Cek halaman resmi sebelum membuat kalkulator, proposal, atau materi training.

Proxy murah tanpa audit. Jika identitas model, retensi log, dan credential handling tidak jelas, diskon itu bisa berubah menjadi risiko.

Bacaan terkait

Template budget, prompt, dan checklist kontrol biaya tersedia di /products/.

Hasil praktik

Dalam workflow konten ClaudeCodeLab, dampak terbesar datang dari kontrol sederhana: cache instruksi bersama, arahkan terjemahan dan formatting ke Haiku/Sonnet, pakai Opus hanya untuk keputusan sulit, dan tulis setiap usage ke JSONL. Mulailah dengan alert 80%, stop 100%, dan bersihkan konteks ketika task berubah.

#claude-code #cost #api #prompt-caching #optimization #anthropic
Gratis

PDF gratis: cheatsheet Claude Code

Masukkan email dan unduh satu halaman berisi command, kebiasaan review, dan workflow aman.

Kami menjaga datamu dan tidak mengirim spam.

Masa

Tentang penulis

Masa

Engineer yang berfokus pada workflow Claude Code praktis dan adopsi tim.