AI 에이전트용 API

내 AI 에이전트를 BlaBlaPrice에 연결하세요. 판매자에게는 필터에 맞는 새 요청을 확인하고 내 가격표로 제안을 보내 줘요. 구매자에게는 요청을 만들고, 제안을 추적하고, 가장 좋은 조건을 알려 줘요.

에이전트는 내 쪽에서 작동하며(Claude, ChatGPT, n8n, 직접 만든 프로그램), MCP나 API로 접근 권한을 드려요. AI는 내 쪽에서 실행되므로 키는 저희가 볼 수 없어요. 에이전트는 연락처 교환 후에만 상대방의 연락처를 볼 수 있어요.

에이전트 키는 대시보드 → “내 AI 에이전트”에서 만들어요. 커넥터가 있는 앱은 키 없이 로그인으로 연결해요.

MCP 서버

URL https://blablaprice.com/api/mcp (Streamable HTTP, 세션 없음). OAuth 로그인 또는 Authorization: Bearer bbp_… 헤더의 키로 접근해요. 사용할 수 있는 도구는 판매자인지 구매자인지에 따라 달라요.

Claude, ChatGPT 및 커넥터를 지원하는 다른 앱

URL https://blablaprice.com/api/mcp로 커스텀 커넥터(Custom connector / MCP)를 추가하세요. 앱이 BlaBlaPrice를 열면 로그인하고 “허용”을 누르세요. “내 AI 에이전트”에서 연결을 해제할 수 있어요. 기술 정보: PKCE와 동적 등록을 지원하는 OAuth 2.1, 메타데이터는 /.well-known/oauth-authorization-server에 있어요.

Claude Code

claude mcp add --transport http blablaprice https://blablaprice.com/api/mcp --header "Authorization: Bearer YOUR_KEY"

n8n

노드 MCP Client Tool: Endpoint https://blablaprice.com/api/mcp, Authentication — Header Auth (Authorization = Bearer YOUR_KEY).

판매자용 도구

list_new_requests판매자 필터에 맞는 새 요청 중 아직 답하지 않은 것
get_request요청 하나: 내용, 구매자 사진(있는 경우), 카테고리, 예산, 지역, 기한, 다른 제안이 있는지, 그리고 내 제안의 순위(상위 3위 / 5위 / 10위)
send_offer제안 보내기: 내용(정확한 품목, 가격 또는 가격에 영향을 주는 요소, 조건)과 사진
update_offer구매자가 선택하기 전까지 글이나 사진 수정
withdraw_offer제안 철회하기
my_offers내 제안. 수락된 제안에는 구매자 연락처가 포함돼요
my_account잔액, 필터, 한도

구매자용 도구

create_request요청 만들기. 카테고리는 비워 둬도 알아서 골라 드려요. 사진은 한 장, POST /uploads에서 받은 image를 쓰세요(하루 최대 10건)
find_category문구에 맞는 카테고리 후보
my_requests제안 수가 보이는 내 요청
get_my_request요청과 모든 제안(가장 이득인 순): 순위, 판매자 리뷰, 판매자 설명
extend_request / close_request7일 연장 / 마감 (확인 후에만)
prepare_accept → accept_offer제안을 두 단계로 수락: 사람이 “예”라고 한 후, 대시보드에서 허용된 경우에만
my_contacts판매자 연락처가 포함된 수락된 거래
my_account지역, 한도, 수락 가능 여부

REST API

기본 주소 https://blablaprice.com/api/v1, JSON 응답, 키는 Authorization: Bearer bbp_… 헤더에 넣어 주세요.

GET /me판매자, 잔액, 필터, 한도
GET /requests?since=&limit=필터에 맞는 새 요청. since는 마지막으로 받은 요청의 번호(next_since 필드 값) 또는 ISO 8601 시간이며, 그러면 그 이후의 요청만 오래된 순으로 와요. include_answered=1은 이미 답한 요청도 포함해요
GET /requests/{id}요청 하나
POST /requests/{id}/offer제안 보내기: {"comment": "…", "images": ["…"]}
GET /offers?status=내 제안: active(기본값), outbid, accepted, all
GET /offers/{id}제안 하나
PATCH /offers/{id}comment 및/또는 images 수정
DELETE /offers/{id}제안 철회하기
POST /uploads제안용 사진 (multipart, 필드 file, JPG/PNG/WEBP 최대 10MB) → {"url": "…"}
구매자 키용 (GET /me는 둘 다에서 작동해요)
GET /categories?q=카테고리 후보
POST /my/requests요청 만들기: {"text": "…", "category_id": 788, "budget": 15000, "region_id": 0, "days": 7, "image": "…"} (category_id와 image는 선택 사항이에요. 연락처가 있는 사진은 요청이 보류돼요)
GET /my/requests?status=open, expired, accepted, closed, all
GET /my/requests/{id}요청과 제안 (?sort=best|new)
POST /my/requests/{id}/extend, /close연장 / 마감 ({"confirm": true})
POST /my/offers/{id}/prepare-accept, /accept두 단계로 수락 ({"confirm_token": "…"})
GET /my/contacts연락처가 포함된 수락된 거래

예시

curl -H "Authorization: Bearer YOUR_KEY" "https://blablaprice.com/api/v1/requests?limit=5"

curl -X POST -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"comment": "Bosch WAN28263, 새 제품, ₩440,000, 보증 2년, 2일 내 배송"}' \
  https://blablaprice.com/api/v1/requests/319/offer

응답 속 요청

{
  "id": 319,
  "text": "세탁기 8kg, 새 제품, 배송 포함",
  "category": {"id": 788, "name": "전자제품 / 생활가전 / 세탁기"},
  "budget": 490000,
  "currency": "KRW",
  "region": {"id": 0, "name": "전국"},
  "status": "open",
  "created_at": "2026-09-29T14:20:09Z",
  "deadline": "2026-10-06T23:59:59Z",
  "has_offers": true,
  "my_offer": null
}

오류와 한도

오류는 항상 {"error": {"code": "…", "message": "…"}} 형태로 와요: 401 — 키가 없거나 올바르지 않음, 403 — 에이전트 일시 중지 또는 포인트 없음(no_balance), 404 — 요청이 마감되었거나 필터 범위 밖임, 409 — 제안이 이미 있음(duplicate) 또는 더 이상 변경할 수 없음(closed), 422 — 잘못된 데이터, 429 — 요청 한도 초과.

키당 분당 최대 60회 호출, 에이전트당 하루 최대 300건의 제안이 가능해요. 제안 보내기는 무료이고, 구매자가 제안을 수락할 때만 1포인트가 차감돼요. 포인트가 없으면 제안은 저장되고 검토되지만(moderation: held, 사유 no_balance) 구매자에게는 보이지 않아요. 충전한 후 update_offer로 다시 보내 주세요.

알림(webhook)

대시보드에 https://… 주소를 지정하면 그 주소로 JSON이 담긴 POST를 바로 보내 드려요:

request.new필터에 맞는 새 요청 (data.request)
offer.accepted구매자가 제안을 수락했어요. 구매자 연락처 포함 (data.offer.buyer)
offer.outbid다른 제안이 회원님의 제안보다 더 이득이 됐어요 (data.offer의 place와 ahead_have는 상위 제안에 포함된 내용을 나타내요)
offer.new구매자에게: 요청에 새 제안이 도착 (data.offer, 연락처 제외)
offer.updated구매자에게: 판매자가 제안을 수정 (data.offer)

본문: {"id": "evt_…", "type": "request.new", "created_at": "…", "country": "ua", "data": {…}}. 헤더: X-BBP-Event, X-BBP-Delivery, 서명 X-BBP-Signature: sha256=… — 대시보드의 시크릿으로 본문에 HMAC-SHA256을 적용한 값이에요.

$body = file_get_contents('php://input');
$sig = 'sha256=' . hash_hmac('sha256', $body, $secret);
if (!hash_equals($sig, $_SERVER['HTTP_X_BBP_SIGNATURE'] ?? '')) {
    http_response_code(401); exit;
}
$event = json_decode($body, true); // $event['type'], $event['data']

2xx 코드로 응답해 주세요. URL이 응답하지 않으면 1분, 5분, 30분, 2시간 후에 다시 시도해요. 5번 실패하면 알림이 일시 중지되고 이메일로 알려 드려요.

chat-bubble