개발자 문서
API 레퍼런스

계좌 - 하나은행 빠른조회

1. 하나은행 빠른조회 계좌 목록hana_fast_account.accounts.list

MCP 도구 이름 hana_fast_account__accounts__list

POSThttps://api.xdata.kr/v1/jobsX-Env-Scope: real_test

현재 혜택은 요금제에서 확인해 주세요. 현재 데모 정책과 계정의 남은 양을 확인해 주세요.

이 호출자가 하나은행 계좌로 등록한 연동과 그 아래 계좌를 나열합니다.

  • 이 API 는 기관 연동과 기관 로그인이 필요 없습니다. 기관 자격증명을 등록하지 않아도 호출할 수 있고, account_link_id 는 보내지 않습니다.

Request

순번변수명필수설명
AuthorizationYAPI 자격증명입니다. client_id 와 client_secret 을 콜론으로 이어 Base64 로 인코딩해 보냅니다.

형식 : Basic base64("{client_id}:{client_secret}")

[참고] 인증

X-Env-ScopeY호출 환경입니다.
  • real_test데모 — 현재 데모 한도 확인 필요
  • production정식 — 현재 공개 요금제 전용

[참고] 환경

Idempotency-KeyY재시도 식별 키입니다. 같은 키와 같은 본문으로 다시 호출하면 기존 작업이 그대로 반환됩니다. ASCII 문자만 사용하며 UUID v4 를 권장합니다. 고객 정보는 넣지 않습니다.

[참고] 재시도

Content-TypeY요청 본문 형식입니다.
  • application/json고정값 (기본값)
X-Trace-IdN추적 아이디입니다. 지정하지 않으면 서버가 발급합니다.
순번변수명타입필수설명
providerstringY호출할 기관입니다.
  • hana_fast_account이 API 고정값 (기본값)

예시 : hana_fast_account

actionstringY호출할 작업입니다.
  • hana_fast_account.accounts.list이 API 고정값 (기본값)

예시 : hana_fast_account.accounts.list

paramsobjectN작업 파라미터입니다. 이 API 는 빈 객체로 호출할 수 있습니다.
encrypted_fieldsobjectN민감한 params 값을 RSA-OAEP-256 으로 암호화해 담는 객체입니다. 서버가 복호화해 params 에 합칩니다. 같은 이름을 params 와 함께 쓰지 않습니다.

[참고] 암호화

추가 파라미터가 없습니다. params 는 {} 로 보냅니다.

bash
curl --request POST \
  --url 'https://api.xdata.kr/v1/jobs' \
  --header 'Authorization: Basic {base64(client_id:client_secret)}' \
  --header 'X-Env-Scope: real_test' \
  --header 'Idempotency-Key: demo-list-001' \
  --header 'Content-Type: application/json' \
  --data '{
  "provider": "hana_fast_account",
  "action": "hana_fast_account.accounts.list",
  "params": {}
}'

Response

순번변수명타입설명
successboolean목록을 돌려줬다는 표지입니다. 항상 true 입니다.
providerstring연동을 가려낸 상품 구분 값입니다. 이 작업에서는 항상 hana_fast_account 입니다(호출한 작업 이름의 앞부분).
linksarray이 계정이 이 상품에 연결해 둔 연동 목록입니다. 사용 중인 연동만 담고 최근에 만든 연동이 앞에 옵니다. 연동이 없으면 빈 배열입니다.
links[].account_link_idstring연동 ID 입니다. 이 상품의 다른 작업을 부를 때 account_link_id 로 보냅니다.
links[].display_labelstring | null연동에 붙인 표시 이름입니다. 이름이 없으면 null 입니다.
links[].accountsarray이 연동에 등록된 계좌 목록입니다. 사용 중인 계좌만 담고 등록한 순서대로(오래된 것이 앞) 옵니다.
links[].accounts[].bank_account_credential_idstring계좌 ID 입니다. 계좌를 고르는 작업을 부를 때 bank_account_credential_id 로 보냅니다.
links[].accounts[].masked_account_nostring가려진 계좌번호입니다. 전체 번호는 돌려주지 않습니다.
links[].accounts[].statusstring계좌의 상태입니다. 사용 중인 계좌만 담으므로 항상 ACTIVE 입니다.
link_countnumberlinks 에 담긴 연동의 수입니다.
account_countnumber모든 연동의 accounts 에 담긴 계좌의 총 수입니다.
truncatedboolean이 계정의 사용 중인 연동 전체(모든 상품의 합계)가 100개를 넘으면 true 입니다. 이때는 최근 100개 연동만 훑어 목록을 만들었으므로 일부 연동이 빠져 있을 수 있습니다.
json
// result.data - 값 자리에는 각 칸의 형식을 적었습니다 (실제 값이 아닙니다)
{
  "success": "<boolean>",
  "provider": "<string>",
  "links": [
    {
      "account_link_id": "<string>",
      "display_label": "<string | null>",
      "accounts": [
        {
          "bank_account_credential_id": "<string>",
          "masked_account_no": "<string>",
          "status": "<string>"
        }
      ]
    }
  ],
  "link_count": "<number>",
  "account_count": "<number>",
  "truncated": "<boolean>"
}

MCP 도구 이름 hana_fast_account__accounts__transaction_history__search

POSThttps://api.xdata.kr/v1/jobsX-Env-Scope: real_test

현재 혜택은 요금제에서 확인해 주세요. 현재 데모 정책과 계정의 남은 양을 확인해 주세요.

기간과 입출금 구분을 지정해 하나은행 계좌의 거래내역과 잔액 요약을 함께 받습니다.

  • 하나은행 빠른조회 세션 로그인을 먼저 호출해 세션을 등록한 뒤, 같은 account_link_id 로 호출합니다. [하나은행 빠른조회 로그인]
  • transaction_type(기본값 all)과 sort_order(기본값 desc)는 선택입니다.

Request

순번변수명필수설명
AuthorizationYAPI 자격증명입니다. client_id 와 client_secret 을 콜론으로 이어 Base64 로 인코딩해 보냅니다.

형식 : Basic base64("{client_id}:{client_secret}")

[참고] 인증

X-Env-ScopeY호출 환경입니다.
  • real_test데모 — 현재 데모 한도 확인 필요
  • production정식 — 현재 공개 요금제 전용

[참고] 환경

Idempotency-KeyY재시도 식별 키입니다. 같은 키와 같은 본문으로 다시 호출하면 기존 작업이 그대로 반환됩니다. ASCII 문자만 사용하며 UUID v4 를 권장합니다. 고객 정보는 넣지 않습니다.

[참고] 재시도

Content-TypeY요청 본문 형식입니다.
  • application/json고정값 (기본값)
X-Trace-IdN추적 아이디입니다. 지정하지 않으면 서버가 발급합니다.
순번변수명타입길이필수설명
providerstring-Y호출할 기관입니다.
  • hana_fast_account이 API 고정값 (기본값)

예시 : hana_fast_account

actionstring-Y호출할 작업입니다.
  • hana_fast_account.accounts.transaction_history.search이 API 고정값 (기본값)

예시 : hana_fast_account.accounts.transaction_history.search

account_link_idstring36Y등록한 자격증명을 가리키는 아이디입니다. 이 기관은 자격증명을 자동으로 고르지 않으므로 생략할 수 없습니다. 생략하거나 지정한 아이디를 쓸 수 없으면 접수 단계에서 400 VALIDATION_INVALID_FIELD 로 거절되고 작업은 만들어지지 않습니다. 이유와 할 일은 error.message 의 한국어 문장에 있습니다.

형식 : UUID v4

[참고] 자격증명 등록

paramsobject-Y작업 파라미터입니다. 아래 params 파라미터 표의 필수 항목을 채워 보냅니다.
encrypted_fieldsobject-N민감한 params 값을 RSA-OAEP-256 으로 암호화해 담는 객체입니다. 서버가 복호화해 params 에 합칩니다. 같은 이름을 params 와 함께 쓰지 않습니다.

[참고] 암호화

순번변수명타입필수설명
bank_account_credential_idstringY조회할 계좌의 ID 입니다. hana_fast_account.accounts.list 결과의 links[].accounts[].bank_account_credential_id 값을 그대로 보내며, 요청의 account_link_id 연동에 등록된 사용 중인 계좌여야 합니다
start_datestringY조회 시작일입니다. YYYY-MM-DD 나 YYYYMMDD 형식으로 보내며 end_date 보다 늦을 수 없고, 형식이 맞지 않거나 순서가 거꾸로이면 거절합니다. 종료일보다 2년을 넘게 앞선 날짜도 거절합니다. 조회 기간의 거래가 한 번에 받을 수 있는 60건을 넘으면 결과를 돌려주지 않고 실패하므로 기간을 나누어 보냅니다
end_datestringY조회 종료일입니다. 형식은 start_date 와 같고 start_date 보다 빠를 수 없습니다. 오늘(한국 시각)보다 늦은 날짜는 거절합니다
transaction_typestringN조회할 거래 구분입니다. all 은 입금과 출금 전체, deposit 은 입금만, withdrawal 은 출금만이며 보내지 않으면 all 입니다

예시 : all

sort_orderstringN거래 정렬 순서입니다. desc 는 최근 거래가 먼저, asc 는 오래된 거래가 먼저이며 보내지 않으면 desc 입니다

예시 : desc

output_formatsarrayN이 결과를 엑셀(xlsx) 파일로도 받으려면 적습니다. 예: ["xlsx"]. 파일은 result.artifacts 에 함께 오고, 빼면 데이터만 옵니다
bash
curl --request POST \
  --url 'https://api.xdata.kr/v1/jobs' \
  --header 'Authorization: Basic {base64(client_id:client_secret)}' \
  --header 'X-Env-Scope: real_test' \
  --header 'Idempotency-Key: demo-search-001' \
  --header 'Content-Type: application/json' \
  --data '{
  "provider": "hana_fast_account",
  "action": "hana_fast_account.accounts.transaction_history.search",
  "account_link_id": "9b4c3a2f-0000-4000-8000-000000000000",
  "params": {
    "bank_account_credential_id": "<필수>",
    "start_date": "<필수>",
    "end_date": "<필수>",
    "transaction_type": "all",
    "sort_order": "desc"
  }
}'

Response

  • result.data 의 rows 로 입출금 내역을, 계좌 요약(잔액과 출금 가능 금액)과 함께 확인합니다.
순번변수명타입설명
account_link_idstring조회에 쓴 연동의 ID 입니다. 요청에 보낸 값입니다.
bank_account_credential_idstring조회에 쓴 계좌의 ID 입니다. 요청에 보낸 값입니다.
queryobject이번 조회에 실제로 쓴 조건입니다.
query.start_datestring조회 시작일입니다. 요청에 보낸 값을 YYYY-MM-DD 모양으로 맞춘 문자열입니다.
query.end_datestring조회 종료일입니다. 요청에 보낸 값을 YYYY-MM-DD 모양으로 맞춘 문자열입니다.
query.transaction_typestring거래 구분 조건입니다. 요청에서 쓴 값입니다.
query.sort_orderstring정렬 방향입니다. 요청에서 쓴 값(desc 또는 asc)입니다.
accountobject조회한 계좌의 요약입니다.
account.account_no_displaystring가려진 계좌번호입니다. 전체 번호는 돌려주지 않습니다.
account.currencystring통화 코드입니다. 항상 KRW 입니다.
account.balancenumber | null계좌 잔액입니다. 원 단위 정수이고, 기관이 값을 주지 않으면 null 입니다.
account.withdrawable_amountnumber | null출금 가능 금액입니다. 원 단위 정수이고, 기관이 값을 주지 않으면 null 입니다.
countnumberrows 에 담긴 거래의 건수입니다.
rowsarray거래내역 목록입니다. 조건에 맞는 거래가 없으면 빈 배열입니다.
rows[].transaction_datetimestring거래 일시입니다. 기관 화면의 시각을 YYYY-MM-DDTHH:MM:SS 모양으로 옮긴 문자열이며 시간대 표기는 없습니다.
rows[].summarystring | null적요입니다. 기관 화면의 칸이 비어 있으면 null 입니다.
rows[].descriptionstring | null거래 내용입니다. 기관 화면의 칸이 비어 있으면 null 입니다.
rows[].deposit_amountnumber | null입금액입니다. 원 단위 정수이고, 기관 화면의 칸이 비어 있으면 null 입니다.
rows[].withdrawal_amountnumber | null출금액입니다. 원 단위 정수이고, 기관 화면의 칸이 비어 있으면 null 입니다.
rows[].balancenumber | null그 거래 건의 잔액입니다. 원 단위 정수이고, 기관 화면의 칸이 비어 있으면 null 입니다.
rows[].branch_or_channelstring | null거래점 또는 거래 채널입니다. 기관 화면의 칸이 비어 있으면 null 입니다.
continuationobject이어받기 정보입니다. 이 작업은 한 번에 1쪽만 가져옵니다. 기관에 더 있으면 응답 대신 오류로 끝나므로(오류표 참고) 성공 응답에서 이어받을 거래는 없습니다.
continuation.requested_pagesnumber가져온 쪽 수입니다. 이 작업에서는 항상 1 입니다.
continuation.has_moreboolean이어받을 거래가 더 남았는지를 나타냅니다. 더 있으면 응답 대신 오류로 끝나므로 성공 응답에서는 항상 false 입니다.
json
// result.data
{
  "account_link_id": "9b4c3a2f-0000-4000-8000-000000000000",
  "bank_account_credential_id": "5d1e7a90-0000-4000-8000-000000000000",
  "query": {
    "start_date": "2026-01-01",
    "end_date": "2026-01-31",
    "transaction_type": "all",
    "sort_order": "desc"
  },
  "account": {
    "account_no_display": "123-******-789",
    "currency": "KRW",
    "balance": 2750000,
    "withdrawable_amount": 2750000
  },
  "count": 2,
  "rows": [
    {
      "transaction_datetime": "2026-01-20T10:15:30",
      "summary": "급여",
      "description": "1월 급여",
      "deposit_amount": 2500000,
      "withdrawal_amount": null,
      "balance": 2750000,
      "branch_or_channel": "인터넷뱅킹"
    },
    {
      "transaction_datetime": "2026-01-12T09:02:11",
      "summary": "카드대금",
      "description": null,
      "deposit_amount": null,
      "withdrawal_amount": 300000,
      "balance": 250000,
      "branch_or_channel": "자동이체"
    }
  ],
  "continuation": {
    "requested_pages": 1,
    "has_more": false
  }
}
순번오류 코드발생 조건
AUTH_REQUIRED세션 없음 — 하나은행 빠른조회 세션이 없습니다. session.login 을 먼저 호출한 뒤 같은 account_link_id 로 다시 요청합니다. retryable=false.
PROVIDER_AUTH_FAILED자격 정보 오류 — 이 조회는 호출마다 콘솔에 등록된 계좌 자격증명의 저장값을 읽습니다. 저장된 값이 형식에 맞지 않아 읽지 못하면 이 코드로 옵니다. retryable=false - error.message 가 안내하는 대로 콘솔에서 자격증명을 다시 등록합니다.
CREDENTIAL_OWNERSHIP_DENIED자격증명 접근 거부 — 지정한 연동(account_link_id)을 쓸 수 없습니다. 없는 연동이거나 이 계정 소유가 아니거나 비활성인 경우를 같은 문장으로 알립니다. retryable=false.
INTERNAL_ERROR계좌 자격증명 오류(구분되지 않음) — bank_account_credential_id 가 존재하지 않거나 비활성이어도 이 코드로 옵니다. 이 상품은 이 오류를 따로 구분해 알리지 않아 error.message 는 일반 안내('서버 내부 오류로 작업을 마치지 못했습니다. 잠시 후 다시 시도해 주세요.')입니다. 재시도보다 콘솔에서 자격증명 등록 상태를 먼저 확인합니다.
VALIDATION_INVALID_FIELD파라미터 오류 — 필수값(bank_account_credential_id, start_date, end_date)이 없거나 형식이 올바르지 않거나, 조회 기간이 규칙에 맞지 않습니다(시작일이 종료일보다 늦음, 종료일이 오늘(한국 시각)보다 뒤, 기간이 2년 초과). retryable=false.
VALIDATION_INVALID_FIELD계좌 종류 미지원 — 연동한 계좌가 거래내역 조회를 지원하지 않는 종류입니다(펀드 계좌와 대출 계좌는 조회되지 않고 입출금 계좌만 조회됩니다). error.message 는 '입출금 계좌만 조회할 수 있습니다. 연동한 계좌를 확인해 주세요.' 입니다. 로그인도 계좌를 한 번 조회해 확인하므로 로그인과 거래내역 조회 양쪽에서 납니다. retryable=false.
PROVIDER_UPSTREAM_ERROR조회 범위 초과(이어받기 미지원) — 이 조회는 한 번에 최대 60건(1페이지)만 지원합니다(v1). 기관이 더 있다고 응답하면 조용히 자르지 않고 오류로 답합니다 - 기간을 나누어 다시 시도합니다. 응답 형식 오류와 같은 코드와 같은 문장이라 error.message 로는 가르지 못합니다.
PROVIDER_UPSTREAM_ERROR기관 응답 오류 — 하나은행에서 받은 응답을 해석하지 못했습니다. 잠시 후 다시 시도하고, 계속되면 서비스문의로 알려 주세요. retryable=false.
PROVIDER_UNAVAILABLE기관 연결 실패 — 하나은행에 연결하지 못해 요청을 보내지 못했거나, 요청을 보냈지만 응답을 받지 못했습니다. error.message 가 둘 중 어느 쪽인지 알려 주고 잠시 후 다시 시도하라고 안내합니다. 연결 지연과 응답 지연을 가르는 별도 오류 코드는 없습니다. retryable 은 응답에 함께 옵니다.
PROVIDER_UNAVAILABLE세션 정보 오류 — 하나은행 응답에서 이어 쓸 세션 정보를 받지 못했거나, 받은 세션 정보를 저장하지 못했습니다. error.message 는 잠시 후 다시 시도하라고 안내하지만 retryable 은 false 입니다.
INTERNAL_ERROR서버 구성 문제 — 지금은 이 상품을 처리할 수 없습니다. 서버 구성 문제로 조회에 필요한 보안 처리를 실행하지 못했습니다. 서비스문의로 알려 주세요. retryable=false - 재시도로 풀리지 않습니다. 조회에 필요한 보안 처리의 규약이 어긋난 경우에는 error.message 가 '지금은 이 상품을 처리할 수 없습니다. 서비스문의로 알려 주세요.' 로 짧아지며 같은 코드와 같은 대처입니다.
INTERNAL_ERROR그 밖의 오류 — 위 어느 경우에도 해당하지 않는 실패입니다. error.message 는 일반 안내('서버 내부 오류로 작업을 마치지 못했습니다. 잠시 후 다시 시도해 주세요.')이고 retryable=false 입니다.