24
로딩중...
3줄이면 첫 API 호출이 가능합니다:
curl -X POST https://24plus.ai.kr/api/v1/cafe/fortune_data \
-H "X-API-Key: pk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"birth":"199001151030","gender":1,"period":"yl"}'모든 API 요청에 인증 헤더를 포함해야 합니다. 두 가지 방식을 지원합니다:
# 방법 1: X-API-Key 헤더 (권장)
curl -H "X-API-Key: pk_live_your_api_key_here" ...
# 방법 2: Bearer Token
curl -H "Authorization: Bearer pk_live_your_api_key_here" ...API 키는 서버 사이드에서만 사용하세요. 클라이언트(브라우저, 앱)에 노출하면 안 됩니다. 키가 노출된 경우 즉시 관리자에게 폐기를 요청하세요.
파트너 설정에서 auth_type을 'api_key_ip'로 설정하면 등록된 IP에서만 API를 호출할 수 있습니다. 프로덕션 환경에서 권장합니다.
https://24plus.ai.kr/api/v1/cafe/{func_name}단일 엔드포인트에서 func_name으로 10개 MCP 도구를 호출합니다.
# API 목록 조회 (인증 불필요)
GET /api/v1/cafe/_list
→ { "tools": ["fortune_data","fortune_reading","cafe_ncode","daily_fortune",...] }대부분의 도구에 공통으로 적용됩니다. term_search, cafe_research는 birth/gender 없이 query만으로 호출 가능합니다.
| 필드 | 타입 | 설명 | |
|---|---|---|---|
birth | string | required | 생년월일시 YYYYMMDDHHMM (양력) |
gender | int | required | 성별 (0: 여, 1: 남) |
name | string | optional | 이름 (선택) |
is_lunar | int | optional | 음력 여부 (0: 양력(기본), 1: 음력, 2: 음력윤달) |
ws_flag | int | optional | 연주 기준 (0: 입춘, -1: 동지(기본)) |
{
"result": { ... }, // CAFE 엔진 분석 결과
"usage": {
"rpm_remaining": 58, // 분당 잔여
"rpd_remaining": 9945, // 일당 잔여
"monthly_remaining": 298721 // 월당 잔여
},
"meta": {
"function": "fortune_data", // 호출된 MCP 도구
"response_time_ms": 142, // 응답 시간 (ms)
"partner": "dangamsoft" // 파트너 코드
}
}MCP Tool 기준 8개 API · ● = 추가 파라미터 필요
fortune_data운세 Raw 데이터 (대운/세운/월운/일운)+paramsperiod | string | bl(대운), yl(세운), ml(월운), dl(일운) |
fortune_reading운세 흐름 분석 (이벤트, 변화, 가중치)+paramstype | string | events(이벤트), summary(요약) | |
period | string | bl/yl/ml/dl |
daily_fortune운세 서비스 (생활·활동·택일·종합)+paramsscope | string | required | total/life/activity/choice/yearly/monthly/daily/lifetime |
period | string | bl/yl/ml/dl (scope에 따라) | |
value | string | 대상: 연도(2026), 월(202601), 일(20260115) | |
selected_luck | string[] | 택일/활동 항목: ['계약/협약','면접/시험'] |
cafe_ncode성향분석 (MBTI+사주 융합 성격유형)+paramstype | string | all/tendency/career/luck | |
year | int | 분석 연도 (기본: 올해) |
compatibility관계분석 (1:1 궁합, 그룹 궁합)+paramsrel_birth | string | required | 상대방 생년월일시 YYYYMMDDHHMM |
rel_gender | int | required | 상대방 성별 (0: 여, 1: 남) |
relation_type | string | lover/friend/business/family |
namingAI 작명 (용신 기반 한자 추천, 9가지 모드)+paramsfamily_name | string | required | 성씨 (예: '김', '이') |
mode | string | basic/yongshin/hanja/stroke/sound/meaning/balance/full/eval |
cafe_research고전 원문 검색 (RAG 기반)+paramsquery | string | required | 검색어 (예: '편관 격국') |
top_k | int | 검색 결과 수 (기본: 5) | |
category | string | 카테고리 필터 |
term_search명리학 용어 검색+paramsquery | string | required | 검색어 (예: '편관', '식신') |
field | string | terms/keywords/dict |
MCP(Model Context Protocol) 연동 시 아래 도구명을 사용합니다. 각 도구는 파라미터로 세부 기능을 분기합니다.
cafe_ncodetype: all, tendency, career, luckfortune_dataperiod: bl(대운), yl(세운), ml(월운), dl(일운)fortune_readingtype: events, summary | period: bl, yl, ml, dldaily_fortunescope: total, life, activity, choice, yearly, monthly, dailycompatibilityrel_birth (필수), rel_gender (필수), relation_typenamingfamily_name (필수), mode: basic/yongshin/hanja/stroke/full/evalcafe_researchquery (필수), top_k, categoryterm_searchquery (필수), field: terms/keywords/dictAPI 키별로 3단계 제한이 적용됩니다. 기본값은 관리자와 협의하여 조정 가능합니다.
| 제한 | 기본값 | 리셋 | 초과 시 |
|---|---|---|---|
| RPM | 60 | 매 분 | 429 + Retry-After: 60 |
| RPD | 10,000 | 자정 KST | 429 |
| Monthly | 300,000 | 매월 1일 | 429 |
매 응답의 usage 필드에서 실시간 잔여량을 확인할 수 있습니다.
| 코드 | 설명 | 대응 |
|---|---|---|
| 400 | 잘못된 요청 (파라미터 오류/함수 미존재) | 파라미터 확인 |
| 401 | 인증 실패 (API 키 없음/유효하지 않음) | API 키 확인 |
| 403 | 권한 없음 (함수 접근 불가/IP 차단/계정 중지) | 관리자 권한 요청 |
| 429 | Rate limit 초과 (분당/일당/월당) | Retry-After 대기 |
| 502 | CAFE 엔진 연결 불가 | 재시도 (최대 3회) |
| 504 | CAFE 엔진 타임아웃 (30초) | 재시도 (최대 3회) |
// 일반 에러
{ "error": "Rate limit exceeded: 60 RPM" }
// CAFE 엔진 에러
{ "error": "CAFE engine error", "detail": { ... } }API 키를 입력하고 실제 호출을 테스트해보세요.
import requests
API_KEY = "pk_live_your_api_key_here"
BASE_URL = "https://24plus.ai.kr/api/v1/cafe"
def call_cafe(func_name, params):
resp = requests.post(
f"{BASE_URL}/{func_name}",
headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
json=params, timeout=30,
)
resp.raise_for_status()
return resp.json()
# 사주 기본 정보
result = call_cafe("fortune_data", {
"birth": "199001151030", "gender": 1, "period": "yl",
})
print(result["result"])
print(f"RPM 잔여: {result['usage']['rpm_remaining']}")
# 관계분석
compat = call_cafe("compatibility", {
"birth": "199001151030", "gender": 1,
"rel_birth": "199205201400", "rel_gender": 0,
})const API_KEY = "pk_live_your_api_key_here";
const BASE_URL = "https://24plus.ai.kr/api/v1/cafe";
async function callCafe(funcName, params) {
const res = await fetch(`${BASE_URL}/${funcName}`, {
method: "POST",
headers: { "X-API-Key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify(params),
signal: AbortSignal.timeout(30000),
});
if (!res.ok) {
const err = await res.json();
throw new Error(`${res.status}: ${err.error}`);
}
return res.json();
}
// 오늘의 운세
const fortune = await callCafe("daily_fortune", {
birth: "199001151030", gender: 1, scope: "total",
});
// 작명
const names = await callCafe("naming", {
birth: "202401150800", gender: 0, family_name: "김",
});import requests
from time import sleep
def call_with_retry(func_name, params, max_retries=3):
for attempt in range(max_retries):
try:
resp = requests.post(
f"{BASE_URL}/{func_name}",
headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
json=params, timeout=30,
)
if resp.status_code == 429:
retry_after = int(resp.headers.get("Retry-After", 60))
sleep(retry_after)
continue
if resp.status_code in (502, 504):
sleep(2 ** attempt)
continue
resp.raise_for_status()
return resp.json()
except requests.Timeout:
if attempt == max_retries - 1: raise
raise Exception("Max retries exceeded")도움이 필요하신가요?
API 키 발급, 권한 설정, Rate Limit 조정 → 24Plus 관리자 문의. 기술적 문제 → partner@24plus.kr