apick-api 4.8.2 → 4.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,8 +1,50 @@
1
- # 4.8.2
1
+ # 4.12.1
2
2
 
3
- - 차명에 등급·연식·좌석을 함께 넣을 수 있습니다(`파나메라 gts 4인승 19년식`, `PANAMERA GTS 19년`). 입력한 연식·등급을 우선하며 좌석 수는 실제 제원과 일치해야 합니다. 근접 연식을 선택하면 반환 연식과 안내를 확인하세요. 지정 등급을 찾지 못하거나 확신이 낮으면 제원 없이 무료 후보만 반환하며, 유사 차량이 전혀 없으면 없음 오류로 응답하고 과금하지 않습니다. 별도 연식·등급과 문장 조건이 충돌하면 입력 오류입니다.
4
- - Put the model, trim, year and seat count in model (for example, PANAMERA GTS 19년). Matching prioritizes the supplied year and trim, and the seat count must match the specification. Check the returned year and notice when a nearby year is selected. Unmatched trims and low-confidence matches return suggestions without specifications or charges; no similar vehicle returns a no-result error without charging. Conflicting explicit and free-text constraints are rejected.
3
+ - 요금 안내 문구를 정리했습니다. 모델별 판매 단가, 실제 사용량 기준, 기본요금·소수점 올림, 견적 API처럼 청구되는 결과만 적습니다. 에이전트 상품 응답 타입에서 더 이상 내려오지 않는 요금 필드 하나를 뺐습니다. 요금과 동작은 바뀌지 않습니다.
5
4
 
5
+ - Billing notes now describe only what you are charged: per-model rates, actual usage, base fees, rounding and the quote API. Removed one billing field from the agent product type that the server no longer returns. Prices and behaviour are unchanged.
6
+
7
+ # 4.12.0
8
+
9
+ - 입찰·부동산 분석 4종을 SDK에 추가했습니다. `bidNotice(options)`·`bidAward(options)` 는 공공기관 입찰공고의 예산구간·발주기관·업종 분포와 마감 임박도, 낙찰률 분포·업체 집중도를 분석합니다. `rtmsTrade(lawdCd, dealYmd, options)` 는 매매 실거래의 ㎡당 중위가·면적/가격/층 분포·시세 이탈 거래를, `rtmsRent(lawdCd, dealYmd, options)` 는 전세 비중·보증금/월세 분포·매매 대비 전세가율을 계산합니다. 응답은 `summary`·`distribution`·`insights` 중심이며 원본 목록(`items`·`totalCount`)은 제공하지 않습니다.
10
+
11
+ - Added four bid and real-estate analytics methods. `bidNotice(options)` and `bidAward(options)` analyse public-sector bid notices (budget, agency and industry distributions, closing urgency) and award results (success-rate bands, winner concentration). `rtmsTrade(lawdCd, dealYmd, options)` covers median price per square metre, area/price/floor bands and price outliers, while `rtmsRent(lawdCd, dealYmd, options)` computes jeonse share, deposit and monthly-rent bands and the jeonse ratio against sale prices. Responses centre on `summary`, `distribution` and `insights`; raw lists (`items`, `totalCount`) are not returned.
12
+
13
+ # 4.11.0
14
+
15
+ - 증빙서류 통합발급 묶음 2종을 추가했습니다. `requestIncomeCertBundle()`·`getIncomeCertBundle()`은 소득금액증명과 연금보험료등 소득세액 공제확인서를, `requestBusinessCertBundle()`·`getBusinessCertBundle()`은 사업자등록증명·부가가치세 과세표준증명·표준재무제표증명을 휴대폰 승인 한 번으로 함께 발급합니다. 접수 20P, 최초 결과는 84P·126P입니다. 사업자 묶음은 `business_no`와 대표자 본인 확인(`agreed: true` 또는 `bind_id`)이 없으면 서버를 부르기 전에 `TypeError`를 던집니다.
16
+ - Added two certificate bundles: `requestIncomeCertBundle()`/`getIncomeCertBundle()` (income amount and pension credit certificates) and `requestBusinessCertBundle()`/`getBusinessCertBundle()` (business registration, VAT tax base and standard financial statement certificates), issued after a single phone approval. 20P on acceptance, 84P/126P on the first result. The business bundle throws a `TypeError` before calling the server when `business_no` or representative consent (`agreed: true` or `bind_id`) is missing.
17
+ - Added `registryDocVerify(issueNo, options)` for `POST /rest/registry_doc_verify`. Pass the 12-character verification number printed on an issued Korean registration certificate (hyphens and spaces are accepted) and optionally `kind` (`realestate` default, `corporate`, `movable`). Returns `verified`, `status`, `message`, `document`, `issued_date` and `registry_office` at 60P per lookup. The certificate contents and any PDF are not returned, and verification is limited to certificates issued within the last three months.
18
+ - 등기·증명서 발급확인 `registryDocVerify(issueNo, options)` 를 추가했습니다. 증명서에 인쇄된 발급확인번호 12자리(하이픈·공백 허용)와 문서 종류 `kind`(`realestate` 기본·`corporate`·`movable`)를 넘기면 발급 사실 여부(`verified`)·상태(`status`)·증명서 종류·발급일·등기소를 건당 60P로 돌려줍니다. 증명서 원문(PDF)과 기재 내용은 제공하지 않으며, 발급일로부터 3개월 이내 발급분만 확인됩니다.
19
+ - Added `courtAuction(caseNo, court)` for `POST /rest/court_auction`. A case number is managed per court, so the court (name such as `서울중앙지방법원` or code such as `B000210`) is required. Returns case details (receipt date, claim amount, judge department, status), sale items (address, appraised price, minimum price, failed count, sale date/time, deposit rate), the sale schedule, the dividend claim deadline and related cases at 60P per lookup. Bidding assistance and bid form preparation are not provided.
20
+ - 법원 경매사건 조회 `courtAuction(caseNo, court)` 를 추가했습니다. 사건번호는 법원별로 관리되므로 법원(이름 `서울중앙지방법원` 또는 코드 `B000210`)이 함께 필요합니다. 사건 기본정보(접수일·청구금액·재판부·진행상태), 매각물건(소재지·감정가·최저매각가·유찰 횟수·매각기일·입찰보증금 비율), 매각기일 묶음, 배당요구종기, 관련 사건을 건당 60P로 돌려줍니다. 입찰대행·입찰서 작성은 제공하지 않습니다.
21
+ - Added `requestBusinessRegistrationCert(input)` / `getBusinessRegistrationCert(transactionId)`, `requestVatTaxBaseCert()` / `getVatTaxBaseCert()`, `requestFinancialStatementCert()` / `getFinancialStatementCert()` and `requestClosureCert()` / `getClosureCert()` for `POST /rest/req_*` and `POST /rest/get_*`. All four target a registered business, so `business_no` (10 digits) is required in addition to `year`, `use_purpose`, `submit_to` and `delivery` where applicable, and each issuance is a flat 60P. `period` (`1`, `2` or `all`) selects the VAT period for `requestVatTaxBaseCert()`.
22
+ - 사업자 단위 증명 4종을 추가했습니다. 사업자등록증명 `requestBusinessRegistrationCert()`·`getBusinessRegistrationCert()`, 부가가치세 과세표준증명 `requestVatTaxBaseCert()`·`getVatTaxBaseCert()`, 표준재무제표증명 `requestFinancialStatementCert()`·`getFinancialStatementCert()`, 폐업사실증명 `requestClosureCert()`·`getClosureCert()` 이며 모두 등록된 사업자를 대상으로 하므로 `business_no`(10자리)가 필수입니다. 발급 1건은 60P 정액이고 과세표준증명의 과세기간은 `period`(`1`·`2`·`all`)로 고릅니다.
23
+
24
+ # 2026-10-19 서버 동작 안내 / Server behavior notes
25
+
26
+ - 차량정보는 공백·대소문자가 다른 동일 등급을 우선해 찾으며 연식·사양이 다른 차량은 구분합니다. 기존 `안내`에서 연식·사양 대체, 사양 충돌, 국내 출시 여부 확인 보류, 일부 제원의 추가 검증 상태를 확인할 수 있습니다. 국내 미출시가 확인된 차량은 해외 자료 기준이며 100% 정확성을 보장하지 않는다는 안내가 추가됩니다. 반환된 연식·등급과 안내를 확인하세요. 입력·응답 구조와 과금 방식은 유지됩니다.
27
+ - Vehicle information prioritizes the same trim across spacing and case variations while distinguishing model years and specifications. The existing `안내` notice can describe year/specification substitutions, conflicting specifications, unverified Korean-market availability, or specifications still under review. Confirmed non-Korean-market vehicles receive an additional notice that overseas data does not guarantee 100% accuracy. Check the returned year, trim and notices. Request/response shapes and billing behavior remain unchanged.
28
+ - 유효한 특장차 전고와 전기차 CO₂ 배출량 0을 보존합니다. 누락값은 0으로 대체하지 않습니다.
29
+ - Valid special-body vehicle heights and zero CO₂ emissions for electric vehicles are preserved. Missing values are not replaced with zero.
30
+
31
+ # 4.8.2
32
+
33
+ - 차명에 등급·연식·좌석을 함께 넣을 수 있습니다(`파나메라 gts 4인승 19년식`, `PANAMERA GTS 19년`). 입력한 연식·등급을 우선하며 좌석 수는 실제 제원과 일치해야 합니다. 근접 연식을 선택하면 반환 연식과 안내를 확인하세요. 지정 등급을 찾지 못하거나 확신이 낮으면 제원 없이 무료 후보만 반환하며, 유사 차량이 전혀 없으면 없음 오류로 응답하고 과금하지 않습니다. 별도 연식·등급과 문장 조건이 충돌하면 입력 오류입니다.
34
+ - Put the model, trim, year and seat count in model (for example, PANAMERA GTS 19년). Matching prioritizes the supplied year and trim, and the seat count must match the specification. Check the returned year and notice when a nearby year is selected. Unmatched trims and low-confidence matches return suggestions without specifications or charges; no similar vehicle returns a no-result error without charging. Conflicting explicit and free-text constraints are rejected.
35
+
36
+ # 4.9.1
37
+
38
+ - Added `requestIncomeAmountCert(input)` / `getIncomeAmountCert(transactionId)`, `requestPensionCreditCert()` / `getPensionCreditCert()`, `requestFactCert()` / `getFactCert()` and `requestTaxClearanceCert()` / `getTaxClearanceCert()` for `POST /rest/req_*` and `POST /rest/get_*`. All four issue a Hometax certificate for the authenticated person at a flat 60P per issuance and require `year`, `use_purpose`, `submit_to` and `delivery`. `format` (`pdf`, `json` or `both`; default `both`) selects the response; with `json`/`both` the issued PDF is parsed into `PDF데이터.필드`. The structured values in the result body are authoritative and parsed fields may be empty depending on the table layout. Certificates that need a registered business (business registration, VAT tax base, financial statements) are not part of this release.
39
+ - 홈택스 민원증명 4종을 추가했습니다. 소득금액증명 `requestIncomeAmountCert()`·`getIncomeAmountCert()`, 연금보험료등 소득세액 공제확인서 `requestPensionCreditCert()`·`getPensionCreditCert()`, 납부내역증명 `requestFactCert()`·`getFactCert()`, 납세증명서 `requestTaxClearanceCert()`·`getTaxClearanceCert()` 이며 `POST /rest/req_*`·`POST /rest/get_*` 를 씁니다. 모두 신청인 본인명의 발급이고 발급 1건은 60P 정액이며 `year`·`use_purpose`·`submit_to`·`delivery` 가 필수입니다. `format`(`pdf`·`json`·`both`, 기본 `both`)으로 응답을 고르고 `json`·`both` 이면 발급된 PDF를 파싱한 `PDF데이터.필드` 가 함께 옵니다. 구조화 값은 결과 본문이 정본이고 표 구조에 따라 파싱 필드가 비어 있을 수 있습니다. 사업자 세적이 필요한 사업자등록증명·부가가치세 과세표준증명·표준재무제표증명은 이번 배포에 포함하지 않았습니다.
40
+
41
+ # 4.9.0
42
+
43
+ - Added `requestResidentRegistration(input)` / `getResidentRegistration(transactionId)` for `POST /rest/req_resident_registration` and `POST /rest/get_resident_registration`, and `requestResidentRegistrationCho(input)` / `getResidentRegistrationCho(transactionId)` for the 초본 variant. Both require the registered address (`sido`, `sigungu`) and optionally take `purposeCd`, `submitTarget`, `includeAddressHistory` and `includeHousehold` (`Y`/`N`). Each issued copy costs 80P and the result includes the original PDF as base64 (`발급문서`) with its filename, SHA-256 (`문서해시`) and byte size (`문서크기`).
44
+ - Added `requestGov24Bundle(input)` / `getGov24Bundle(transactionId)` for `POST /rest/req_gov24_bundle` and `POST /rest/get_gov24_bundle` — one simple-auth approval for the selectable Government24 products. `products` picks any subset of the 13 keys exported as `GOV24_BUNDLE_PRODUCTS`; the bill is the sum of the selected products (resident registration 80P each) and unselected products are never verified or collected. `sido`/`sigungu` are required only when a resident registration certificate is selected. Result sections use camelCase keys (`residentRegistration`, `residentRegistrationCho`, …).
45
+ - `requestResidentRegistration()`·`getResidentRegistration()`(`POST /rest/req_resident_registration`·`POST /rest/get_resident_registration`)와 초본용 `requestResidentRegistrationCho()`·`getResidentRegistrationCho()`를 추가했습니다. 주민등록 주소지 `sido`·`sigungu`가 필수이고 `purposeCd`·`submitTarget`·`includeAddressHistory`·`includeHousehold`(`Y`/`N`)를 선택으로 받습니다. 발급 1건은 80P이며 결과에는 PDF 원본 base64(`발급문서`)와 파일명·SHA-256(`문서해시`)·바이트 크기(`문서크기`)가 함께 옵니다.
46
+ - 정부24 통합 조회 `requestGov24Bundle()`·`getGov24Bundle()`(`POST /rest/req_gov24_bundle`·`POST /rest/get_gov24_bundle`)를 추가했습니다. 간편인증 1회로 `products`에 고른 상품만 조회하며, 선택 가능한 13개 키는 `GOV24_BUNDLE_PRODUCTS`로 제공합니다. 과금은 고른 상품 단가의 합(등본·초본 각 80P)이고 고르지 않은 상품은 인증·수집하지 않습니다. `sido`·`sigungu`는 등본·초본을 고를 때만 필요합니다. 결과 섹션 키는 camelCase(`residentRegistration`, `residentRegistrationCho` 등)입니다.
47
+
6
48
  # 4.8.1
7
49
 
8
50
  - `vehicleModelInfo(options)` also covers motorcycles and scooters alongside passenger cars; the `차체형상` value adds 스쿠터, 언더본, 네이키드, 스포츠바이크, 투어링바이크, 크루저, 어드벤처, 오프로드 and 클래식바이크. Request and response shapes are unchanged.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 APICK
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 APICK
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -96,6 +96,12 @@ Leave the allowed-IP list blank for unrestricted access. To restrict access, reg
96
96
  | `linkedinProfile(url)` | 링크드인 프로필 / LinkedIn profile | JSON |
97
97
  | `linkedinCompany(url)` | 링크드인 회사 정보 / LinkedIn company | JSON |
98
98
  | `linkedinJob(url)` | 링크드인 채용공고 / LinkedIn job posting | JSON |
99
+ | `courtAuction(caseNo, court)` | 법원 경매사건 조회 / Court auction case | JSON |
100
+ | `bidNotice(options)` | 입찰 공고 분석 / Bid notice analytics | JSON |
101
+ | `bidAward(options)` | 낙찰 경쟁 분석 / Bid award analytics | JSON |
102
+ | `rtmsTrade(lawdCd, dealYmd, options)` | 매매 시장 분석 / Sale market analytics | JSON |
103
+ | `rtmsRent(lawdCd, dealYmd, options)` | 전월세 시장 분석 / Rent market analytics | JSON |
104
+ | `registryDocVerify(issueNo, options)` | 등기·증명서 발급확인 / Registry certificate verification | JSON |
99
105
  | `createTtsJob(text, options)` | 한국어 내레이션 작업 접수 / Create TTS job | JSON |
100
106
  | `getTtsJob(jobId)` | TTS 작업 상태 / TTS job status | JSON |
101
107
  | `cancelTtsJob(jobId)` | 대기·생성 중 TTS 작업 취소 / Cancel waiting or processing TTS job | JSON |
@@ -124,6 +130,19 @@ Leave the allowed-IP list blank for unrestricted access. To restrict access, reg
124
130
  | `requestHealthCheckup(input)` / `getHealthCheckup(transactionId)` | 국가 건강검진 결과 조회 / National health checkup results | JSON |
125
131
  | `requestCashReceiptDeduction(input)` / `getCashReceiptDeduction(transactionId)` | 현금영수증 소득공제 내역 / Cash receipt income deductions | JSON |
126
132
  | `requestTaxReturnHistory(input)` / `getTaxReturnHistory(transactionId)` | 국세 신고내역 조회 / National tax return history | JSON |
133
+ | `requestResidentRegistration(input)` / `getResidentRegistration(transactionId)` | 주민등록표등본 발급 / Resident registration certificate | JSON |
134
+ | `requestResidentRegistrationCho(input)` / `getResidentRegistrationCho(transactionId)` | 주민등록표초본 발급 / Resident registration certificate (cho) | JSON |
135
+ | `requestGov24Bundle(input)` / `getGov24Bundle(transactionId)` | 정부24 통합 조회 / Selectable Government24 bundle | JSON |
136
+ | `requestIncomeAmountCert(input)` / `getIncomeAmountCert(transactionId)` | 소득금액증명 발급 / Income amount certificate | PDF·JSON |
137
+ | `requestPensionCreditCert(input)` / `getPensionCreditCert(transactionId)` | 연금보험료등 소득세액 공제확인서 발급 / Pension credit certificate | PDF·JSON |
138
+ | `requestFactCert(input)` / `getFactCert(transactionId)` | 납부내역증명(납세사실증명) 발급 / Tax payment fact certificate | PDF·JSON |
139
+ | `requestTaxClearanceCert(input)` / `getTaxClearanceCert(transactionId)` | 납세증명서 발급 / Tax clearance certificate | PDF·JSON |
140
+ | `requestIncomeCertBundle(input)` / `getIncomeCertBundle(transactionId)` | 소득 증빙서류 통합발급 / Income certificate bundle | PDF·JSON |
141
+ | `requestBusinessCertBundle(input)` / `getBusinessCertBundle(transactionId)` | 사업자 증빙서류 통합발급 / Business certificate bundle | PDF·JSON |
142
+ | `requestBusinessRegistrationCert(input)` / `getBusinessRegistrationCert(transactionId)` | 사업자등록증명 발급 / Business registration certificate | PDF·JSON |
143
+ | `requestVatTaxBaseCert(input)` / `getVatTaxBaseCert(transactionId)` | 부가가치세 과세표준증명 발급 / VAT tax base certificate | PDF·JSON |
144
+ | `requestFinancialStatementCert(input)` / `getFinancialStatementCert(transactionId)` | 표준재무제표증명 발급 / Financial statements certificate | PDF·JSON |
145
+ | `requestClosureCert(input)` / `getClosureCert(transactionId)` | 폐업사실증명 발급 / Business closure certificate | PDF·JSON |
127
146
  | `searchSkills(options)` / `getSkill(skillId)` | Skill 검색·상세 / Search and inspect Skills | JSON |
128
147
  | `getSkillPerformance()` | 시험 방법·표본 수·기계 검사·품질 점수 / Measured results and methods | JSON |
129
148
  | `quoteSkill(skillId, input, options)` | Skill 견적(무료) / Quote a run (free) | JSON |
@@ -291,9 +310,9 @@ if (job.data.status === 'completed') {
291
310
 
292
311
  Submission reserves an upper bound; successful completion settles actual charges. Disconnects do not cancel billing. Explicit cancellation settles work already performed. MP3 and ASS each allow one completed download; interrupted downloads can be retried.
293
312
 
294
- 정규화는 기본 켜짐이며 발음을 다듬는 스킬 요금이 추가됩니다. `normalize_text: false`(SDK `normalizeText: false`)로 실행과 요금을 끕니다. 스킬 최종가는 기본요금(판매자 금액·기본 수수료) + AI 원가 × 환율 × 1.4입니다. 정규화 실패는 제작을 중단하며, 서버·공급자의 최종 제작 실패는 정규화까지 전액 환불합니다. ASS에는 원문을 표시합니다.
313
+ 정규화는 기본 켜짐이며 발음을 다듬는 스킬 요금이 추가됩니다. `normalize_text: false`(SDK `normalizeText: false`)로 실행과 요금을 끕니다. 스킬 최종가는 기본요금(판매자 금액·기본 수수료) + 실제 AI 사용료입니다. 정규화 실패는 제작을 중단하며, 서버·공급자의 최종 제작 실패는 정규화까지 전액 환불합니다. ASS에는 원문을 표시합니다.
295
314
 
296
- Normalization is on by default and adds a skill charge. Set `normalize_text: false` (SDK `normalizeText: false`) to skip execution and billing. The skill price is its base fee (seller amount and base commission) plus actual AI cost × the pinned exchange rate × 1.4. Normalization failure stops synthesis; final server/provider failures refund normalization as well. ASS preserves the original spelling.
315
+ Normalization is on by default and adds a skill charge. Set `normalize_text: false` (SDK `normalizeText: false`) to skip execution and billing. The skill price is its base fee (seller amount and base commission) plus the actual AI usage fee. Normalization failure stops synthesis; final server/provider failures refund normalization as well. ASS preserves the original spelling.
297
316
 
298
317
  ## 신분증 마스킹 / Identity masking
299
318
 
@@ -313,9 +332,9 @@ The four document-specific methods return JSON. `maskResidentNumber` returns PNG
313
332
 
314
333
  ## 간편인증 기반 데이터 조회 / Simple-auth data lookups
315
334
 
316
- 본인 간편인증이 필요한 조회 상품(재직·소득·연금·면허·건강검진·현금영수증·국세 신고내역)은 접수(`request*`)와 결과 조회(`get*`)가 분리되어 있습니다. 접수 응답의 `transactionId`로 결과를 폴링하세요.
335
+ 본인 간편인증이 필요한 조회 상품(재직·소득·연금·면허·건강검진·현금영수증·국세 신고내역·주민등록표 발급·정부24 통합 조회·홈택스 민원증명)은 접수(`request*`)와 결과 조회(`get*`)가 분리되어 있습니다. 접수 응답의 `transactionId`로 결과를 폴링하세요.
317
336
 
318
- Products that require the user's own simple-auth verification (employment, income, pension, driver's license, health checkup, cash receipts, tax returns) split the call into a `request*()` acceptance and a `get*()` poll. Use the `transactionId` from the accepted response to poll for the result.
337
+ Products that require the user's own simple-auth verification (employment, income, pension, driver's license, health checkup, cash receipts, tax returns, resident registration certificates, and the Government24 bundle) split the call into a `request*()` acceptance and a `get*()` poll. Use the `transactionId` from the accepted response to poll for the result.
319
338
 
320
339
  아래 함수는 7종 모두에 공통으로 사용합니다. 같은 `transactionId`로 순차 조회하며 5→10→20→30초 간격으로 늘린 뒤 30초를 유지합니다. `resultAvailable === true`이면 즉시 결과를 반환합니다. `SUCCESS`는 전체 성공, `PARTIAL_SUCCESS`는 부분 성공이므로 `sources`에서 누락·실패 항목을 확인하세요. `AUTH_REJECTED`·`AUTH_EXPIRED`·`FAILED`는 실패 종료이며, `errorCode: 'RESULT_EXPIRED'`는 결과 보관 기간 만료입니다. 실패·만료 시 자동으로 재접수하지 않습니다.
321
340
 
@@ -392,6 +411,25 @@ try {
392
411
  ```
393
412
  <!-- simple-auth-usage:end -->
394
413
 
414
+ ### 정부24 통합 조회 / Government24 bundle
415
+
416
+ ```js
417
+ const bundle = await apick.requestGov24Bundle({
418
+ name: '홍길동',
419
+ birthDate: '19900101',
420
+ phone: '01011112222',
421
+ authProvider: 'kakao',
422
+ // 고른 상품만 인증·조회합니다. 등본 80P, 초본 80P로 선택한 상품 단가를 합산합니다.
423
+ products: ['resident_registration', 'resident_registration_cho'],
424
+ sido: '서울특별시',
425
+ sigungu: '구로구'
426
+ });
427
+ const issued = await pollDataResult(id => apick.getGov24Bundle(id), bundle);
428
+ const pdfBase64 = issued.data.result.residentRegistration['발급문서'];
429
+ ```
430
+
431
+ `GOV24_BUNDLE_PRODUCTS` lists the 13 selectable product keys. Selecting only `driving_license` (or any non-resident product) does not require `sido`/`sigungu`. / `GOV24_BUNDLE_PRODUCTS` lists the 13 selectable keys; the address is required only when a resident registration certificate is selected.
432
+
395
433
  근거: [APICK 개발가이드](https://apick.app/dev_guide/data_health_checkup) · [MCP 3.5.0 상태 계약](https://github.com/lead788/apick-mcp/blob/a803abcb81d07377c85f49bb0b670baf0c17ed04/TOOLS.md)
396
434
 
397
435
  지원 간편인증 방식(`authProvider`) 13종은 `AUTH_PROVIDERS`로 제공됩니다: `kakao`, `naver`, `toss`, `pass`, `samsung`, `kb`, `shinhan`, `hana`, `woori`, `ibk`, `nh`, `kakaobank`, `banksalad`.
@@ -411,6 +449,44 @@ Acceptance is billed at a flat rate; the result is billed only on its first succ
411
449
  | 국가 건강검진 결과 / Health checkup | `requestHealthCheckup` / `getHealthCheckup` | — |
412
450
  | 현금영수증 소득공제 내역 / Cash receipt deductions | `requestCashReceiptDeduction` / `getCashReceiptDeduction` | `incomeYears` (1–3) |
413
451
  | 국세 신고내역 조회 / Tax return history | `requestTaxReturnHistory` / `getTaxReturnHistory` | `years` (1–10) |
452
+ | 주민등록표등본 발급 / Resident registration certificate | `requestResidentRegistration` / `getResidentRegistration` | `sido`, `sigungu` (필수 / required), `purposeCd`, `submitTarget`, `includeAddressHistory`, `includeHousehold` |
453
+ | 주민등록표초본 발급 / Resident registration certificate (cho) | `requestResidentRegistrationCho` / `getResidentRegistrationCho` | `sido`, `sigungu` (필수 / required), `purposeCd`, `submitTarget`, `includeAddressHistory`, `includeHousehold` |
454
+ | 정부24 통합 조회 / Selectable Government24 bundle | `requestGov24Bundle` / `getGov24Bundle` | `products` (필수 / required), 등본·초본 선택 시 `sido`·`sigungu` (필수 / required when either resident certificate is selected) |
455
+ | 소득금액증명 발급 / Income amount certificate | `requestIncomeAmountCert` / `getIncomeAmountCert` | `year`, `use_purpose`, `submit_to`, `delivery` (필수 / required), `format`, `engl_yn`, `quantity`, `email`, `fax_no`, `wallet_address` |
456
+ | 연금보험료등 소득세액 공제확인서 발급 / Pension credit certificate | `requestPensionCreditCert` / `getPensionCreditCert` | `year`, `use_purpose`, `submit_to`, `delivery` (필수 / required), `format`, `address_open_yn`, `resno_open_yn`, `quantity`, `email`, `fax_no`, `wallet_address` |
457
+ | 납부내역증명(납세사실증명) 발급 / Tax payment fact certificate | `requestFactCert` / `getFactCert` | `use_purpose`, `submit_to`, `delivery`, `itrf_cd` (필수 / required), `year`, `start_month`, `end_month`, `issuance`, `engl_yn`, `format` |
458
+ | 납세증명서 발급 / Tax clearance certificate | `requestTaxClearanceCert` / `getTaxClearanceCert` | `cert_type`(`B0006` 납세증명서·`B0010` 해외이주용), `use_purpose`, `submit_to`, `delivery`, `itrf_cd` (필수 / required), `year`, `start_month`, `end_month`, `issuance`, `format` |
459
+ | 소득 증빙서류 통합발급 / Income certificate bundle | `requestIncomeCertBundle` / `getIncomeCertBundle` | `year`, `use_purpose`, `submit_to`, `delivery` (필수 / required), `format`, `amount_open_yn`, `income_source_open_yn`, `withholding_all_print_yn`, `address_open_yn`, `resno_open_yn`, `quantity`, `email`, `fax_no`, `wallet_address` |
460
+ | 사업자 증빙서류 통합발급 / Business certificate bundle | `requestBusinessCertBundle` / `getBusinessCertBundle` | `business_no`, `year`, `use_purpose`, `submit_to`, `delivery` (필수 / required), `agreed: true` 또는 `bind_id` (둘 중 하나 필수 / one required), `period`, `engl_yn`, `format`, `quantity`, `email`, `fax_no`, `wallet_address` |
461
+ | 사업자등록증명 발급 / Business registration certificate | `requestBusinessRegistrationCert` / `getBusinessRegistrationCert` | `business_no`, `use_purpose`, `submit_to`, `delivery` (필수 / required), `engl_yn`, `format`, `quantity`, `email`, `fax_no`, `wallet_address` |
462
+ | 부가가치세 과세표준증명 발급 / VAT tax base certificate | `requestVatTaxBaseCert` / `getVatTaxBaseCert` | `business_no`, `year`, `use_purpose`, `submit_to`, `delivery` (필수 / required), `period`(`1`·`2`·`all`), `engl_yn`, `format` |
463
+ | 표준재무제표증명 발급 / Financial statements certificate | `requestFinancialStatementCert` / `getFinancialStatementCert` | `business_no`, `year`, `use_purpose`, `submit_to`, `delivery` (필수 / required), `engl_yn`, `format` |
464
+ | 폐업사실증명 발급 / Business closure certificate | `requestClosureCert` / `getClosureCert` | `business_no`, `use_purpose`, `submit_to`, `delivery` (필수 / required), `engl_yn`, `format` |
465
+
466
+ 홈택스 민원증명은 발급 1건 60P 정액이고 `format` 으로 응답을 고릅니다(`pdf`·`json`·`both`, 기본 `both`). `json`·`both` 이면 발급된 PDF를 파싱한 `PDF데이터.필드` 가 함께 오며, 표 구조에 따라 필드가 비어 있을 수 있습니다. 구조화 값의 정본은 결과 본문(`문서확인번호`·`귀속연도` 등)입니다.
467
+ Hometax certificates cost a flat 60P per issuance. `format` selects the response (`pdf`, `json`, or `both`; default `both`). With `json`/`both` the parsed PDF fields arrive in `PDF데이터.필드`; some fields may be empty depending on the table layout. The structured values in the result body (`문서확인번호`, `귀속연도`, …) are authoritative.
468
+
469
+ 법원 경매사건 조회는 동기 상품입니다. 사건번호는 법원별로 관리되므로 `courtAuction(caseNo, court)` 처럼 법원(이름 `서울중앙지방법원` 또는 코드 `B000210`)을 함께 넘깁니다. 응답에는 사건 기본정보·매각물건·매각기일·배당요구종기가 담기고, 입찰대행·입찰서 작성은 제공하지 않습니다.
470
+ Court auction lookup is synchronous. A case number belongs to one court, so pass the court (name such as `서울중앙지방법원` or code such as `B000210`) together: `courtAuction(caseNo, court)`. The result contains case details, sale items, sale schedule and the dividend claim deadline; bidding assistance and bid form preparation are not provided.
471
+
472
+ 등기·증명서 발급확인 `registryDocVerify(issueNo, options)` 는 증명서에 인쇄된 발급확인번호 12자리(하이픈·공백 허용)와 문서 종류 `options.kind`(`realestate` 기본, `corporate`, `movable`)를 받습니다. 응답은 `verified`·`status`·`message`·`document`·`issued_date`·`registry_office` 이며 증명서 원문은 포함되지 않습니다. 발급일로부터 3개월 이내 발급분만 확인됩니다.
473
+ `registryDocVerify(issueNo, options)` verifies the 12-character verification number printed on an issued registration certificate (hyphens and spaces are accepted); `options.kind` selects `realestate` (default), `corporate` or `movable`. The result carries `verified`, `status`, `message`, `document`, `issued_date` and `registry_office` — never the certificate itself — and only certificates issued within the last three months can be verified.
474
+
475
+ 입찰·부동산 4종은 원본 목록이 아니라 **분석 결과**를 돌려줍니다. `bidNotice(options)`·`bidAward(options)` 는 업무구분·기간·공고번호를 받고 `summary`·`distribution`·`insights` 를, 낙찰은 여기에 `competitors`·`low_rate` 를 더합니다. `rtmsTrade(lawdCd, dealYmd, options)` 는 ㎡당 중위가와 면적·가격·층 분포, 단지별 시세, 직거래·해제 비중, 시세 이탈 거래를, `rtmsRent` 는 전세 비중, 보증금·월세 분포, 보증금 대비 연월세 비율, 갱신 비중과 같은 단지 매매 대비 전세가율을 계산합니다. `items`·`totalCount` 같은 원본 목록은 제공하지 않습니다.
476
+ The four bid and real-estate methods return **analytics**, not raw lists. `bidNotice(options)` and `bidAward(options)` take a business type, period or notice number and return `summary`, `distribution` and `insights`; awards add `competitors` and `low_rate`. `rtmsTrade(lawdCd, dealYmd, options)` returns median price per square metre, area/price/floor bands, per-complex medians, direct-deal and cancellation shares and price outliers, while `rtmsRent` computes jeonse share, deposit and monthly-rent bands, annual rent to deposit ratio, renewal share and the jeonse ratio against same-complex sale prices. Raw lists such as `items` and `totalCount` are not returned.
477
+
478
+ 증빙서류 묶음 2종은 휴대폰 승인 한 번으로 담긴 증명을 함께 발급합니다. 소득 묶음은 소득금액증명·연금보험료등 소득세액 공제확인서(결과 `result.incomeAmountCert`·`result.pensionCreditCert`), 사업자 묶음은 사업자등록증명·부가가치세 과세표준증명·표준재무제표증명(결과 `result.businessRegistrationCert`·`result.vatTaxBaseCert`·`result.financialStatementCert`)입니다. 접수 20P, 최초 결과는 84P·126P로 개별 발급 합계보다 30% 쌉니다. 사업자 묶음은 대표자 본인 확인을 받으므로 `agreed: true` 또는 이전 응답의 `bind_id`(같은 계정·같은 사업자등록번호, 90일)를 보내야 하며, 빠지면 SDK가 호출 전에 `TypeError` 를 던집니다. 일부 증명만 발급되면 `status` 가 `PARTIAL_SUCCESS` 이고 결과 단가는 그대로 청구됩니다.
479
+ The two certificate bundles issue every included certificate after a single phone approval. Acceptance is 20P and the first result is 84P (income) or 126P (business), 30% below issuing each certificate separately. The business bundle requires representative consent: send `agreed: true` or a `bind_id` from a previous response (same account and business number, valid for 90 days); the SDK throws a `TypeError` before calling the server when both are missing. If only some certificates are issued, `status` is `PARTIAL_SUCCESS` and the bundle result price still applies.
480
+
481
+ ```js
482
+ const bundle = await client.requestBusinessCertBundle({
483
+ name: '홍길동', birthDate: '19900101', phone: '01011112222', authProvider: 'kakao',
484
+ business_no: '1234567890', year: '2025', period: 'all',
485
+ use_purpose: '99', submit_to: '99', delivery: '06', format: 'json', agreed: true
486
+ });
487
+ const issued = await pollDataResult(id => client.getBusinessCertBundle(id), bundle);
488
+ const { businessRegistrationCert, vatTaxBaseCert, financialStatementCert } = issued.data.result;
489
+ ```
414
490
 
415
491
  ## 오류 처리 / Error handling
416
492
 
@@ -490,9 +566,9 @@ if (status.data.status === "completed") {
490
566
 
491
567
  ## 서브에이전트 / Subagent
492
568
 
493
- 설치형 `apick-agent` 상품은 `apick-subagent` 스킬 패키지와 전용 REST·MCP를 사용합니다. 설치비·도입비·구독료 없이 원가 +40%(2026-11-06부터 분석 원가는 시간대와 관계없이 혼잡 시간대 단가 기준 20%, 자료 선별 원가는 40%)(소수점 올림, 2026-11-06부터 AI 사용 작업 기본 5P), 승인된 동일 결과 캐시 1P, 충전 잔액 외 상품 한도 없음. [연동 가이드](https://apick.app/dev_guide/subagent).
569
+ 설치형 `apick-agent` 상품은 `apick-subagent` 스킬 패키지와 전용 REST·MCP를 사용합니다. 설치비·도입비·구독료 없이 성공한 작업만 사용량대로 정산(소수점 올림, 2026-11-06부터 AI 사용 작업 기본 5P), 승인된 동일 결과 캐시 1P, 충전 잔액 외 상품 한도 없음. [연동 가이드](https://apick.app/dev_guide/subagent).
494
570
 
495
- The installed `apick-agent` product uses the `apick-subagent` skill package and dedicated REST/MCP interfaces. No installation, setup or subscription fee. Confirmed cost plus 40% (from 2026-11-06, analysis cost is based on the peak-hour rate regardless of time with 20% added; source-selection cost stays at 40%) (fractions rounded up, 5-point base fee for AI jobs from 2026-11-06); approved identical cache reuse costs 1 point, with no product quota beyond prepaid balance. [Integration guide](https://apick.app/dev_guide/subagent).
571
+ The installed `apick-agent` product uses the `apick-subagent` skill package and dedicated REST/MCP interfaces. No installation, setup or subscription fee. Successful work is billed by actual usage (fractions rounded up, 5-point base fee for AI jobs from 2026-11-06); approved identical cache reuse costs 1 point, with no product quota beyond prepaid balance. [Integration guide](https://apick.app/dev_guide/subagent).
496
572
 
497
573
  ```sh
498
574
  npx -y apick-mcp --server subagent
@@ -505,13 +581,19 @@ Set `APICK_API_KEY` in the environment. 원격 MCP는 업로드된 자료를 처
505
581
 
506
582
 
507
583
  TTS: [Gemini·ChatGPT·정규화 / engines and normalization](docs/tts.md). `createOpenAiTtsJob`, `listOpenAiTtsVoices`, `getTtsOptions`를 포함한 최신 계약입니다.
508
-
509
- ## 차량 자유문 검색 / Vehicle free-text search
510
-
511
- 차명에 등급·연식·좌석을 함께 넣을 수 있습니다(`파나메라 gts 4인승 19년식`, `PANAMERA GTS 19년`). 입력한 연식·등급을 우선하며 좌석 수는 실제 제원과 일치해야 합니다. 근접 연식을 선택하면 반환 연식과 안내를 확인하세요. 지정 등급을 찾지 못하거나 확신이 낮으면 제원 없이 무료 후보만 반환하며, 유사 차량이 전혀 없으면 없음 오류로 응답하고 과금하지 않습니다. 별도 연식·등급과 문장 조건이 충돌하면 입력 오류입니다.
512
-
513
- Put the model, trim, year and seat count in model (for example, PANAMERA GTS 19년). Matching prioritizes the supplied year and trim, and the seat count must match the specification. Check the returned year and notice when a nearby year is selected. Unmatched trims and low-confidence matches return suggestions without specifications or charges; no similar vehicle returns a no-result error without charging. Conflicting explicit and free-text constraints are rejected.
514
-
515
- ```js
516
- await client.vehicleModelInfo({ model: "파나메라 gts 4인승 19년식" });
517
- ```
584
+
585
+ ## 차량 자유문 검색 / Vehicle free-text search
586
+
587
+ 차명에 등급·연식·좌석을 함께 넣을 수 있습니다(`파나메라 gts 4인승 19년식`, `PANAMERA GTS 19년`). 입력한 연식·등급을 우선하며 좌석 수는 확인 가능한 차량 사양과 일치해야 합니다. 근접 연식을 선택하면 반환 연식과 안내를 확인하세요. 지정 등급을 찾지 못하거나 확신이 낮으면 제원 없이 무료 후보만 반환하며, 유사 차량이 전혀 없으면 없음 오류로 응답하고 과금하지 않습니다. 별도 연식·등급과 문장 조건이 충돌하면 입력 오류입니다.
588
+
589
+ Put the model, trim, year and seat count in model (for example, PANAMERA GTS 19년). Matching prioritizes the supplied year and trim, and the seat count must be identifiable and consistent with the available specification. Check the returned year and notice when a nearby year is selected. Unmatched trims and low-confidence matches return suggestions without specifications or charges; no similar vehicle returns a no-result error without charging. Conflicting explicit and free-text constraints are rejected.
590
+
591
+ ```js
592
+ await client.vehicleModelInfo({ model: "파나메라 gts 4인승 19년식" });
593
+ ```
594
+
595
+ ### 차량정보 안내 / Vehicle information notices
596
+
597
+ 차량정보는 공백·대소문자가 다른 동일 등급을 우선해 찾으며 연식·사양이 다른 차량은 구분합니다. 기존 `안내`에서 연식·사양 대체, 사양 충돌, 국내 출시 여부 확인 보류, 일부 제원의 추가 검증 상태를 확인할 수 있습니다. 국내 미출시가 확인된 차량은 해외 자료 기준이며 100% 정확성을 보장하지 않는다는 안내가 추가됩니다. 반환된 연식·등급과 안내를 확인하세요. 입력·응답 구조와 과금 방식은 유지됩니다.
598
+
599
+ Vehicle information prioritizes the same trim across spacing and case variations while distinguishing model years and specifications. The existing `안내` notice can describe year/specification substitutions, conflicting specifications, unverified Korean-market availability, or specifications still under review. Confirmed non-Korean-market vehicles receive an additional notice that overseas data does not guarantee 100% accuracy. Check the returned year, trim and notices. Request/response shapes and billing behavior remain unchanged.
package/SECURITY.md CHANGED
@@ -1,11 +1,11 @@
1
- # Security
2
-
3
- ## API keys
4
-
5
- Keep APICK API keys in server-side environment variables. Do not commit keys, include them in client-side browser bundles, place them in URLs, or print them in logs.
6
-
7
- If a key may have been exposed, regenerate it from your APICK account immediately.
8
-
9
- ## Reporting a vulnerability
10
-
11
- Please report security issues privately through the contact channel listed at <https://apick.app>. Do not open a public issue containing credentials, personal data, or exploit details.
1
+ # Security
2
+
3
+ ## API keys
4
+
5
+ Keep APICK API keys in server-side environment variables. Do not commit keys, include them in client-side browser bundles, place them in URLs, or print them in logs.
6
+
7
+ If a key may have been exposed, regenerate it from your APICK account immediately.
8
+
9
+ ## Reporting a vulnerability
10
+
11
+ Please report security issues privately through the contact channel listed at <https://apick.app>. Do not open a public issue containing credentials, personal data, or exploit details.
package/docs/guide.en.md CHANGED
@@ -116,7 +116,7 @@ await client.ocr(bytes, {
116
116
  Query `listGeminiTtsVoices()` and `listOpenAiTtsVoices()` for current voices; legacy `TTS_VOICE_IDS` are retired.
117
117
 
118
118
 
119
- Normalization is on by default and adds a skill charge. Set `normalize_text: false` (SDK `normalizeText: false`) to skip execution and billing. The skill price is its base fee (seller amount and base commission) plus actual AI cost × the pinned exchange rate × 1.4. Normalization failure stops synthesis; final server/provider failures refund normalization as well. ASS preserves the original spelling.
119
+ Normalization is on by default and adds a skill charge. Set `normalize_text: false` (SDK `normalizeText: false`) to skip execution and billing. The skill price is its base fee (seller amount and base commission) plus the actual AI usage fee. Normalization failure stops synthesis; final server/provider failures refund normalization as well. ASS preserves the original spelling.
120
120
 
121
121
  ```js
122
122
  const screenshot = await client.screenshot('https://example.com');
@@ -306,6 +306,38 @@ Sources: [APICK development guide](https://apick.app/dev_guide/data_health_check
306
306
 
307
307
  `authProvider` is one of the 13 values in `AUTH_PROVIDERS` (kakao, naver, toss, pass, samsung, kb, shinhan, hana, woori, ibk, nh, kakaobank, banksalad). Acceptance is billed at a flat rate; the result is billed only on its first return and free to re-poll afterward. `requestEmployment` takes an optional `insuranceYears` (1-3), `requestPersonalIncome` takes `incomeYears` (1-5), and `requestNpsJoinHistory` takes optional `from`/`to` (`YYYY-MM`). `requestNpsDeductionCert` takes optional `years` (1-5) and `requestNpsCareerHistory` takes optional `from`/`to` (`YYYY-MM`). `requestCashReceiptDeduction` takes optional `incomeYears` (1-3) and `requestTaxReturnHistory` takes optional `years` (1-10). The remaining products are `requestDrivingLicense` and `requestHealthCheckup`.
308
308
 
309
+ `requestResidentRegistration()` and `requestResidentRegistrationCho()` issue the resident registration certificate and require the resident address `sido` and `sigungu`. Each issue costs 80P, and the result carries the PDF base64 in `발급문서` and its SHA-256 in `문서해시`. `requestGov24Bundle()` collects only the products named in `products` with a single authentication, and the charge is the sum of the selected products' prices. `GOV24_BUNDLE_PRODUCTS` exports the 13 selectable keys, and `sido`/`sigungu` are required only when a resident registration product is selected.
310
+
311
+ ```js
312
+ const bundle = await client.requestGov24Bundle({
313
+ name: 'Hong Gildong', birthDate: '19900101', phone: '01011112222', authProvider: 'kakao',
314
+ products: ['resident_registration', 'resident_registration_cho'],
315
+ sido: '서울특별시', sigungu: '구로구'
316
+ });
317
+ const issued = await pollDataResult(id => client.getGov24Bundle(id), bundle);
318
+ ```
319
+
320
+ Hometax certificates are issued with `requestIncomeAmountCert` (income amount), `requestPensionCreditCert` (pension credit), `requestFactCert` (tax payment fact) and `requestTaxClearanceCert` (tax clearance) at a flat 60P per issuance. Every call issues for the authenticated person and requires `year`, `use_purpose`, `submit_to` and `delivery`; `format` (`pdf`, `json` or `both`, default `both`) selects the response. With `json`/`both` the parsed PDF fields arrive in `PDF데이터.필드`, and some fields may be empty depending on the table layout. The values in the result body such as `문서확인번호` and `귀속연도` are authoritative.
321
+
322
+ ```js
323
+ const cert = await client.requestIncomeAmountCert({
324
+ name: 'Hong Gildong', birthDate: '19900101', phone: '01011112222', authProvider: 'kakao',
325
+ year: '2025', use_purpose: '99', submit_to: '99', delivery: '06', format: 'both'
326
+ });
327
+ const issuedCert = await pollDataResult(id => client.getIncomeAmountCert(id), cert);
328
+ ```
329
+
330
+ The certificate bundles `requestIncomeCertBundle` (income amount and pension credit certificates) and `requestBusinessCertBundle` (business registration, VAT tax base and standard financial statement certificates) issue every included certificate after one approval. They take the same issue inputs as the single certificates, and each certificate has its own result section such as `result.incomeAmountCert`. The first result costs 84P and 126P. The business bundle needs `business_no` and representative consent (`agreed: true` or a `bind_id` from a previous response). With `PARTIAL_SUCCESS` some certificates were not issued and the bundle price still applies, so check for empty sections.
331
+
332
+ ```js
333
+ const incomeDocs = await client.requestIncomeCertBundle({
334
+ name: '홍길동', birthDate: '19900101', phone: '01011112222', authProvider: 'kakao',
335
+ year: '2025', use_purpose: '99', submit_to: '99', delivery: '06', format: 'json'
336
+ });
337
+ const incomeResult = await pollDataResult(id => client.getIncomeCertBundle(id), incomeDocs);
338
+ console.log(incomeResult.data.result.incomeAmountCert?.문서확인번호, incomeResult.data.result.pensionCreditCert?.문서확인번호);
339
+ ```
340
+
309
341
  ## Skills
310
342
 
311
343
  Search and run reviewed Skills. Each Skill fixes its input format (`input_schema`), output format (`output_schema`) and base amount (`price_points`). A run is charged only when a result in the promised format is returned.
package/docs/guide.ko.md CHANGED
@@ -116,7 +116,7 @@ await client.ocr(bytes, {
116
116
  현재 목소리는 `listGeminiTtsVoices()`와 `listOpenAiTtsVoices()`로 조회합니다. 기존 `TTS_VOICE_IDS`는 폐기된 목소리입니다.
117
117
 
118
118
 
119
- 정규화는 기본 켜짐이며 발음을 다듬는 스킬 요금이 추가됩니다. `normalize_text: false`(SDK `normalizeText: false`)로 실행과 요금을 끕니다. 스킬 최종가는 기본요금(판매자 금액·기본 수수료) + AI 원가 × 환율 × 1.4입니다. 정규화 실패는 제작을 중단하며, 서버·공급자의 최종 제작 실패는 정규화까지 전액 환불합니다. ASS에는 원문을 표시합니다.
119
+ 정규화는 기본 켜짐이며 발음을 다듬는 스킬 요금이 추가됩니다. `normalize_text: false`(SDK `normalizeText: false`)로 실행과 요금을 끕니다. 스킬 최종가는 기본요금(판매자 금액·기본 수수료) + 실제 AI 사용료입니다. 정규화 실패는 제작을 중단하며, 서버·공급자의 최종 제작 실패는 정규화까지 전액 환불합니다. ASS에는 원문을 표시합니다.
120
120
 
121
121
  ```js
122
122
  const screenshot = await client.screenshot('https://example.com');
@@ -233,7 +233,7 @@ console.log(result.data.result.fields);
233
233
 
234
234
  ## 간편인증 데이터 조회
235
235
 
236
- 재직·소득·연금·면허·건강검진·현금영수증·국세 신고내역 조회는 본인 간편인증이 필요해 접수(`request*`)와 결과 조회(`get*`)가 나뉩니다.
236
+ 재직·소득·연금·면허·건강검진·현금영수증·국세 신고내역·주민등록표 발급·정부24 통합 조회는 본인 간편인증이 필요해 접수(`request*`)와 결과 조회(`get*`)가 나뉩니다.
237
237
 
238
238
  아래 함수는 7종 모두에 공통으로 사용합니다. 같은 `transactionId`로 순차 조회하며 5→10→20→30초 간격으로 늘린 뒤 30초를 유지합니다. `resultAvailable === true`이면 즉시 결과를 반환합니다. `SUCCESS`는 전체 성공, `PARTIAL_SUCCESS`는 부분 성공이므로 `sources`에서 누락·실패 항목을 확인하세요. `AUTH_REJECTED`·`AUTH_EXPIRED`·`FAILED`는 실패 종료이며, `errorCode: 'RESULT_EXPIRED'`는 결과 보관 기간 만료입니다. 실패·만료 시 자동으로 재접수하지 않습니다.
239
239
 
@@ -309,6 +309,38 @@ try {
309
309
 
310
310
  `authProvider`는 `AUTH_PROVIDERS`(13종: kakao, naver, toss, pass, samsung, kb, shinhan, hana, woori, ibk, nh, kakaobank, banksalad) 중 하나입니다. 접수는 정액 과금, 결과는 최초 반환에서만 과금되며 재조회는 무료입니다. `requestEmployment`는 `insuranceYears`(1~3), `requestPersonalIncome`은 `incomeYears`(1~5), `requestNpsJoinHistory`는 `from`/`to`(`YYYY-MM`) 선택 입력을 받습니다. `requestNpsDeductionCert`는 `years`(1~5), `requestNpsCareerHistory`는 `from`/`to`(`YYYY-MM`) 선택 입력을 받습니다. `requestCashReceiptDeduction`은 `incomeYears`(1~3), `requestTaxReturnHistory`는 `years`(1~10) 선택 입력을 받습니다. 나머지 상품은 `requestDrivingLicense`, `requestHealthCheckup`입니다.
311
311
 
312
+ 주민등록표등본·초본은 `requestResidentRegistration()`·`requestResidentRegistrationCho()`로 발급하며 주민등록 주소지 `sido`·`sigungu`가 필수입니다. 발급 1건은 80P이고 결과의 `발급문서`는 PDF 원본의 base64, `문서해시`는 그 SHA-256입니다. 정부24 통합 조회 `requestGov24Bundle()`은 `products`에 고른 상품만 한 번의 인증으로 조회하며, 과금은 고른 상품 단가의 합입니다. 선택 가능한 13개 키는 `GOV24_BUNDLE_PRODUCTS`로 제공하고 `sido`·`sigungu`는 등본·초본을 고를 때만 필요합니다.
313
+
314
+ ```js
315
+ const bundle = await client.requestGov24Bundle({
316
+ name: '홍길동', birthDate: '19900101', phone: '01011112222', authProvider: 'kakao',
317
+ products: ['resident_registration', 'resident_registration_cho'],
318
+ sido: '서울특별시', sigungu: '구로구'
319
+ });
320
+ const issued = await pollDataResult(id => client.getGov24Bundle(id), bundle);
321
+ ```
322
+
323
+ 홈택스 민원증명은 `requestIncomeAmountCert`(소득금액증명), `requestPensionCreditCert`(연금보험료등 소득세액 공제확인서), `requestFactCert`(납부내역증명), `requestTaxClearanceCert`(납세증명서)로 발급하며 발급 1건은 60P입니다. 모두 본인명의 발급이고 `year`·`use_purpose`·`submit_to`·`delivery`가 필수이며 `format`(`pdf`·`json`·`both`, 기본 `both`)으로 응답을 고릅니다. `json`·`both` 이면 발급된 PDF를 파싱한 `PDF데이터.필드`가 함께 오고, 표 구조에 따라 일부 필드는 비어 있을 수 있습니다. 결과 본문의 `문서확인번호`·`귀속연도` 같은 값이 정본입니다.
324
+
325
+ ```js
326
+ const cert = await client.requestIncomeAmountCert({
327
+ name: '홍길동', birthDate: '19900101', phone: '01011112222', authProvider: 'kakao',
328
+ year: '2025', use_purpose: '99', submit_to: '99', delivery: '06', format: 'both'
329
+ });
330
+ const issuedCert = await pollDataResult(id => client.getIncomeAmountCert(id), cert);
331
+ ```
332
+
333
+ 증빙서류 묶음 `requestIncomeCertBundle`(소득금액증명·연금보험료등 소득세액 공제확인서)과 `requestBusinessCertBundle`(사업자등록증명·부가가치세 과세표준증명·표준재무제표증명)은 승인 한 번으로 담긴 증명을 함께 발급합니다. 발급 입력은 단건 증명과 같고 결과는 증명마다 `result.incomeAmountCert`처럼 섹션이 따로 옵니다. 최초 결과는 84P·126P입니다. 사업자 묶음은 `business_no`와 대표자 본인 확인(`agreed: true` 또는 이전 응답의 `bind_id`)이 필요합니다. 일부 증명만 발급되면 `status`가 `PARTIAL_SUCCESS`이며 결과 단가는 그대로 청구되니 섹션이 비었는지 확인하세요.
334
+
335
+ ```js
336
+ const incomeDocs = await client.requestIncomeCertBundle({
337
+ name: '홍길동', birthDate: '19900101', phone: '01011112222', authProvider: 'kakao',
338
+ year: '2025', use_purpose: '99', submit_to: '99', delivery: '06', format: 'json'
339
+ });
340
+ const incomeResult = await pollDataResult(id => client.getIncomeCertBundle(id), incomeDocs);
341
+ console.log(incomeResult.data.result.incomeAmountCert?.문서확인번호, incomeResult.data.result.pensionCreditCert?.문서확인번호);
342
+ ```
343
+
312
344
  ## Skills
313
345
 
314
346
  검수를 거친 Skill 을 검색하고 실행합니다. Skill 마다 입력 형식(`input_schema`)·결과 형식(`output_schema`)·기본 금액(`price_points`)이 정해져 있으며, 결과가 약속한 형식으로 반환된 실행만 차감됩니다.
@@ -19,6 +19,6 @@ const downloaded = await apick.getSkillArtifact(run.data.run_id, file.id);
19
19
  await downloaded.save('./result.png');
20
20
  ```
21
21
 
22
- 파일의 `name`, `mime_type`, `bytes`, `sha256`을 확인하고 실제 형식에 맞는 확장자로 저장하세요. 인증키 소유자의 실행 파일만 내려받을 수 있고, 실행 결과가 만료되면 파일도 만료됩니다. 실패·취소·시간 초과는 예약액을 반환하며, 가변 요금 상품은 성공 시 실제 사용료를 정산합니다. 공급자 청구서와 대조한 확정 원가를 뜻하지 않습니다.
22
+ 파일의 `name`, `mime_type`, `bytes`, `sha256`을 확인하고 실제 형식에 맞는 확장자로 저장하세요. 인증키 소유자의 실행 파일만 내려받을 수 있고, 실행 결과가 만료되면 파일도 만료됩니다. 실패·취소·시간 초과는 예약액을 반환하며, 가변 요금 상품은 성공 시 실제 사용료를 정산합니다.
23
23
 
24
- Use `name`, `mime_type`, `bytes`, and `sha256` to identify and verify each file; choose a matching extension. Downloads require the run owner's API key and expire with the result. Failed, cancelled, and timed-out runs release the reservation. Variable-price Skills settle recorded tool usage on success; calculated vendor costs are not invoice-reconciled amounts.
24
+ Use `name`, `mime_type`, `bytes`, and `sha256` to identify and verify each file; choose a matching extension. Downloads require the run owner's API key and expire with the result. Failed, cancelled, and timed-out runs release the reservation. Variable-price Skills settle recorded tool usage on success.
package/docs/subagent.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # 서브에이전트 / Subagent
2
2
 
3
- `apick-agent`는 설치형 상품이며 `quoteSkill`·`runSkill` 대신 전용 API를 사용합니다. 설치비·도입비·구독료는 없고, 성공 작업의 확인된 원가에 40%를 가산합니다(2026-11-06부터 분석 원가는 시간대와 관계없이 혼잡 시간대 단가 기준 20%, 자료 선별 원가는 40%)(소수점 올림, 2026-11-06부터 AI 사용 작업 기본 5P). 승인된 동일 결과 캐시는 1P입니다. 충전 잔액 외 상품 사용량 한도는 없습니다.
3
+ `apick-agent`는 설치형 상품이며 `quoteSkill`·`runSkill` 대신 전용 API를 사용합니다. 설치비·도입비·구독료는 없고, 성공한 작업만 사용량대로 정산합니다(소수점 올림, 2026-11-06부터 AI 사용 작업 기본 5P). 승인된 동일 결과 캐시는 1P입니다. 충전 잔액 외 상품 사용량 한도는 없습니다.
4
4
 
5
- `apick-agent` is an installed-agent product. Use the dedicated API rather than `quoteSkill` or `runSkill`. There is no installation, setup or subscription fee. Successful work is billed at confirmed model cost plus 40% (from 2026-11-06, analysis cost is based on the peak-hour rate regardless of time with 20% added; source-selection cost stays at 40%) (fractions rounded up, 5-point base fee for AI jobs from 2026-11-06); approved identical-result cache reuse costs 1 point. There are no product usage quotas beyond prepaid balance.
5
+ `apick-agent` is an installed-agent product. Use the dedicated API rather than `quoteSkill` or `runSkill`. There is no installation, setup or subscription fee. Successful work is billed by actual usage (fractions rounded up, 5-point base fee for AI jobs from 2026-11-06); approved identical-result cache reuse costs 1 point. There are no product usage quotas beyond prepaid balance.
6
6
 
7
7
  ```js
8
8
  import { ApickClient } from 'apick-api';
package/docs/tts.md CHANGED
@@ -25,9 +25,9 @@ Style, emotion, tone, accent, pace, pitch and volume options can be set per requ
25
25
 
26
26
  Normalization is enabled by default and costs extra. Disable it with `normalize_text: false` (`normalizeText: false` for the string SDK helper). Input limits are 2,000 characters including utterance separators with normalization, or 8,000 without it. Query a quote, engine-specific voices and supported options before submitting.
27
27
 
28
- 실제 AI 원가 × 고정된 환율 × 1.4에 정규화 요금을 더해 정산합니다. 소수점은 올림하며, 2026-11-06부터 합성 작업 1건의 기본요금 5P를 최소액으로 받습니다. Gemini 프로모션 입력/출력 단가는 2026-12-31까지 백만 토큰당 $0.50/$6.00이며 2027-01-01 00:00 UTC부터 $1.00/$12.00입니다. 약 $0.54/시간은 참고값이며 시간 단위 청구가 아닙니다. 엔진별 요금이 다릅니다.
28
+ 실제 사용량에 정규화 요금을 더해 정산합니다. 소수점은 올림하며, 2026-11-06부터 합성 작업 1건의 기본요금 5P를 최소액으로 받습니다. 엔진별 요금이 다르며, 예상 금액은 견적 API(`POST /rest/tts/quote`)로 미리 확인할 수 있습니다.
29
29
 
30
- AI usage is charged at verified cost × the pinned exchange rate × 1.4, plus normalization. Fractions are rounded up, and from 2026-11-06 each synthesis job has a 5-point base fee. Gemini promotional input/output rates are $0.50/$6.00 per million tokens through 2026-12-31, then $1.00/$12.00 from 2027-01-01 00:00 UTC. The approximate hourly figure is informational; billing uses actual usage and differs by engine.
30
+ AI usage is charged by actual usage, plus normalization. Fractions are rounded up, and from 2026-11-06 each synthesis job has a 5-point base fee. Rates differ by engine; check the estimate with the quote API (`POST /rest/tts/quote`) first.
31
31
 
32
32
  두 엔진은 같은 작업 조회·취소·MP3·원문 ASS 계약을 사용합니다. `billing`의 예약·해제·확정·환불을 확인하세요. MP3는 24kHz 모노 48kbps, 결과는 완료 후 24시간 보관합니다. MP3와 ASS는 각각 완료된 다운로드 1회만 허용하며 전송 중단은 재시도할 수 있습니다. 접수 응답 유실 시 같은 입력과 멱등 키를 재사용하세요. 서버·공급자 최종 실패는 정규화까지 환불하며, 연결 종료는 작업 취소가 아닙니다. 취소 시 이미 수행된 작업분을 정산합니다.
33
33