개발자 시작 가이드

HRUM(흐름) 사주 API를 처음 연동하는 순서입니다. 가입부터 첫 호출, 과금, 에러 처리까지 이 페이지만 따라 하면 됩니다. 엔드포인트별 전체 파라미터는 API 문서에 있습니다.

가입 전에 결과부터 보고 싶다면 플레이그라운드에서 키 없이 월 5회까지 무료로 시험해 볼 수 있습니다.

1. 콘솔 가입

  1. 콘솔 로그인 화면에서 회원가입 탭을 고르고 이메일과 비밀번호를 입력합니다.
  2. 받은 편지함의 "이메일 인증" 메일에서 인증 버튼을 누른 뒤 다시 로그인합니다.
  3. 가입하면 무료 크레딧 ₩1,000이 지급됩니다(부정 가입 방지 조건에 걸리면 지급이 보류될 수 있습니다).

2. API 키 발급

  1. 콘솔의 API 키 화면에서 키 제목(예: 프로덕션 서버)을 적고 발급을 누릅니다.
  2. 새 키는 발급 직후 한 번만 보입니다. 바로 복사해 서버의 환경변수 등 안전한 곳에 보관하세요. 잃어버리면 새로 발급합니다.
  3. 키는 서버에서만 쓰세요. 브라우저나 앱 코드에 넣으면 누구나 꺼내 쓸 수 있습니다.

같은 화면의 요청 제한에서 초당·일일 요청 수를 정해 두면 키가 새거나 코드가 무한 반복해도 잔액을 지킬 수 있습니다.

3. 첫 호출 — 만세력

모든 요청은 https://api.hrum.ai/api/v1/partners/v1/ 아래 경로로, 키는 X-Partner-Api-Key 헤더에 담아 보냅니다. 아래는 생년월일시로 사주 원국을 계산하는 만세력 호출입니다.

curl

export HRUM_API_KEY="발급받은 키"

curl -X POST https://api.hrum.ai/api/v1/partners/v1/manseryeok \
  -H "X-Partner-Api-Key: $HRUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"year":1990,"month":5,"day":15,"hour":12,"minute":0,"timezone":"Asia/Seoul","gender":"male"}'

Python (requests)

import os
import requests

res = requests.post(
    "https://api.hrum.ai/api/v1/partners/v1/manseryeok",
    headers={"X-Partner-Api-Key": os.environ["HRUM_API_KEY"]},
    json={"year": 1990, "month": 5, "day": 15, "hour": 12, "minute": 0,
          "timezone": "Asia/Seoul", "gender": "male"},
    timeout=30,
)
body = res.json()
if not body.get("success"):
    raise RuntimeError(f'{body.get("statusCode")} {body.get("code")}')
print(body["data"]["wonkuk"]["day"])

Python 표준 라이브러리 urllib의 기본 User-Agent는 보안 규칙에 걸려 403이 돌아옵니다. requests를 쓰거나, urllib을 쓴다면 User-Agent: <앱이름>/<버전> 헤더를 직접 넣으세요.

JavaScript (Node 18 이상, 서버에서)

const res = await fetch('https://api.hrum.ai/api/v1/partners/v1/manseryeok', {
  method: 'POST',
  headers: {
    'X-Partner-Api-Key': process.env.HRUM_API_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ year: 1990, month: 5, day: 15, hour: 12, minute: 0, timezone: 'Asia/Seoul', gender: 'male' }),
});
const body = await res.json();
if (!body.success) throw new Error(`${body.statusCode} ${body.code ?? ''}`);
console.log(body.data.wonkuk.day);

4. 응답 읽기

성공하면 {"success": true, "data": { … }} 형태로 돌아옵니다. 만세력은 data 안에 원국 4주(wonkuk), 오행 분포(ohaengBalance), 용신(yongshin), 격국, 대운·세운 등이 들어 있습니다. 필드 전체 목록은 만세력 API 문서를 보세요.

만세력처럼 같은 입력이면 결과가 같은 계산형 API는 한 번 받은 결과를 DB에 저장해 두고 다시 쓰면 비용이 들지 않습니다.

5. 과금과 크레딧

상품별 단가는 요금표에 있습니다. 주요 계산형 상품 가격(현재 요금표 기준):

6. 에러 처리

오류 응답 본문은 {"success": false, "statusCode": 400, "code": "…", "message": "…", "timestamp": "…"} 형식입니다. 분기는 statusCode와 code로 하고, message 문구에는 의존하지 마세요.

코드뜻어떻게 처리하나
400잘못된 요청 파라미터요청을 고칩니다. 같은 요청을 재시도하지 마세요.
401API 키가 없거나 유효하지 않음헤더 이름(X-Partner-Api-Key)과 키 값을 확인합니다.
402크레딧 잔액 부족 (INSUFFICIENT_BALANCE)충전 후 다시 호출합니다.
404계정에 열리지 않은 기능(*_not_enabled) 또는 없는 리소스과금되지 않습니다. 경로와 기능 사용 여부를 확인합니다.
422처리할 수 없는 입력 (예: PROMPT_TOO_LONG)입력을 줄이거나 고칩니다.
429요청 한도 초과Retry-After 헤더가 있으면 그만큼, 없으면 잠시(최대 1분) 기다린 뒤 재시도합니다.
500 · 503 · 504서버 오류 · 일시적 이용 불가 · 업스트림 시간 초과간격을 늘려 가며(예: 1초 → 2초 → 4초) 몇 번만 재시도합니다.

서비스 보호를 위해 API 키당 분당 300회 상한이 항상 걸려 있습니다. 자세한 내용은 에러 코드와 Rate Limit 문서를 보세요. 장애 여부는 상태 페이지에서 확인할 수 있습니다.

다음 단계

문의: [email protected] · 운영: 플로트 주식회사