개발자 센터
BankFlow은 은행 입출금 알림을 통합 관리하고, 실시간 입금 자동매칭을 제공하는 SaaS 플랫폼입니다.
API를 통해 다음 기능을 이용할 수 있습니다:
- 입출금 데이터 실시간 수신 — 계좌의 입출금 발생 시 Webhook으로 즉시 전달
- 주문-입금 자동매칭 — 쇼핑몰 주문을 등록하면, 입금 시 입금자명+금액으로 1초 자동매칭
- 거래 데이터 조회 — 저장된 거래 내역을 API로 조회
인증
모든 API 요청에는 다음 헤더가 필요합니다:
Content-Type: application/json X-API-Key: your-api-key X-Store-Id: your-store-key (선택, 주문 API 사용 시 필요)
API Key는 대시보드 > 설정 > API 키에서 생성할 수 있습니다.
X-Store-Id는 여러 사이트를 운영할 때 어떤 사이트의 요청인지 구분하기 위한 헤더입니다. 대시보드 > 상점 관리에서 상점을 등록하면 Store Key가 발급됩니다.
오류 처리
모든 응답은 JSON 형식이며, success 필드로 성공 여부를 판단합니다:
성공 응답
{
"success": true,
"message": "주문이 등록되었습니다.",
"data": { ... }
}
실패 응답
{
"success": false,
"message": "필수 항목이 누락되었습니다: amount"
}
| HTTP 코드 | 의미 |
|---|---|
| 200 | 성공 |
| 400 | 잘못된 요청 (파라미터 오류) |
| 401 | 인증 실패 (API Key 오류) |
| 403 | 권한 없음 |
| 404 | 리소스 없음 |
| 405 | 허용되지 않는 메서드 |
| 409 | 충돌 (중복 등) |
| 500 | 서버 오류 |
입출금 데이터 실시간 수신
계좌에 입출금이 발생하면 알림전달앱 → BankFlow → 등록된 Webhook URL로 데이터를 전송합니다.
설정 방법
- 대시보드 > 설정에서 Webhook URL과 Webhook Secret을 확인합니다.
- 알림전달앱에 Webhook URL을 등록합니다.
- 은행 앱에서 SMS 통지 서비스를 신청합니다.
수신 데이터 형식
알림전달앱에서 BankFlow로 전송하는 형식:
POST https://bankflow.co.kr/api/v1/webhook
{
"app": "알림전달앱이름",
"title": "우리은행",
"message": "[입금] 홍길동 313,500원 1005-204-572***계좌 잔액 7,566,003원 04/17 16:29:16",
"timestamp": "2024-04-17 16:29:16"
}
주문 등록
무통장입금 주문을 등록합니다. 해당 금액+입금자명으로 입금이 발생하면 자동으로 매칭됩니다.
POST https://bankflow.co.kr/api/v1/order
Request Body
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
| order_ref | string | O | 쇼핑몰 주문번호 (고유) |
| amount | integer | O | 주문 금액 (원) |
| depositor_name | string | O | 예상 입금자명 |
| buyer_name | string | 주문자명 (입금자와 다를 경우) | |
| bank_account_id | integer | 특정 계좌만 매칭 (미지정 시 전체) | |
| callback_url | string | 매칭 완료 시 결과 전송할 URL | |
| expires_hours | integer | 매칭 대기 시간 (기본 336=14일) | |
| meta | object | 추가 데이터 (콜백 시 함께 전달) |
요청 예시
{
"order_ref": "ORD-20240417-001",
"amount": 50000,
"depositor_name": "홍길동",
"callback_url": "https://myshop.com/api/payment-confirm",
"meta": {
"product": "프리미엄 플랜",
"user_id": 1234
}
}
응답 예시
{
"success": true,
"message": "주문이 등록되었습니다.",
"data": {
"order_id": 1,
"order_ref": "ORD-20240417-001",
"status": "pending"
}
}
주문 매칭제외
특정 주문을 매칭 대상에서 제외합니다.
POST https://bankflow.co.kr/api/v1/order-exclude
Request Body
{
"order_ref": "ORD-20240417-001"
}
// 또는
{
"order_id": 1
}
주문 조회
등록된 주문 목록을 조회합니다.
GET https://bankflow.co.kr/api/v1/orders?status=pending&page=1&per_page=30
Query Parameters
| 파라미터 | 설명 |
|---|---|
| status | pending, matched, excluded, expired, cancelled (선택) |
| page | 페이지 번호 (기본 1) |
| per_page | 페이지당 건수 (기본 30, 최대 100) |
매칭 완료 Webhook
주문이 입금과 매칭되면 등록된 callback_url로 다음 데이터가 전송됩니다:
WEBHOOK callback_url (고객사 서버)
{
"event": "order.matched",
"order_id": 1,
"order_ref": "ORD-20240417-001",
"amount": 50000,
"depositor_name": "홍길동",
"transaction_id": 123,
"matched_at": "2024-04-17 16:29:16",
"balance_after": 7566003,
"meta": {
"product": "프리미엄 플랜",
"user_id": 1234
}
}
상점 (Store)
여러 사이트를 운영하는 경우, 각 사이트를 상점(Store)으로 등록하여 독립적으로 관리할 수 있습니다.
상점별 분리 항목
| 항목 | 설명 |
|---|---|
| Store Key | API 요청 시 X-Store-Id 헤더에 사용 |
| 콜백 URL | 주문별 미지정 시 상점의 기본 URL 사용 |
| 연결 계좌 | 이 상점의 입금을 특정 계좌에서만 매칭 |
| 주문 네임스페이스 | 상점별로 order_ref 독립 관리 (다른 상점과 겹쳐도 OK) |
사용 예시
// BlogMate에서 주문 등록 POST /api/v1/order Headers: X-API-Key: bf_xxxxx X-Store-Id: blogmate // Work ERP에서 주문 등록 (같은 API Key, 다른 Store) POST /api/v1/order Headers: X-API-Key: bf_xxxxx X-Store-Id: work-erp
거래 내역 조회
저장된 거래 내역을 조회합니다.
GET https://bankflow.co.kr/api/v1/transactions?from=2024-01-01&to=2024-12-31&type=deposit
Query Parameters
| 파라미터 | 설명 |
|---|---|
| from | 시작일 (YYYY-MM-DD) |
| to | 종료일 (YYYY-MM-DD) |
| type | deposit, withdrawal (선택) |
| account_id | 특정 계좌 ID (선택) |
| page | 페이지 번호 |
| per_page | 페이지당 건수 (최대 100) |
계좌 목록 조회
등록된 계좌 목록을 조회합니다.
GET https://bankflow.co.kr/api/v1/accounts
자주 묻는 질문
자동매칭되는 기준은 무엇인가요?
입금 내역의 입금자명과 금액이 대기 중인 주문의 입금자명, 금액과 정확히 일치하는 주문이 1건일 때 자동매칭됩니다. 일치하는 주문이 없거나 2건 이상이면 매칭되지 않습니다.
매칭이 안 되는 경우는?
- 주문이 입금보다 나중에 등록된 경우 (주문을 먼저 등록해야 합니다)
- 입금자명에 공백이 포함되어 정확히 일치하지 않는 경우
- 주문 만료 시간(기본 14일)이 지난 경우
- 동일 입금자명+금액의 주문이 2건 이상인 경우
Webhook이 오지 않아요
- 등록한 Webhook URL이 외부에서 접근 가능한 HTTPS 주소인지 확인하세요.
- 서버 방화벽에서 외부 요청을 차단하고 있지 않은지 확인하세요.
- 유효한 SSL 인증서가 설치되어 있는지 확인하세요.
- 대시보드 > Webhook 로그에서 전송 내역을 확인할 수 있습니다.
API 호출 제한이 있나요?
구독 플랜에 따라 시간당 요청 수가 제한됩니다. 기본 1,000건/시간입니다.