블로그로 돌아가기

시작하기가이드

HTTPie로 CheapTokens 첫 요청: 환경 변수의 키, =와 :=

환경 변수의 키로 채팅 완성을 전송하는 읽기 쉬운 http 명령 하나와, 답변 및 토큰 사용량이 어디에 있는지 보여 줍니다.

작성자: CheapTokens Team 게시됨읽는 시간 4분

bearer 키 변수와 JSON 필드가 있는 http 명령을 보여 주는 터미널
이 페이지의 내용
  1. =와 :=의 실제 동작
  2. 응답이 있는 위치
  3. 모델 교체: 필드 하나 변경
  4. 테스트 요청 하나의 비용
  5. 작동하지 않을 때

키가 작동하고 모델 id가 올바른지 한 줄로 확인하고 싶을 것입니다. HTTPie의 http 명령은 curl보다 인용 부호를 훨씬 적게 쓰면서 이를 수행합니다. 필드를 입력하면 JSON을 만들어 줍니다. 전체 요청은 다음과 같으며, 나머지 글에서 각 부분을 설명합니다.

bash
export CHEAPTOKENS_API_KEY="paste-your-key-here"

http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=deepseek-ai/DeepSeek-V4-Flash-0731 \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"In one sentence, what is a token?"}]'

API는 OpenAI 호환 방식이므로 base URL은 https://api.cheaptokens.dev/v1이고, 채팅 요청은 그 아래 /chat/completions로 전송됩니다. 모델 id는 전체 이름인 deepseek-ai/DeepSeek-V4-Flash-0731입니다(가격표의 짧은 이름은 허용되지 않습니다). 이전에 키를 저장한 적이 없다면 먼저 API 키를 안전하게 저장하세요. export 줄을 입력하면 키가 셸 기록에 남으므로 프로필 파일이나 시크릿 관리자에 보관하는 것이 더 좋습니다.

터미널에서의 요청: 변수에서 가져온 bearer 키, 문자열로 된 모델, 숫자로 된 max_tokens, 원시 배열로 된 messages
터미널에서 보이는 동일한 요청

=와 :=의 실제 동작#

이것이 HTTPie에서 배워야 할 유일한 부분입니다. HTTPie의 JSON 문서(버전 3.2.4, 2024년 11월 1일자, 2026년 11월 9일 열람)에 따르면 =은 문자열 필드를 설정하고 :=는 원시 JSON 값(숫자, 불리언, 배열 또는 객체)을 설정합니다. 이 방식으로 지정한 필드는 기본적으로 JSON 본문으로 전송되므로 Content-Type 헤더를 직접 추가할 필요가 없습니다.

우리 요청에서는 세 가지 형태가 됩니다:

  • model=deepseek-ai/DeepSeek-V4-Flash-0731는 문자열이므로 =.
  • max_tokens:=200는 숫자이므로 :=. =을 쓰면 문자열 "200"이 전송됩니다.
  • messages:=[…]는 객체의 배열이므로 다시 :=을 쓰고, 값은 셸이 내부 큰따옴표를 건드리지 않도록 작은따옴표로 감쌉니다.

문서에 따르면 stdin에서 받은 본문은 명령줄 필드와 함께 사용할 수 없으므로 한 가지 방식을 선택하세요. 첫 테스트에는 필드 방식이 더 짧고 편집하기 쉽습니다.

빠른 확인

max_tokens=200(일반 = 사용)은 무엇을 전송하나요?

정답 보기

정답: 문자열 "200"

=은 항상 문자열을 만듭니다. 숫자를 원하면 :=가 필요하므로 max_tokens:=200이라고 쓰세요.

응답이 있는 위치#

응답은 OpenAI 채팅 완성 형식을 따릅니다. 찾아야 할 세 가지가 있으며, 각각 다른 위치에 있습니다:

json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "…the answer text…" },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": …, "completion_tokens": …, "total_tokens": … }
}

답변 텍스트는 choices[0].message.content입니다. finish_reason는 같은 choice 안에서 그 옆에 있고, usage는 최상위 레벨에 있습니다. usage은 보낸 토큰 수(prompt_tokens)와 모델이 작성한 토큰 수(completion_tokens)를 보여 주므로 요청 비용을 추정하는 데 유용합니다.

응답에서 볼 위치: choices, message.content, finish_reason, usage
모든 응답에서 읽어야 할 세 필드

텍스트만 원한다면 본문을 jq로 파이프하세요:

bash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=deepseek-ai/DeepSeek-V4-Flash-0731 \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"In one sentence, what is a token?"}]' \
  | jq -r '.choices[0].message.content'
직접 해보기직접 해보기: 제한을 너무 작게 설정하고 finish_reason 읽기정답 보기

max_tokens:=200을 max_tokens:=5로 바꾸고 다시 실행하세요. 답변이 잘리고 finish_reason가 stop 대신 length을 표시합니다. 생각의 끝이 아니라 제한이 모델을 멈춘 것입니다. 답변이 잘리는 이유에서 해결 방법을 다룹니다.

모델 교체: 필드 하나 변경#

모델은 하나의 문자열이므로 다른 모델을 시도하는 것은 한 단어 수정입니다. 아래 두 id 모두 하나의 잔액으로 CheapTokens에서 사용할 수 있습니다. DeepSeek-V4-Flash는 380K 컨텍스트와 답변당 최대 32,768 출력 토큰을, GLM-5.3-Flash는 390K 컨텍스트와 최대 8,192를 제공합니다.

하나의 요청, 두 개의 모델

DeepSeek-V4-Flash

bash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=deepseek-ai/DeepSeek-V4-Flash-0731 \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"Name three uses of a token limit."}]'

GLM-5.3-Flash

bash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=zai-org/GLM-5.3-Flash \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"Name three uses of a token limit."}]'

어떤 id를 사용할지 모르겠다면 GET /v1/models로 모델 목록 조회하고 정확한 문자열을 복사하세요.

테스트 요청 하나의 비용#

이와 같은 짧은 질문은 저렴합니다. 질문이 약 100 토큰, 답변이 약 150 토큰이라고 하면 해당 요청 비용은 $0.000017입니다. 입력과 출력을 합산하여 1,000번 요청하면 다음과 같습니다:

모델 요청당 1,000회 요청 OpenRouter, 1,000회 요청
GLM-5.3-Flash $0.000008 $0.008 $0.0158
DeepSeek-V4-Flash $0.000017 $0.0165 $0.028
MiniMax-M2.7 $0.000028 $0.0275 $0.33

요청당 입력 100개 및 출력 150개 토큰입니다. 100만 토큰당 가격은 현재 기준이며 당사 요금제에 따라 함께 변경됩니다. OpenRouter 열은 동일한 작업량에 대한 참고 가격을 보여줍니다.

입력과 출력을 합산한 총액에서 DeepSeek-V4-Flash는 OpenRouter보다 저렴하며, 가격은 피크 시간 없이 하나의 고정 요율입니다. 모든 모델의 현재 요율은 가격 페이지에 있습니다.

작동하지 않을 때#

  • messages=[…]을 일반 =와 함께 입력했습니다. 배열이 메시지 목록이 아니라 문자열로 전송됩니다. :=을 사용하고 전체 값을 작은따옴표로 감싸세요.
  • := 내부의 JSON이 유효하지 않습니다. 모든 키와 문자열에는 큰따옴표가 필요하고, 바깥쪽 따옴표는 작은따옴표여야 합니다. 메시지 텍스트를 편집할 때 따옴표 균형을 유지하세요.
  • 키가 비어 있습니다. echo ${#CHEAPTOKENS_API_KEY}는 키를 표시하지 않고 길이를 출력합니다. 0은 이 터미널에서 변수가 설정되지 않았음을 의미합니다.
  • 모델 id가 짧은 이름입니다. 전체 deepseek-ai/DeepSeek-V4-Flash-0731를 사용하세요. 401 및 404 응답은 잘못된 키, base URL 또는 모델 id를 참조하세요.
  • --session을 사용했습니다. HTTPie 인증 문서에 따르면 세션 파일은 자격 증명을 평문으로 저장하므로 키를 환경 변수에 보관하고 이 명령에서 --session을 빼세요.

플래그가 위 설명과 다르게 동작하면 http --version로 버전을 확인하세요. Python을 선호하나요? SDK 없이 동일한 요청을 하는 방법은 requests를 사용한 Python 첫 요청에 있습니다. 전체 API 참조는 CheapTokens 문서를 참조하세요.