Api.Airforce
문제 해결

버그를 보고하기 전에

대부분의 "버그"는 60초 안에 고칠 수 있는 설정 문제입니다 — 먼저 이 체크리스트를 확인하세요.

무언가가 작동하지 않을 때, 문제가 내 쪽인지 우리 쪽인지 가장 빠르게 확인하는 방법은 다른 도구에서 동일한 요청을 실행해 보는 것입니다.

"API가 고장났다"는 보고의 약 10건 중 9건은 잘못 설정된 base URL, 만료된 API 키, 잘못된 모델 이름, 또는 세 버전 전 SDK 기준의 튜토리얼에서 가져온 요청 바디 형식으로 판명됩니다.

빠른 자가 테스트

이 curl 명령어를 터미널에 복사하세요. YOUR_KEY를 Dashboard의 API 키로 교체한 후 실행하세요. 정상적인 응답이 돌아온다면, API 키·네트워크·백엔드 모두 정상입니다 — 문제가 있다면 클라이언트 코드나 환경에 있는 것입니다.

cURL

curl https://api.airforce/v1/chat/completions \
  -H "Authorization: Bearer sk-air-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4.1-mini",
    "messages": [{"role": "user", "content": "ping"}]
  }'
ℹ️
빠른 자가 테스트: 터미널이 없나요? Dashboard의 Playground에 동일한 모델과 prompt를 붙여넣기 하면 같은 효과를 확인할 수 있으며, 별도 설정이 필요 없습니다.

단계별 체크리스트

API 키가 유효한가요?

Dashboard → API Keys를 열고 키가 코드에서 사용하는 값과 일치하는지 확인하세요. 복사-붙여넣기 시 "sk-air-" 접두사 앞에 공백이 들어가는 경우가 흔한 함정입니다.

증상: 401 Unauthorized.

base URL이 올바른가요?

base URL은 반드시 https://api.airforce/v1이어야 합니다 — http가 아닌 https이며, /v1 접미사도 필수입니다. OpenAI의 v1 경로 이전 시대의 튜토리얼은 이를 생략하기도 합니다.

증상: 404 Not Found, 또는 curl이 응답 없이 멈춤.

모델 이름의 철자가 정확한가요?

모델 ID는 대소문자를 구분합니다. Models 페이지를 방문하거나 GET /v1/models를 호출해 정확한 ID를 확인하세요. 오타나 지원이 중단된 모델은 "동작하지만 잘못됨"이 아닌 명확한 오류를 반환합니다.

증상: 400 unknown_model 또는 404 model_not_found.

요청 바디의 형식이 올바른가요?

채팅 완성에는 messages 배열을 사용합니다. 이미지에는 prompt + n을, 오디오 TTS에는 input + voice를 사용합니다. 채팅 형식의 바디를 /v1/images/generations에 보내면 400이 반환됩니다 — 문서 간 코드 조각을 복사할 때 놓치기 쉽습니다.

증상: 응답 바디에 해당 필드 이름이 명시된 400.

속도 제한이나 할당량 한도에 도달했나요?

429 = 이 분에 너무 많은 요청. 402 = 플랜 또는 잔액 소진. 둘 다 Dashboard에서 확인할 수 있습니다. 무료 티어 요청과 유료 플랜 요청의 한도는 별도로 관리되므로, 유료 모델은 정상 응답하는 동안 무료 모델에서 속도 제한이 걸릴 수 있습니다.

증상: 429 Too Many Requests 또는 402 Payment Required.

모델이 현재 정상 운영 중인가요?

Models 페이지에서 공급자 장애 여부를 확인하세요 — "degraded" 또는 "major outage"로 표시됩니다. 특정 모델만 다운되고 다른 모델은 작동한다면, 우리가 우회 처리하는 공급자 측 문제이며 클라이언트 오류가 아닙니다.

증상: 특정 모델에서 5xx가 반환되는 반면 다른 모델은 정상 작동.

HTTP 상태 코드의 의미

모든 오류 응답에는 표준 HTTP 상태 코드가 포함됩니다. 각 코드의 의미를 알면 불필요한 티켓을 줄일 수 있습니다.

400클라이언트 측Bad Request — JSON 형식 오류, 필수 필드 누락, 알 수 없는 파라미터. 요청 바디를 수정하세요.
401클라이언트 측Unauthorized — API 키가 없거나 유효하지 않습니다. Authorization 헤더에 "Bearer " 접두사가 포함되어 있는지 확인하세요.
402클라이언트 측Payment Required — 플랜이 소진되었거나 Pay-as-you-go 잔액이 부족합니다. 구독하거나 충전하세요.
403클라이언트 측Forbidden — 플랜 또는 키별 권한이 해당 모델이나 엔드포인트를 허용하지 않습니다.
404클라이언트 측Not Found — 알 수 없는 엔드포인트 또는 모델 ID. URL 경로와 모델 이름 철자를 확인하세요.
413클라이언트 측Payload Too Large — 입력이 모델의 컨텍스트 윈도우를 초과합니다. prompt를 줄이세요.
429클라이언트 측Too Many Requests — 속도 제한 초과 (RPM, RPD, 또는 일일 토큰 한도). 요청 속도를 줄이거나 업그레이드하세요.
500서버 측Internal Server Error — 서버 측 버그입니다. 1분 이상 지속되면 보고하세요.
502서버 측Bad Gateway — 백엔드 재시작 중 (하루에 몇 차례 배포가 있습니다). 5~10초 후 다시 시도하세요.
503서버 측Service Unavailable — 해당 모델의 모든 업스트림 공급자가 동시에 실패했습니다. 몇 분 이상 지속되면 보고하세요.
💡
기본 원칙: 4xx 코드는 클라이언트가 서버에서 거부된 요청을 보냈음을 의미합니다. 5xx 코드는 유효한 요청을 처리하지 못한 우리 측 문제입니다. 응답의 JSON 오류 바디에는 보통 검사를 트리거한 필드 이름이 명시됩니다.

실제 버그인 경우

위의 curl 자가 테스트는 성공하지만 코드에서 동일한 요청이 실패한다면, 문제는 클라이언트(또는 사용하는 라이브러리)에 있습니다. 자가 테스트 자체가 5xx로 실패하거나, 요청 내용과 맞지 않는 메시지와 함께 4xx가 반환된다면 보고할 가치가 있습니다.

효과적으로 보고하는 방법

Dashboard에서 지원 티켓을 열거나 Discord의 #support에 게시하세요. 다음 내용을 포함하세요:

  • 전체 HTTP 상태 코드와 응답 바디 (있는 경우 cf-ray 응답 헤더도 포함).
  • UTC 기준 대략적인 타임스탬프.
  • 모델 이름과 호출한 엔드포인트.
  • 재현 가능한 최소한의 cURL (실제 API 키는 마스킹하세요!).
  • 같은 키로 위의 자가 테스트가 성공하는지 여부.
ℹ️
효과적으로 보고하는 방법: 이 정보를 포함한 티켓은 첫 번째 시도에 실질적인 답변을 받습니다. 정보가 없는 티켓은 도움을 드리기 전에 거의 항상 추가 문의가 필요합니다.

Discord의 #support에 질문하기

설정이 막혔거나 무료 키가 필요하세요? 디스코드 커뮤니티에 물어보세요.

디스코드에 참여하기