@cmarket/partner-sdk 39.0.0 → 40.0.0

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.
Files changed (878) hide show
  1. package/README.md +9 -6
  2. package/api/embed-api.ts +10 -10
  3. package/api/oauth-api.ts +18 -18
  4. package/api/partner-api-api.ts +334 -334
  5. package/api/products-api.ts +22 -22
  6. package/api/webhooks-api.ts +78 -78
  7. package/api/well-known-api.ts +10 -10
  8. package/api.ts +2 -2
  9. package/base.ts +2 -2
  10. package/common.ts +2 -2
  11. package/configuration.ts +2 -2
  12. package/dist/api/embed-api.d.ts +10 -10
  13. package/dist/api/embed-api.js +10 -10
  14. package/dist/api/oauth-api.d.ts +18 -18
  15. package/dist/api/oauth-api.js +18 -18
  16. package/dist/api/partner-api-api.d.ts +334 -334
  17. package/dist/api/partner-api-api.js +334 -334
  18. package/dist/api/products-api.d.ts +22 -22
  19. package/dist/api/products-api.js +22 -22
  20. package/dist/api/webhooks-api.d.ts +78 -78
  21. package/dist/api/webhooks-api.js +78 -78
  22. package/dist/api/well-known-api.d.ts +10 -10
  23. package/dist/api/well-known-api.js +10 -10
  24. package/dist/api.d.ts +2 -2
  25. package/dist/api.js +2 -2
  26. package/dist/base.d.ts +2 -2
  27. package/dist/base.js +2 -2
  28. package/dist/common.d.ts +2 -2
  29. package/dist/common.js +2 -2
  30. package/dist/configuration.d.ts +2 -2
  31. package/dist/configuration.js +2 -2
  32. package/dist/esm/api/embed-api.d.ts +10 -10
  33. package/dist/esm/api/embed-api.js +10 -10
  34. package/dist/esm/api/oauth-api.d.ts +18 -18
  35. package/dist/esm/api/oauth-api.js +18 -18
  36. package/dist/esm/api/partner-api-api.d.ts +334 -334
  37. package/dist/esm/api/partner-api-api.js +334 -334
  38. package/dist/esm/api/products-api.d.ts +22 -22
  39. package/dist/esm/api/products-api.js +22 -22
  40. package/dist/esm/api/webhooks-api.d.ts +78 -78
  41. package/dist/esm/api/webhooks-api.js +78 -78
  42. package/dist/esm/api/well-known-api.d.ts +10 -10
  43. package/dist/esm/api/well-known-api.js +10 -10
  44. package/dist/esm/api.d.ts +2 -2
  45. package/dist/esm/api.js +2 -2
  46. package/dist/esm/base.d.ts +2 -2
  47. package/dist/esm/base.js +2 -2
  48. package/dist/esm/common.d.ts +2 -2
  49. package/dist/esm/common.js +2 -2
  50. package/dist/esm/configuration.d.ts +2 -2
  51. package/dist/esm/configuration.js +2 -2
  52. package/dist/esm/index.d.ts +2 -2
  53. package/dist/esm/index.js +2 -2
  54. package/dist/esm/models/acceptance-result-response-dto.d.ts +2 -2
  55. package/dist/esm/models/acceptance-result-response-dto.js +2 -2
  56. package/dist/esm/models/acknowledge-product-receipt200-response.d.ts +2 -2
  57. package/dist/esm/models/acknowledge-product-receipt200-response.js +2 -2
  58. package/dist/esm/models/acknowledge-products-request-dto.d.ts +3 -3
  59. package/dist/esm/models/acknowledge-products-request-dto.js +2 -2
  60. package/dist/esm/models/api-catalog-dto.d.ts +2 -2
  61. package/dist/esm/models/api-catalog-dto.js +2 -2
  62. package/dist/esm/models/api-catalog-entry-dto.d.ts +4 -4
  63. package/dist/esm/models/api-catalog-entry-dto.js +2 -2
  64. package/dist/esm/models/api-catalog-link-dto.d.ts +2 -2
  65. package/dist/esm/models/api-catalog-link-dto.js +2 -2
  66. package/dist/esm/models/authorization-server-metadata-dto.d.ts +6 -6
  67. package/dist/esm/models/authorization-server-metadata-dto.js +2 -2
  68. package/dist/esm/models/award-method-public.d.ts +2 -2
  69. package/dist/esm/models/award-method-public.js +2 -2
  70. package/dist/esm/models/award-registered-v2-response-dto.d.ts +3 -3
  71. package/dist/esm/models/award-registered-v2-response-dto.js +2 -2
  72. package/dist/esm/models/award-reverted-v2-response-dto.d.ts +3 -3
  73. package/dist/esm/models/award-reverted-v2-response-dto.js +2 -2
  74. package/dist/esm/models/bid-acceptance-dto.d.ts +2 -2
  75. package/dist/esm/models/bid-acceptance-dto.js +2 -2
  76. package/dist/esm/models/bid-attachment-input-dto.d.ts +6 -6
  77. package/dist/esm/models/bid-attachment-input-dto.js +2 -2
  78. package/dist/esm/models/bid-bond-dto.d.ts +2 -2
  79. package/dist/esm/models/bid-bond-dto.js +2 -2
  80. package/dist/esm/models/bid-cancelled-response-dto.d.ts +3 -3
  81. package/dist/esm/models/bid-cancelled-response-dto.js +2 -2
  82. package/dist/esm/models/bid-contact-dto.d.ts +2 -2
  83. package/dist/esm/models/bid-contact-dto.js +2 -2
  84. package/dist/esm/models/bid-contacts-dto.d.ts +2 -2
  85. package/dist/esm/models/bid-contacts-dto.js +2 -2
  86. package/dist/esm/models/bid-contract-document-dto.d.ts +9 -9
  87. package/dist/esm/models/bid-contract-document-dto.js +2 -2
  88. package/dist/esm/models/bid-delivery-terms-dto.d.ts +2 -2
  89. package/dist/esm/models/bid-delivery-terms-dto.js +2 -2
  90. package/dist/esm/models/bid-detail-response-dto.d.ts +5 -5
  91. package/dist/esm/models/bid-detail-response-dto.js +2 -2
  92. package/dist/esm/models/bid-document-dto.d.ts +2 -2
  93. package/dist/esm/models/bid-document-dto.js +2 -2
  94. package/dist/esm/models/bid-failed-v2-response-dto.d.ts +3 -3
  95. package/dist/esm/models/bid-failed-v2-response-dto.js +2 -2
  96. package/dist/esm/models/bid-item-dto.d.ts +2 -2
  97. package/dist/esm/models/bid-item-dto.js +2 -2
  98. package/dist/esm/models/bid-lifecycle-dto.d.ts +2 -2
  99. package/dist/esm/models/bid-lifecycle-dto.js +2 -2
  100. package/dist/esm/models/bid-manager-dto.d.ts +2 -2
  101. package/dist/esm/models/bid-manager-dto.js +2 -2
  102. package/dist/esm/models/bid-payment-terms-dto.d.ts +2 -2
  103. package/dist/esm/models/bid-payment-terms-dto.js +2 -2
  104. package/dist/esm/models/bid-product-dto.d.ts +2 -2
  105. package/dist/esm/models/bid-product-dto.js +2 -2
  106. package/dist/esm/models/bid-public-status.d.ts +2 -2
  107. package/dist/esm/models/bid-public-status.js +2 -2
  108. package/dist/esm/models/bid-registered-response-dto.d.ts +3 -3
  109. package/dist/esm/models/bid-registered-response-dto.js +2 -2
  110. package/dist/esm/models/bid-result-participant-attachment-dto.d.ts +3 -3
  111. package/dist/esm/models/bid-result-participant-attachment-dto.js +2 -2
  112. package/dist/esm/models/bid-result-participant-dto.d.ts +3 -3
  113. package/dist/esm/models/bid-result-participant-dto.js +2 -2
  114. package/dist/esm/models/bid-results-response-dto.d.ts +5 -5
  115. package/dist/esm/models/bid-results-response-dto.js +2 -2
  116. package/dist/esm/models/bid-settlement-line-item-dto.d.ts +2 -2
  117. package/dist/esm/models/bid-settlement-line-item-dto.js +2 -2
  118. package/dist/esm/models/bid-settlement-participant-dto.d.ts +2 -2
  119. package/dist/esm/models/bid-settlement-participant-dto.js +2 -2
  120. package/dist/esm/models/bid-settlement-response-dto.d.ts +2 -2
  121. package/dist/esm/models/bid-settlement-response-dto.js +2 -2
  122. package/dist/esm/models/bid-statement-response-dto.d.ts +2 -2
  123. package/dist/esm/models/bid-statement-response-dto.js +2 -2
  124. package/dist/esm/models/bid-summary-dto.d.ts +3 -3
  125. package/dist/esm/models/bid-summary-dto.js +2 -2
  126. package/dist/esm/models/bid-type-public.d.ts +2 -2
  127. package/dist/esm/models/bid-type-public.js +2 -2
  128. package/dist/esm/models/bid-updated-response-dto.d.ts +2 -2
  129. package/dist/esm/models/bid-updated-response-dto.js +2 -2
  130. package/dist/esm/models/cancel-bid-request-dto.d.ts +2 -2
  131. package/dist/esm/models/cancel-bid-request-dto.js +2 -2
  132. package/dist/esm/models/cancel-bid200-response.d.ts +2 -2
  133. package/dist/esm/models/cancel-bid200-response.js +2 -2
  134. package/dist/esm/models/card-payment-request-response-dto.d.ts +2 -2
  135. package/dist/esm/models/card-payment-request-response-dto.js +2 -2
  136. package/dist/esm/models/complete-acceptance-request-dto.d.ts +4 -4
  137. package/dist/esm/models/complete-acceptance-request-dto.js +2 -2
  138. package/dist/esm/models/complete-acceptance200-response.d.ts +2 -2
  139. package/dist/esm/models/complete-acceptance200-response.js +2 -2
  140. package/dist/esm/models/complete-invoice200-response.d.ts +2 -2
  141. package/dist/esm/models/complete-invoice200-response.js +2 -2
  142. package/dist/esm/models/complete-upload-request-dto.d.ts +2 -2
  143. package/dist/esm/models/complete-upload-request-dto.js +2 -2
  144. package/dist/esm/models/contract-restriction-confirm-input-dto.d.ts +3 -3
  145. package/dist/esm/models/contract-restriction-confirm-input-dto.js +2 -2
  146. package/dist/esm/models/create-bid-request-dto.d.ts +5 -5
  147. package/dist/esm/models/create-bid-request-dto.js +2 -2
  148. package/dist/esm/models/create-card-payment-dto.d.ts +2 -2
  149. package/dist/esm/models/create-card-payment-dto.js +2 -2
  150. package/dist/esm/models/create-card-payment-request-dto.d.ts +2 -2
  151. package/dist/esm/models/create-card-payment-request-dto.js +2 -2
  152. package/dist/esm/models/create-card-payment200-response.d.ts +2 -2
  153. package/dist/esm/models/create-card-payment200-response.js +2 -2
  154. package/dist/esm/models/create-embed-launch201-response.d.ts +2 -2
  155. package/dist/esm/models/create-embed-launch201-response.js +2 -2
  156. package/dist/esm/models/create-external-contract-documents-request-dto.d.ts +4 -4
  157. package/dist/esm/models/create-external-contract-documents-request-dto.js +2 -2
  158. package/dist/esm/models/create-external-contract-documents-response-dto.d.ts +2 -2
  159. package/dist/esm/models/create-external-contract-documents-response-dto.js +2 -2
  160. package/dist/esm/models/create-file-upload-url201-response.d.ts +2 -2
  161. package/dist/esm/models/create-file-upload-url201-response.js +2 -2
  162. package/dist/esm/models/create-upload-url-request-dto.d.ts +2 -2
  163. package/dist/esm/models/create-upload-url-request-dto.js +2 -2
  164. package/dist/esm/models/create-webhook-endpoint-request-dto.d.ts +4 -4
  165. package/dist/esm/models/create-webhook-endpoint-request-dto.js +2 -2
  166. package/dist/esm/models/create-webhook-endpoint201-response.d.ts +2 -2
  167. package/dist/esm/models/create-webhook-endpoint201-response.js +2 -2
  168. package/dist/esm/models/delivery-date-type-public.d.ts +2 -2
  169. package/dist/esm/models/delivery-date-type-public.js +2 -2
  170. package/dist/esm/models/delivery-method-public.d.ts +2 -2
  171. package/dist/esm/models/delivery-method-public.js +2 -2
  172. package/dist/esm/models/embed-bid-prefill-dto.d.ts +83 -0
  173. package/dist/esm/models/embed-bid-prefill-dto.js +23 -0
  174. package/dist/esm/models/embed-bid-prefill-item-dto.d.ts +33 -0
  175. package/dist/esm/models/embed-bid-prefill-item-dto.js +14 -0
  176. package/dist/esm/models/embed-bid-prefill-manager-dto.d.ts +25 -0
  177. package/dist/esm/models/embed-bid-prefill-manager-dto.js +14 -0
  178. package/dist/esm/models/embed-launch-request-dto.d.ts +10 -9
  179. package/dist/esm/models/embed-launch-request-dto.js +2 -2
  180. package/dist/esm/models/embed-launch-response-dto.d.ts +4 -4
  181. package/dist/esm/models/embed-launch-response-dto.js +2 -2
  182. package/dist/esm/models/excellent-procurement-public.d.ts +2 -2
  183. package/dist/esm/models/excellent-procurement-public.js +2 -2
  184. package/dist/esm/models/external-contract-document-item-dto.d.ts +3 -3
  185. package/dist/esm/models/external-contract-document-item-dto.js +2 -2
  186. package/dist/esm/models/external-contract-documents-response-dto.d.ts +2 -2
  187. package/dist/esm/models/external-contract-documents-response-dto.js +2 -2
  188. package/dist/esm/models/external-contract-item-dto.d.ts +2 -2
  189. package/dist/esm/models/external-contract-item-dto.js +2 -2
  190. package/dist/esm/models/external-contract-snapshot-dto.d.ts +5 -5
  191. package/dist/esm/models/external-contract-snapshot-dto.js +2 -2
  192. package/dist/esm/models/external-document-inputs-dto.d.ts +2 -2
  193. package/dist/esm/models/external-document-inputs-dto.js +2 -2
  194. package/dist/esm/models/file-meta-response-dto.d.ts +2 -2
  195. package/dist/esm/models/file-meta-response-dto.js +2 -2
  196. package/dist/esm/models/file-uploaded-response-dto.d.ts +2 -2
  197. package/dist/esm/models/file-uploaded-response-dto.js +2 -2
  198. package/dist/esm/models/generated-external-contract-document-dto.d.ts +4 -4
  199. package/dist/esm/models/generated-external-contract-document-dto.js +2 -2
  200. package/dist/esm/models/get-bid-settlement200-response.d.ts +2 -2
  201. package/dist/esm/models/get-bid-settlement200-response.js +2 -2
  202. package/dist/esm/models/get-bid-statement200-response.d.ts +2 -2
  203. package/dist/esm/models/get-bid-statement200-response.js +2 -2
  204. package/dist/esm/models/get-bid200-response.d.ts +2 -2
  205. package/dist/esm/models/get-bid200-response.js +2 -2
  206. package/dist/esm/models/get-file-meta200-response.d.ts +2 -2
  207. package/dist/esm/models/get-file-meta200-response.js +2 -2
  208. package/dist/esm/models/get-supplier-card-payable-v2200-response.d.ts +2 -2
  209. package/dist/esm/models/get-supplier-card-payable-v2200-response.js +2 -2
  210. package/dist/esm/models/get-webhook-endpoint200-response.d.ts +2 -2
  211. package/dist/esm/models/get-webhook-endpoint200-response.js +2 -2
  212. package/dist/esm/models/green-product-public.d.ts +2 -2
  213. package/dist/esm/models/green-product-public.js +2 -2
  214. package/dist/esm/models/health-controller-check200-response.d.ts +2 -2
  215. package/dist/esm/models/health-controller-check200-response.js +2 -2
  216. package/dist/esm/models/health-response-dto.d.ts +2 -2
  217. package/dist/esm/models/health-response-dto.js +2 -2
  218. package/dist/esm/models/hierarchical-region-dto.d.ts +2 -2
  219. package/dist/esm/models/hierarchical-region-dto.js +2 -2
  220. package/dist/esm/models/index.d.ts +3 -0
  221. package/dist/esm/models/index.js +3 -0
  222. package/dist/esm/models/introspect-request-dto.d.ts +5 -5
  223. package/dist/esm/models/introspect-request-dto.js +2 -2
  224. package/dist/esm/models/introspection-response-dto.d.ts +4 -4
  225. package/dist/esm/models/introspection-response-dto.js +2 -2
  226. package/dist/esm/models/invalid-param-dto.d.ts +2 -2
  227. package/dist/esm/models/invalid-param-dto.js +2 -2
  228. package/dist/esm/models/invoice-completed-response-dto.d.ts +2 -2
  229. package/dist/esm/models/invoice-completed-response-dto.js +2 -2
  230. package/dist/esm/models/invoice-split-response-dto.d.ts +2 -2
  231. package/dist/esm/models/invoice-split-response-dto.js +2 -2
  232. package/dist/esm/models/legal-mandatory-public.d.ts +2 -2
  233. package/dist/esm/models/legal-mandatory-public.js +2 -2
  234. package/dist/esm/models/list-bid-results200-response.d.ts +2 -2
  235. package/dist/esm/models/list-bid-results200-response.js +2 -2
  236. package/dist/esm/models/list-bids200-response-meta.d.ts +3 -3
  237. package/dist/esm/models/list-bids200-response-meta.js +2 -2
  238. package/dist/esm/models/list-bids200-response.d.ts +2 -2
  239. package/dist/esm/models/list-bids200-response.js +2 -2
  240. package/dist/esm/models/list-products200-response.d.ts +2 -2
  241. package/dist/esm/models/list-products200-response.js +2 -2
  242. package/dist/esm/models/list-webhook-deliveries-response-dto.d.ts +3 -3
  243. package/dist/esm/models/list-webhook-deliveries-response-dto.js +2 -2
  244. package/dist/esm/models/list-webhook-deliveries200-response.d.ts +2 -2
  245. package/dist/esm/models/list-webhook-deliveries200-response.js +2 -2
  246. package/dist/esm/models/list-webhook-endpoints200-response.d.ts +2 -2
  247. package/dist/esm/models/list-webhook-endpoints200-response.js +2 -2
  248. package/dist/esm/models/mark-bid-failed-request-dto.d.ts +2 -2
  249. package/dist/esm/models/mark-bid-failed-request-dto.js +2 -2
  250. package/dist/esm/models/mark-bid-failed201-response.d.ts +2 -2
  251. package/dist/esm/models/mark-bid-failed201-response.js +2 -2
  252. package/dist/esm/models/negotiation-score-dto.d.ts +2 -2
  253. package/dist/esm/models/negotiation-score-dto.js +2 -2
  254. package/dist/esm/models/negotiation-scored-v2-response-dto.d.ts +3 -3
  255. package/dist/esm/models/negotiation-scored-v2-response-dto.js +2 -2
  256. package/dist/esm/models/oauth-error-response-dto.d.ts +2 -2
  257. package/dist/esm/models/oauth-error-response-dto.js +2 -2
  258. package/dist/esm/models/on-bid-award-reverted-request.d.ts +2 -2
  259. package/dist/esm/models/on-bid-award-reverted-request.js +2 -2
  260. package/dist/esm/models/on-bid-awarded-request.d.ts +2 -2
  261. package/dist/esm/models/on-bid-awarded-request.js +2 -2
  262. package/dist/esm/models/on-bid-canceled-request.d.ts +2 -2
  263. package/dist/esm/models/on-bid-canceled-request.js +2 -2
  264. package/dist/esm/models/on-bid-closed-request.d.ts +2 -2
  265. package/dist/esm/models/on-bid-closed-request.js +2 -2
  266. package/dist/esm/models/on-bid-failed-request.d.ts +2 -2
  267. package/dist/esm/models/on-bid-failed-request.js +2 -2
  268. package/dist/esm/models/on-ping-request.d.ts +2 -2
  269. package/dist/esm/models/on-ping-request.js +2 -2
  270. package/dist/esm/models/partner-webhook-delivery-status.d.ts +2 -2
  271. package/dist/esm/models/partner-webhook-delivery-status.js +2 -2
  272. package/dist/esm/models/partner-webhook-endpoint-status.d.ts +3 -3
  273. package/dist/esm/models/partner-webhook-endpoint-status.js +3 -3
  274. package/dist/esm/models/partner-webhook-event-type.d.ts +2 -2
  275. package/dist/esm/models/partner-webhook-event-type.js +2 -2
  276. package/dist/esm/models/payment-method-public.d.ts +2 -2
  277. package/dist/esm/models/payment-method-public.js +2 -2
  278. package/dist/esm/models/preconditions-dto.d.ts +2 -2
  279. package/dist/esm/models/preconditions-dto.js +2 -2
  280. package/dist/esm/models/problem-details-dto.d.ts +3 -3
  281. package/dist/esm/models/problem-details-dto.js +2 -2
  282. package/dist/esm/models/product-receipt-response-dto.d.ts +2 -2
  283. package/dist/esm/models/product-receipt-response-dto.js +2 -2
  284. package/dist/esm/models/product-response-dto.d.ts +3 -3
  285. package/dist/esm/models/product-response-dto.js +2 -2
  286. package/dist/esm/models/protected-resource-metadata-dto.d.ts +6 -6
  287. package/dist/esm/models/protected-resource-metadata-dto.js +2 -2
  288. package/dist/esm/models/register-award-request-dto.d.ts +5 -5
  289. package/dist/esm/models/register-award-request-dto.js +2 -2
  290. package/dist/esm/models/register-award201-response.d.ts +2 -2
  291. package/dist/esm/models/register-award201-response.js +2 -2
  292. package/dist/esm/models/register-bid201-response.d.ts +2 -2
  293. package/dist/esm/models/register-bid201-response.js +2 -2
  294. package/dist/esm/models/register-semo-contract-request-dto.d.ts +5 -5
  295. package/dist/esm/models/register-semo-contract-request-dto.js +2 -2
  296. package/dist/esm/models/request-invoice-split-request-dto.d.ts +4 -4
  297. package/dist/esm/models/request-invoice-split-request-dto.js +2 -2
  298. package/dist/esm/models/request-invoice-split200-response.d.ts +2 -2
  299. package/dist/esm/models/request-invoice-split200-response.js +2 -2
  300. package/dist/esm/models/retiree-roster-input-dto.d.ts +2 -2
  301. package/dist/esm/models/retiree-roster-input-dto.js +2 -2
  302. package/dist/esm/models/retiree-roster-row-dto.d.ts +2 -2
  303. package/dist/esm/models/retiree-roster-row-dto.js +2 -2
  304. package/dist/esm/models/revert-award-request-dto.d.ts +2 -2
  305. package/dist/esm/models/revert-award-request-dto.js +2 -2
  306. package/dist/esm/models/revert-award200-response.d.ts +2 -2
  307. package/dist/esm/models/revert-award200-response.js +2 -2
  308. package/dist/esm/models/revoke-request-dto.d.ts +5 -5
  309. package/dist/esm/models/revoke-request-dto.js +2 -2
  310. package/dist/esm/models/semo-contract-registered-response-dto.d.ts +3 -3
  311. package/dist/esm/models/semo-contract-registered-response-dto.js +2 -2
  312. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.d.ts +2 -2
  313. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.js +2 -2
  314. package/dist/esm/models/send-webhook-test-event200-response.d.ts +2 -2
  315. package/dist/esm/models/send-webhook-test-event200-response.js +2 -2
  316. package/dist/esm/models/statement-document-dto.d.ts +3 -3
  317. package/dist/esm/models/statement-document-dto.js +2 -2
  318. package/dist/esm/models/statement-product-dto.d.ts +2 -2
  319. package/dist/esm/models/statement-product-dto.js +2 -2
  320. package/dist/esm/models/submit-negotiation-scores-request-dto.d.ts +2 -2
  321. package/dist/esm/models/submit-negotiation-scores-request-dto.js +2 -2
  322. package/dist/esm/models/submit-negotiation-scores201-response.d.ts +2 -2
  323. package/dist/esm/models/submit-negotiation-scores201-response.js +2 -2
  324. package/dist/esm/models/supplier-card-payable-response-dto.d.ts +2 -2
  325. package/dist/esm/models/supplier-card-payable-response-dto.js +2 -2
  326. package/dist/esm/models/supplier-tax-type.d.ts +2 -2
  327. package/dist/esm/models/supplier-tax-type.js +2 -2
  328. package/dist/esm/models/token-request-dto.d.ts +5 -5
  329. package/dist/esm/models/token-request-dto.js +2 -2
  330. package/dist/esm/models/token-response-dto.d.ts +3 -3
  331. package/dist/esm/models/token-response-dto.js +2 -2
  332. package/dist/esm/models/update-bid-request-dto.d.ts +5 -5
  333. package/dist/esm/models/update-bid-request-dto.js +2 -2
  334. package/dist/esm/models/update-bid200-response.d.ts +2 -2
  335. package/dist/esm/models/update-bid200-response.js +2 -2
  336. package/dist/esm/models/update-webhook-endpoint-request-dto.d.ts +3 -3
  337. package/dist/esm/models/update-webhook-endpoint-request-dto.js +2 -2
  338. package/dist/esm/models/upload-file-request-dto.d.ts +4 -4
  339. package/dist/esm/models/upload-file-request-dto.js +2 -2
  340. package/dist/esm/models/upload-file201-response.d.ts +2 -2
  341. package/dist/esm/models/upload-file201-response.js +2 -2
  342. package/dist/esm/models/upload-url-created-response-dto.d.ts +5 -5
  343. package/dist/esm/models/upload-url-created-response-dto.js +2 -2
  344. package/dist/esm/models/webhook-bid-event-data.d.ts +3 -3
  345. package/dist/esm/models/webhook-bid-event-data.js +2 -2
  346. package/dist/esm/models/webhook-delivery-dto.d.ts +4 -4
  347. package/dist/esm/models/webhook-delivery-dto.js +2 -2
  348. package/dist/esm/models/webhook-endpoint-dto.d.ts +6 -6
  349. package/dist/esm/models/webhook-endpoint-dto.js +2 -2
  350. package/dist/esm/models/webhook-endpoint-with-secret-dto.d.ts +6 -6
  351. package/dist/esm/models/webhook-endpoint-with-secret-dto.js +2 -2
  352. package/dist/esm/models/webhook-event-envelope.d.ts +3 -3
  353. package/dist/esm/models/webhook-event-envelope.js +2 -2
  354. package/dist/esm/models/webhook-ping-event-data.d.ts +2 -2
  355. package/dist/esm/models/webhook-ping-event-data.js +2 -2
  356. package/dist/esm/models/webhook-test-result-dto.d.ts +3 -3
  357. package/dist/esm/models/webhook-test-result-dto.js +2 -2
  358. package/dist/index.d.ts +2 -2
  359. package/dist/index.js +2 -2
  360. package/dist/models/acceptance-result-response-dto.d.ts +2 -2
  361. package/dist/models/acceptance-result-response-dto.js +2 -2
  362. package/dist/models/acknowledge-product-receipt200-response.d.ts +2 -2
  363. package/dist/models/acknowledge-product-receipt200-response.js +2 -2
  364. package/dist/models/acknowledge-products-request-dto.d.ts +3 -3
  365. package/dist/models/acknowledge-products-request-dto.js +2 -2
  366. package/dist/models/api-catalog-dto.d.ts +2 -2
  367. package/dist/models/api-catalog-dto.js +2 -2
  368. package/dist/models/api-catalog-entry-dto.d.ts +4 -4
  369. package/dist/models/api-catalog-entry-dto.js +2 -2
  370. package/dist/models/api-catalog-link-dto.d.ts +2 -2
  371. package/dist/models/api-catalog-link-dto.js +2 -2
  372. package/dist/models/authorization-server-metadata-dto.d.ts +6 -6
  373. package/dist/models/authorization-server-metadata-dto.js +2 -2
  374. package/dist/models/award-method-public.d.ts +2 -2
  375. package/dist/models/award-method-public.js +2 -2
  376. package/dist/models/award-registered-v2-response-dto.d.ts +3 -3
  377. package/dist/models/award-registered-v2-response-dto.js +2 -2
  378. package/dist/models/award-reverted-v2-response-dto.d.ts +3 -3
  379. package/dist/models/award-reverted-v2-response-dto.js +2 -2
  380. package/dist/models/bid-acceptance-dto.d.ts +2 -2
  381. package/dist/models/bid-acceptance-dto.js +2 -2
  382. package/dist/models/bid-attachment-input-dto.d.ts +6 -6
  383. package/dist/models/bid-attachment-input-dto.js +2 -2
  384. package/dist/models/bid-bond-dto.d.ts +2 -2
  385. package/dist/models/bid-bond-dto.js +2 -2
  386. package/dist/models/bid-cancelled-response-dto.d.ts +3 -3
  387. package/dist/models/bid-cancelled-response-dto.js +2 -2
  388. package/dist/models/bid-contact-dto.d.ts +2 -2
  389. package/dist/models/bid-contact-dto.js +2 -2
  390. package/dist/models/bid-contacts-dto.d.ts +2 -2
  391. package/dist/models/bid-contacts-dto.js +2 -2
  392. package/dist/models/bid-contract-document-dto.d.ts +9 -9
  393. package/dist/models/bid-contract-document-dto.js +2 -2
  394. package/dist/models/bid-delivery-terms-dto.d.ts +2 -2
  395. package/dist/models/bid-delivery-terms-dto.js +2 -2
  396. package/dist/models/bid-detail-response-dto.d.ts +5 -5
  397. package/dist/models/bid-detail-response-dto.js +2 -2
  398. package/dist/models/bid-document-dto.d.ts +2 -2
  399. package/dist/models/bid-document-dto.js +2 -2
  400. package/dist/models/bid-failed-v2-response-dto.d.ts +3 -3
  401. package/dist/models/bid-failed-v2-response-dto.js +2 -2
  402. package/dist/models/bid-item-dto.d.ts +2 -2
  403. package/dist/models/bid-item-dto.js +2 -2
  404. package/dist/models/bid-lifecycle-dto.d.ts +2 -2
  405. package/dist/models/bid-lifecycle-dto.js +2 -2
  406. package/dist/models/bid-manager-dto.d.ts +2 -2
  407. package/dist/models/bid-manager-dto.js +2 -2
  408. package/dist/models/bid-payment-terms-dto.d.ts +2 -2
  409. package/dist/models/bid-payment-terms-dto.js +2 -2
  410. package/dist/models/bid-product-dto.d.ts +2 -2
  411. package/dist/models/bid-product-dto.js +2 -2
  412. package/dist/models/bid-public-status.d.ts +2 -2
  413. package/dist/models/bid-public-status.js +2 -2
  414. package/dist/models/bid-registered-response-dto.d.ts +3 -3
  415. package/dist/models/bid-registered-response-dto.js +2 -2
  416. package/dist/models/bid-result-participant-attachment-dto.d.ts +3 -3
  417. package/dist/models/bid-result-participant-attachment-dto.js +2 -2
  418. package/dist/models/bid-result-participant-dto.d.ts +3 -3
  419. package/dist/models/bid-result-participant-dto.js +2 -2
  420. package/dist/models/bid-results-response-dto.d.ts +5 -5
  421. package/dist/models/bid-results-response-dto.js +2 -2
  422. package/dist/models/bid-settlement-line-item-dto.d.ts +2 -2
  423. package/dist/models/bid-settlement-line-item-dto.js +2 -2
  424. package/dist/models/bid-settlement-participant-dto.d.ts +2 -2
  425. package/dist/models/bid-settlement-participant-dto.js +2 -2
  426. package/dist/models/bid-settlement-response-dto.d.ts +2 -2
  427. package/dist/models/bid-settlement-response-dto.js +2 -2
  428. package/dist/models/bid-statement-response-dto.d.ts +2 -2
  429. package/dist/models/bid-statement-response-dto.js +2 -2
  430. package/dist/models/bid-summary-dto.d.ts +3 -3
  431. package/dist/models/bid-summary-dto.js +2 -2
  432. package/dist/models/bid-type-public.d.ts +2 -2
  433. package/dist/models/bid-type-public.js +2 -2
  434. package/dist/models/bid-updated-response-dto.d.ts +2 -2
  435. package/dist/models/bid-updated-response-dto.js +2 -2
  436. package/dist/models/cancel-bid-request-dto.d.ts +2 -2
  437. package/dist/models/cancel-bid-request-dto.js +2 -2
  438. package/dist/models/cancel-bid200-response.d.ts +2 -2
  439. package/dist/models/cancel-bid200-response.js +2 -2
  440. package/dist/models/card-payment-request-response-dto.d.ts +2 -2
  441. package/dist/models/card-payment-request-response-dto.js +2 -2
  442. package/dist/models/complete-acceptance-request-dto.d.ts +4 -4
  443. package/dist/models/complete-acceptance-request-dto.js +2 -2
  444. package/dist/models/complete-acceptance200-response.d.ts +2 -2
  445. package/dist/models/complete-acceptance200-response.js +2 -2
  446. package/dist/models/complete-invoice200-response.d.ts +2 -2
  447. package/dist/models/complete-invoice200-response.js +2 -2
  448. package/dist/models/complete-upload-request-dto.d.ts +2 -2
  449. package/dist/models/complete-upload-request-dto.js +2 -2
  450. package/dist/models/contract-restriction-confirm-input-dto.d.ts +3 -3
  451. package/dist/models/contract-restriction-confirm-input-dto.js +2 -2
  452. package/dist/models/create-bid-request-dto.d.ts +5 -5
  453. package/dist/models/create-bid-request-dto.js +2 -2
  454. package/dist/models/create-card-payment-dto.d.ts +2 -2
  455. package/dist/models/create-card-payment-dto.js +2 -2
  456. package/dist/models/create-card-payment-request-dto.d.ts +2 -2
  457. package/dist/models/create-card-payment-request-dto.js +2 -2
  458. package/dist/models/create-card-payment200-response.d.ts +2 -2
  459. package/dist/models/create-card-payment200-response.js +2 -2
  460. package/dist/models/create-embed-launch201-response.d.ts +2 -2
  461. package/dist/models/create-embed-launch201-response.js +2 -2
  462. package/dist/models/create-external-contract-documents-request-dto.d.ts +4 -4
  463. package/dist/models/create-external-contract-documents-request-dto.js +2 -2
  464. package/dist/models/create-external-contract-documents-response-dto.d.ts +2 -2
  465. package/dist/models/create-external-contract-documents-response-dto.js +2 -2
  466. package/dist/models/create-file-upload-url201-response.d.ts +2 -2
  467. package/dist/models/create-file-upload-url201-response.js +2 -2
  468. package/dist/models/create-upload-url-request-dto.d.ts +2 -2
  469. package/dist/models/create-upload-url-request-dto.js +2 -2
  470. package/dist/models/create-webhook-endpoint-request-dto.d.ts +4 -4
  471. package/dist/models/create-webhook-endpoint-request-dto.js +2 -2
  472. package/dist/models/create-webhook-endpoint201-response.d.ts +2 -2
  473. package/dist/models/create-webhook-endpoint201-response.js +2 -2
  474. package/dist/models/delivery-date-type-public.d.ts +2 -2
  475. package/dist/models/delivery-date-type-public.js +2 -2
  476. package/dist/models/delivery-method-public.d.ts +2 -2
  477. package/dist/models/delivery-method-public.js +2 -2
  478. package/dist/models/embed-bid-prefill-dto.d.ts +83 -0
  479. package/dist/models/embed-bid-prefill-dto.js +26 -0
  480. package/dist/models/embed-bid-prefill-item-dto.d.ts +33 -0
  481. package/dist/models/embed-bid-prefill-item-dto.js +15 -0
  482. package/dist/models/embed-bid-prefill-manager-dto.d.ts +25 -0
  483. package/dist/models/embed-bid-prefill-manager-dto.js +15 -0
  484. package/dist/models/embed-launch-request-dto.d.ts +10 -9
  485. package/dist/models/embed-launch-request-dto.js +2 -2
  486. package/dist/models/embed-launch-response-dto.d.ts +4 -4
  487. package/dist/models/embed-launch-response-dto.js +2 -2
  488. package/dist/models/excellent-procurement-public.d.ts +2 -2
  489. package/dist/models/excellent-procurement-public.js +2 -2
  490. package/dist/models/external-contract-document-item-dto.d.ts +3 -3
  491. package/dist/models/external-contract-document-item-dto.js +2 -2
  492. package/dist/models/external-contract-documents-response-dto.d.ts +2 -2
  493. package/dist/models/external-contract-documents-response-dto.js +2 -2
  494. package/dist/models/external-contract-item-dto.d.ts +2 -2
  495. package/dist/models/external-contract-item-dto.js +2 -2
  496. package/dist/models/external-contract-snapshot-dto.d.ts +5 -5
  497. package/dist/models/external-contract-snapshot-dto.js +2 -2
  498. package/dist/models/external-document-inputs-dto.d.ts +2 -2
  499. package/dist/models/external-document-inputs-dto.js +2 -2
  500. package/dist/models/file-meta-response-dto.d.ts +2 -2
  501. package/dist/models/file-meta-response-dto.js +2 -2
  502. package/dist/models/file-uploaded-response-dto.d.ts +2 -2
  503. package/dist/models/file-uploaded-response-dto.js +2 -2
  504. package/dist/models/generated-external-contract-document-dto.d.ts +4 -4
  505. package/dist/models/generated-external-contract-document-dto.js +2 -2
  506. package/dist/models/get-bid-settlement200-response.d.ts +2 -2
  507. package/dist/models/get-bid-settlement200-response.js +2 -2
  508. package/dist/models/get-bid-statement200-response.d.ts +2 -2
  509. package/dist/models/get-bid-statement200-response.js +2 -2
  510. package/dist/models/get-bid200-response.d.ts +2 -2
  511. package/dist/models/get-bid200-response.js +2 -2
  512. package/dist/models/get-file-meta200-response.d.ts +2 -2
  513. package/dist/models/get-file-meta200-response.js +2 -2
  514. package/dist/models/get-supplier-card-payable-v2200-response.d.ts +2 -2
  515. package/dist/models/get-supplier-card-payable-v2200-response.js +2 -2
  516. package/dist/models/get-webhook-endpoint200-response.d.ts +2 -2
  517. package/dist/models/get-webhook-endpoint200-response.js +2 -2
  518. package/dist/models/green-product-public.d.ts +2 -2
  519. package/dist/models/green-product-public.js +2 -2
  520. package/dist/models/health-controller-check200-response.d.ts +2 -2
  521. package/dist/models/health-controller-check200-response.js +2 -2
  522. package/dist/models/health-response-dto.d.ts +2 -2
  523. package/dist/models/health-response-dto.js +2 -2
  524. package/dist/models/hierarchical-region-dto.d.ts +2 -2
  525. package/dist/models/hierarchical-region-dto.js +2 -2
  526. package/dist/models/index.d.ts +3 -0
  527. package/dist/models/index.js +3 -0
  528. package/dist/models/introspect-request-dto.d.ts +5 -5
  529. package/dist/models/introspect-request-dto.js +2 -2
  530. package/dist/models/introspection-response-dto.d.ts +4 -4
  531. package/dist/models/introspection-response-dto.js +2 -2
  532. package/dist/models/invalid-param-dto.d.ts +2 -2
  533. package/dist/models/invalid-param-dto.js +2 -2
  534. package/dist/models/invoice-completed-response-dto.d.ts +2 -2
  535. package/dist/models/invoice-completed-response-dto.js +2 -2
  536. package/dist/models/invoice-split-response-dto.d.ts +2 -2
  537. package/dist/models/invoice-split-response-dto.js +2 -2
  538. package/dist/models/legal-mandatory-public.d.ts +2 -2
  539. package/dist/models/legal-mandatory-public.js +2 -2
  540. package/dist/models/list-bid-results200-response.d.ts +2 -2
  541. package/dist/models/list-bid-results200-response.js +2 -2
  542. package/dist/models/list-bids200-response-meta.d.ts +3 -3
  543. package/dist/models/list-bids200-response-meta.js +2 -2
  544. package/dist/models/list-bids200-response.d.ts +2 -2
  545. package/dist/models/list-bids200-response.js +2 -2
  546. package/dist/models/list-products200-response.d.ts +2 -2
  547. package/dist/models/list-products200-response.js +2 -2
  548. package/dist/models/list-webhook-deliveries-response-dto.d.ts +3 -3
  549. package/dist/models/list-webhook-deliveries-response-dto.js +2 -2
  550. package/dist/models/list-webhook-deliveries200-response.d.ts +2 -2
  551. package/dist/models/list-webhook-deliveries200-response.js +2 -2
  552. package/dist/models/list-webhook-endpoints200-response.d.ts +2 -2
  553. package/dist/models/list-webhook-endpoints200-response.js +2 -2
  554. package/dist/models/mark-bid-failed-request-dto.d.ts +2 -2
  555. package/dist/models/mark-bid-failed-request-dto.js +2 -2
  556. package/dist/models/mark-bid-failed201-response.d.ts +2 -2
  557. package/dist/models/mark-bid-failed201-response.js +2 -2
  558. package/dist/models/negotiation-score-dto.d.ts +2 -2
  559. package/dist/models/negotiation-score-dto.js +2 -2
  560. package/dist/models/negotiation-scored-v2-response-dto.d.ts +3 -3
  561. package/dist/models/negotiation-scored-v2-response-dto.js +2 -2
  562. package/dist/models/oauth-error-response-dto.d.ts +2 -2
  563. package/dist/models/oauth-error-response-dto.js +2 -2
  564. package/dist/models/on-bid-award-reverted-request.d.ts +2 -2
  565. package/dist/models/on-bid-award-reverted-request.js +2 -2
  566. package/dist/models/on-bid-awarded-request.d.ts +2 -2
  567. package/dist/models/on-bid-awarded-request.js +2 -2
  568. package/dist/models/on-bid-canceled-request.d.ts +2 -2
  569. package/dist/models/on-bid-canceled-request.js +2 -2
  570. package/dist/models/on-bid-closed-request.d.ts +2 -2
  571. package/dist/models/on-bid-closed-request.js +2 -2
  572. package/dist/models/on-bid-failed-request.d.ts +2 -2
  573. package/dist/models/on-bid-failed-request.js +2 -2
  574. package/dist/models/on-ping-request.d.ts +2 -2
  575. package/dist/models/on-ping-request.js +2 -2
  576. package/dist/models/partner-webhook-delivery-status.d.ts +2 -2
  577. package/dist/models/partner-webhook-delivery-status.js +2 -2
  578. package/dist/models/partner-webhook-endpoint-status.d.ts +3 -3
  579. package/dist/models/partner-webhook-endpoint-status.js +3 -3
  580. package/dist/models/partner-webhook-event-type.d.ts +2 -2
  581. package/dist/models/partner-webhook-event-type.js +2 -2
  582. package/dist/models/payment-method-public.d.ts +2 -2
  583. package/dist/models/payment-method-public.js +2 -2
  584. package/dist/models/preconditions-dto.d.ts +2 -2
  585. package/dist/models/preconditions-dto.js +2 -2
  586. package/dist/models/problem-details-dto.d.ts +3 -3
  587. package/dist/models/problem-details-dto.js +2 -2
  588. package/dist/models/product-receipt-response-dto.d.ts +2 -2
  589. package/dist/models/product-receipt-response-dto.js +2 -2
  590. package/dist/models/product-response-dto.d.ts +3 -3
  591. package/dist/models/product-response-dto.js +2 -2
  592. package/dist/models/protected-resource-metadata-dto.d.ts +6 -6
  593. package/dist/models/protected-resource-metadata-dto.js +2 -2
  594. package/dist/models/register-award-request-dto.d.ts +5 -5
  595. package/dist/models/register-award-request-dto.js +2 -2
  596. package/dist/models/register-award201-response.d.ts +2 -2
  597. package/dist/models/register-award201-response.js +2 -2
  598. package/dist/models/register-bid201-response.d.ts +2 -2
  599. package/dist/models/register-bid201-response.js +2 -2
  600. package/dist/models/register-semo-contract-request-dto.d.ts +5 -5
  601. package/dist/models/register-semo-contract-request-dto.js +2 -2
  602. package/dist/models/request-invoice-split-request-dto.d.ts +4 -4
  603. package/dist/models/request-invoice-split-request-dto.js +2 -2
  604. package/dist/models/request-invoice-split200-response.d.ts +2 -2
  605. package/dist/models/request-invoice-split200-response.js +2 -2
  606. package/dist/models/retiree-roster-input-dto.d.ts +2 -2
  607. package/dist/models/retiree-roster-input-dto.js +2 -2
  608. package/dist/models/retiree-roster-row-dto.d.ts +2 -2
  609. package/dist/models/retiree-roster-row-dto.js +2 -2
  610. package/dist/models/revert-award-request-dto.d.ts +2 -2
  611. package/dist/models/revert-award-request-dto.js +2 -2
  612. package/dist/models/revert-award200-response.d.ts +2 -2
  613. package/dist/models/revert-award200-response.js +2 -2
  614. package/dist/models/revoke-request-dto.d.ts +5 -5
  615. package/dist/models/revoke-request-dto.js +2 -2
  616. package/dist/models/semo-contract-registered-response-dto.d.ts +3 -3
  617. package/dist/models/semo-contract-registered-response-dto.js +2 -2
  618. package/dist/models/semo-contract-taxinvoice-status-response-dto.d.ts +2 -2
  619. package/dist/models/semo-contract-taxinvoice-status-response-dto.js +2 -2
  620. package/dist/models/send-webhook-test-event200-response.d.ts +2 -2
  621. package/dist/models/send-webhook-test-event200-response.js +2 -2
  622. package/dist/models/statement-document-dto.d.ts +3 -3
  623. package/dist/models/statement-document-dto.js +2 -2
  624. package/dist/models/statement-product-dto.d.ts +2 -2
  625. package/dist/models/statement-product-dto.js +2 -2
  626. package/dist/models/submit-negotiation-scores-request-dto.d.ts +2 -2
  627. package/dist/models/submit-negotiation-scores-request-dto.js +2 -2
  628. package/dist/models/submit-negotiation-scores201-response.d.ts +2 -2
  629. package/dist/models/submit-negotiation-scores201-response.js +2 -2
  630. package/dist/models/supplier-card-payable-response-dto.d.ts +2 -2
  631. package/dist/models/supplier-card-payable-response-dto.js +2 -2
  632. package/dist/models/supplier-tax-type.d.ts +2 -2
  633. package/dist/models/supplier-tax-type.js +2 -2
  634. package/dist/models/token-request-dto.d.ts +5 -5
  635. package/dist/models/token-request-dto.js +2 -2
  636. package/dist/models/token-response-dto.d.ts +3 -3
  637. package/dist/models/token-response-dto.js +2 -2
  638. package/dist/models/update-bid-request-dto.d.ts +5 -5
  639. package/dist/models/update-bid-request-dto.js +2 -2
  640. package/dist/models/update-bid200-response.d.ts +2 -2
  641. package/dist/models/update-bid200-response.js +2 -2
  642. package/dist/models/update-webhook-endpoint-request-dto.d.ts +3 -3
  643. package/dist/models/update-webhook-endpoint-request-dto.js +2 -2
  644. package/dist/models/upload-file-request-dto.d.ts +4 -4
  645. package/dist/models/upload-file-request-dto.js +2 -2
  646. package/dist/models/upload-file201-response.d.ts +2 -2
  647. package/dist/models/upload-file201-response.js +2 -2
  648. package/dist/models/upload-url-created-response-dto.d.ts +5 -5
  649. package/dist/models/upload-url-created-response-dto.js +2 -2
  650. package/dist/models/webhook-bid-event-data.d.ts +3 -3
  651. package/dist/models/webhook-bid-event-data.js +2 -2
  652. package/dist/models/webhook-delivery-dto.d.ts +4 -4
  653. package/dist/models/webhook-delivery-dto.js +2 -2
  654. package/dist/models/webhook-endpoint-dto.d.ts +6 -6
  655. package/dist/models/webhook-endpoint-dto.js +2 -2
  656. package/dist/models/webhook-endpoint-with-secret-dto.d.ts +6 -6
  657. package/dist/models/webhook-endpoint-with-secret-dto.js +2 -2
  658. package/dist/models/webhook-event-envelope.d.ts +3 -3
  659. package/dist/models/webhook-event-envelope.js +2 -2
  660. package/dist/models/webhook-ping-event-data.d.ts +2 -2
  661. package/dist/models/webhook-ping-event-data.js +2 -2
  662. package/dist/models/webhook-test-result-dto.d.ts +3 -3
  663. package/dist/models/webhook-test-result-dto.js +2 -2
  664. package/docs/AcknowledgeProductsRequestDto.md +1 -1
  665. package/docs/ApiCatalogEntryDto.md +2 -2
  666. package/docs/AuthorizationServerMetadataDto.md +4 -4
  667. package/docs/AwardRegisteredV2ResponseDto.md +1 -1
  668. package/docs/AwardRevertedV2ResponseDto.md +1 -1
  669. package/docs/BidAttachmentInputDto.md +4 -4
  670. package/docs/BidCancelledResponseDto.md +1 -1
  671. package/docs/BidContractDocumentDto.md +7 -7
  672. package/docs/BidDetailResponseDto.md +3 -3
  673. package/docs/BidFailedV2ResponseDto.md +1 -1
  674. package/docs/BidRegisteredResponseDto.md +1 -1
  675. package/docs/BidResultParticipantAttachmentDto.md +1 -1
  676. package/docs/BidResultParticipantDto.md +1 -1
  677. package/docs/BidResultsResponseDto.md +3 -3
  678. package/docs/BidSummaryDto.md +1 -1
  679. package/docs/CompleteAcceptanceRequestDto.md +2 -2
  680. package/docs/ContractRestrictionConfirmInputDto.md +1 -1
  681. package/docs/CreateBidRequestDto.md +3 -3
  682. package/docs/CreateExternalContractDocumentsRequestDto.md +2 -2
  683. package/docs/CreateWebhookEndpointRequestDto.md +2 -2
  684. package/docs/EmbedApi.md +11 -11
  685. package/docs/EmbedBidPrefillDto.md +46 -0
  686. package/docs/EmbedBidPrefillItemDto.md +28 -0
  687. package/docs/EmbedBidPrefillManagerDto.md +24 -0
  688. package/docs/EmbedLaunchRequestDto.md +6 -6
  689. package/docs/EmbedLaunchResponseDto.md +2 -2
  690. package/docs/ExternalContractDocumentItemDto.md +1 -1
  691. package/docs/ExternalContractSnapshotDto.md +3 -3
  692. package/docs/GeneratedExternalContractDocumentDto.md +2 -2
  693. package/docs/IntrospectRequestDto.md +3 -3
  694. package/docs/IntrospectionResponseDto.md +2 -2
  695. package/docs/ListBids200ResponseMeta.md +1 -1
  696. package/docs/ListWebhookDeliveriesResponseDto.md +1 -1
  697. package/docs/NegotiationScoredV2ResponseDto.md +1 -1
  698. package/docs/OauthApi.md +7 -7
  699. package/docs/PartnerApiApi.md +467 -467
  700. package/docs/PartnerWebhookEndpointStatus.md +1 -1
  701. package/docs/ProblemDetailsDto.md +1 -1
  702. package/docs/ProductResponseDto.md +1 -1
  703. package/docs/ProductsApi.md +28 -28
  704. package/docs/ProtectedResourceMetadataDto.md +4 -4
  705. package/docs/RegisterAwardRequestDto.md +3 -3
  706. package/docs/RegisterSemoContractRequestDto.md +3 -3
  707. package/docs/RequestInvoiceSplitRequestDto.md +2 -2
  708. package/docs/RevokeRequestDto.md +3 -3
  709. package/docs/SemoContractRegisteredResponseDto.md +1 -1
  710. package/docs/StatementDocumentDto.md +1 -1
  711. package/docs/TokenRequestDto.md +3 -3
  712. package/docs/TokenResponseDto.md +1 -1
  713. package/docs/UpdateBidRequestDto.md +3 -3
  714. package/docs/UpdateWebhookEndpointRequestDto.md +1 -1
  715. package/docs/UploadFileRequestDto.md +2 -2
  716. package/docs/UploadUrlCreatedResponseDto.md +3 -3
  717. package/docs/WebhookBidEventData.md +1 -1
  718. package/docs/WebhookDeliveryDto.md +2 -2
  719. package/docs/WebhookEndpointDto.md +4 -4
  720. package/docs/WebhookEndpointWithSecretDto.md +4 -4
  721. package/docs/WebhookEventEnvelope.md +1 -1
  722. package/docs/WebhookTestResultDto.md +1 -1
  723. package/docs/WebhooksApi.md +43 -43
  724. package/docs/WellKnownApi.md +5 -5
  725. package/index.ts +2 -2
  726. package/models/acceptance-result-response-dto.ts +2 -2
  727. package/models/acknowledge-product-receipt200-response.ts +2 -2
  728. package/models/acknowledge-products-request-dto.ts +3 -3
  729. package/models/api-catalog-dto.ts +2 -2
  730. package/models/api-catalog-entry-dto.ts +4 -4
  731. package/models/api-catalog-link-dto.ts +2 -2
  732. package/models/authorization-server-metadata-dto.ts +6 -6
  733. package/models/award-method-public.ts +2 -2
  734. package/models/award-registered-v2-response-dto.ts +3 -3
  735. package/models/award-reverted-v2-response-dto.ts +3 -3
  736. package/models/bid-acceptance-dto.ts +2 -2
  737. package/models/bid-attachment-input-dto.ts +6 -6
  738. package/models/bid-bond-dto.ts +2 -2
  739. package/models/bid-cancelled-response-dto.ts +3 -3
  740. package/models/bid-contact-dto.ts +2 -2
  741. package/models/bid-contacts-dto.ts +2 -2
  742. package/models/bid-contract-document-dto.ts +9 -9
  743. package/models/bid-delivery-terms-dto.ts +2 -2
  744. package/models/bid-detail-response-dto.ts +5 -5
  745. package/models/bid-document-dto.ts +2 -2
  746. package/models/bid-failed-v2-response-dto.ts +3 -3
  747. package/models/bid-item-dto.ts +2 -2
  748. package/models/bid-lifecycle-dto.ts +2 -2
  749. package/models/bid-manager-dto.ts +2 -2
  750. package/models/bid-payment-terms-dto.ts +2 -2
  751. package/models/bid-product-dto.ts +2 -2
  752. package/models/bid-public-status.ts +2 -2
  753. package/models/bid-registered-response-dto.ts +3 -3
  754. package/models/bid-result-participant-attachment-dto.ts +3 -3
  755. package/models/bid-result-participant-dto.ts +3 -3
  756. package/models/bid-results-response-dto.ts +5 -5
  757. package/models/bid-settlement-line-item-dto.ts +2 -2
  758. package/models/bid-settlement-participant-dto.ts +2 -2
  759. package/models/bid-settlement-response-dto.ts +2 -2
  760. package/models/bid-statement-response-dto.ts +2 -2
  761. package/models/bid-summary-dto.ts +3 -3
  762. package/models/bid-type-public.ts +2 -2
  763. package/models/bid-updated-response-dto.ts +2 -2
  764. package/models/cancel-bid-request-dto.ts +2 -2
  765. package/models/cancel-bid200-response.ts +2 -2
  766. package/models/card-payment-request-response-dto.ts +2 -2
  767. package/models/complete-acceptance-request-dto.ts +4 -4
  768. package/models/complete-acceptance200-response.ts +2 -2
  769. package/models/complete-invoice200-response.ts +2 -2
  770. package/models/complete-upload-request-dto.ts +2 -2
  771. package/models/contract-restriction-confirm-input-dto.ts +3 -3
  772. package/models/create-bid-request-dto.ts +5 -5
  773. package/models/create-card-payment-dto.ts +2 -2
  774. package/models/create-card-payment-request-dto.ts +2 -2
  775. package/models/create-card-payment200-response.ts +2 -2
  776. package/models/create-embed-launch201-response.ts +2 -2
  777. package/models/create-external-contract-documents-request-dto.ts +4 -4
  778. package/models/create-external-contract-documents-response-dto.ts +2 -2
  779. package/models/create-file-upload-url201-response.ts +2 -2
  780. package/models/create-upload-url-request-dto.ts +2 -2
  781. package/models/create-webhook-endpoint-request-dto.ts +4 -4
  782. package/models/create-webhook-endpoint201-response.ts +2 -2
  783. package/models/delivery-date-type-public.ts +2 -2
  784. package/models/delivery-method-public.ts +2 -2
  785. package/models/embed-bid-prefill-dto.ts +97 -0
  786. package/models/embed-bid-prefill-item-dto.ts +39 -0
  787. package/models/embed-bid-prefill-manager-dto.ts +31 -0
  788. package/models/embed-launch-request-dto.ts +12 -9
  789. package/models/embed-launch-response-dto.ts +4 -4
  790. package/models/excellent-procurement-public.ts +2 -2
  791. package/models/external-contract-document-item-dto.ts +3 -3
  792. package/models/external-contract-documents-response-dto.ts +2 -2
  793. package/models/external-contract-item-dto.ts +2 -2
  794. package/models/external-contract-snapshot-dto.ts +5 -5
  795. package/models/external-document-inputs-dto.ts +2 -2
  796. package/models/file-meta-response-dto.ts +2 -2
  797. package/models/file-uploaded-response-dto.ts +2 -2
  798. package/models/generated-external-contract-document-dto.ts +4 -4
  799. package/models/get-bid-settlement200-response.ts +2 -2
  800. package/models/get-bid-statement200-response.ts +2 -2
  801. package/models/get-bid200-response.ts +2 -2
  802. package/models/get-file-meta200-response.ts +2 -2
  803. package/models/get-supplier-card-payable-v2200-response.ts +2 -2
  804. package/models/get-webhook-endpoint200-response.ts +2 -2
  805. package/models/green-product-public.ts +2 -2
  806. package/models/health-controller-check200-response.ts +2 -2
  807. package/models/health-response-dto.ts +2 -2
  808. package/models/hierarchical-region-dto.ts +2 -2
  809. package/models/index.ts +3 -0
  810. package/models/introspect-request-dto.ts +5 -5
  811. package/models/introspection-response-dto.ts +4 -4
  812. package/models/invalid-param-dto.ts +2 -2
  813. package/models/invoice-completed-response-dto.ts +2 -2
  814. package/models/invoice-split-response-dto.ts +2 -2
  815. package/models/legal-mandatory-public.ts +2 -2
  816. package/models/list-bid-results200-response.ts +2 -2
  817. package/models/list-bids200-response-meta.ts +3 -3
  818. package/models/list-bids200-response.ts +2 -2
  819. package/models/list-products200-response.ts +2 -2
  820. package/models/list-webhook-deliveries-response-dto.ts +3 -3
  821. package/models/list-webhook-deliveries200-response.ts +2 -2
  822. package/models/list-webhook-endpoints200-response.ts +2 -2
  823. package/models/mark-bid-failed-request-dto.ts +2 -2
  824. package/models/mark-bid-failed201-response.ts +2 -2
  825. package/models/negotiation-score-dto.ts +2 -2
  826. package/models/negotiation-scored-v2-response-dto.ts +3 -3
  827. package/models/oauth-error-response-dto.ts +2 -2
  828. package/models/on-bid-award-reverted-request.ts +2 -2
  829. package/models/on-bid-awarded-request.ts +2 -2
  830. package/models/on-bid-canceled-request.ts +2 -2
  831. package/models/on-bid-closed-request.ts +2 -2
  832. package/models/on-bid-failed-request.ts +2 -2
  833. package/models/on-ping-request.ts +2 -2
  834. package/models/partner-webhook-delivery-status.ts +2 -2
  835. package/models/partner-webhook-endpoint-status.ts +3 -3
  836. package/models/partner-webhook-event-type.ts +2 -2
  837. package/models/payment-method-public.ts +2 -2
  838. package/models/preconditions-dto.ts +2 -2
  839. package/models/problem-details-dto.ts +3 -3
  840. package/models/product-receipt-response-dto.ts +2 -2
  841. package/models/product-response-dto.ts +3 -3
  842. package/models/protected-resource-metadata-dto.ts +6 -6
  843. package/models/register-award-request-dto.ts +5 -5
  844. package/models/register-award201-response.ts +2 -2
  845. package/models/register-bid201-response.ts +2 -2
  846. package/models/register-semo-contract-request-dto.ts +5 -5
  847. package/models/request-invoice-split-request-dto.ts +4 -4
  848. package/models/request-invoice-split200-response.ts +2 -2
  849. package/models/retiree-roster-input-dto.ts +2 -2
  850. package/models/retiree-roster-row-dto.ts +2 -2
  851. package/models/revert-award-request-dto.ts +2 -2
  852. package/models/revert-award200-response.ts +2 -2
  853. package/models/revoke-request-dto.ts +5 -5
  854. package/models/semo-contract-registered-response-dto.ts +3 -3
  855. package/models/semo-contract-taxinvoice-status-response-dto.ts +2 -2
  856. package/models/send-webhook-test-event200-response.ts +2 -2
  857. package/models/statement-document-dto.ts +3 -3
  858. package/models/statement-product-dto.ts +2 -2
  859. package/models/submit-negotiation-scores-request-dto.ts +2 -2
  860. package/models/submit-negotiation-scores201-response.ts +2 -2
  861. package/models/supplier-card-payable-response-dto.ts +2 -2
  862. package/models/supplier-tax-type.ts +2 -2
  863. package/models/token-request-dto.ts +5 -5
  864. package/models/token-response-dto.ts +3 -3
  865. package/models/update-bid-request-dto.ts +5 -5
  866. package/models/update-bid200-response.ts +2 -2
  867. package/models/update-webhook-endpoint-request-dto.ts +3 -3
  868. package/models/upload-file-request-dto.ts +4 -4
  869. package/models/upload-file201-response.ts +2 -2
  870. package/models/upload-url-created-response-dto.ts +5 -5
  871. package/models/webhook-bid-event-data.ts +3 -3
  872. package/models/webhook-delivery-dto.ts +4 -4
  873. package/models/webhook-endpoint-dto.ts +6 -6
  874. package/models/webhook-endpoint-with-secret-dto.ts +6 -6
  875. package/models/webhook-event-envelope.ts +3 -3
  876. package/models/webhook-ping-event-data.ts +2 -2
  877. package/models/webhook-test-result-dto.ts +3 -3
  878. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * CMARKET V6 Partner API
3
- * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403` 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403 입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2` 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. **목록은 `data` 배열이고 `meta` 항상 함께 실립니다** — `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 리소스 응답에는 `meta` 나가지 않습니다. 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*` `/.well-known/_*` 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON 이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json 이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2` 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified` 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json` 입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId` 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId` 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type` `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1 이 허용하는 대로 이 URI 는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body 를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id` 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug 은 **HTTP status 로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
3
+ * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token`에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403`을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주기관 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2`의 모든 2xx 본문은 `{ \"data\": … }`입니다. 단일 리소스든 목록이든 같습니다. **목록은 `data`가 배열이고 `meta`가 항상 함께 실립니다** — `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 리소스 응답에는 `meta`가 나가지 않습니다. 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*`와 `/.well-known/_*`는 각각 RFC 6749·RFC 8414·RFC 9728이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2`의 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified`를 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json`입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId`와 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId`를 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type`은 `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1이 허용하는 대로 이 URI는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409와 422의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id`가 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug은 **HTTP status로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
4
4
  *
5
- * The version of the OpenAPI document: 39.0.0
5
+ * The version of the OpenAPI document: 40.0.0
6
6
  * Contact: semo.io.kr@gmail.com
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -66,131 +66,131 @@ import type { UploadFileRequestDto } from '../models';
66
66
  */
67
67
  export declare const PartnerApiApiAxiosParamCreator: (configuration?: Configuration) => {
68
68
  /**
69
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
69
+ * 진행중(`ONGOING`) 공고를 취소합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. - 되돌릴 없습니다. 취소 사유는 필수이고 공고 이력에 남습니다. - 진행중이 아니거나 이미 취소된 공고는 409, 다른 발주기관의 공고는 403입니다. - 응찰은 받았으나 낙찰자를 정하지 못한 종료는 취소가 아니라 유찰(`POST /v2/bids/{bidRef}/fail`)입니다.
70
70
  * @summary 공고 취소
71
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
72
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
71
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
72
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
73
73
  * @param {CancelBidRequestDto} cancelBidRequestDto
74
74
  * @param {*} [options] Override http request option.
75
75
  * @throws {RequiredError}
76
76
  */
77
77
  cancelBid: (bidRef: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
78
78
  /**
79
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점입니다. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 현금 결제 공고는 세금계산서 발행요청이 등록되고, 낙찰자(공급사)에게 발행요청 알림·문자가 발송됩니다. 카드 결제 공고는 발행요청 축이 없어 알림도 없습니다. - 거래명세서 발행이 예약됩니다. - 응답 코드는 200이며, 처리 결과가 본문에 담겨 반환됩니다. **부분계약(협의 감액):** 낙찰 후 협의로 계약금액이 줄었으면 `supplyAmount`+`vat` 함께 보내세요. 그 금액으로 계산서 발행이 요청됩니다. 생략하면 낙찰금액에서 파생합니다. 현금 결제 공고·낙찰자 1인·감액(증액 불가)일 때만 허용되며, 어긋나면 409 입니다. **문서에 찍히는 값:** 거래명세서·검수보고서의 구매사 사업자정보·담당자·작성일자는 등록된 발주처 정보에서 채워집니다. 요청으로 덮어쓸 수 없습니다. **낙찰자:** 공고의 낙찰 상태에서 결정되며 요청으로 지정하지 않습니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
79
+ * 납품 검수 완료를 기록합니다. 낙찰 처리된 공고에서 호출합니다. 스코프 `contracts:write` · `Idempotency-Key` 헤더 필수. - 현금 결제 공고는 세금계산서 발행요청이 등록되고 낙찰자에게 알림·문자가 나갑니다. 카드 결제 공고는 발행요청이 없어 알림도 없습니다. - 거래명세서 발행이 예약됩니다. - 협의로 계약금액이 줄었으면 `supplyAmount`와 `vat`를 함께 보냅니다. 현금 결제·낙찰자 1인·감액일 때만 허용하며 어긋나면 409입니다. 생략하면 낙찰금액에서 파생합니다. - 문서에 찍히는 구매사 사업자정보·담당자·작성일자와 낙찰자는 등록된 값에서 채워지며 요청으로 바꿀 수 없습니다.
80
80
  * @summary 검수완료 전송
81
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
82
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
81
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
82
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
83
83
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
84
84
  * @param {*} [options] Override http request option.
85
85
  * @throws {RequiredError}
86
86
  */
87
87
  completeAcceptance: (bidRef: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
88
88
  /**
89
- * `uploadUrl` 로의 `PUT` 이 끝난 뒤 호출합니다. 올라온 파일을 실측해 등록하고, 시점부터 `fileKey` 공고 첨부로 쓸 수 있습니다. **확정 `fileKey` 첨부로 없습니다** 공고 등록이 400 으로 거절됩니다. **신고한 크기가 아니라 실제 파일을 봅니다.** 발급 요청의 `fileSize` 와 다르면 실제 크기가 기록되고, 정책 상한을 넘으면 여기서 거절됩니다. **같은 `fileKey` 여러 번 호출해도 안전합니다**(멱등). **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
89
+ * `uploadUrl`로 올린 파일을 확정합니다. 시점부터 `fileKey`를 공고 첨부로 쓸 수 있습니다. 스코프 `files:write` · `Idempotency-Key` 헤더 필수. - 확정 `fileKey`를 첨부로 쓰면 공고 등록이 400입니다. - 신고한 `fileSize`가 아니라 실제 파일을 측정해 기록하며, 정책 상한을 넘으면 여기서 거절됩니다. - 같은 `fileKey`로 여러 번 호출해도 안전합니다.
90
90
  * @summary 대용량 업로드 2/2 — 업로드 확정
91
91
  * @param {string} fileKey 발급 응답의 fileKey(영문 대소문자·숫자 32자).
92
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
92
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
93
93
  * @param {CompleteUploadRequestDto} completeUploadRequestDto
94
94
  * @param {*} [options] Override http request option.
95
95
  * @throws {RequiredError}
96
96
  */
97
97
  completeFileUpload: (fileKey: string, idempotencyKey: string, completeUploadRequestDto: CompleteUploadRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
98
98
  /**
99
- * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
99
+ * 공급사에게 계산서를 수령한 계약을 완료처리합니다. 스코프 `contracts:write` · `Idempotency-Key` 헤더 필수. - 결제완료·계산서 발급 상태가 기록되고 발급일자는 현재 시각이 됩니다. - 이미 완료된 공고는 409, 다른 발주기관의 공고는 403입니다.
100
100
  * @summary 정산 마감
101
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
102
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
101
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
102
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
103
103
  * @param {*} [options] Override http request option.
104
104
  * @throws {RequiredError}
105
105
  */
106
106
  completeInvoice: (bidRef: string, idempotencyKey: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
107
107
  /**
108
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
108
+ * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable`로 미리 확인하세요. 미가입 업체로 발행하면 400입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
109
109
  * @summary 결제창 발행
110
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
110
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
111
111
  * @param {CreateCardPaymentDto} createCardPaymentDto
112
112
  * @param {*} [options] Override http request option.
113
113
  * @throws {RequiredError}
114
114
  */
115
115
  createCardPayment: (idempotencyKey: string, createCardPaymentDto: CreateCardPaymentDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
116
116
  /**
117
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `paperCodes` 와 같은 순서로 같은 개수가 돌아옵니다.** 각 항목의 `fileUrl` 을 그대로 쓰면 되고, `paperCode` 로 어느 요청에 대한 결과인지 대응시킬 수 있습니다. **`name` 의 출처는 서류에 따라 다릅니다.** 시스템이 렌더한 서류는 계약서류명이고, 공급사 사전등록 3종(11·12·13)은 **공급사가 등록한 원본 파일명**입니다 — 채팅 첨부 라벨로 그대로 쓰세요. **필요한 입력:** 발주기관·공급사는 회원 ID 만 주면 됩니다. 상호·사업자번호·대표자·주소·직인은 c-market 이 회원 정보에서 직접 채웁니다. **전부 성공 또는 전부 실패입니다.** 지원하지 않는 서류가 하나라도 섞이면(400) 아무것도 만들지 않습니다. 렌더가 필요한 서류를 요청하면서 `contract` 를 빠뜨려도 마찬가지입니다(422). **135(수의계약체결제한여부확인서)를 요청하면 추가 입력이 필요합니다.** `contract.subject`(발주내용)·`contract.category`(계약구분)·`contract.buyerDepartment`(발주부서)가 필수이고, `documentInputs.contractRestrictionConfirm.answers`에 서식 ①~⑧에 대한 **계약상대자**의 답변 8개를 순서대로 담아야 합니다(c-market 이 대신 만들어낼 수 없는 값입니다). ⑨(발주자 확인사항)는 `documentInputs.contractRestrictionConfirm.buyerConfirmation`으로 선택 전달하며, 생략하면 서식에 빈칸으로 인쇄됩니다. 문항 ①~⑧의 원문은 `answers` 필드 설명을 참고하세요. **164(퇴직자영입현황확인서)를 요청하면 퇴직자 명단이 필요합니다.** `contract.subject`(서식의 \"수의계약 대상건명\")가 필수이고, `documentInputs.retireeRoster.rows` 에 명단을 넣습니다(성명·직급 필수, 직급·입사일·근무기간·비고 선택, 최대 50행). **퇴직자가 없으면 `rows` 를 빈 배열로 보내세요** — 서식에 \"해당사항 없음\"으로 인쇄됩니다. 블록 자체를 생략하면 422 입니다(\"퇴직자 없음\"과 \"확인하지 않음\"을 구분할 수 없기 때문입니다). **승낙사항(4·184·185·186·189·197·208)을 요청하면 `contract.subject`(계약건명)가 필수입니다.** 서식 상단 \"건명\" 칸에 인쇄되는 값이라 비면 어느 계약의 승낙인지 알 수 없습니다. 그 외 추가 입력은 없습니다 — 갑(발주기관) 서명란은 `buyerId` 로, 을(공급사) 서명란은 `supplierId` 로 c-market 이 채웁니다. 발주기관이 기관 전용 승낙사항 서식을 쓰면 요청한 코드 그대로 응답하되 PDF 는 그 기관 서식으로 발급됩니다. **응답의 `fileUrl` 은 만료되지 않습니다.** 채팅 메시지 등에 그대로 저장해 두어도 됩니다. **생성 가능한 회원 범위:** 조회와 같습니다 — 이 API 키에 설정된 대행 범위 안의 회원만 가능합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents` v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
117
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `paperCodes` 와 같은 순서로 같은 개수가 돌아옵니다.** 각 항목의 `fileUrl` 을 그대로 쓰면 되고, `paperCode` 로 어느 요청에 대한 결과인지 대응시킬 수 있습니다. **`name` 의 출처는 서류에 따라 다릅니다.** 시스템이 렌더한 서류는 계약서류명이고, 공급사 사전등록 3종(11·12·13)은 **공급사가 등록한 원본 파일명**입니다 — 채팅 첨부 라벨로 그대로 쓰세요. **필요한 입력:** 발주기관·공급사는 회원 ID 만 주면 됩니다. 상호·사업자번호·대표자·주소·직인은 c-market 이 회원 정보에서 직접 채웁니다. **전부 성공 또는 전부 실패입니다.** 지원하지 않는 서류가 하나라도 섞이면(400) 아무것도 만들지 않습니다. 렌더가 필요한 서류를 요청하면서 `contract` 를 빠뜨려도 마찬가지입니다(422). **135(수의계약체결제한여부확인서)를 요청하면 추가 입력이 필요합니다.** `contract.subject`(발주내용)·`contract.category`(계약구분)·`contract.buyerDepartment`(발주부서)가 필수이고, `documentInputs.contractRestrictionConfirm.answers`에 서식 ①~⑧에 대한 **계약상대자**의 답변 8개를 순서대로 담아야 합니다(c-market 이 대신 만들어낼 수 없는 값입니다). ⑨(발주자 확인사항)는 `documentInputs.contractRestrictionConfirm.buyerConfirmation`으로 선택 전달하며, 생략하면 서식에 빈칸으로 인쇄됩니다. 문항 ①~⑧의 원문은 `answers` 필드 설명을 참고하세요. **164(퇴직자영입현황확인서)를 요청하면 퇴직자 명단이 필요합니다.** `contract.subject`(서식의 \"수의계약 대상건명\")가 필수이고, `documentInputs.retireeRoster.rows` 에 명단을 넣습니다(성명·직급 필수, 직급·입사일·근무기간·비고 선택, 최대 50행). **퇴직자가 없으면 `rows` 를 빈 배열로 보내세요** — 서식에 \"해당사항 없음\"으로 인쇄됩니다. 블록 자체를 생략하면 422 입니다(\"퇴직자 없음\"과 \"확인하지 않음\"을 구분할 수 없기 때문입니다). **승낙사항(4·184·185·186·189·197·208)을 요청하면 `contract.subject`(계약건명)가 필수입니다.** 서식 상단 \"건명\" 칸에 인쇄되는 값이라 비면 어느 계약의 승낙인지 알 수 없습니다. 그 외 추가 입력은 없습니다 — 갑(발주기관) 서명란은 `buyerId` 로, 을(공급사) 서명란은 `supplierId` 로 c-market 이 채웁니다. 발주기관이 기관 전용 승낙사항 서식을 쓰면 요청한 코드 그대로 응답하되 PDF 는 그 기관 서식으로 발급됩니다. **응답의 `fileUrl` 은 만료되지 않습니다.** 채팅 메시지 등에 그대로 저장해 두어도 됩니다. **생성 가능한 회원 범위:** 조회와 같습니다 — 이 API 키에 설정된 대행 범위 안의 회원만 가능합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents`가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
118
118
  * @summary 계약서류 생성
119
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
119
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
120
120
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
121
121
  * @param {*} [options] Override http request option.
122
122
  * @throws {RequiredError}
123
123
  */
124
124
  createExternalContractDocuments: (idempotencyKey: string, createExternalContractDocumentsRequestDto: CreateExternalContractDocumentsRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
125
125
  /**
126
- * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` `uploadUrl` 받습니다. 2. `uploadUrl` 파일 본문을 `PUT` 합니다 응답의 `contentType` `Content-Type` 헤더에 그대로 실으세요. 요청은 c-market 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 기본은 `POST /v2/files` 한 번입니다 — `base64` 로 23MB, `url` 로 30MB 까지 그 한 번으로 끝납니다. 그 위(**100MB** 까지)만 이 2단계 경로를 쓰세요. 바이트가 c-market 을 지나지 않아 서버 경유 천장을 받지 않습니다. **`uploadUrl` 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 만료됩니다 저장해 두고 재사용하지 마시고, 만료됐다면 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
126
+ * 파일을 스토리지로 직접 올리기 위한 1회용 서명 URL을 발급합니다(100MB까지). 스코프 `files:write` · `Idempotency-Key` 헤더 필수. 1. 이 호출로 `fileKey`와 `uploadUrl`을 받습니다. 2. `uploadUrl`에 파일 바이트를 그대로 `PUT` 합니다. 응답의 `contentType`을 `Content-Type` 헤더에 싣고, `Authorization` 헤더는 붙이지 않습니다(주소 자체가 자격증명입니다). 3. `POST /v2/files/{fileKey}/complete`로 확정합니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` - 2단계는 요청이 스토리지로 가므로명세에 오퍼레이션이 없고, 실패 본문도 problem+json이 아닙니다. 만료(400)·중복 업로드(409) 1단계부터 다시 합니다. - `uploadUrl`은 1회용이며 `expiresIn`초만료됩니다. 주소가 자격증명이므로 로그에 남기지 않습니다. - 30MB 이하는 `POST /v2/files` 번으로 끝납니다.
127
127
  * @summary 대용량 업로드 1/2 — 업로드 주소 발급
128
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
128
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
129
129
  * @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
130
130
  * @param {*} [options] Override http request option.
131
131
  * @throws {RequiredError}
132
132
  */
133
133
  createFileUploadUrl: (idempotencyKey: string, createUploadUrlRequestDto: CreateUploadUrlRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
134
134
  /**
135
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 1회. 수신 주소가 바뀌면 새로 만들지 말고 `PATCH` 고치세요 — 그래야 시크릿과 전송 이력이 유지됩니다. **서명 시크릿은 이 응답에서 한 번만 나갑니다.** 서버는 해시만 보관하므로 조회로 다시 받을 수 없습니다. 응답의 `secret` 을 즉시 안전한 곳에 보관하세요. 잃어버렸다면 복구가 아니라 `POST /v2/webhook-endpoints/{endpointId}/rotate-secret` 으로 **재발급**해야 합니다. **거절되는 경우와 고치는 법:** - `400` `url` HTTPS 아니거나 형식이 잘못됨, `eventTypes` 비었거나 목록 값 (`ping` 은 구독 불가). 값을 고쳐 재시도하세요. - `400` `Idempotency-Key` 헤더 누락/형식 오류. UUID v4 를 실어 보내세요. - `403` 토큰에 `webhooks:write` 스코프가 없음. 키 발급 설정을 넓혀야 합니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 — 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 계산해 **base64** 인코딩하고, `webhook-signature` `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 공백으로 구분된 **여러 서명**을 실을 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 같은 값)도 실립니다 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` `{\"status\":\"ACTIVE\"}` 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
135
+ * 수신 주소와 구독할 이벤트를 등록합니다. 연동 초기 1 호출합니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - **서명 시크릿은 이 응답에서 한 번만 나갑니다.** 서버는 해시만 보관하므로 조회로 다시 받을 수 없습니다. 잃어버렸다면 `POST /v2/webhook-endpoints/{endpointId}/rotate-secret`으로 재발급합니다. - 수신 주소가 바뀌면 새로 만들지 말고 `PATCH`로 고치세요. 시크릿과 전송 이력이 유지됩니다. - `url`은 HTTPS만 허용하고 `eventTypes`는 아래 목록 안의 값이어야 합니다. 어기면 400입니다. ### 서명 검증 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약입니다. 직접 짜지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿(`whsec_…`)을 그대로 넘기세요. ```ts import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); // 실패하면 예외 ``` 라이브러리를 쓸 수 없다면 헤더 셋으로 직접 검증합니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 base64 디코드한 바이트가 HMAC 키입니다. 2. `{webhook-id}.{webhook-timestamp}.{본문}`을 연결합니다. 본문은 **파싱 전 원문 바이트**여야 합니다. JSON을 다시 직렬화하면 순서·공백이 달라져 서명이 어긋납니다. 3. HMAC-SHA256을 base64로 인코딩해 `webhook-signature`의 `v1,` 뒤 값과 상수 시간 함수로 비교합니다. 4. `webhook-timestamp`가 5 이상 지났으면 거절합니다. `webhook-signature`에는 서명이 여러 실릴있으므로(키 회전용) 하나라도 맞으면 통과로 처리하세요. ### 중복 제거 `webhook-id`가 이벤트 식별자입니다. 재시도에도 같은 값이 오므로 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상이며 중복 제거는 수신측 책임입니다. `webhook-event-type` 헤더에 본문 `type`과 같은 값이 실려, 본문을 파싱하기 전에 거를 수 있습니다. ### 재시도와 자동 중지 2xx를 돌려주면 성공입니다. 그 외에는 최대 7회 재시도하며 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간입니다. 처리가 길면 먼저 2xx를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 `DISABLED`로 내려갑니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}`에 `{\"status\":\"ACTIVE\"}`로 되살리세요. ### 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping`은 연결 확인 전용이라 구독할 수 없습니다. 놓친 이벤트는 `GET /v2/webhook-deliveries`로 조회해 메웁니다.
136
136
  * @summary 웹훅 구독 등록
137
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
137
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
138
138
  * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
139
139
  * @param {*} [options] Override http request option.
140
140
  * @throws {RequiredError}
141
141
  */
142
142
  createWebhookEndpoint: (idempotencyKey: string, createWebhookEndpointRequestDto: CreateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
143
143
  /**
144
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH {\"status\":\"DISABLED\"}` 쓰세요 시크릿과 이벤트 구성이 남아 그대로 되살릴 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
144
+ * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 되돌릴없습니다. 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. 잠시만 멈추려면 `PATCH`로 `{\"status\":\"DISABLED\"}`를 보내세요. - `If-Match`가 필수입니다. 누락은 428, 그 사이 구독이 바뀌었으면 412입니다.
145
145
  * @summary 웹훅 구독 삭제
146
146
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
147
- * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
148
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
147
+ * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412로 거절되며 아무것도 변경되지 않습니다.
148
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
149
149
  * @param {*} [options] Override http request option.
150
150
  * @throws {RequiredError}
151
151
  */
152
152
  deleteWebhookEndpoint: (endpointId: string, ifMatch: string, idempotencyKey: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
153
153
  /**
154
- * 무인증 — `fileKey` 자체가 capability 다(키를 아는 쪽이 곧 접근 권한을 가진다). 파트너 응답의 `fileUrl`/`fullUrl`URL 을 가리킨다. 요청 시점에 서명하므로 URL 을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}` 파일 메타와 `downloadUrl` v2 응답 규약으로 돌려줍니다. 이 안정 URL 은 파트너 응답의 `fileUrl`/`fullUrl` 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
154
+ * 무인증 — `fileKey` 자체가 capability 다(키를 아는 쪽이 곧 접근 권한을 가진다). 파트너 응답의 `fileUrl`/`fullUrl`이 이 URL을 가리킨다. 요청 시점에 서명하므로 URL을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}`가 파일 메타와 `downloadUrl`을 v2 응답 규약으로 돌려줍니다. 이 안정 URL은 파트너 응답의 `fileUrl`/`fullUrl`이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
155
155
  * @summary 파일 다운로드
156
- * @param {string} fileKey 파일 키 — 영문 대소문자·숫자 32자. 업로드(&#x60;POST /v1|/v2/files&#x60;) 응답에서 받은 값. 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다.
156
+ * @param {string} fileKey 파일 키 — 영문 대소문자·숫자 32자. 업로드(&#x60;POST /v1|/v2/files&#x60;) 응답에서 받은 값. 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex가 아닌 문자가 들어갑니다.
157
157
  * @param {*} [options] Override http request option.
158
158
  * @throws {RequiredError}
159
159
  */
160
160
  downloadFile: (fileKey: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
161
161
  /**
162
- * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 응답의 `status` 아니라 `participants[].isWinner` 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류는 이 응답에 실립니다.** `contractDocuments[]` 서류별 `paperCode`·`paperName`· `fileKey`·`downloadUrl`·`uploadedAt`·`winnerSequence` 를 담습니다 — 계약서류만 따로 받는 엔드포인트는 두지 않습니다. `generationState` **관측 전용**이며 `DEAD_LETTER` 보이면 자동 재시도가 소진된 상태라 API 되살릴 수 없습니다(운영에 문의하세요). **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
162
+ * 공고 건의 전체 정보를 조회합니다 — 기본 정보, 납품·대금 조건, 담당자, 품목, 응찰 참여자, 계약서류, 검수 상태. 스코프 `bids:read`. - 낙찰 여부는 `status`가 아니라 `participants[].isWinner`로 판단합니다. `AWARDED` 상태는 없어(낙찰 직후 `CONTRACT_IN_PROGRESS`) `status === \'AWARDED\'` 폴링은 끝나지 않습니다. - 계약서류는 `contractDocuments[]`에 실립니다. 따로 받는 엔드포인트는 없습니다. - 여러 건은 `GET /v2/bid-results`로 번에 받습니다. - 다른 발주기관의 공고는 403입니다.
163
163
  * @summary 공고 상세 조회
164
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
165
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
164
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
165
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
166
166
  * @param {*} [options] Override http request option.
167
167
  * @throws {RequiredError}
168
168
  */
169
169
  getBid: (bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
170
170
  /**
171
- * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 다른 조회에서 일부 참가자 정보가 가려지는 경우와 무관하게, 이 정산 정보는 읽기 전용으로 항상 그대로 제공됩니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
171
+ * 낙찰 공급사의 사업자·계좌 정보와 공급가액·부가세, 응찰 품목내역을 조회합니다. 대금 지급에 필요한 값입니다. 스코프 `invoices:read`(종전 `bids:read`에서 변경). 다른 조회에서 참가자 정보가 가려지는 경우와 무관하게응답은 항상 그대로 나갑니다.
172
172
  * @summary 정산 정보 조회
173
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
174
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
173
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
174
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
175
175
  * @param {*} [options] Override http request option.
176
176
  * @throws {RequiredError}
177
177
  */
178
178
  getBidSettlement: (bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
179
179
  /**
180
- * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
180
+ * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. 스코프 `invoices:read`(종전 `contracts:read`에서 변경).
181
181
  * @summary 거래명세서 조회
182
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
182
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
183
183
  * @param {number} [paperCode] 거래명세서 서식 코드. 생략하면 해당 공고에 적용된 기본 서식으로 조회합니다. 기관에 서식이 여러 벌인 경우에만 지정하세요.
184
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
184
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
185
185
  * @param {*} [options] Override http request option.
186
186
  * @throws {RequiredError}
187
187
  */
188
188
  getBidStatement: (bidRef: string, paperCode?: number, ifNoneMatch?: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
189
189
  /**
190
- * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey` 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
190
+ * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey`만 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName`에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
191
191
  * @summary 파일 정보 조회
192
192
  * @param {string} fileKey 파일 키 — 업로드 응답의 fileKey(영문 대소문자·숫자 32자).
193
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
193
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
194
194
  * @param {*} [options] Override http request option.
195
195
  * @throws {RequiredError}
196
196
  */
@@ -204,19 +204,19 @@ export declare const PartnerApiApiAxiosParamCreator: (configuration?: Configurat
204
204
  */
205
205
  getSemoContractTaxinvoiceStatus: (externalContractId: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
206
206
  /**
207
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
207
+ * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write`를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
208
208
  * @summary 공급사 카드결제 가능 여부
209
209
  * @param {string} memberId 계약업체 회원 ID
210
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
210
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
211
211
  * @param {*} [options] Override http request option.
212
212
  * @throws {RequiredError}
213
213
  */
214
214
  getSupplierCardPayableV2: (memberId: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
215
215
  /**
216
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 `endpointId` 확인하세요. **필수 스코프:** `webhooks:read`
216
+ * 구독 1건의 현재 상태를 조회합니다. 스코프 `webhooks:read`. 수정·삭제 전에 먼저 호출해 응답 헤더의 `ETag`를 `If-Match`에 실어야 합니다. 없는 구독이거나 다른 파트너 키의 구독이면 404입니다. 서명 시크릿은 실리지 않습니다.
217
217
  * @summary 웹훅 구독 단건 조회
218
218
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
219
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
219
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
220
220
  * @param {*} [options] Override http request option.
221
221
  * @throws {RequiredError}
222
222
  */
@@ -224,35 +224,35 @@ export declare const PartnerApiApiAxiosParamCreator: (configuration?: Configurat
224
224
  /**
225
225
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
226
226
  * @summary Partner API 헬스체크
227
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
227
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
228
228
  * @param {*} [options] Override http request option.
229
229
  * @throws {RequiredError}
230
230
  */
231
231
  healthControllerCheck: (ifNoneMatch?: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
232
232
  /**
233
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고를 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에 실린 `ETag` 다음 요청의 `If-None-Match` 되보내면, 결과가 그대로일 때 `304` 본문 없이 받습니다. **식별자 전달:** `?bidRefs=A,B,C`(쉼표) 또는 `?bidRefs=A&bidRefs=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다. 요청한 건수와 받은 건수가 다를 수 있으므로, 보낸 값이 공고번호였다면 `bidId` 로, 구매번호였다면 `purchaseNo` 로 대조하세요. **공고 하나만 볼 때도** `bidRefs` 에 하나만 넣으면 됩니다. 응찰 결과 외에 납품 조건·품목·계약서류까지 필요하면 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요.
233
+ * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. - 결과 확인은 공고를 하나씩 조회하지 말고 이 엔드포인트로 최대 100건씩 받습니다. 응답의 `ETag`를 다음 요청의 `If-None-Match`로 보내면 변화가 없을본문 없이 `304`로 끝납니다. - 식별자는 `?bidRefs=A,B,C`와 `?bidRefs=A&bidRefs=B` 둘 다 됩니다. - 없거나 대행 범위 밖인 식별자는 오류가 아니라 응답에서 빠집니다. 보낸 값이 공고번호면 `bidId`, 구매번호면 `purchaseNo`로 대조합니다.
234
234
  * @summary 공고 결과 조회
235
- * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60; 반복해 전달합니다. 최대 100건입니다.
236
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
235
+ * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60;를 반복해 전달합니다. 최대 100건입니다.
236
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
237
237
  * @param {*} [options] Override http request option.
238
238
  * @throws {RequiredError}
239
239
  */
240
240
  listBidResults: (bidRefs: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
241
241
  /**
242
- * 발주처(API 바인딩)의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(쿼리에 buyerId 넣지 않습니다). **페이지네이션(cursor):** `limit`(1~100, 기본 100) + `cursor`(불투명 토큰). 응답 `meta.nextCursor` 다음 요청 `cursor` 전달하면 다음 페이지를 받습니다. `meta.hasMore` `false`(= `nextCursor` 가 `null`)이면 마지막 페이지입니다. 목록 자체는 `data` 에 배열로 실립니다. **상태·낙찰방법:** 공개값(의미 문자열)으로 반환됩니다. 낙찰 여부는 상태가 아니라 낙찰 결과 조회의 `participants[].isWinner` 관측합니다(AWARDED 상태는 없습니다).
242
+ * API 키에 연결된 발주기관의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. - 발주기관은 키로 결정됩니다(`buyerId`를 보내지 않습니다). - 페이지네이션: `limit`(1~100, 기본 100) `cursor`. 응답 `meta.nextCursor`를 다음 요청의 `cursor`로 보내고, `meta.hasMore`가 `false`면 마지막 페이지입니다. - 낙찰 여부는 공고 상태가 아니라 `GET /v2/bid-results`의 `participants[].isWinner`로 판단합니다. `AWARDED` 상태는 없습니다.
243
243
  * @summary 공고 목록 조회
244
244
  * @param {number} [limit] 페이지 크기(1~100, 기본 100).
245
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 그대로 전달한다. 미지정 페이지. &#x60;nextCursor&#x3D;null&#x60; 이면 마지막 페이지다.
246
- * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
245
+ * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60;를 그대로 보냅니다. 생략하면페이지이고, &#x60;nextCursor&#x60;가 &#x60;null&#x60;이면 마지막 페이지입니다.
246
+ * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
247
247
  * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회합니다.
248
248
  * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
249
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
249
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
250
250
  * @param {*} [options] Override http request option.
251
251
  * @throws {RequiredError}
252
252
  */
253
253
  listBids: (limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, ifNoneMatch?: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
254
254
  /**
255
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market 이 데이터를 채워 PDF 로 만들어 주는 서류입니다. 생성 API 의 `paperCodes` 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents` v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
255
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market이 데이터를 채워 PDF로 만들어 주는 서류입니다. 생성 API의 `paperCodes`에 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents`가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
256
256
  * @summary 거래에 필요한 계약서류 목록 조회
257
257
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
258
258
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -261,49 +261,49 @@ export declare const PartnerApiApiAxiosParamCreator: (configuration?: Configurat
261
261
  */
262
262
  listExternalContractDocuments: (buyerId: string, bidType: ListExternalContractDocumentsBidTypeEnum, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
263
263
  /**
264
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 걸러 다시 처리하면 됩니다. - \"이벤트가 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 같고 `attempt` 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 다음 요청의 `cursor` 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
264
+ * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문, 수신측 응답 상태, 다음 재시도 시각이 함께 실립니다. 스코프 `webhooks:read`. - 수신측 장애로 놓친 이벤트는 `status=EXHAUSTED`로 걸러 다시 처리합니다. 웹훅의 폴링 대체 경로입니다. - 재시도마다 한 행이며 `eventId`가 같고 `attempt`만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단합니다. - 페이지네이션: 응답 `nextCursor`를 다음 요청의 `cursor`로 보냅니다. `null`이면 마지막 페이지입니다.
265
265
  * @summary 웹훅 전송 이력 조회
266
266
  * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
267
267
  * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
268
268
  * @param {number} [limit] 페이지 크기(1~200, 기본 50).
269
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 그대로 전달합니다. 미지정 시 첫 페이지.
270
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
269
+ * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60;를 그대로 전달합니다. 미지정 시 첫 페이지.
270
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
271
271
  * @param {*} [options] Override http request option.
272
272
  * @throws {RequiredError}
273
273
  */
274
274
  listWebhookDeliveries: (endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
275
275
  /**
276
- * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 을 계산해 **base64** 로 인코딩하고, `webhook-signature` 의 `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 는 공백으로 구분된 **여러 서명**을 실을 수 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 과 같은 값)도 실립니다 — 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 — 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 로 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` `{\"status\":\"ACTIVE\"}` 로 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 은 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
276
+ * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. 스코프 `webhooks:read`. 발송이 멈춘 이유는 `status`와 `consecutiveFailures`로 확인합니다. 서명 시크릿은 실리지 않습니다. 수신측 구현 방법은 `POST /v2/webhook-endpoints` 설명에 있습니다.
277
277
  * @summary 웹훅 구독 목록 조회
278
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
278
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
279
279
  * @param {*} [options] Override http request option.
280
280
  * @throws {RequiredError}
281
281
  */
282
282
  listWebhookEndpoints: (ifNoneMatch?: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
283
283
  /**
284
- * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(FAILED)로 전환됩니다. - 유찰사유 코드와 상세가 기록됩니다. **유찰사유 값 목록(failureReasonCode 공개값):** | | 의미 | |------|------| | `ABOVE_TARGET_PRICE` | 예정가격 초과 | | `DEPT_MISMATCH` | 자격 미달 | | `NEEDS_EXPERTISE` | 전문성 필요 | | `OTHER` | 기타 (`failureReasonDetail` 필수) | | `NO_PARTICIPANT` | 참가자 없음 | | `SINGLE_PARTICIPANT` | 단독 참가 | | `LESS_THAN_TWO` | 2인 미만 | | `BELOW_MINIMUM` | 최저가 미달 | **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 를 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수.
284
+ * 공고를 유찰 처리합니다. 입찰 마감 상태에서 호출합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. 공고 상태가 유찰(`FAILED`)로 바뀌고 유찰사유가 기록됩니다. 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다). | `failureReasonCode` | 의미 | | --- | --- | | `ABOVE_TARGET_PRICE` | 예정가격 초과 | | `DEPT_MISMATCH` | 자격 미달 | | `NEEDS_EXPERTISE` | 전문성 필요 | | `NO_PARTICIPANT` | 참가자 없음 | | `SINGLE_PARTICIPANT` | 단독 참가 | | `LESS_THAN_TWO` | 2인 미만 | | `BELOW_MINIMUM` | 최저가 미달 | | `OTHER` | 기타(`failureReasonDetail` 필수) |
285
285
  * @summary 유찰 처리
286
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
287
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
286
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
287
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
288
288
  * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
289
289
  * @param {*} [options] Override http request option.
290
290
  * @throws {RequiredError}
291
291
  */
292
292
  markBidFailed: (bidRef: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
293
293
  /**
294
- * 낙찰 결과를 등록합니다. 요청의 응답은 처리 상태 `AWARDED` 반환합니다. **호출 시점:** 입찰 마감 후 낙찰자가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 낙찰자(공급사)의 응찰 건이 낙찰 처리됩니다. - 이후 **공고의 조회 상태(status)는 계약진행(CONTRACT_IN_PROGRESS)** 으로 진행합니다. `AWARDED` 라는 공고 status 존재하지 않으므로, 낙찰 여부는 `GET /v2/bids/{bidRef}/results` 의 `participants[].isWinner` 또는 `GET /v2/bids/{bidRef}` 의 status(=계약진행)로 관측하세요(`status === \'AWARDED\'` 폴링 금지). - 협상 방식(NEGOTIATION/NEGOTIATION_AUTO) 공고는 이 엔드포인트 전에 `POST /v2/bids/{bidRef}/negotiation-scores`(협상 점수평가)로 평가를 완료해야 합니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 24시간 캐시 응답 반환.
294
+ * 낙찰 결과를 등록합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. - 입찰 마감(입찰완료) 상태에서 호출합니다. - 낙찰 공고 상태는 계약진행(`CONTRACT_IN_PROGRESS`)입니다. `AWARDED` 공고 상태는 없으므로 낙찰 여부는 `participants[].isWinner`로 판단합니다. - 협상 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) 공고는 `POST /v2/bids/{bidRef}/negotiation-scores`로 평가를 마쳐야 호출할 있습니다. - 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다). - 같은 키와 같은 body 재전송하면 24시간 동안 캐시된 응답을 돌려줍니다.
295
295
  * @summary 낙찰 결과 전송
296
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
297
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
296
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
297
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
298
298
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
299
299
  * @param {*} [options] Override http request option.
300
300
  * @throws {RequiredError}
301
301
  */
302
302
  registerAward: (bidRef: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
303
303
  /**
304
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 요청 본문에 직접 싣지 마세요 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 받고, 32자 키를 요청의 `attachments` 배열에 넣습니다.
304
+ * 공고를 등록합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. 첨부는 방법 하나입니다. - `attachments` 원소에 `{ fileName, url }` 또는 `{ fileName, base64 }`를 그대로 넣습니다. - 여러 공고에서 재사용할 파일은 `POST /v2/files`로 먼저 올려 받은 `fileKey`를 넣습니다.
305
305
  * @summary 공고 등록
306
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
306
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
307
307
  * @param {CreateBidRequestDto} createBidRequestDto
308
308
  * @param {*} [options] Override http request option.
309
309
  * @throws {RequiredError}
@@ -312,17 +312,17 @@ export declare const PartnerApiApiAxiosParamCreator: (configuration?: Configurat
312
312
  /**
313
313
  * 외부에서 맺어진 계약 1건을 씨마켓의 **세금계산서 발행 대상**으로 등록합니다. **등록 후 동선:** 발주기관이 씨마켓 [나의 계약 관리] 에서 계산서 발급을 요청하고, 공급기업이 같은 화면에서 발행합니다. 계산서의 **공급자는 공급기업, 공급받는자는 발주기관**입니다. **대금 흐름:** 씨마켓은 이 거래의 대금을 받지 않습니다 — 발행 경로만 제공합니다. **금액:** `supplyPrice` 는 **부가세를 뺀 과세 공급가액**입니다(결제창 API 가 부가세 포함가를 받는 것과 다릅니다). 과세·면세 공급가액이 모두 0 이면 400 입니다. **사전 조건:** 두 회원 ID 가 씨마켓에 실재해야 합니다. 회원 ID 가 곧 소유권이라, 없는 회원으로 등록하면 아무도 열 수 없는 계산서 대상이 됩니다. **필수 스코프:** `contracts:write`. 바인딩된 발주처 외의 발주기관을 대신하려면 대행 범위에 그 회원이 있어야 합니다. **멱등성:** `externalContractId` 가 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 대상을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
314
314
  * @summary 계약 발행대상 등록
315
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
315
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
316
316
  * @param {RegisterSemoContractRequestDto} registerSemoContractRequestDto
317
317
  * @param {*} [options] Override http request option.
318
318
  * @throws {RequiredError}
319
319
  */
320
320
  registerSemoContract: (idempotencyKey: string, registerSemoContractRequestDto: RegisterSemoContractRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
321
321
  /**
322
- * 한 공고의 계산서를 여러 장으로 나눠 발급해 달라고 청구합니다. 스코프 `invoices:write`. **청구만 접수합니다.** 호출이 계산서를 발행하지는 않습니다 접수된 청구는 정산 파이프라인이 처리하며, 진행 여부는 `GET /v2/bids/{bidRef}` `taxInvoiceRequested` 관측합니다. **나눠 담을 금액을 보냅니다.** `supplyAmount`(공급가액)와 `vat`(부가세)는 이번 장에 실을 금액입니다. 남은 금액을 다시 나누려면 같은 공고에 청구를 한 번 더 보냅니다 — 그때는 **새 `Idempotency-Key`** 쓰세요. 같은 키로 다시 보내면 앞선 청구의 응답이 그대로 재생됩니다. **발급 희망일**(`issueDate`)은 선택이며 미래 일자는 400 입니다. 미지정 시 서버 기본값을 씁니다.
322
+ * 한 공고의 계산서를 여러 장으로 나눠 발급해 달라고 청구합니다. 스코프 `invoices:write` · `Idempotency-Key` 헤더 필수. - 청구만 접수합니다. 발행은 정산 파이프라인이 처리하며 진행 여부는 `GET /v2/bids/{bidRef}`의 `taxInvoiceRequested`로 확인합니다. - `supplyAmount`와 `vat`는 이번 장에 실을 금액입니다. 남은 금액을 다시 나누려면 **새 `Idempotency-Key`**로 청구합니다. 같은 키는 앞선 청구의 응답을 그대로 돌려줍니다. - `issueDate`는 선택이며 미래 일자는 400입니다.
323
323
  * @summary 계산서 분할 발급 청구
324
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
325
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
324
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
325
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
326
326
  * @param {RequestInvoiceSplitRequestDto} requestInvoiceSplitRequestDto
327
327
  * @param {*} [options] Override http request option.
328
328
  * @throws {RequiredError}
@@ -331,67 +331,67 @@ export declare const PartnerApiApiAxiosParamCreator: (configuration?: Configurat
331
331
  /**
332
332
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
333
333
  * @summary 낙찰 되돌리기
334
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
335
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
334
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
335
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
336
336
  * @param {RevertAwardRequestDto} revertAwardRequestDto
337
337
  * @param {*} [options] Override http request option.
338
338
  * @throws {RequiredError}
339
339
  */
340
340
  revertAward: (bidRef: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
341
341
  /**
342
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
342
+ * 서명 시크릿을 새로 발급합니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 시크릿은 이 응답에서 한 번만 나가고 `secretVersion`이 1 올라갑니다. - **옛 시크릿은 즉시 무효입니다.** 유예가 없으므로 순서를 지키세요 — ① 수신측이 옛 값과 새 값을 모두 받아들이도록 배포 → ② 이 호출 → ③ 새 반영 → ④ 옛 값 제거. - 같은 `Idempotency-Key`로 다시 부르면 새로 발급하지 않고 처음 발급한 값을 돌려줍니다(24시간).
343
343
  * @summary 웹훅 서명 시크릿 재발급
344
344
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
345
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
345
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
346
346
  * @param {*} [options] Override http request option.
347
347
  * @throws {RequiredError}
348
348
  */
349
349
  rotateWebhookSecret: (endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
350
350
  /**
351
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` `delivered: false` 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
351
+ * 등록된 주소로 `ping` 이벤트를 1회 보내고 결과를 돌려줍니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 수신측이 받지 못해도 응답은 200이고 `delivered: false`입니다. 원인은 `responseStatus`와 `error`로 좁힙니다. - 실제 이벤트와 같은 서명 헤더가 실리므로 검증 코드를 그대로 시험할 수 있습니다. - 다시 보내려면 `Idempotency-Key`를 쓰세요. 같은 키는 24시간 동안 직전 결과를 돌려줍니다.
352
352
  * @summary 웹훅 연결 확인 발송
353
353
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
354
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
354
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
355
355
  * @param {*} [options] Override http request option.
356
356
  * @throws {RequiredError}
357
357
  */
358
358
  sendWebhookTestEvent: (endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
359
359
  /**
360
- * 협상방식(NEGOTIATION/NEGOTIATION_AUTO) 공고의 응찰자별 점수를 입력합니다. **호출 시점:** 입찰 마감 후 낙찰(`POST /v2/bids/{bidRef}/award`) 전. 협상방식 공고는 이 평가를 완료해야 낙찰에 진입할 수 있습니다. **부수효과:** - 응찰자별 기술점수(및 선택적 가격점수 override)가 기록됩니다. - `complete=true` 평가완료 게이트까지 적용돼 낙찰 진입이 가능해집니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 시 24시간 내 캐시 응답 반환.
360
+ * 협상 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) 공고의 응찰자별 점수를 입력합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. - 입찰 마감 후 낙찰(`POST /v2/bids/{bidRef}/award`) 전에 호출합니다. 협상 방식 공고는 이 평가를 마쳐야 낙찰에 진입합니다. - `complete=true`면 평가완료로 처리되어 낙찰을 호출할 있습니다. - 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다).
361
361
  * @summary 협상 점수평가
362
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
363
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
362
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
363
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
364
364
  * @param {SubmitNegotiationScoresRequestDto} submitNegotiationScoresRequestDto
365
365
  * @param {*} [options] Override http request option.
366
366
  * @throws {RequiredError}
367
367
  */
368
368
  submitNegotiationScores: (bidRef: string, idempotencyKey: string, submitNegotiationScoresRequestDto: SubmitNegotiationScoresRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
369
369
  /**
370
- * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEditHistory=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
370
+ * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. - 진행중·초안 상태만 수정할 수 있습니다. 마감·취소된 공고는 거부됩니다. - 낙찰방법(`awardMethod`)은 수정할 없고, 참여자가 있으면 입찰방식·면허·예산·품목 일부가 잠깁니다. - 한 섹션을 수정하려면 섹션의 필수 필드를 함께 보냅니다. - `hideEditHistory=true`면 변경이력을 비공개로 남기고 노출 카운터를 올리지 않습니다.
371
371
  * @summary 공고 수정
372
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
373
- * @param {string} ifMatch 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
374
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
372
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
373
+ * @param {string} ifMatch 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412로 거절되며 아무것도 수정되지 않습니다.
374
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
375
375
  * @param {UpdateBidRequestDto} updateBidRequestDto
376
376
  * @param {*} [options] Override http request option.
377
377
  * @throws {RequiredError}
378
378
  */
379
379
  updateBid: (bidRef: string, ifMatch: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
380
380
  /**
381
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 헤더가 없으면 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` 헤더를 빼먹었습니다. 조회 `ETag` 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
381
+ * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - `eventTypes`는 치환입니다. 하나를 더하려면 기존 목록을 포함한 전체를 보냅니다. - `If-Match`가 필수입니다. `GET`으로 받은 `ETag`를 그대로 실으세요. 누락은 428, 사이 구독이 바뀌었으면 412이며 아무것도 수정되지 않습니다. - 연속 실패로 자동 중지된 구독은 `{\"status\":\"ACTIVE\"}`로 되살립니다. - 시크릿은 이 경로로 바뀌지 않습니다. 재발급은 `rotate-secret`입니다.
382
382
  * @summary 웹훅 구독 수정
383
383
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
384
- * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
385
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
384
+ * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412로 거절되며 아무것도 변경되지 않습니다.
385
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
386
386
  * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
387
387
  * @param {*} [options] Override http request option.
388
388
  * @throws {RequiredError}
389
389
  */
390
390
  updateWebhookEndpoint: (endpointId: string, ifMatch: string, idempotencyKey: string, updateWebhookEndpointRequestDto: UpdateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
391
391
  /**
392
- * **첨부 업로드의 기본 경로입니다. 23MB 이하면 호출 하나로 끝납니다.** 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **23MB 를 넘으면 경로를 바꿔야 합니다.** 상한이 셋으로 갈립니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 이 호출 + `base64` | **23MB** (본문이 c-market 을 통과하며 base64 팽창 4/3 이 얹힘) | 1 | | 이 호출 + `url` | **30MB** (c-market 이 대신 내려받아 팽창은 없지만 서버 경유 천장은 그대로) | 1 | | `POST /v2/files/upload-url` 로 시작하는 2단계 | **100MB** (바이트가 c-market 을 지나지 않음) | 2 + 스토리지 PUT | c-market 내려받을 있는 https 주소에 파일을 올려 둘 수 있다면 `url` 이 30MB 까지를 1콜로 덮습니다. 그 이상이거나 주소를 열 수 없으면 2단계 경로를 쓰세요. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 그대로 넣으면 호출 없이 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
392
+ * 공고 첨부파일을 올리고 `fileKey`를 받습니다. 스코프 `files:write` · `Idempotency-Key` 헤더 필수. `base64`와 `url` 중 하나만 보냅니다. 받은 `fileKey`는 공고 등록·수정의 `attachments`에 넣습니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 이 호출 + `base64` | 23MB | 1 | | 이 호출 + `url` | 30MB | 1 | | `POST /v2/files/upload-url` 2단계 | 100MB | 2 + 스토리지 PUT | 공고에만 쓰는 파일이면 `POST /v2/bids`의 `attachments`에 `url`·`base64`를 직접 넣어호출을 생략할 있습니다.
393
393
  * @summary 공고 첨부파일 업로드 (기본)
394
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
394
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
395
395
  * @param {UploadFileRequestDto} uploadFileRequestDto
396
396
  * @param {*} [options] Override http request option.
397
397
  * @throws {RequiredError}
@@ -403,131 +403,131 @@ export declare const PartnerApiApiAxiosParamCreator: (configuration?: Configurat
403
403
  */
404
404
  export declare const PartnerApiApiFp: (configuration?: Configuration) => {
405
405
  /**
406
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
406
+ * 진행중(`ONGOING`) 공고를 취소합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. - 되돌릴 없습니다. 취소 사유는 필수이고 공고 이력에 남습니다. - 진행중이 아니거나 이미 취소된 공고는 409, 다른 발주기관의 공고는 403입니다. - 응찰은 받았으나 낙찰자를 정하지 못한 종료는 취소가 아니라 유찰(`POST /v2/bids/{bidRef}/fail`)입니다.
407
407
  * @summary 공고 취소
408
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
409
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
408
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
409
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
410
410
  * @param {CancelBidRequestDto} cancelBidRequestDto
411
411
  * @param {*} [options] Override http request option.
412
412
  * @throws {RequiredError}
413
413
  */
414
414
  cancelBid(bidRef: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CancelBid200Response>>;
415
415
  /**
416
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점입니다. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 현금 결제 공고는 세금계산서 발행요청이 등록되고, 낙찰자(공급사)에게 발행요청 알림·문자가 발송됩니다. 카드 결제 공고는 발행요청 축이 없어 알림도 없습니다. - 거래명세서 발행이 예약됩니다. - 응답 코드는 200이며, 처리 결과가 본문에 담겨 반환됩니다. **부분계약(협의 감액):** 낙찰 후 협의로 계약금액이 줄었으면 `supplyAmount`+`vat` 함께 보내세요. 그 금액으로 계산서 발행이 요청됩니다. 생략하면 낙찰금액에서 파생합니다. 현금 결제 공고·낙찰자 1인·감액(증액 불가)일 때만 허용되며, 어긋나면 409 입니다. **문서에 찍히는 값:** 거래명세서·검수보고서의 구매사 사업자정보·담당자·작성일자는 등록된 발주처 정보에서 채워집니다. 요청으로 덮어쓸 수 없습니다. **낙찰자:** 공고의 낙찰 상태에서 결정되며 요청으로 지정하지 않습니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
416
+ * 납품 검수 완료를 기록합니다. 낙찰 처리된 공고에서 호출합니다. 스코프 `contracts:write` · `Idempotency-Key` 헤더 필수. - 현금 결제 공고는 세금계산서 발행요청이 등록되고 낙찰자에게 알림·문자가 나갑니다. 카드 결제 공고는 발행요청이 없어 알림도 없습니다. - 거래명세서 발행이 예약됩니다. - 협의로 계약금액이 줄었으면 `supplyAmount`와 `vat`를 함께 보냅니다. 현금 결제·낙찰자 1인·감액일 때만 허용하며 어긋나면 409입니다. 생략하면 낙찰금액에서 파생합니다. - 문서에 찍히는 구매사 사업자정보·담당자·작성일자와 낙찰자는 등록된 값에서 채워지며 요청으로 바꿀 수 없습니다.
417
417
  * @summary 검수완료 전송
418
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
419
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
418
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
419
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
420
420
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
421
421
  * @param {*} [options] Override http request option.
422
422
  * @throws {RequiredError}
423
423
  */
424
424
  completeAcceptance(bidRef: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CompleteAcceptance200Response>>;
425
425
  /**
426
- * `uploadUrl` 로의 `PUT` 이 끝난 뒤 호출합니다. 올라온 파일을 실측해 등록하고, 시점부터 `fileKey` 공고 첨부로 쓸 수 있습니다. **확정 `fileKey` 첨부로 없습니다** 공고 등록이 400 으로 거절됩니다. **신고한 크기가 아니라 실제 파일을 봅니다.** 발급 요청의 `fileSize` 와 다르면 실제 크기가 기록되고, 정책 상한을 넘으면 여기서 거절됩니다. **같은 `fileKey` 여러 번 호출해도 안전합니다**(멱등). **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
426
+ * `uploadUrl`로 올린 파일을 확정합니다. 시점부터 `fileKey`를 공고 첨부로 쓸 수 있습니다. 스코프 `files:write` · `Idempotency-Key` 헤더 필수. - 확정 `fileKey`를 첨부로 쓰면 공고 등록이 400입니다. - 신고한 `fileSize`가 아니라 실제 파일을 측정해 기록하며, 정책 상한을 넘으면 여기서 거절됩니다. - 같은 `fileKey`로 여러 번 호출해도 안전합니다.
427
427
  * @summary 대용량 업로드 2/2 — 업로드 확정
428
428
  * @param {string} fileKey 발급 응답의 fileKey(영문 대소문자·숫자 32자).
429
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
429
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
430
430
  * @param {CompleteUploadRequestDto} completeUploadRequestDto
431
431
  * @param {*} [options] Override http request option.
432
432
  * @throws {RequiredError}
433
433
  */
434
434
  completeFileUpload(fileKey: string, idempotencyKey: string, completeUploadRequestDto: CompleteUploadRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UploadFile201Response>>;
435
435
  /**
436
- * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
436
+ * 공급사에게 계산서를 수령한 계약을 완료처리합니다. 스코프 `contracts:write` · `Idempotency-Key` 헤더 필수. - 결제완료·계산서 발급 상태가 기록되고 발급일자는 현재 시각이 됩니다. - 이미 완료된 공고는 409, 다른 발주기관의 공고는 403입니다.
437
437
  * @summary 정산 마감
438
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
439
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
438
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
439
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
440
440
  * @param {*} [options] Override http request option.
441
441
  * @throws {RequiredError}
442
442
  */
443
443
  completeInvoice(bidRef: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CompleteInvoice200Response>>;
444
444
  /**
445
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
445
+ * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable`로 미리 확인하세요. 미가입 업체로 발행하면 400입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
446
446
  * @summary 결제창 발행
447
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
447
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
448
448
  * @param {CreateCardPaymentDto} createCardPaymentDto
449
449
  * @param {*} [options] Override http request option.
450
450
  * @throws {RequiredError}
451
451
  */
452
452
  createCardPayment(idempotencyKey: string, createCardPaymentDto: CreateCardPaymentDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateCardPayment200Response>>;
453
453
  /**
454
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `paperCodes` 와 같은 순서로 같은 개수가 돌아옵니다.** 각 항목의 `fileUrl` 을 그대로 쓰면 되고, `paperCode` 로 어느 요청에 대한 결과인지 대응시킬 수 있습니다. **`name` 의 출처는 서류에 따라 다릅니다.** 시스템이 렌더한 서류는 계약서류명이고, 공급사 사전등록 3종(11·12·13)은 **공급사가 등록한 원본 파일명**입니다 — 채팅 첨부 라벨로 그대로 쓰세요. **필요한 입력:** 발주기관·공급사는 회원 ID 만 주면 됩니다. 상호·사업자번호·대표자·주소·직인은 c-market 이 회원 정보에서 직접 채웁니다. **전부 성공 또는 전부 실패입니다.** 지원하지 않는 서류가 하나라도 섞이면(400) 아무것도 만들지 않습니다. 렌더가 필요한 서류를 요청하면서 `contract` 를 빠뜨려도 마찬가지입니다(422). **135(수의계약체결제한여부확인서)를 요청하면 추가 입력이 필요합니다.** `contract.subject`(발주내용)·`contract.category`(계약구분)·`contract.buyerDepartment`(발주부서)가 필수이고, `documentInputs.contractRestrictionConfirm.answers`에 서식 ①~⑧에 대한 **계약상대자**의 답변 8개를 순서대로 담아야 합니다(c-market 이 대신 만들어낼 수 없는 값입니다). ⑨(발주자 확인사항)는 `documentInputs.contractRestrictionConfirm.buyerConfirmation`으로 선택 전달하며, 생략하면 서식에 빈칸으로 인쇄됩니다. 문항 ①~⑧의 원문은 `answers` 필드 설명을 참고하세요. **164(퇴직자영입현황확인서)를 요청하면 퇴직자 명단이 필요합니다.** `contract.subject`(서식의 \"수의계약 대상건명\")가 필수이고, `documentInputs.retireeRoster.rows` 에 명단을 넣습니다(성명·직급 필수, 직급·입사일·근무기간·비고 선택, 최대 50행). **퇴직자가 없으면 `rows` 를 빈 배열로 보내세요** — 서식에 \"해당사항 없음\"으로 인쇄됩니다. 블록 자체를 생략하면 422 입니다(\"퇴직자 없음\"과 \"확인하지 않음\"을 구분할 수 없기 때문입니다). **승낙사항(4·184·185·186·189·197·208)을 요청하면 `contract.subject`(계약건명)가 필수입니다.** 서식 상단 \"건명\" 칸에 인쇄되는 값이라 비면 어느 계약의 승낙인지 알 수 없습니다. 그 외 추가 입력은 없습니다 — 갑(발주기관) 서명란은 `buyerId` 로, 을(공급사) 서명란은 `supplierId` 로 c-market 이 채웁니다. 발주기관이 기관 전용 승낙사항 서식을 쓰면 요청한 코드 그대로 응답하되 PDF 는 그 기관 서식으로 발급됩니다. **응답의 `fileUrl` 은 만료되지 않습니다.** 채팅 메시지 등에 그대로 저장해 두어도 됩니다. **생성 가능한 회원 범위:** 조회와 같습니다 — 이 API 키에 설정된 대행 범위 안의 회원만 가능합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents` v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
454
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `paperCodes` 와 같은 순서로 같은 개수가 돌아옵니다.** 각 항목의 `fileUrl` 을 그대로 쓰면 되고, `paperCode` 로 어느 요청에 대한 결과인지 대응시킬 수 있습니다. **`name` 의 출처는 서류에 따라 다릅니다.** 시스템이 렌더한 서류는 계약서류명이고, 공급사 사전등록 3종(11·12·13)은 **공급사가 등록한 원본 파일명**입니다 — 채팅 첨부 라벨로 그대로 쓰세요. **필요한 입력:** 발주기관·공급사는 회원 ID 만 주면 됩니다. 상호·사업자번호·대표자·주소·직인은 c-market 이 회원 정보에서 직접 채웁니다. **전부 성공 또는 전부 실패입니다.** 지원하지 않는 서류가 하나라도 섞이면(400) 아무것도 만들지 않습니다. 렌더가 필요한 서류를 요청하면서 `contract` 를 빠뜨려도 마찬가지입니다(422). **135(수의계약체결제한여부확인서)를 요청하면 추가 입력이 필요합니다.** `contract.subject`(발주내용)·`contract.category`(계약구분)·`contract.buyerDepartment`(발주부서)가 필수이고, `documentInputs.contractRestrictionConfirm.answers`에 서식 ①~⑧에 대한 **계약상대자**의 답변 8개를 순서대로 담아야 합니다(c-market 이 대신 만들어낼 수 없는 값입니다). ⑨(발주자 확인사항)는 `documentInputs.contractRestrictionConfirm.buyerConfirmation`으로 선택 전달하며, 생략하면 서식에 빈칸으로 인쇄됩니다. 문항 ①~⑧의 원문은 `answers` 필드 설명을 참고하세요. **164(퇴직자영입현황확인서)를 요청하면 퇴직자 명단이 필요합니다.** `contract.subject`(서식의 \"수의계약 대상건명\")가 필수이고, `documentInputs.retireeRoster.rows` 에 명단을 넣습니다(성명·직급 필수, 직급·입사일·근무기간·비고 선택, 최대 50행). **퇴직자가 없으면 `rows` 를 빈 배열로 보내세요** — 서식에 \"해당사항 없음\"으로 인쇄됩니다. 블록 자체를 생략하면 422 입니다(\"퇴직자 없음\"과 \"확인하지 않음\"을 구분할 수 없기 때문입니다). **승낙사항(4·184·185·186·189·197·208)을 요청하면 `contract.subject`(계약건명)가 필수입니다.** 서식 상단 \"건명\" 칸에 인쇄되는 값이라 비면 어느 계약의 승낙인지 알 수 없습니다. 그 외 추가 입력은 없습니다 — 갑(발주기관) 서명란은 `buyerId` 로, 을(공급사) 서명란은 `supplierId` 로 c-market 이 채웁니다. 발주기관이 기관 전용 승낙사항 서식을 쓰면 요청한 코드 그대로 응답하되 PDF 는 그 기관 서식으로 발급됩니다. **응답의 `fileUrl` 은 만료되지 않습니다.** 채팅 메시지 등에 그대로 저장해 두어도 됩니다. **생성 가능한 회원 범위:** 조회와 같습니다 — 이 API 키에 설정된 대행 범위 안의 회원만 가능합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents`가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
455
455
  * @summary 계약서류 생성
456
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
456
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
457
457
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
458
458
  * @param {*} [options] Override http request option.
459
459
  * @throws {RequiredError}
460
460
  */
461
461
  createExternalContractDocuments(idempotencyKey: string, createExternalContractDocumentsRequestDto: CreateExternalContractDocumentsRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateExternalContractDocumentsResponseDto>>;
462
462
  /**
463
- * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` `uploadUrl` 받습니다. 2. `uploadUrl` 파일 본문을 `PUT` 합니다 응답의 `contentType` `Content-Type` 헤더에 그대로 실으세요. 요청은 c-market 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 기본은 `POST /v2/files` 한 번입니다 — `base64` 로 23MB, `url` 로 30MB 까지 그 한 번으로 끝납니다. 그 위(**100MB** 까지)만 이 2단계 경로를 쓰세요. 바이트가 c-market 을 지나지 않아 서버 경유 천장을 받지 않습니다. **`uploadUrl` 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 만료됩니다 저장해 두고 재사용하지 마시고, 만료됐다면 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
463
+ * 파일을 스토리지로 직접 올리기 위한 1회용 서명 URL을 발급합니다(100MB까지). 스코프 `files:write` · `Idempotency-Key` 헤더 필수. 1. 이 호출로 `fileKey`와 `uploadUrl`을 받습니다. 2. `uploadUrl`에 파일 바이트를 그대로 `PUT` 합니다. 응답의 `contentType`을 `Content-Type` 헤더에 싣고, `Authorization` 헤더는 붙이지 않습니다(주소 자체가 자격증명입니다). 3. `POST /v2/files/{fileKey}/complete`로 확정합니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` - 2단계는 요청이 스토리지로 가므로명세에 오퍼레이션이 없고, 실패 본문도 problem+json이 아닙니다. 만료(400)·중복 업로드(409) 1단계부터 다시 합니다. - `uploadUrl`은 1회용이며 `expiresIn`초만료됩니다. 주소가 자격증명이므로 로그에 남기지 않습니다. - 30MB 이하는 `POST /v2/files` 번으로 끝납니다.
464
464
  * @summary 대용량 업로드 1/2 — 업로드 주소 발급
465
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
465
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
466
466
  * @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
467
467
  * @param {*} [options] Override http request option.
468
468
  * @throws {RequiredError}
469
469
  */
470
470
  createFileUploadUrl(idempotencyKey: string, createUploadUrlRequestDto: CreateUploadUrlRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateFileUploadUrl201Response>>;
471
471
  /**
472
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 1회. 수신 주소가 바뀌면 새로 만들지 말고 `PATCH` 고치세요 — 그래야 시크릿과 전송 이력이 유지됩니다. **서명 시크릿은 이 응답에서 한 번만 나갑니다.** 서버는 해시만 보관하므로 조회로 다시 받을 수 없습니다. 응답의 `secret` 을 즉시 안전한 곳에 보관하세요. 잃어버렸다면 복구가 아니라 `POST /v2/webhook-endpoints/{endpointId}/rotate-secret` 으로 **재발급**해야 합니다. **거절되는 경우와 고치는 법:** - `400` `url` HTTPS 아니거나 형식이 잘못됨, `eventTypes` 비었거나 목록 값 (`ping` 은 구독 불가). 값을 고쳐 재시도하세요. - `400` `Idempotency-Key` 헤더 누락/형식 오류. UUID v4 를 실어 보내세요. - `403` 토큰에 `webhooks:write` 스코프가 없음. 키 발급 설정을 넓혀야 합니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 — 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 계산해 **base64** 인코딩하고, `webhook-signature` `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 공백으로 구분된 **여러 서명**을 실을 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 같은 값)도 실립니다 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` `{\"status\":\"ACTIVE\"}` 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
472
+ * 수신 주소와 구독할 이벤트를 등록합니다. 연동 초기 1 호출합니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - **서명 시크릿은 이 응답에서 한 번만 나갑니다.** 서버는 해시만 보관하므로 조회로 다시 받을 수 없습니다. 잃어버렸다면 `POST /v2/webhook-endpoints/{endpointId}/rotate-secret`으로 재발급합니다. - 수신 주소가 바뀌면 새로 만들지 말고 `PATCH`로 고치세요. 시크릿과 전송 이력이 유지됩니다. - `url`은 HTTPS만 허용하고 `eventTypes`는 아래 목록 안의 값이어야 합니다. 어기면 400입니다. ### 서명 검증 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약입니다. 직접 짜지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿(`whsec_…`)을 그대로 넘기세요. ```ts import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); // 실패하면 예외 ``` 라이브러리를 쓸 수 없다면 헤더 셋으로 직접 검증합니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 base64 디코드한 바이트가 HMAC 키입니다. 2. `{webhook-id}.{webhook-timestamp}.{본문}`을 연결합니다. 본문은 **파싱 전 원문 바이트**여야 합니다. JSON을 다시 직렬화하면 순서·공백이 달라져 서명이 어긋납니다. 3. HMAC-SHA256을 base64로 인코딩해 `webhook-signature`의 `v1,` 뒤 값과 상수 시간 함수로 비교합니다. 4. `webhook-timestamp`가 5 이상 지났으면 거절합니다. `webhook-signature`에는 서명이 여러 실릴있으므로(키 회전용) 하나라도 맞으면 통과로 처리하세요. ### 중복 제거 `webhook-id`가 이벤트 식별자입니다. 재시도에도 같은 값이 오므로 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상이며 중복 제거는 수신측 책임입니다. `webhook-event-type` 헤더에 본문 `type`과 같은 값이 실려, 본문을 파싱하기 전에 거를 수 있습니다. ### 재시도와 자동 중지 2xx를 돌려주면 성공입니다. 그 외에는 최대 7회 재시도하며 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간입니다. 처리가 길면 먼저 2xx를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 `DISABLED`로 내려갑니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}`에 `{\"status\":\"ACTIVE\"}`로 되살리세요. ### 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping`은 연결 확인 전용이라 구독할 수 없습니다. 놓친 이벤트는 `GET /v2/webhook-deliveries`로 조회해 메웁니다.
473
473
  * @summary 웹훅 구독 등록
474
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
474
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
475
475
  * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
476
476
  * @param {*} [options] Override http request option.
477
477
  * @throws {RequiredError}
478
478
  */
479
479
  createWebhookEndpoint(idempotencyKey: string, createWebhookEndpointRequestDto: CreateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateWebhookEndpoint201Response>>;
480
480
  /**
481
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH {\"status\":\"DISABLED\"}` 쓰세요 시크릿과 이벤트 구성이 남아 그대로 되살릴 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
481
+ * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 되돌릴없습니다. 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. 잠시만 멈추려면 `PATCH`로 `{\"status\":\"DISABLED\"}`를 보내세요. - `If-Match`가 필수입니다. 누락은 428, 그 사이 구독이 바뀌었으면 412입니다.
482
482
  * @summary 웹훅 구독 삭제
483
483
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
484
- * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
485
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
484
+ * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412로 거절되며 아무것도 변경되지 않습니다.
485
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
486
486
  * @param {*} [options] Override http request option.
487
487
  * @throws {RequiredError}
488
488
  */
489
489
  deleteWebhookEndpoint(endpointId: string, ifMatch: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>>;
490
490
  /**
491
- * 무인증 — `fileKey` 자체가 capability 다(키를 아는 쪽이 곧 접근 권한을 가진다). 파트너 응답의 `fileUrl`/`fullUrl`URL 을 가리킨다. 요청 시점에 서명하므로 URL 을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}` 파일 메타와 `downloadUrl` v2 응답 규약으로 돌려줍니다. 이 안정 URL 은 파트너 응답의 `fileUrl`/`fullUrl` 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
491
+ * 무인증 — `fileKey` 자체가 capability 다(키를 아는 쪽이 곧 접근 권한을 가진다). 파트너 응답의 `fileUrl`/`fullUrl`이 이 URL을 가리킨다. 요청 시점에 서명하므로 URL을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}`가 파일 메타와 `downloadUrl`을 v2 응답 규약으로 돌려줍니다. 이 안정 URL은 파트너 응답의 `fileUrl`/`fullUrl`이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
492
492
  * @summary 파일 다운로드
493
- * @param {string} fileKey 파일 키 — 영문 대소문자·숫자 32자. 업로드(&#x60;POST /v1|/v2/files&#x60;) 응답에서 받은 값. 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다.
493
+ * @param {string} fileKey 파일 키 — 영문 대소문자·숫자 32자. 업로드(&#x60;POST /v1|/v2/files&#x60;) 응답에서 받은 값. 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex가 아닌 문자가 들어갑니다.
494
494
  * @param {*} [options] Override http request option.
495
495
  * @throws {RequiredError}
496
496
  */
497
497
  downloadFile(fileKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>>;
498
498
  /**
499
- * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 응답의 `status` 아니라 `participants[].isWinner` 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류는 이 응답에 실립니다.** `contractDocuments[]` 서류별 `paperCode`·`paperName`· `fileKey`·`downloadUrl`·`uploadedAt`·`winnerSequence` 를 담습니다 — 계약서류만 따로 받는 엔드포인트는 두지 않습니다. `generationState` **관측 전용**이며 `DEAD_LETTER` 보이면 자동 재시도가 소진된 상태라 API 되살릴 수 없습니다(운영에 문의하세요). **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
499
+ * 공고 건의 전체 정보를 조회합니다 — 기본 정보, 납품·대금 조건, 담당자, 품목, 응찰 참여자, 계약서류, 검수 상태. 스코프 `bids:read`. - 낙찰 여부는 `status`가 아니라 `participants[].isWinner`로 판단합니다. `AWARDED` 상태는 없어(낙찰 직후 `CONTRACT_IN_PROGRESS`) `status === \'AWARDED\'` 폴링은 끝나지 않습니다. - 계약서류는 `contractDocuments[]`에 실립니다. 따로 받는 엔드포인트는 없습니다. - 여러 건은 `GET /v2/bid-results`로 번에 받습니다. - 다른 발주기관의 공고는 403입니다.
500
500
  * @summary 공고 상세 조회
501
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
502
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
501
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
502
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
503
503
  * @param {*} [options] Override http request option.
504
504
  * @throws {RequiredError}
505
505
  */
506
506
  getBid(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBid200Response>>;
507
507
  /**
508
- * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 다른 조회에서 일부 참가자 정보가 가려지는 경우와 무관하게, 이 정산 정보는 읽기 전용으로 항상 그대로 제공됩니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
508
+ * 낙찰 공급사의 사업자·계좌 정보와 공급가액·부가세, 응찰 품목내역을 조회합니다. 대금 지급에 필요한 값입니다. 스코프 `invoices:read`(종전 `bids:read`에서 변경). 다른 조회에서 참가자 정보가 가려지는 경우와 무관하게응답은 항상 그대로 나갑니다.
509
509
  * @summary 정산 정보 조회
510
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
511
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
510
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
511
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
512
512
  * @param {*} [options] Override http request option.
513
513
  * @throws {RequiredError}
514
514
  */
515
515
  getBidSettlement(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidSettlement200Response>>;
516
516
  /**
517
- * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
517
+ * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. 스코프 `invoices:read`(종전 `contracts:read`에서 변경).
518
518
  * @summary 거래명세서 조회
519
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
519
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
520
520
  * @param {number} [paperCode] 거래명세서 서식 코드. 생략하면 해당 공고에 적용된 기본 서식으로 조회합니다. 기관에 서식이 여러 벌인 경우에만 지정하세요.
521
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
521
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
522
522
  * @param {*} [options] Override http request option.
523
523
  * @throws {RequiredError}
524
524
  */
525
525
  getBidStatement(bidRef: string, paperCode?: number, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidStatement200Response>>;
526
526
  /**
527
- * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey` 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
527
+ * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey`만 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName`에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
528
528
  * @summary 파일 정보 조회
529
529
  * @param {string} fileKey 파일 키 — 업로드 응답의 fileKey(영문 대소문자·숫자 32자).
530
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
530
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
531
531
  * @param {*} [options] Override http request option.
532
532
  * @throws {RequiredError}
533
533
  */
@@ -541,19 +541,19 @@ export declare const PartnerApiApiFp: (configuration?: Configuration) => {
541
541
  */
542
542
  getSemoContractTaxinvoiceStatus(externalContractId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SemoContractTaxinvoiceStatusResponseDto>>;
543
543
  /**
544
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
544
+ * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write`를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
545
545
  * @summary 공급사 카드결제 가능 여부
546
546
  * @param {string} memberId 계약업체 회원 ID
547
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
547
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
548
548
  * @param {*} [options] Override http request option.
549
549
  * @throws {RequiredError}
550
550
  */
551
551
  getSupplierCardPayableV2(memberId: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetSupplierCardPayableV2200Response>>;
552
552
  /**
553
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 `endpointId` 확인하세요. **필수 스코프:** `webhooks:read`
553
+ * 구독 1건의 현재 상태를 조회합니다. 스코프 `webhooks:read`. 수정·삭제 전에 먼저 호출해 응답 헤더의 `ETag`를 `If-Match`에 실어야 합니다. 없는 구독이거나 다른 파트너 키의 구독이면 404입니다. 서명 시크릿은 실리지 않습니다.
554
554
  * @summary 웹훅 구독 단건 조회
555
555
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
556
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
556
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
557
557
  * @param {*} [options] Override http request option.
558
558
  * @throws {RequiredError}
559
559
  */
@@ -561,35 +561,35 @@ export declare const PartnerApiApiFp: (configuration?: Configuration) => {
561
561
  /**
562
562
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
563
563
  * @summary Partner API 헬스체크
564
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
564
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
565
565
  * @param {*} [options] Override http request option.
566
566
  * @throws {RequiredError}
567
567
  */
568
568
  healthControllerCheck(ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<HealthControllerCheck200Response>>;
569
569
  /**
570
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고를 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에 실린 `ETag` 다음 요청의 `If-None-Match` 되보내면, 결과가 그대로일 때 `304` 본문 없이 받습니다. **식별자 전달:** `?bidRefs=A,B,C`(쉼표) 또는 `?bidRefs=A&bidRefs=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다. 요청한 건수와 받은 건수가 다를 수 있으므로, 보낸 값이 공고번호였다면 `bidId` 로, 구매번호였다면 `purchaseNo` 로 대조하세요. **공고 하나만 볼 때도** `bidRefs` 에 하나만 넣으면 됩니다. 응찰 결과 외에 납품 조건·품목·계약서류까지 필요하면 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요.
570
+ * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. - 결과 확인은 공고를 하나씩 조회하지 말고 이 엔드포인트로 최대 100건씩 받습니다. 응답의 `ETag`를 다음 요청의 `If-None-Match`로 보내면 변화가 없을본문 없이 `304`로 끝납니다. - 식별자는 `?bidRefs=A,B,C`와 `?bidRefs=A&bidRefs=B` 둘 다 됩니다. - 없거나 대행 범위 밖인 식별자는 오류가 아니라 응답에서 빠집니다. 보낸 값이 공고번호면 `bidId`, 구매번호면 `purchaseNo`로 대조합니다.
571
571
  * @summary 공고 결과 조회
572
- * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60; 반복해 전달합니다. 최대 100건입니다.
573
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
572
+ * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60;를 반복해 전달합니다. 최대 100건입니다.
573
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
574
574
  * @param {*} [options] Override http request option.
575
575
  * @throws {RequiredError}
576
576
  */
577
577
  listBidResults(bidRefs: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListBidResults200Response>>;
578
578
  /**
579
- * 발주처(API 바인딩)의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(쿼리에 buyerId 넣지 않습니다). **페이지네이션(cursor):** `limit`(1~100, 기본 100) + `cursor`(불투명 토큰). 응답 `meta.nextCursor` 다음 요청 `cursor` 전달하면 다음 페이지를 받습니다. `meta.hasMore` `false`(= `nextCursor` 가 `null`)이면 마지막 페이지입니다. 목록 자체는 `data` 에 배열로 실립니다. **상태·낙찰방법:** 공개값(의미 문자열)으로 반환됩니다. 낙찰 여부는 상태가 아니라 낙찰 결과 조회의 `participants[].isWinner` 관측합니다(AWARDED 상태는 없습니다).
579
+ * API 키에 연결된 발주기관의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. - 발주기관은 키로 결정됩니다(`buyerId`를 보내지 않습니다). - 페이지네이션: `limit`(1~100, 기본 100) `cursor`. 응답 `meta.nextCursor`를 다음 요청의 `cursor`로 보내고, `meta.hasMore`가 `false`면 마지막 페이지입니다. - 낙찰 여부는 공고 상태가 아니라 `GET /v2/bid-results`의 `participants[].isWinner`로 판단합니다. `AWARDED` 상태는 없습니다.
580
580
  * @summary 공고 목록 조회
581
581
  * @param {number} [limit] 페이지 크기(1~100, 기본 100).
582
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 그대로 전달한다. 미지정 페이지. &#x60;nextCursor&#x3D;null&#x60; 이면 마지막 페이지다.
583
- * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
582
+ * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60;를 그대로 보냅니다. 생략하면페이지이고, &#x60;nextCursor&#x60;가 &#x60;null&#x60;이면 마지막 페이지입니다.
583
+ * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
584
584
  * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회합니다.
585
585
  * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
586
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
586
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
587
587
  * @param {*} [options] Override http request option.
588
588
  * @throws {RequiredError}
589
589
  */
590
590
  listBids(limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListBids200Response>>;
591
591
  /**
592
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market 이 데이터를 채워 PDF 로 만들어 주는 서류입니다. 생성 API 의 `paperCodes` 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents` v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
592
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market이 데이터를 채워 PDF로 만들어 주는 서류입니다. 생성 API의 `paperCodes`에 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents`가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
593
593
  * @summary 거래에 필요한 계약서류 목록 조회
594
594
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
595
595
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -598,49 +598,49 @@ export declare const PartnerApiApiFp: (configuration?: Configuration) => {
598
598
  */
599
599
  listExternalContractDocuments(buyerId: string, bidType: ListExternalContractDocumentsBidTypeEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ExternalContractDocumentsResponseDto>>;
600
600
  /**
601
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 걸러 다시 처리하면 됩니다. - \"이벤트가 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 같고 `attempt` 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 다음 요청의 `cursor` 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
601
+ * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문, 수신측 응답 상태, 다음 재시도 시각이 함께 실립니다. 스코프 `webhooks:read`. - 수신측 장애로 놓친 이벤트는 `status=EXHAUSTED`로 걸러 다시 처리합니다. 웹훅의 폴링 대체 경로입니다. - 재시도마다 한 행이며 `eventId`가 같고 `attempt`만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단합니다. - 페이지네이션: 응답 `nextCursor`를 다음 요청의 `cursor`로 보냅니다. `null`이면 마지막 페이지입니다.
602
602
  * @summary 웹훅 전송 이력 조회
603
603
  * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
604
604
  * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
605
605
  * @param {number} [limit] 페이지 크기(1~200, 기본 50).
606
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 그대로 전달합니다. 미지정 시 첫 페이지.
607
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
606
+ * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60;를 그대로 전달합니다. 미지정 시 첫 페이지.
607
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
608
608
  * @param {*} [options] Override http request option.
609
609
  * @throws {RequiredError}
610
610
  */
611
611
  listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListWebhookDeliveries200Response>>;
612
612
  /**
613
- * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 을 계산해 **base64** 로 인코딩하고, `webhook-signature` 의 `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 는 공백으로 구분된 **여러 서명**을 실을 수 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 과 같은 값)도 실립니다 — 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 — 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 로 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` `{\"status\":\"ACTIVE\"}` 로 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 은 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
613
+ * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. 스코프 `webhooks:read`. 발송이 멈춘 이유는 `status`와 `consecutiveFailures`로 확인합니다. 서명 시크릿은 실리지 않습니다. 수신측 구현 방법은 `POST /v2/webhook-endpoints` 설명에 있습니다.
614
614
  * @summary 웹훅 구독 목록 조회
615
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
615
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
616
616
  * @param {*} [options] Override http request option.
617
617
  * @throws {RequiredError}
618
618
  */
619
619
  listWebhookEndpoints(ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListWebhookEndpoints200Response>>;
620
620
  /**
621
- * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(FAILED)로 전환됩니다. - 유찰사유 코드와 상세가 기록됩니다. **유찰사유 값 목록(failureReasonCode 공개값):** | | 의미 | |------|------| | `ABOVE_TARGET_PRICE` | 예정가격 초과 | | `DEPT_MISMATCH` | 자격 미달 | | `NEEDS_EXPERTISE` | 전문성 필요 | | `OTHER` | 기타 (`failureReasonDetail` 필수) | | `NO_PARTICIPANT` | 참가자 없음 | | `SINGLE_PARTICIPANT` | 단독 참가 | | `LESS_THAN_TWO` | 2인 미만 | | `BELOW_MINIMUM` | 최저가 미달 | **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 를 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수.
621
+ * 공고를 유찰 처리합니다. 입찰 마감 상태에서 호출합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. 공고 상태가 유찰(`FAILED`)로 바뀌고 유찰사유가 기록됩니다. 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다). | `failureReasonCode` | 의미 | | --- | --- | | `ABOVE_TARGET_PRICE` | 예정가격 초과 | | `DEPT_MISMATCH` | 자격 미달 | | `NEEDS_EXPERTISE` | 전문성 필요 | | `NO_PARTICIPANT` | 참가자 없음 | | `SINGLE_PARTICIPANT` | 단독 참가 | | `LESS_THAN_TWO` | 2인 미만 | | `BELOW_MINIMUM` | 최저가 미달 | | `OTHER` | 기타(`failureReasonDetail` 필수) |
622
622
  * @summary 유찰 처리
623
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
624
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
623
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
624
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
625
625
  * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
626
626
  * @param {*} [options] Override http request option.
627
627
  * @throws {RequiredError}
628
628
  */
629
629
  markBidFailed(bidRef: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<MarkBidFailed201Response>>;
630
630
  /**
631
- * 낙찰 결과를 등록합니다. 요청의 응답은 처리 상태 `AWARDED` 반환합니다. **호출 시점:** 입찰 마감 후 낙찰자가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 낙찰자(공급사)의 응찰 건이 낙찰 처리됩니다. - 이후 **공고의 조회 상태(status)는 계약진행(CONTRACT_IN_PROGRESS)** 으로 진행합니다. `AWARDED` 라는 공고 status 존재하지 않으므로, 낙찰 여부는 `GET /v2/bids/{bidRef}/results` 의 `participants[].isWinner` 또는 `GET /v2/bids/{bidRef}` 의 status(=계약진행)로 관측하세요(`status === \'AWARDED\'` 폴링 금지). - 협상 방식(NEGOTIATION/NEGOTIATION_AUTO) 공고는 이 엔드포인트 전에 `POST /v2/bids/{bidRef}/negotiation-scores`(협상 점수평가)로 평가를 완료해야 합니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 24시간 캐시 응답 반환.
631
+ * 낙찰 결과를 등록합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. - 입찰 마감(입찰완료) 상태에서 호출합니다. - 낙찰 공고 상태는 계약진행(`CONTRACT_IN_PROGRESS`)입니다. `AWARDED` 공고 상태는 없으므로 낙찰 여부는 `participants[].isWinner`로 판단합니다. - 협상 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) 공고는 `POST /v2/bids/{bidRef}/negotiation-scores`로 평가를 마쳐야 호출할 있습니다. - 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다). - 같은 키와 같은 body 재전송하면 24시간 동안 캐시된 응답을 돌려줍니다.
632
632
  * @summary 낙찰 결과 전송
633
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
634
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
633
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
634
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
635
635
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
636
636
  * @param {*} [options] Override http request option.
637
637
  * @throws {RequiredError}
638
638
  */
639
639
  registerAward(bidRef: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RegisterAward201Response>>;
640
640
  /**
641
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 요청 본문에 직접 싣지 마세요 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 받고, 32자 키를 요청의 `attachments` 배열에 넣습니다.
641
+ * 공고를 등록합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. 첨부는 방법 하나입니다. - `attachments` 원소에 `{ fileName, url }` 또는 `{ fileName, base64 }`를 그대로 넣습니다. - 여러 공고에서 재사용할 파일은 `POST /v2/files`로 먼저 올려 받은 `fileKey`를 넣습니다.
642
642
  * @summary 공고 등록
643
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
643
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
644
644
  * @param {CreateBidRequestDto} createBidRequestDto
645
645
  * @param {*} [options] Override http request option.
646
646
  * @throws {RequiredError}
@@ -649,17 +649,17 @@ export declare const PartnerApiApiFp: (configuration?: Configuration) => {
649
649
  /**
650
650
  * 외부에서 맺어진 계약 1건을 씨마켓의 **세금계산서 발행 대상**으로 등록합니다. **등록 후 동선:** 발주기관이 씨마켓 [나의 계약 관리] 에서 계산서 발급을 요청하고, 공급기업이 같은 화면에서 발행합니다. 계산서의 **공급자는 공급기업, 공급받는자는 발주기관**입니다. **대금 흐름:** 씨마켓은 이 거래의 대금을 받지 않습니다 — 발행 경로만 제공합니다. **금액:** `supplyPrice` 는 **부가세를 뺀 과세 공급가액**입니다(결제창 API 가 부가세 포함가를 받는 것과 다릅니다). 과세·면세 공급가액이 모두 0 이면 400 입니다. **사전 조건:** 두 회원 ID 가 씨마켓에 실재해야 합니다. 회원 ID 가 곧 소유권이라, 없는 회원으로 등록하면 아무도 열 수 없는 계산서 대상이 됩니다. **필수 스코프:** `contracts:write`. 바인딩된 발주처 외의 발주기관을 대신하려면 대행 범위에 그 회원이 있어야 합니다. **멱등성:** `externalContractId` 가 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 대상을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
651
651
  * @summary 계약 발행대상 등록
652
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
652
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
653
653
  * @param {RegisterSemoContractRequestDto} registerSemoContractRequestDto
654
654
  * @param {*} [options] Override http request option.
655
655
  * @throws {RequiredError}
656
656
  */
657
657
  registerSemoContract(idempotencyKey: string, registerSemoContractRequestDto: RegisterSemoContractRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SemoContractRegisteredResponseDto>>;
658
658
  /**
659
- * 한 공고의 계산서를 여러 장으로 나눠 발급해 달라고 청구합니다. 스코프 `invoices:write`. **청구만 접수합니다.** 호출이 계산서를 발행하지는 않습니다 접수된 청구는 정산 파이프라인이 처리하며, 진행 여부는 `GET /v2/bids/{bidRef}` `taxInvoiceRequested` 관측합니다. **나눠 담을 금액을 보냅니다.** `supplyAmount`(공급가액)와 `vat`(부가세)는 이번 장에 실을 금액입니다. 남은 금액을 다시 나누려면 같은 공고에 청구를 한 번 더 보냅니다 — 그때는 **새 `Idempotency-Key`** 쓰세요. 같은 키로 다시 보내면 앞선 청구의 응답이 그대로 재생됩니다. **발급 희망일**(`issueDate`)은 선택이며 미래 일자는 400 입니다. 미지정 시 서버 기본값을 씁니다.
659
+ * 한 공고의 계산서를 여러 장으로 나눠 발급해 달라고 청구합니다. 스코프 `invoices:write` · `Idempotency-Key` 헤더 필수. - 청구만 접수합니다. 발행은 정산 파이프라인이 처리하며 진행 여부는 `GET /v2/bids/{bidRef}`의 `taxInvoiceRequested`로 확인합니다. - `supplyAmount`와 `vat`는 이번 장에 실을 금액입니다. 남은 금액을 다시 나누려면 **새 `Idempotency-Key`**로 청구합니다. 같은 키는 앞선 청구의 응답을 그대로 돌려줍니다. - `issueDate`는 선택이며 미래 일자는 400입니다.
660
660
  * @summary 계산서 분할 발급 청구
661
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
662
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
661
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
662
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
663
663
  * @param {RequestInvoiceSplitRequestDto} requestInvoiceSplitRequestDto
664
664
  * @param {*} [options] Override http request option.
665
665
  * @throws {RequiredError}
@@ -668,67 +668,67 @@ export declare const PartnerApiApiFp: (configuration?: Configuration) => {
668
668
  /**
669
669
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
670
670
  * @summary 낙찰 되돌리기
671
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
672
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
671
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
672
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
673
673
  * @param {RevertAwardRequestDto} revertAwardRequestDto
674
674
  * @param {*} [options] Override http request option.
675
675
  * @throws {RequiredError}
676
676
  */
677
677
  revertAward(bidRef: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RevertAward200Response>>;
678
678
  /**
679
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
679
+ * 서명 시크릿을 새로 발급합니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 시크릿은 이 응답에서 한 번만 나가고 `secretVersion`이 1 올라갑니다. - **옛 시크릿은 즉시 무효입니다.** 유예가 없으므로 순서를 지키세요 — ① 수신측이 옛 값과 새 값을 모두 받아들이도록 배포 → ② 이 호출 → ③ 새 반영 → ④ 옛 값 제거. - 같은 `Idempotency-Key`로 다시 부르면 새로 발급하지 않고 처음 발급한 값을 돌려줍니다(24시간).
680
680
  * @summary 웹훅 서명 시크릿 재발급
681
681
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
682
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
682
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
683
683
  * @param {*} [options] Override http request option.
684
684
  * @throws {RequiredError}
685
685
  */
686
686
  rotateWebhookSecret(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateWebhookEndpoint201Response>>;
687
687
  /**
688
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` `delivered: false` 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
688
+ * 등록된 주소로 `ping` 이벤트를 1회 보내고 결과를 돌려줍니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 수신측이 받지 못해도 응답은 200이고 `delivered: false`입니다. 원인은 `responseStatus`와 `error`로 좁힙니다. - 실제 이벤트와 같은 서명 헤더가 실리므로 검증 코드를 그대로 시험할 수 있습니다. - 다시 보내려면 `Idempotency-Key`를 쓰세요. 같은 키는 24시간 동안 직전 결과를 돌려줍니다.
689
689
  * @summary 웹훅 연결 확인 발송
690
690
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
691
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
691
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
692
692
  * @param {*} [options] Override http request option.
693
693
  * @throws {RequiredError}
694
694
  */
695
695
  sendWebhookTestEvent(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SendWebhookTestEvent200Response>>;
696
696
  /**
697
- * 협상방식(NEGOTIATION/NEGOTIATION_AUTO) 공고의 응찰자별 점수를 입력합니다. **호출 시점:** 입찰 마감 후 낙찰(`POST /v2/bids/{bidRef}/award`) 전. 협상방식 공고는 이 평가를 완료해야 낙찰에 진입할 수 있습니다. **부수효과:** - 응찰자별 기술점수(및 선택적 가격점수 override)가 기록됩니다. - `complete=true` 평가완료 게이트까지 적용돼 낙찰 진입이 가능해집니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 시 24시간 내 캐시 응답 반환.
697
+ * 협상 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) 공고의 응찰자별 점수를 입력합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. - 입찰 마감 후 낙찰(`POST /v2/bids/{bidRef}/award`) 전에 호출합니다. 협상 방식 공고는 이 평가를 마쳐야 낙찰에 진입합니다. - `complete=true`면 평가완료로 처리되어 낙찰을 호출할 있습니다. - 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다).
698
698
  * @summary 협상 점수평가
699
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
700
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
699
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
700
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
701
701
  * @param {SubmitNegotiationScoresRequestDto} submitNegotiationScoresRequestDto
702
702
  * @param {*} [options] Override http request option.
703
703
  * @throws {RequiredError}
704
704
  */
705
705
  submitNegotiationScores(bidRef: string, idempotencyKey: string, submitNegotiationScoresRequestDto: SubmitNegotiationScoresRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SubmitNegotiationScores201Response>>;
706
706
  /**
707
- * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEditHistory=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
707
+ * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. - 진행중·초안 상태만 수정할 수 있습니다. 마감·취소된 공고는 거부됩니다. - 낙찰방법(`awardMethod`)은 수정할 없고, 참여자가 있으면 입찰방식·면허·예산·품목 일부가 잠깁니다. - 한 섹션을 수정하려면 섹션의 필수 필드를 함께 보냅니다. - `hideEditHistory=true`면 변경이력을 비공개로 남기고 노출 카운터를 올리지 않습니다.
708
708
  * @summary 공고 수정
709
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
710
- * @param {string} ifMatch 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
711
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
709
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
710
+ * @param {string} ifMatch 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412로 거절되며 아무것도 수정되지 않습니다.
711
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
712
712
  * @param {UpdateBidRequestDto} updateBidRequestDto
713
713
  * @param {*} [options] Override http request option.
714
714
  * @throws {RequiredError}
715
715
  */
716
716
  updateBid(bidRef: string, ifMatch: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UpdateBid200Response>>;
717
717
  /**
718
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 헤더가 없으면 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` 헤더를 빼먹었습니다. 조회 `ETag` 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
718
+ * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - `eventTypes`는 치환입니다. 하나를 더하려면 기존 목록을 포함한 전체를 보냅니다. - `If-Match`가 필수입니다. `GET`으로 받은 `ETag`를 그대로 실으세요. 누락은 428, 사이 구독이 바뀌었으면 412이며 아무것도 수정되지 않습니다. - 연속 실패로 자동 중지된 구독은 `{\"status\":\"ACTIVE\"}`로 되살립니다. - 시크릿은 이 경로로 바뀌지 않습니다. 재발급은 `rotate-secret`입니다.
719
719
  * @summary 웹훅 구독 수정
720
720
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
721
- * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
722
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
721
+ * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412로 거절되며 아무것도 변경되지 않습니다.
722
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
723
723
  * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
724
724
  * @param {*} [options] Override http request option.
725
725
  * @throws {RequiredError}
726
726
  */
727
727
  updateWebhookEndpoint(endpointId: string, ifMatch: string, idempotencyKey: string, updateWebhookEndpointRequestDto: UpdateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetWebhookEndpoint200Response>>;
728
728
  /**
729
- * **첨부 업로드의 기본 경로입니다. 23MB 이하면 호출 하나로 끝납니다.** 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **23MB 를 넘으면 경로를 바꿔야 합니다.** 상한이 셋으로 갈립니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 이 호출 + `base64` | **23MB** (본문이 c-market 을 통과하며 base64 팽창 4/3 이 얹힘) | 1 | | 이 호출 + `url` | **30MB** (c-market 이 대신 내려받아 팽창은 없지만 서버 경유 천장은 그대로) | 1 | | `POST /v2/files/upload-url` 로 시작하는 2단계 | **100MB** (바이트가 c-market 을 지나지 않음) | 2 + 스토리지 PUT | c-market 내려받을 있는 https 주소에 파일을 올려 둘 수 있다면 `url` 이 30MB 까지를 1콜로 덮습니다. 그 이상이거나 주소를 열 수 없으면 2단계 경로를 쓰세요. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 그대로 넣으면 호출 없이 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
729
+ * 공고 첨부파일을 올리고 `fileKey`를 받습니다. 스코프 `files:write` · `Idempotency-Key` 헤더 필수. `base64`와 `url` 중 하나만 보냅니다. 받은 `fileKey`는 공고 등록·수정의 `attachments`에 넣습니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 이 호출 + `base64` | 23MB | 1 | | 이 호출 + `url` | 30MB | 1 | | `POST /v2/files/upload-url` 2단계 | 100MB | 2 + 스토리지 PUT | 공고에만 쓰는 파일이면 `POST /v2/bids`의 `attachments`에 `url`·`base64`를 직접 넣어호출을 생략할 있습니다.
730
730
  * @summary 공고 첨부파일 업로드 (기본)
731
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
731
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
732
732
  * @param {UploadFileRequestDto} uploadFileRequestDto
733
733
  * @param {*} [options] Override http request option.
734
734
  * @throws {RequiredError}
@@ -740,131 +740,131 @@ export declare const PartnerApiApiFp: (configuration?: Configuration) => {
740
740
  */
741
741
  export declare const PartnerApiApiFactory: (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) => {
742
742
  /**
743
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
743
+ * 진행중(`ONGOING`) 공고를 취소합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. - 되돌릴 없습니다. 취소 사유는 필수이고 공고 이력에 남습니다. - 진행중이 아니거나 이미 취소된 공고는 409, 다른 발주기관의 공고는 403입니다. - 응찰은 받았으나 낙찰자를 정하지 못한 종료는 취소가 아니라 유찰(`POST /v2/bids/{bidRef}/fail`)입니다.
744
744
  * @summary 공고 취소
745
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
746
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
745
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
746
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
747
747
  * @param {CancelBidRequestDto} cancelBidRequestDto
748
748
  * @param {*} [options] Override http request option.
749
749
  * @throws {RequiredError}
750
750
  */
751
751
  cancelBid(bidRef: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CancelBid200Response>;
752
752
  /**
753
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점입니다. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 현금 결제 공고는 세금계산서 발행요청이 등록되고, 낙찰자(공급사)에게 발행요청 알림·문자가 발송됩니다. 카드 결제 공고는 발행요청 축이 없어 알림도 없습니다. - 거래명세서 발행이 예약됩니다. - 응답 코드는 200이며, 처리 결과가 본문에 담겨 반환됩니다. **부분계약(협의 감액):** 낙찰 후 협의로 계약금액이 줄었으면 `supplyAmount`+`vat` 함께 보내세요. 그 금액으로 계산서 발행이 요청됩니다. 생략하면 낙찰금액에서 파생합니다. 현금 결제 공고·낙찰자 1인·감액(증액 불가)일 때만 허용되며, 어긋나면 409 입니다. **문서에 찍히는 값:** 거래명세서·검수보고서의 구매사 사업자정보·담당자·작성일자는 등록된 발주처 정보에서 채워집니다. 요청으로 덮어쓸 수 없습니다. **낙찰자:** 공고의 낙찰 상태에서 결정되며 요청으로 지정하지 않습니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
753
+ * 납품 검수 완료를 기록합니다. 낙찰 처리된 공고에서 호출합니다. 스코프 `contracts:write` · `Idempotency-Key` 헤더 필수. - 현금 결제 공고는 세금계산서 발행요청이 등록되고 낙찰자에게 알림·문자가 나갑니다. 카드 결제 공고는 발행요청이 없어 알림도 없습니다. - 거래명세서 발행이 예약됩니다. - 협의로 계약금액이 줄었으면 `supplyAmount`와 `vat`를 함께 보냅니다. 현금 결제·낙찰자 1인·감액일 때만 허용하며 어긋나면 409입니다. 생략하면 낙찰금액에서 파생합니다. - 문서에 찍히는 구매사 사업자정보·담당자·작성일자와 낙찰자는 등록된 값에서 채워지며 요청으로 바꿀 수 없습니다.
754
754
  * @summary 검수완료 전송
755
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
756
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
755
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
756
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
757
757
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
758
758
  * @param {*} [options] Override http request option.
759
759
  * @throws {RequiredError}
760
760
  */
761
761
  completeAcceptance(bidRef: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CompleteAcceptance200Response>;
762
762
  /**
763
- * `uploadUrl` 로의 `PUT` 이 끝난 뒤 호출합니다. 올라온 파일을 실측해 등록하고, 시점부터 `fileKey` 공고 첨부로 쓸 수 있습니다. **확정 `fileKey` 첨부로 없습니다** 공고 등록이 400 으로 거절됩니다. **신고한 크기가 아니라 실제 파일을 봅니다.** 발급 요청의 `fileSize` 와 다르면 실제 크기가 기록되고, 정책 상한을 넘으면 여기서 거절됩니다. **같은 `fileKey` 여러 번 호출해도 안전합니다**(멱등). **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
763
+ * `uploadUrl`로 올린 파일을 확정합니다. 시점부터 `fileKey`를 공고 첨부로 쓸 수 있습니다. 스코프 `files:write` · `Idempotency-Key` 헤더 필수. - 확정 `fileKey`를 첨부로 쓰면 공고 등록이 400입니다. - 신고한 `fileSize`가 아니라 실제 파일을 측정해 기록하며, 정책 상한을 넘으면 여기서 거절됩니다. - 같은 `fileKey`로 여러 번 호출해도 안전합니다.
764
764
  * @summary 대용량 업로드 2/2 — 업로드 확정
765
765
  * @param {string} fileKey 발급 응답의 fileKey(영문 대소문자·숫자 32자).
766
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
766
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
767
767
  * @param {CompleteUploadRequestDto} completeUploadRequestDto
768
768
  * @param {*} [options] Override http request option.
769
769
  * @throws {RequiredError}
770
770
  */
771
771
  completeFileUpload(fileKey: string, idempotencyKey: string, completeUploadRequestDto: CompleteUploadRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<UploadFile201Response>;
772
772
  /**
773
- * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
773
+ * 공급사에게 계산서를 수령한 계약을 완료처리합니다. 스코프 `contracts:write` · `Idempotency-Key` 헤더 필수. - 결제완료·계산서 발급 상태가 기록되고 발급일자는 현재 시각이 됩니다. - 이미 완료된 공고는 409, 다른 발주기관의 공고는 403입니다.
774
774
  * @summary 정산 마감
775
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
776
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
775
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
776
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
777
777
  * @param {*} [options] Override http request option.
778
778
  * @throws {RequiredError}
779
779
  */
780
780
  completeInvoice(bidRef: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<CompleteInvoice200Response>;
781
781
  /**
782
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
782
+ * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable`로 미리 확인하세요. 미가입 업체로 발행하면 400입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
783
783
  * @summary 결제창 발행
784
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
784
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
785
785
  * @param {CreateCardPaymentDto} createCardPaymentDto
786
786
  * @param {*} [options] Override http request option.
787
787
  * @throws {RequiredError}
788
788
  */
789
789
  createCardPayment(idempotencyKey: string, createCardPaymentDto: CreateCardPaymentDto, options?: RawAxiosRequestConfig): AxiosPromise<CreateCardPayment200Response>;
790
790
  /**
791
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `paperCodes` 와 같은 순서로 같은 개수가 돌아옵니다.** 각 항목의 `fileUrl` 을 그대로 쓰면 되고, `paperCode` 로 어느 요청에 대한 결과인지 대응시킬 수 있습니다. **`name` 의 출처는 서류에 따라 다릅니다.** 시스템이 렌더한 서류는 계약서류명이고, 공급사 사전등록 3종(11·12·13)은 **공급사가 등록한 원본 파일명**입니다 — 채팅 첨부 라벨로 그대로 쓰세요. **필요한 입력:** 발주기관·공급사는 회원 ID 만 주면 됩니다. 상호·사업자번호·대표자·주소·직인은 c-market 이 회원 정보에서 직접 채웁니다. **전부 성공 또는 전부 실패입니다.** 지원하지 않는 서류가 하나라도 섞이면(400) 아무것도 만들지 않습니다. 렌더가 필요한 서류를 요청하면서 `contract` 를 빠뜨려도 마찬가지입니다(422). **135(수의계약체결제한여부확인서)를 요청하면 추가 입력이 필요합니다.** `contract.subject`(발주내용)·`contract.category`(계약구분)·`contract.buyerDepartment`(발주부서)가 필수이고, `documentInputs.contractRestrictionConfirm.answers`에 서식 ①~⑧에 대한 **계약상대자**의 답변 8개를 순서대로 담아야 합니다(c-market 이 대신 만들어낼 수 없는 값입니다). ⑨(발주자 확인사항)는 `documentInputs.contractRestrictionConfirm.buyerConfirmation`으로 선택 전달하며, 생략하면 서식에 빈칸으로 인쇄됩니다. 문항 ①~⑧의 원문은 `answers` 필드 설명을 참고하세요. **164(퇴직자영입현황확인서)를 요청하면 퇴직자 명단이 필요합니다.** `contract.subject`(서식의 \"수의계약 대상건명\")가 필수이고, `documentInputs.retireeRoster.rows` 에 명단을 넣습니다(성명·직급 필수, 직급·입사일·근무기간·비고 선택, 최대 50행). **퇴직자가 없으면 `rows` 를 빈 배열로 보내세요** — 서식에 \"해당사항 없음\"으로 인쇄됩니다. 블록 자체를 생략하면 422 입니다(\"퇴직자 없음\"과 \"확인하지 않음\"을 구분할 수 없기 때문입니다). **승낙사항(4·184·185·186·189·197·208)을 요청하면 `contract.subject`(계약건명)가 필수입니다.** 서식 상단 \"건명\" 칸에 인쇄되는 값이라 비면 어느 계약의 승낙인지 알 수 없습니다. 그 외 추가 입력은 없습니다 — 갑(발주기관) 서명란은 `buyerId` 로, 을(공급사) 서명란은 `supplierId` 로 c-market 이 채웁니다. 발주기관이 기관 전용 승낙사항 서식을 쓰면 요청한 코드 그대로 응답하되 PDF 는 그 기관 서식으로 발급됩니다. **응답의 `fileUrl` 은 만료되지 않습니다.** 채팅 메시지 등에 그대로 저장해 두어도 됩니다. **생성 가능한 회원 범위:** 조회와 같습니다 — 이 API 키에 설정된 대행 범위 안의 회원만 가능합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents` v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
791
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `paperCodes` 와 같은 순서로 같은 개수가 돌아옵니다.** 각 항목의 `fileUrl` 을 그대로 쓰면 되고, `paperCode` 로 어느 요청에 대한 결과인지 대응시킬 수 있습니다. **`name` 의 출처는 서류에 따라 다릅니다.** 시스템이 렌더한 서류는 계약서류명이고, 공급사 사전등록 3종(11·12·13)은 **공급사가 등록한 원본 파일명**입니다 — 채팅 첨부 라벨로 그대로 쓰세요. **필요한 입력:** 발주기관·공급사는 회원 ID 만 주면 됩니다. 상호·사업자번호·대표자·주소·직인은 c-market 이 회원 정보에서 직접 채웁니다. **전부 성공 또는 전부 실패입니다.** 지원하지 않는 서류가 하나라도 섞이면(400) 아무것도 만들지 않습니다. 렌더가 필요한 서류를 요청하면서 `contract` 를 빠뜨려도 마찬가지입니다(422). **135(수의계약체결제한여부확인서)를 요청하면 추가 입력이 필요합니다.** `contract.subject`(발주내용)·`contract.category`(계약구분)·`contract.buyerDepartment`(발주부서)가 필수이고, `documentInputs.contractRestrictionConfirm.answers`에 서식 ①~⑧에 대한 **계약상대자**의 답변 8개를 순서대로 담아야 합니다(c-market 이 대신 만들어낼 수 없는 값입니다). ⑨(발주자 확인사항)는 `documentInputs.contractRestrictionConfirm.buyerConfirmation`으로 선택 전달하며, 생략하면 서식에 빈칸으로 인쇄됩니다. 문항 ①~⑧의 원문은 `answers` 필드 설명을 참고하세요. **164(퇴직자영입현황확인서)를 요청하면 퇴직자 명단이 필요합니다.** `contract.subject`(서식의 \"수의계약 대상건명\")가 필수이고, `documentInputs.retireeRoster.rows` 에 명단을 넣습니다(성명·직급 필수, 직급·입사일·근무기간·비고 선택, 최대 50행). **퇴직자가 없으면 `rows` 를 빈 배열로 보내세요** — 서식에 \"해당사항 없음\"으로 인쇄됩니다. 블록 자체를 생략하면 422 입니다(\"퇴직자 없음\"과 \"확인하지 않음\"을 구분할 수 없기 때문입니다). **승낙사항(4·184·185·186·189·197·208)을 요청하면 `contract.subject`(계약건명)가 필수입니다.** 서식 상단 \"건명\" 칸에 인쇄되는 값이라 비면 어느 계약의 승낙인지 알 수 없습니다. 그 외 추가 입력은 없습니다 — 갑(발주기관) 서명란은 `buyerId` 로, 을(공급사) 서명란은 `supplierId` 로 c-market 이 채웁니다. 발주기관이 기관 전용 승낙사항 서식을 쓰면 요청한 코드 그대로 응답하되 PDF 는 그 기관 서식으로 발급됩니다. **응답의 `fileUrl` 은 만료되지 않습니다.** 채팅 메시지 등에 그대로 저장해 두어도 됩니다. **생성 가능한 회원 범위:** 조회와 같습니다 — 이 API 키에 설정된 대행 범위 안의 회원만 가능합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents`가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
792
792
  * @summary 계약서류 생성
793
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
793
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
794
794
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
795
795
  * @param {*} [options] Override http request option.
796
796
  * @throws {RequiredError}
797
797
  */
798
798
  createExternalContractDocuments(idempotencyKey: string, createExternalContractDocumentsRequestDto: CreateExternalContractDocumentsRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CreateExternalContractDocumentsResponseDto>;
799
799
  /**
800
- * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` `uploadUrl` 받습니다. 2. `uploadUrl` 파일 본문을 `PUT` 합니다 응답의 `contentType` `Content-Type` 헤더에 그대로 실으세요. 요청은 c-market 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 기본은 `POST /v2/files` 한 번입니다 — `base64` 로 23MB, `url` 로 30MB 까지 그 한 번으로 끝납니다. 그 위(**100MB** 까지)만 이 2단계 경로를 쓰세요. 바이트가 c-market 을 지나지 않아 서버 경유 천장을 받지 않습니다. **`uploadUrl` 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 만료됩니다 저장해 두고 재사용하지 마시고, 만료됐다면 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
800
+ * 파일을 스토리지로 직접 올리기 위한 1회용 서명 URL을 발급합니다(100MB까지). 스코프 `files:write` · `Idempotency-Key` 헤더 필수. 1. 이 호출로 `fileKey`와 `uploadUrl`을 받습니다. 2. `uploadUrl`에 파일 바이트를 그대로 `PUT` 합니다. 응답의 `contentType`을 `Content-Type` 헤더에 싣고, `Authorization` 헤더는 붙이지 않습니다(주소 자체가 자격증명입니다). 3. `POST /v2/files/{fileKey}/complete`로 확정합니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` - 2단계는 요청이 스토리지로 가므로명세에 오퍼레이션이 없고, 실패 본문도 problem+json이 아닙니다. 만료(400)·중복 업로드(409) 1단계부터 다시 합니다. - `uploadUrl`은 1회용이며 `expiresIn`초만료됩니다. 주소가 자격증명이므로 로그에 남기지 않습니다. - 30MB 이하는 `POST /v2/files` 번으로 끝납니다.
801
801
  * @summary 대용량 업로드 1/2 — 업로드 주소 발급
802
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
802
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
803
803
  * @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
804
804
  * @param {*} [options] Override http request option.
805
805
  * @throws {RequiredError}
806
806
  */
807
807
  createFileUploadUrl(idempotencyKey: string, createUploadUrlRequestDto: CreateUploadUrlRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CreateFileUploadUrl201Response>;
808
808
  /**
809
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 1회. 수신 주소가 바뀌면 새로 만들지 말고 `PATCH` 고치세요 — 그래야 시크릿과 전송 이력이 유지됩니다. **서명 시크릿은 이 응답에서 한 번만 나갑니다.** 서버는 해시만 보관하므로 조회로 다시 받을 수 없습니다. 응답의 `secret` 을 즉시 안전한 곳에 보관하세요. 잃어버렸다면 복구가 아니라 `POST /v2/webhook-endpoints/{endpointId}/rotate-secret` 으로 **재발급**해야 합니다. **거절되는 경우와 고치는 법:** - `400` `url` HTTPS 아니거나 형식이 잘못됨, `eventTypes` 비었거나 목록 값 (`ping` 은 구독 불가). 값을 고쳐 재시도하세요. - `400` `Idempotency-Key` 헤더 누락/형식 오류. UUID v4 를 실어 보내세요. - `403` 토큰에 `webhooks:write` 스코프가 없음. 키 발급 설정을 넓혀야 합니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 — 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 계산해 **base64** 인코딩하고, `webhook-signature` `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 공백으로 구분된 **여러 서명**을 실을 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 같은 값)도 실립니다 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` `{\"status\":\"ACTIVE\"}` 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
809
+ * 수신 주소와 구독할 이벤트를 등록합니다. 연동 초기 1 호출합니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - **서명 시크릿은 이 응답에서 한 번만 나갑니다.** 서버는 해시만 보관하므로 조회로 다시 받을 수 없습니다. 잃어버렸다면 `POST /v2/webhook-endpoints/{endpointId}/rotate-secret`으로 재발급합니다. - 수신 주소가 바뀌면 새로 만들지 말고 `PATCH`로 고치세요. 시크릿과 전송 이력이 유지됩니다. - `url`은 HTTPS만 허용하고 `eventTypes`는 아래 목록 안의 값이어야 합니다. 어기면 400입니다. ### 서명 검증 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약입니다. 직접 짜지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿(`whsec_…`)을 그대로 넘기세요. ```ts import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); // 실패하면 예외 ``` 라이브러리를 쓸 수 없다면 헤더 셋으로 직접 검증합니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 base64 디코드한 바이트가 HMAC 키입니다. 2. `{webhook-id}.{webhook-timestamp}.{본문}`을 연결합니다. 본문은 **파싱 전 원문 바이트**여야 합니다. JSON을 다시 직렬화하면 순서·공백이 달라져 서명이 어긋납니다. 3. HMAC-SHA256을 base64로 인코딩해 `webhook-signature`의 `v1,` 뒤 값과 상수 시간 함수로 비교합니다. 4. `webhook-timestamp`가 5 이상 지났으면 거절합니다. `webhook-signature`에는 서명이 여러 실릴있으므로(키 회전용) 하나라도 맞으면 통과로 처리하세요. ### 중복 제거 `webhook-id`가 이벤트 식별자입니다. 재시도에도 같은 값이 오므로 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상이며 중복 제거는 수신측 책임입니다. `webhook-event-type` 헤더에 본문 `type`과 같은 값이 실려, 본문을 파싱하기 전에 거를 수 있습니다. ### 재시도와 자동 중지 2xx를 돌려주면 성공입니다. 그 외에는 최대 7회 재시도하며 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간입니다. 처리가 길면 먼저 2xx를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 `DISABLED`로 내려갑니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}`에 `{\"status\":\"ACTIVE\"}`로 되살리세요. ### 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping`은 연결 확인 전용이라 구독할 수 없습니다. 놓친 이벤트는 `GET /v2/webhook-deliveries`로 조회해 메웁니다.
810
810
  * @summary 웹훅 구독 등록
811
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
811
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
812
812
  * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
813
813
  * @param {*} [options] Override http request option.
814
814
  * @throws {RequiredError}
815
815
  */
816
816
  createWebhookEndpoint(idempotencyKey: string, createWebhookEndpointRequestDto: CreateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CreateWebhookEndpoint201Response>;
817
817
  /**
818
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH {\"status\":\"DISABLED\"}` 쓰세요 시크릿과 이벤트 구성이 남아 그대로 되살릴 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
818
+ * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 되돌릴없습니다. 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. 잠시만 멈추려면 `PATCH`로 `{\"status\":\"DISABLED\"}`를 보내세요. - `If-Match`가 필수입니다. 누락은 428, 그 사이 구독이 바뀌었으면 412입니다.
819
819
  * @summary 웹훅 구독 삭제
820
820
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
821
- * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
822
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
821
+ * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412로 거절되며 아무것도 변경되지 않습니다.
822
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
823
823
  * @param {*} [options] Override http request option.
824
824
  * @throws {RequiredError}
825
825
  */
826
826
  deleteWebhookEndpoint(endpointId: string, ifMatch: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<void>;
827
827
  /**
828
- * 무인증 — `fileKey` 자체가 capability 다(키를 아는 쪽이 곧 접근 권한을 가진다). 파트너 응답의 `fileUrl`/`fullUrl`URL 을 가리킨다. 요청 시점에 서명하므로 URL 을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}` 파일 메타와 `downloadUrl` v2 응답 규약으로 돌려줍니다. 이 안정 URL 은 파트너 응답의 `fileUrl`/`fullUrl` 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
828
+ * 무인증 — `fileKey` 자체가 capability 다(키를 아는 쪽이 곧 접근 권한을 가진다). 파트너 응답의 `fileUrl`/`fullUrl`이 이 URL을 가리킨다. 요청 시점에 서명하므로 URL을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}`가 파일 메타와 `downloadUrl`을 v2 응답 규약으로 돌려줍니다. 이 안정 URL은 파트너 응답의 `fileUrl`/`fullUrl`이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
829
829
  * @summary 파일 다운로드
830
- * @param {string} fileKey 파일 키 — 영문 대소문자·숫자 32자. 업로드(&#x60;POST /v1|/v2/files&#x60;) 응답에서 받은 값. 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다.
830
+ * @param {string} fileKey 파일 키 — 영문 대소문자·숫자 32자. 업로드(&#x60;POST /v1|/v2/files&#x60;) 응답에서 받은 값. 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex가 아닌 문자가 들어갑니다.
831
831
  * @param {*} [options] Override http request option.
832
832
  * @throws {RequiredError}
833
833
  */
834
834
  downloadFile(fileKey: string, options?: RawAxiosRequestConfig): AxiosPromise<void>;
835
835
  /**
836
- * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 응답의 `status` 아니라 `participants[].isWinner` 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류는 이 응답에 실립니다.** `contractDocuments[]` 서류별 `paperCode`·`paperName`· `fileKey`·`downloadUrl`·`uploadedAt`·`winnerSequence` 를 담습니다 — 계약서류만 따로 받는 엔드포인트는 두지 않습니다. `generationState` **관측 전용**이며 `DEAD_LETTER` 보이면 자동 재시도가 소진된 상태라 API 되살릴 수 없습니다(운영에 문의하세요). **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
836
+ * 공고 건의 전체 정보를 조회합니다 — 기본 정보, 납품·대금 조건, 담당자, 품목, 응찰 참여자, 계약서류, 검수 상태. 스코프 `bids:read`. - 낙찰 여부는 `status`가 아니라 `participants[].isWinner`로 판단합니다. `AWARDED` 상태는 없어(낙찰 직후 `CONTRACT_IN_PROGRESS`) `status === \'AWARDED\'` 폴링은 끝나지 않습니다. - 계약서류는 `contractDocuments[]`에 실립니다. 따로 받는 엔드포인트는 없습니다. - 여러 건은 `GET /v2/bid-results`로 번에 받습니다. - 다른 발주기관의 공고는 403입니다.
837
837
  * @summary 공고 상세 조회
838
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
839
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
838
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
839
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
840
840
  * @param {*} [options] Override http request option.
841
841
  * @throws {RequiredError}
842
842
  */
843
843
  getBid(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBid200Response>;
844
844
  /**
845
- * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 다른 조회에서 일부 참가자 정보가 가려지는 경우와 무관하게, 이 정산 정보는 읽기 전용으로 항상 그대로 제공됩니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
845
+ * 낙찰 공급사의 사업자·계좌 정보와 공급가액·부가세, 응찰 품목내역을 조회합니다. 대금 지급에 필요한 값입니다. 스코프 `invoices:read`(종전 `bids:read`에서 변경). 다른 조회에서 참가자 정보가 가려지는 경우와 무관하게응답은 항상 그대로 나갑니다.
846
846
  * @summary 정산 정보 조회
847
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
848
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
847
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
848
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
849
849
  * @param {*} [options] Override http request option.
850
850
  * @throws {RequiredError}
851
851
  */
852
852
  getBidSettlement(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBidSettlement200Response>;
853
853
  /**
854
- * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
854
+ * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. 스코프 `invoices:read`(종전 `contracts:read`에서 변경).
855
855
  * @summary 거래명세서 조회
856
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
856
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
857
857
  * @param {number} [paperCode] 거래명세서 서식 코드. 생략하면 해당 공고에 적용된 기본 서식으로 조회합니다. 기관에 서식이 여러 벌인 경우에만 지정하세요.
858
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
858
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
859
859
  * @param {*} [options] Override http request option.
860
860
  * @throws {RequiredError}
861
861
  */
862
862
  getBidStatement(bidRef: string, paperCode?: number, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBidStatement200Response>;
863
863
  /**
864
- * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey` 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
864
+ * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey`만 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName`에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
865
865
  * @summary 파일 정보 조회
866
866
  * @param {string} fileKey 파일 키 — 업로드 응답의 fileKey(영문 대소문자·숫자 32자).
867
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
867
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
868
868
  * @param {*} [options] Override http request option.
869
869
  * @throws {RequiredError}
870
870
  */
@@ -878,19 +878,19 @@ export declare const PartnerApiApiFactory: (configuration?: Configuration, baseP
878
878
  */
879
879
  getSemoContractTaxinvoiceStatus(externalContractId: string, options?: RawAxiosRequestConfig): AxiosPromise<SemoContractTaxinvoiceStatusResponseDto>;
880
880
  /**
881
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
881
+ * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write`를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
882
882
  * @summary 공급사 카드결제 가능 여부
883
883
  * @param {string} memberId 계약업체 회원 ID
884
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
884
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
885
885
  * @param {*} [options] Override http request option.
886
886
  * @throws {RequiredError}
887
887
  */
888
888
  getSupplierCardPayableV2(memberId: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<GetSupplierCardPayableV2200Response>;
889
889
  /**
890
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 `endpointId` 확인하세요. **필수 스코프:** `webhooks:read`
890
+ * 구독 1건의 현재 상태를 조회합니다. 스코프 `webhooks:read`. 수정·삭제 전에 먼저 호출해 응답 헤더의 `ETag`를 `If-Match`에 실어야 합니다. 없는 구독이거나 다른 파트너 키의 구독이면 404입니다. 서명 시크릿은 실리지 않습니다.
891
891
  * @summary 웹훅 구독 단건 조회
892
892
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
893
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
893
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
894
894
  * @param {*} [options] Override http request option.
895
895
  * @throws {RequiredError}
896
896
  */
@@ -898,35 +898,35 @@ export declare const PartnerApiApiFactory: (configuration?: Configuration, baseP
898
898
  /**
899
899
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
900
900
  * @summary Partner API 헬스체크
901
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
901
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
902
902
  * @param {*} [options] Override http request option.
903
903
  * @throws {RequiredError}
904
904
  */
905
905
  healthControllerCheck(ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<HealthControllerCheck200Response>;
906
906
  /**
907
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고를 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에 실린 `ETag` 다음 요청의 `If-None-Match` 되보내면, 결과가 그대로일 때 `304` 본문 없이 받습니다. **식별자 전달:** `?bidRefs=A,B,C`(쉼표) 또는 `?bidRefs=A&bidRefs=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다. 요청한 건수와 받은 건수가 다를 수 있으므로, 보낸 값이 공고번호였다면 `bidId` 로, 구매번호였다면 `purchaseNo` 로 대조하세요. **공고 하나만 볼 때도** `bidRefs` 에 하나만 넣으면 됩니다. 응찰 결과 외에 납품 조건·품목·계약서류까지 필요하면 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요.
907
+ * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. - 결과 확인은 공고를 하나씩 조회하지 말고 이 엔드포인트로 최대 100건씩 받습니다. 응답의 `ETag`를 다음 요청의 `If-None-Match`로 보내면 변화가 없을본문 없이 `304`로 끝납니다. - 식별자는 `?bidRefs=A,B,C`와 `?bidRefs=A&bidRefs=B` 둘 다 됩니다. - 없거나 대행 범위 밖인 식별자는 오류가 아니라 응답에서 빠집니다. 보낸 값이 공고번호면 `bidId`, 구매번호면 `purchaseNo`로 대조합니다.
908
908
  * @summary 공고 결과 조회
909
- * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60; 반복해 전달합니다. 최대 100건입니다.
910
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
909
+ * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60;를 반복해 전달합니다. 최대 100건입니다.
910
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
911
911
  * @param {*} [options] Override http request option.
912
912
  * @throws {RequiredError}
913
913
  */
914
914
  listBidResults(bidRefs: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<ListBidResults200Response>;
915
915
  /**
916
- * 발주처(API 바인딩)의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(쿼리에 buyerId 넣지 않습니다). **페이지네이션(cursor):** `limit`(1~100, 기본 100) + `cursor`(불투명 토큰). 응답 `meta.nextCursor` 다음 요청 `cursor` 전달하면 다음 페이지를 받습니다. `meta.hasMore` `false`(= `nextCursor` 가 `null`)이면 마지막 페이지입니다. 목록 자체는 `data` 에 배열로 실립니다. **상태·낙찰방법:** 공개값(의미 문자열)으로 반환됩니다. 낙찰 여부는 상태가 아니라 낙찰 결과 조회의 `participants[].isWinner` 관측합니다(AWARDED 상태는 없습니다).
916
+ * API 키에 연결된 발주기관의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. - 발주기관은 키로 결정됩니다(`buyerId`를 보내지 않습니다). - 페이지네이션: `limit`(1~100, 기본 100) `cursor`. 응답 `meta.nextCursor`를 다음 요청의 `cursor`로 보내고, `meta.hasMore`가 `false`면 마지막 페이지입니다. - 낙찰 여부는 공고 상태가 아니라 `GET /v2/bid-results`의 `participants[].isWinner`로 판단합니다. `AWARDED` 상태는 없습니다.
917
917
  * @summary 공고 목록 조회
918
918
  * @param {number} [limit] 페이지 크기(1~100, 기본 100).
919
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 그대로 전달한다. 미지정 페이지. &#x60;nextCursor&#x3D;null&#x60; 이면 마지막 페이지다.
920
- * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
919
+ * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60;를 그대로 보냅니다. 생략하면페이지이고, &#x60;nextCursor&#x60;가 &#x60;null&#x60;이면 마지막 페이지입니다.
920
+ * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
921
921
  * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회합니다.
922
922
  * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
923
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
923
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
924
924
  * @param {*} [options] Override http request option.
925
925
  * @throws {RequiredError}
926
926
  */
927
927
  listBids(limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<ListBids200Response>;
928
928
  /**
929
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market 이 데이터를 채워 PDF 로 만들어 주는 서류입니다. 생성 API 의 `paperCodes` 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents` v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
929
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market이 데이터를 채워 PDF로 만들어 주는 서류입니다. 생성 API의 `paperCodes`에 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents`가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
930
930
  * @summary 거래에 필요한 계약서류 목록 조회
931
931
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
932
932
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -935,49 +935,49 @@ export declare const PartnerApiApiFactory: (configuration?: Configuration, baseP
935
935
  */
936
936
  listExternalContractDocuments(buyerId: string, bidType: ListExternalContractDocumentsBidTypeEnum, options?: RawAxiosRequestConfig): AxiosPromise<ExternalContractDocumentsResponseDto>;
937
937
  /**
938
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 걸러 다시 처리하면 됩니다. - \"이벤트가 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 같고 `attempt` 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 다음 요청의 `cursor` 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
938
+ * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문, 수신측 응답 상태, 다음 재시도 시각이 함께 실립니다. 스코프 `webhooks:read`. - 수신측 장애로 놓친 이벤트는 `status=EXHAUSTED`로 걸러 다시 처리합니다. 웹훅의 폴링 대체 경로입니다. - 재시도마다 한 행이며 `eventId`가 같고 `attempt`만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단합니다. - 페이지네이션: 응답 `nextCursor`를 다음 요청의 `cursor`로 보냅니다. `null`이면 마지막 페이지입니다.
939
939
  * @summary 웹훅 전송 이력 조회
940
940
  * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
941
941
  * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
942
942
  * @param {number} [limit] 페이지 크기(1~200, 기본 50).
943
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 그대로 전달합니다. 미지정 시 첫 페이지.
944
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
943
+ * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60;를 그대로 전달합니다. 미지정 시 첫 페이지.
944
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
945
945
  * @param {*} [options] Override http request option.
946
946
  * @throws {RequiredError}
947
947
  */
948
948
  listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<ListWebhookDeliveries200Response>;
949
949
  /**
950
- * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 을 계산해 **base64** 로 인코딩하고, `webhook-signature` 의 `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 는 공백으로 구분된 **여러 서명**을 실을 수 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 과 같은 값)도 실립니다 — 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 — 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 로 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` `{\"status\":\"ACTIVE\"}` 로 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 은 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
950
+ * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. 스코프 `webhooks:read`. 발송이 멈춘 이유는 `status`와 `consecutiveFailures`로 확인합니다. 서명 시크릿은 실리지 않습니다. 수신측 구현 방법은 `POST /v2/webhook-endpoints` 설명에 있습니다.
951
951
  * @summary 웹훅 구독 목록 조회
952
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
952
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
953
953
  * @param {*} [options] Override http request option.
954
954
  * @throws {RequiredError}
955
955
  */
956
956
  listWebhookEndpoints(ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<ListWebhookEndpoints200Response>;
957
957
  /**
958
- * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(FAILED)로 전환됩니다. - 유찰사유 코드와 상세가 기록됩니다. **유찰사유 값 목록(failureReasonCode 공개값):** | | 의미 | |------|------| | `ABOVE_TARGET_PRICE` | 예정가격 초과 | | `DEPT_MISMATCH` | 자격 미달 | | `NEEDS_EXPERTISE` | 전문성 필요 | | `OTHER` | 기타 (`failureReasonDetail` 필수) | | `NO_PARTICIPANT` | 참가자 없음 | | `SINGLE_PARTICIPANT` | 단독 참가 | | `LESS_THAN_TWO` | 2인 미만 | | `BELOW_MINIMUM` | 최저가 미달 | **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 를 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수.
958
+ * 공고를 유찰 처리합니다. 입찰 마감 상태에서 호출합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. 공고 상태가 유찰(`FAILED`)로 바뀌고 유찰사유가 기록됩니다. 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다). | `failureReasonCode` | 의미 | | --- | --- | | `ABOVE_TARGET_PRICE` | 예정가격 초과 | | `DEPT_MISMATCH` | 자격 미달 | | `NEEDS_EXPERTISE` | 전문성 필요 | | `NO_PARTICIPANT` | 참가자 없음 | | `SINGLE_PARTICIPANT` | 단독 참가 | | `LESS_THAN_TWO` | 2인 미만 | | `BELOW_MINIMUM` | 최저가 미달 | | `OTHER` | 기타(`failureReasonDetail` 필수) |
959
959
  * @summary 유찰 처리
960
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
961
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
960
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
961
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
962
962
  * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
963
963
  * @param {*} [options] Override http request option.
964
964
  * @throws {RequiredError}
965
965
  */
966
966
  markBidFailed(bidRef: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<MarkBidFailed201Response>;
967
967
  /**
968
- * 낙찰 결과를 등록합니다. 요청의 응답은 처리 상태 `AWARDED` 반환합니다. **호출 시점:** 입찰 마감 후 낙찰자가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 낙찰자(공급사)의 응찰 건이 낙찰 처리됩니다. - 이후 **공고의 조회 상태(status)는 계약진행(CONTRACT_IN_PROGRESS)** 으로 진행합니다. `AWARDED` 라는 공고 status 존재하지 않으므로, 낙찰 여부는 `GET /v2/bids/{bidRef}/results` 의 `participants[].isWinner` 또는 `GET /v2/bids/{bidRef}` 의 status(=계약진행)로 관측하세요(`status === \'AWARDED\'` 폴링 금지). - 협상 방식(NEGOTIATION/NEGOTIATION_AUTO) 공고는 이 엔드포인트 전에 `POST /v2/bids/{bidRef}/negotiation-scores`(협상 점수평가)로 평가를 완료해야 합니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 24시간 캐시 응답 반환.
968
+ * 낙찰 결과를 등록합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. - 입찰 마감(입찰완료) 상태에서 호출합니다. - 낙찰 공고 상태는 계약진행(`CONTRACT_IN_PROGRESS`)입니다. `AWARDED` 공고 상태는 없으므로 낙찰 여부는 `participants[].isWinner`로 판단합니다. - 협상 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) 공고는 `POST /v2/bids/{bidRef}/negotiation-scores`로 평가를 마쳐야 호출할 있습니다. - 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다). - 같은 키와 같은 body 재전송하면 24시간 동안 캐시된 응답을 돌려줍니다.
969
969
  * @summary 낙찰 결과 전송
970
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
971
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
970
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
971
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
972
972
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
973
973
  * @param {*} [options] Override http request option.
974
974
  * @throws {RequiredError}
975
975
  */
976
976
  registerAward(bidRef: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<RegisterAward201Response>;
977
977
  /**
978
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 요청 본문에 직접 싣지 마세요 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 받고, 32자 키를 요청의 `attachments` 배열에 넣습니다.
978
+ * 공고를 등록합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. 첨부는 방법 하나입니다. - `attachments` 원소에 `{ fileName, url }` 또는 `{ fileName, base64 }`를 그대로 넣습니다. - 여러 공고에서 재사용할 파일은 `POST /v2/files`로 먼저 올려 받은 `fileKey`를 넣습니다.
979
979
  * @summary 공고 등록
980
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
980
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
981
981
  * @param {CreateBidRequestDto} createBidRequestDto
982
982
  * @param {*} [options] Override http request option.
983
983
  * @throws {RequiredError}
@@ -986,17 +986,17 @@ export declare const PartnerApiApiFactory: (configuration?: Configuration, baseP
986
986
  /**
987
987
  * 외부에서 맺어진 계약 1건을 씨마켓의 **세금계산서 발행 대상**으로 등록합니다. **등록 후 동선:** 발주기관이 씨마켓 [나의 계약 관리] 에서 계산서 발급을 요청하고, 공급기업이 같은 화면에서 발행합니다. 계산서의 **공급자는 공급기업, 공급받는자는 발주기관**입니다. **대금 흐름:** 씨마켓은 이 거래의 대금을 받지 않습니다 — 발행 경로만 제공합니다. **금액:** `supplyPrice` 는 **부가세를 뺀 과세 공급가액**입니다(결제창 API 가 부가세 포함가를 받는 것과 다릅니다). 과세·면세 공급가액이 모두 0 이면 400 입니다. **사전 조건:** 두 회원 ID 가 씨마켓에 실재해야 합니다. 회원 ID 가 곧 소유권이라, 없는 회원으로 등록하면 아무도 열 수 없는 계산서 대상이 됩니다. **필수 스코프:** `contracts:write`. 바인딩된 발주처 외의 발주기관을 대신하려면 대행 범위에 그 회원이 있어야 합니다. **멱등성:** `externalContractId` 가 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 대상을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
988
988
  * @summary 계약 발행대상 등록
989
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
989
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
990
990
  * @param {RegisterSemoContractRequestDto} registerSemoContractRequestDto
991
991
  * @param {*} [options] Override http request option.
992
992
  * @throws {RequiredError}
993
993
  */
994
994
  registerSemoContract(idempotencyKey: string, registerSemoContractRequestDto: RegisterSemoContractRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<SemoContractRegisteredResponseDto>;
995
995
  /**
996
- * 한 공고의 계산서를 여러 장으로 나눠 발급해 달라고 청구합니다. 스코프 `invoices:write`. **청구만 접수합니다.** 호출이 계산서를 발행하지는 않습니다 접수된 청구는 정산 파이프라인이 처리하며, 진행 여부는 `GET /v2/bids/{bidRef}` `taxInvoiceRequested` 관측합니다. **나눠 담을 금액을 보냅니다.** `supplyAmount`(공급가액)와 `vat`(부가세)는 이번 장에 실을 금액입니다. 남은 금액을 다시 나누려면 같은 공고에 청구를 한 번 더 보냅니다 — 그때는 **새 `Idempotency-Key`** 쓰세요. 같은 키로 다시 보내면 앞선 청구의 응답이 그대로 재생됩니다. **발급 희망일**(`issueDate`)은 선택이며 미래 일자는 400 입니다. 미지정 시 서버 기본값을 씁니다.
996
+ * 한 공고의 계산서를 여러 장으로 나눠 발급해 달라고 청구합니다. 스코프 `invoices:write` · `Idempotency-Key` 헤더 필수. - 청구만 접수합니다. 발행은 정산 파이프라인이 처리하며 진행 여부는 `GET /v2/bids/{bidRef}`의 `taxInvoiceRequested`로 확인합니다. - `supplyAmount`와 `vat`는 이번 장에 실을 금액입니다. 남은 금액을 다시 나누려면 **새 `Idempotency-Key`**로 청구합니다. 같은 키는 앞선 청구의 응답을 그대로 돌려줍니다. - `issueDate`는 선택이며 미래 일자는 400입니다.
997
997
  * @summary 계산서 분할 발급 청구
998
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
999
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
998
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
999
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1000
1000
  * @param {RequestInvoiceSplitRequestDto} requestInvoiceSplitRequestDto
1001
1001
  * @param {*} [options] Override http request option.
1002
1002
  * @throws {RequiredError}
@@ -1005,67 +1005,67 @@ export declare const PartnerApiApiFactory: (configuration?: Configuration, baseP
1005
1005
  /**
1006
1006
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1007
1007
  * @summary 낙찰 되돌리기
1008
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1009
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1008
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1009
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1010
1010
  * @param {RevertAwardRequestDto} revertAwardRequestDto
1011
1011
  * @param {*} [options] Override http request option.
1012
1012
  * @throws {RequiredError}
1013
1013
  */
1014
1014
  revertAward(bidRef: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<RevertAward200Response>;
1015
1015
  /**
1016
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
1016
+ * 서명 시크릿을 새로 발급합니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 시크릿은 이 응답에서 한 번만 나가고 `secretVersion`이 1 올라갑니다. - **옛 시크릿은 즉시 무효입니다.** 유예가 없으므로 순서를 지키세요 — ① 수신측이 옛 값과 새 값을 모두 받아들이도록 배포 → ② 이 호출 → ③ 새 반영 → ④ 옛 값 제거. - 같은 `Idempotency-Key`로 다시 부르면 새로 발급하지 않고 처음 발급한 값을 돌려줍니다(24시간).
1017
1017
  * @summary 웹훅 서명 시크릿 재발급
1018
1018
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1019
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1019
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1020
1020
  * @param {*} [options] Override http request option.
1021
1021
  * @throws {RequiredError}
1022
1022
  */
1023
1023
  rotateWebhookSecret(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<CreateWebhookEndpoint201Response>;
1024
1024
  /**
1025
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` `delivered: false` 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
1025
+ * 등록된 주소로 `ping` 이벤트를 1회 보내고 결과를 돌려줍니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 수신측이 받지 못해도 응답은 200이고 `delivered: false`입니다. 원인은 `responseStatus`와 `error`로 좁힙니다. - 실제 이벤트와 같은 서명 헤더가 실리므로 검증 코드를 그대로 시험할 수 있습니다. - 다시 보내려면 `Idempotency-Key`를 쓰세요. 같은 키는 24시간 동안 직전 결과를 돌려줍니다.
1026
1026
  * @summary 웹훅 연결 확인 발송
1027
1027
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1028
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1028
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1029
1029
  * @param {*} [options] Override http request option.
1030
1030
  * @throws {RequiredError}
1031
1031
  */
1032
1032
  sendWebhookTestEvent(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<SendWebhookTestEvent200Response>;
1033
1033
  /**
1034
- * 협상방식(NEGOTIATION/NEGOTIATION_AUTO) 공고의 응찰자별 점수를 입력합니다. **호출 시점:** 입찰 마감 후 낙찰(`POST /v2/bids/{bidRef}/award`) 전. 협상방식 공고는 이 평가를 완료해야 낙찰에 진입할 수 있습니다. **부수효과:** - 응찰자별 기술점수(및 선택적 가격점수 override)가 기록됩니다. - `complete=true` 평가완료 게이트까지 적용돼 낙찰 진입이 가능해집니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 시 24시간 내 캐시 응답 반환.
1034
+ * 협상 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) 공고의 응찰자별 점수를 입력합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. - 입찰 마감 후 낙찰(`POST /v2/bids/{bidRef}/award`) 전에 호출합니다. 협상 방식 공고는 이 평가를 마쳐야 낙찰에 진입합니다. - `complete=true`면 평가완료로 처리되어 낙찰을 호출할 있습니다. - 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다).
1035
1035
  * @summary 협상 점수평가
1036
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1037
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1036
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1037
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1038
1038
  * @param {SubmitNegotiationScoresRequestDto} submitNegotiationScoresRequestDto
1039
1039
  * @param {*} [options] Override http request option.
1040
1040
  * @throws {RequiredError}
1041
1041
  */
1042
1042
  submitNegotiationScores(bidRef: string, idempotencyKey: string, submitNegotiationScoresRequestDto: SubmitNegotiationScoresRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<SubmitNegotiationScores201Response>;
1043
1043
  /**
1044
- * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEditHistory=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
1044
+ * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. - 진행중·초안 상태만 수정할 수 있습니다. 마감·취소된 공고는 거부됩니다. - 낙찰방법(`awardMethod`)은 수정할 없고, 참여자가 있으면 입찰방식·면허·예산·품목 일부가 잠깁니다. - 한 섹션을 수정하려면 섹션의 필수 필드를 함께 보냅니다. - `hideEditHistory=true`면 변경이력을 비공개로 남기고 노출 카운터를 올리지 않습니다.
1045
1045
  * @summary 공고 수정
1046
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1047
- * @param {string} ifMatch 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1048
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1046
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1047
+ * @param {string} ifMatch 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412로 거절되며 아무것도 수정되지 않습니다.
1048
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1049
1049
  * @param {UpdateBidRequestDto} updateBidRequestDto
1050
1050
  * @param {*} [options] Override http request option.
1051
1051
  * @throws {RequiredError}
1052
1052
  */
1053
1053
  updateBid(bidRef: string, ifMatch: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<UpdateBid200Response>;
1054
1054
  /**
1055
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 헤더가 없으면 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` 헤더를 빼먹었습니다. 조회 `ETag` 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1055
+ * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - `eventTypes`는 치환입니다. 하나를 더하려면 기존 목록을 포함한 전체를 보냅니다. - `If-Match`가 필수입니다. `GET`으로 받은 `ETag`를 그대로 실으세요. 누락은 428, 사이 구독이 바뀌었으면 412이며 아무것도 수정되지 않습니다. - 연속 실패로 자동 중지된 구독은 `{\"status\":\"ACTIVE\"}`로 되살립니다. - 시크릿은 이 경로로 바뀌지 않습니다. 재발급은 `rotate-secret`입니다.
1056
1056
  * @summary 웹훅 구독 수정
1057
1057
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1058
- * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
1059
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1058
+ * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412로 거절되며 아무것도 변경되지 않습니다.
1059
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1060
1060
  * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
1061
1061
  * @param {*} [options] Override http request option.
1062
1062
  * @throws {RequiredError}
1063
1063
  */
1064
1064
  updateWebhookEndpoint(endpointId: string, ifMatch: string, idempotencyKey: string, updateWebhookEndpointRequestDto: UpdateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<GetWebhookEndpoint200Response>;
1065
1065
  /**
1066
- * **첨부 업로드의 기본 경로입니다. 23MB 이하면 호출 하나로 끝납니다.** 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **23MB 를 넘으면 경로를 바꿔야 합니다.** 상한이 셋으로 갈립니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 이 호출 + `base64` | **23MB** (본문이 c-market 을 통과하며 base64 팽창 4/3 이 얹힘) | 1 | | 이 호출 + `url` | **30MB** (c-market 이 대신 내려받아 팽창은 없지만 서버 경유 천장은 그대로) | 1 | | `POST /v2/files/upload-url` 로 시작하는 2단계 | **100MB** (바이트가 c-market 을 지나지 않음) | 2 + 스토리지 PUT | c-market 내려받을 있는 https 주소에 파일을 올려 둘 수 있다면 `url` 이 30MB 까지를 1콜로 덮습니다. 그 이상이거나 주소를 열 수 없으면 2단계 경로를 쓰세요. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 그대로 넣으면 호출 없이 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1066
+ * 공고 첨부파일을 올리고 `fileKey`를 받습니다. 스코프 `files:write` · `Idempotency-Key` 헤더 필수. `base64`와 `url` 중 하나만 보냅니다. 받은 `fileKey`는 공고 등록·수정의 `attachments`에 넣습니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 이 호출 + `base64` | 23MB | 1 | | 이 호출 + `url` | 30MB | 1 | | `POST /v2/files/upload-url` 2단계 | 100MB | 2 + 스토리지 PUT | 공고에만 쓰는 파일이면 `POST /v2/bids`의 `attachments`에 `url`·`base64`를 직접 넣어호출을 생략할 있습니다.
1067
1067
  * @summary 공고 첨부파일 업로드 (기본)
1068
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1068
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1069
1069
  * @param {UploadFileRequestDto} uploadFileRequestDto
1070
1070
  * @param {*} [options] Override http request option.
1071
1071
  * @throws {RequiredError}
@@ -1077,131 +1077,131 @@ export declare const PartnerApiApiFactory: (configuration?: Configuration, baseP
1077
1077
  */
1078
1078
  export declare class PartnerApiApi extends BaseAPI {
1079
1079
  /**
1080
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
1080
+ * 진행중(`ONGOING`) 공고를 취소합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. - 되돌릴 없습니다. 취소 사유는 필수이고 공고 이력에 남습니다. - 진행중이 아니거나 이미 취소된 공고는 409, 다른 발주기관의 공고는 403입니다. - 응찰은 받았으나 낙찰자를 정하지 못한 종료는 취소가 아니라 유찰(`POST /v2/bids/{bidRef}/fail`)입니다.
1081
1081
  * @summary 공고 취소
1082
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1083
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1082
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1083
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1084
1084
  * @param {CancelBidRequestDto} cancelBidRequestDto
1085
1085
  * @param {*} [options] Override http request option.
1086
1086
  * @throws {RequiredError}
1087
1087
  */
1088
1088
  cancelBid(bidRef: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<CancelBid200Response, any, {}>>;
1089
1089
  /**
1090
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점입니다. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 현금 결제 공고는 세금계산서 발행요청이 등록되고, 낙찰자(공급사)에게 발행요청 알림·문자가 발송됩니다. 카드 결제 공고는 발행요청 축이 없어 알림도 없습니다. - 거래명세서 발행이 예약됩니다. - 응답 코드는 200이며, 처리 결과가 본문에 담겨 반환됩니다. **부분계약(협의 감액):** 낙찰 후 협의로 계약금액이 줄었으면 `supplyAmount`+`vat` 함께 보내세요. 그 금액으로 계산서 발행이 요청됩니다. 생략하면 낙찰금액에서 파생합니다. 현금 결제 공고·낙찰자 1인·감액(증액 불가)일 때만 허용되며, 어긋나면 409 입니다. **문서에 찍히는 값:** 거래명세서·검수보고서의 구매사 사업자정보·담당자·작성일자는 등록된 발주처 정보에서 채워집니다. 요청으로 덮어쓸 수 없습니다. **낙찰자:** 공고의 낙찰 상태에서 결정되며 요청으로 지정하지 않습니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1090
+ * 납품 검수 완료를 기록합니다. 낙찰 처리된 공고에서 호출합니다. 스코프 `contracts:write` · `Idempotency-Key` 헤더 필수. - 현금 결제 공고는 세금계산서 발행요청이 등록되고 낙찰자에게 알림·문자가 나갑니다. 카드 결제 공고는 발행요청이 없어 알림도 없습니다. - 거래명세서 발행이 예약됩니다. - 협의로 계약금액이 줄었으면 `supplyAmount`와 `vat`를 함께 보냅니다. 현금 결제·낙찰자 1인·감액일 때만 허용하며 어긋나면 409입니다. 생략하면 낙찰금액에서 파생합니다. - 문서에 찍히는 구매사 사업자정보·담당자·작성일자와 낙찰자는 등록된 값에서 채워지며 요청으로 바꿀 수 없습니다.
1091
1091
  * @summary 검수완료 전송
1092
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1093
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1092
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1093
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1094
1094
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
1095
1095
  * @param {*} [options] Override http request option.
1096
1096
  * @throws {RequiredError}
1097
1097
  */
1098
1098
  completeAcceptance(bidRef: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<CompleteAcceptance200Response, any, {}>>;
1099
1099
  /**
1100
- * `uploadUrl` 로의 `PUT` 이 끝난 뒤 호출합니다. 올라온 파일을 실측해 등록하고, 시점부터 `fileKey` 공고 첨부로 쓸 수 있습니다. **확정 `fileKey` 첨부로 없습니다** 공고 등록이 400 으로 거절됩니다. **신고한 크기가 아니라 실제 파일을 봅니다.** 발급 요청의 `fileSize` 와 다르면 실제 크기가 기록되고, 정책 상한을 넘으면 여기서 거절됩니다. **같은 `fileKey` 여러 번 호출해도 안전합니다**(멱등). **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1100
+ * `uploadUrl`로 올린 파일을 확정합니다. 시점부터 `fileKey`를 공고 첨부로 쓸 수 있습니다. 스코프 `files:write` · `Idempotency-Key` 헤더 필수. - 확정 `fileKey`를 첨부로 쓰면 공고 등록이 400입니다. - 신고한 `fileSize`가 아니라 실제 파일을 측정해 기록하며, 정책 상한을 넘으면 여기서 거절됩니다. - 같은 `fileKey`로 여러 번 호출해도 안전합니다.
1101
1101
  * @summary 대용량 업로드 2/2 — 업로드 확정
1102
1102
  * @param {string} fileKey 발급 응답의 fileKey(영문 대소문자·숫자 32자).
1103
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1103
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1104
1104
  * @param {CompleteUploadRequestDto} completeUploadRequestDto
1105
1105
  * @param {*} [options] Override http request option.
1106
1106
  * @throws {RequiredError}
1107
1107
  */
1108
1108
  completeFileUpload(fileKey: string, idempotencyKey: string, completeUploadRequestDto: CompleteUploadRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<UploadFile201Response, any, {}>>;
1109
1109
  /**
1110
- * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1110
+ * 공급사에게 계산서를 수령한 계약을 완료처리합니다. 스코프 `contracts:write` · `Idempotency-Key` 헤더 필수. - 결제완료·계산서 발급 상태가 기록되고 발급일자는 현재 시각이 됩니다. - 이미 완료된 공고는 409, 다른 발주기관의 공고는 403입니다.
1111
1111
  * @summary 정산 마감
1112
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1113
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1112
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1113
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1114
1114
  * @param {*} [options] Override http request option.
1115
1115
  * @throws {RequiredError}
1116
1116
  */
1117
1117
  completeInvoice(bidRef: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<CompleteInvoice200Response, any, {}>>;
1118
1118
  /**
1119
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
1119
+ * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable`로 미리 확인하세요. 미가입 업체로 발행하면 400입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
1120
1120
  * @summary 결제창 발행
1121
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1121
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1122
1122
  * @param {CreateCardPaymentDto} createCardPaymentDto
1123
1123
  * @param {*} [options] Override http request option.
1124
1124
  * @throws {RequiredError}
1125
1125
  */
1126
1126
  createCardPayment(idempotencyKey: string, createCardPaymentDto: CreateCardPaymentDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<CreateCardPayment200Response, any, {}>>;
1127
1127
  /**
1128
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `paperCodes` 와 같은 순서로 같은 개수가 돌아옵니다.** 각 항목의 `fileUrl` 을 그대로 쓰면 되고, `paperCode` 로 어느 요청에 대한 결과인지 대응시킬 수 있습니다. **`name` 의 출처는 서류에 따라 다릅니다.** 시스템이 렌더한 서류는 계약서류명이고, 공급사 사전등록 3종(11·12·13)은 **공급사가 등록한 원본 파일명**입니다 — 채팅 첨부 라벨로 그대로 쓰세요. **필요한 입력:** 발주기관·공급사는 회원 ID 만 주면 됩니다. 상호·사업자번호·대표자·주소·직인은 c-market 이 회원 정보에서 직접 채웁니다. **전부 성공 또는 전부 실패입니다.** 지원하지 않는 서류가 하나라도 섞이면(400) 아무것도 만들지 않습니다. 렌더가 필요한 서류를 요청하면서 `contract` 를 빠뜨려도 마찬가지입니다(422). **135(수의계약체결제한여부확인서)를 요청하면 추가 입력이 필요합니다.** `contract.subject`(발주내용)·`contract.category`(계약구분)·`contract.buyerDepartment`(발주부서)가 필수이고, `documentInputs.contractRestrictionConfirm.answers`에 서식 ①~⑧에 대한 **계약상대자**의 답변 8개를 순서대로 담아야 합니다(c-market 이 대신 만들어낼 수 없는 값입니다). ⑨(발주자 확인사항)는 `documentInputs.contractRestrictionConfirm.buyerConfirmation`으로 선택 전달하며, 생략하면 서식에 빈칸으로 인쇄됩니다. 문항 ①~⑧의 원문은 `answers` 필드 설명을 참고하세요. **164(퇴직자영입현황확인서)를 요청하면 퇴직자 명단이 필요합니다.** `contract.subject`(서식의 \"수의계약 대상건명\")가 필수이고, `documentInputs.retireeRoster.rows` 에 명단을 넣습니다(성명·직급 필수, 직급·입사일·근무기간·비고 선택, 최대 50행). **퇴직자가 없으면 `rows` 를 빈 배열로 보내세요** — 서식에 \"해당사항 없음\"으로 인쇄됩니다. 블록 자체를 생략하면 422 입니다(\"퇴직자 없음\"과 \"확인하지 않음\"을 구분할 수 없기 때문입니다). **승낙사항(4·184·185·186·189·197·208)을 요청하면 `contract.subject`(계약건명)가 필수입니다.** 서식 상단 \"건명\" 칸에 인쇄되는 값이라 비면 어느 계약의 승낙인지 알 수 없습니다. 그 외 추가 입력은 없습니다 — 갑(발주기관) 서명란은 `buyerId` 로, 을(공급사) 서명란은 `supplierId` 로 c-market 이 채웁니다. 발주기관이 기관 전용 승낙사항 서식을 쓰면 요청한 코드 그대로 응답하되 PDF 는 그 기관 서식으로 발급됩니다. **응답의 `fileUrl` 은 만료되지 않습니다.** 채팅 메시지 등에 그대로 저장해 두어도 됩니다. **생성 가능한 회원 범위:** 조회와 같습니다 — 이 API 키에 설정된 대행 범위 안의 회원만 가능합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents` v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1128
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `paperCodes` 와 같은 순서로 같은 개수가 돌아옵니다.** 각 항목의 `fileUrl` 을 그대로 쓰면 되고, `paperCode` 로 어느 요청에 대한 결과인지 대응시킬 수 있습니다. **`name` 의 출처는 서류에 따라 다릅니다.** 시스템이 렌더한 서류는 계약서류명이고, 공급사 사전등록 3종(11·12·13)은 **공급사가 등록한 원본 파일명**입니다 — 채팅 첨부 라벨로 그대로 쓰세요. **필요한 입력:** 발주기관·공급사는 회원 ID 만 주면 됩니다. 상호·사업자번호·대표자·주소·직인은 c-market 이 회원 정보에서 직접 채웁니다. **전부 성공 또는 전부 실패입니다.** 지원하지 않는 서류가 하나라도 섞이면(400) 아무것도 만들지 않습니다. 렌더가 필요한 서류를 요청하면서 `contract` 를 빠뜨려도 마찬가지입니다(422). **135(수의계약체결제한여부확인서)를 요청하면 추가 입력이 필요합니다.** `contract.subject`(발주내용)·`contract.category`(계약구분)·`contract.buyerDepartment`(발주부서)가 필수이고, `documentInputs.contractRestrictionConfirm.answers`에 서식 ①~⑧에 대한 **계약상대자**의 답변 8개를 순서대로 담아야 합니다(c-market 이 대신 만들어낼 수 없는 값입니다). ⑨(발주자 확인사항)는 `documentInputs.contractRestrictionConfirm.buyerConfirmation`으로 선택 전달하며, 생략하면 서식에 빈칸으로 인쇄됩니다. 문항 ①~⑧의 원문은 `answers` 필드 설명을 참고하세요. **164(퇴직자영입현황확인서)를 요청하면 퇴직자 명단이 필요합니다.** `contract.subject`(서식의 \"수의계약 대상건명\")가 필수이고, `documentInputs.retireeRoster.rows` 에 명단을 넣습니다(성명·직급 필수, 직급·입사일·근무기간·비고 선택, 최대 50행). **퇴직자가 없으면 `rows` 를 빈 배열로 보내세요** — 서식에 \"해당사항 없음\"으로 인쇄됩니다. 블록 자체를 생략하면 422 입니다(\"퇴직자 없음\"과 \"확인하지 않음\"을 구분할 수 없기 때문입니다). **승낙사항(4·184·185·186·189·197·208)을 요청하면 `contract.subject`(계약건명)가 필수입니다.** 서식 상단 \"건명\" 칸에 인쇄되는 값이라 비면 어느 계약의 승낙인지 알 수 없습니다. 그 외 추가 입력은 없습니다 — 갑(발주기관) 서명란은 `buyerId` 로, 을(공급사) 서명란은 `supplierId` 로 c-market 이 채웁니다. 발주기관이 기관 전용 승낙사항 서식을 쓰면 요청한 코드 그대로 응답하되 PDF 는 그 기관 서식으로 발급됩니다. **응답의 `fileUrl` 은 만료되지 않습니다.** 채팅 메시지 등에 그대로 저장해 두어도 됩니다. **생성 가능한 회원 범위:** 조회와 같습니다 — 이 API 키에 설정된 대행 범위 안의 회원만 가능합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents`가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1129
1129
  * @summary 계약서류 생성
1130
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1130
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1131
1131
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
1132
1132
  * @param {*} [options] Override http request option.
1133
1133
  * @throws {RequiredError}
1134
1134
  */
1135
1135
  createExternalContractDocuments(idempotencyKey: string, createExternalContractDocumentsRequestDto: CreateExternalContractDocumentsRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<CreateExternalContractDocumentsResponseDto, any, {}>>;
1136
1136
  /**
1137
- * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` `uploadUrl` 받습니다. 2. `uploadUrl` 파일 본문을 `PUT` 합니다 응답의 `contentType` `Content-Type` 헤더에 그대로 실으세요. 요청은 c-market 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 기본은 `POST /v2/files` 한 번입니다 — `base64` 로 23MB, `url` 로 30MB 까지 그 한 번으로 끝납니다. 그 위(**100MB** 까지)만 이 2단계 경로를 쓰세요. 바이트가 c-market 을 지나지 않아 서버 경유 천장을 받지 않습니다. **`uploadUrl` 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 만료됩니다 저장해 두고 재사용하지 마시고, 만료됐다면 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1137
+ * 파일을 스토리지로 직접 올리기 위한 1회용 서명 URL을 발급합니다(100MB까지). 스코프 `files:write` · `Idempotency-Key` 헤더 필수. 1. 이 호출로 `fileKey`와 `uploadUrl`을 받습니다. 2. `uploadUrl`에 파일 바이트를 그대로 `PUT` 합니다. 응답의 `contentType`을 `Content-Type` 헤더에 싣고, `Authorization` 헤더는 붙이지 않습니다(주소 자체가 자격증명입니다). 3. `POST /v2/files/{fileKey}/complete`로 확정합니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` - 2단계는 요청이 스토리지로 가므로명세에 오퍼레이션이 없고, 실패 본문도 problem+json이 아닙니다. 만료(400)·중복 업로드(409) 1단계부터 다시 합니다. - `uploadUrl`은 1회용이며 `expiresIn`초만료됩니다. 주소가 자격증명이므로 로그에 남기지 않습니다. - 30MB 이하는 `POST /v2/files` 번으로 끝납니다.
1138
1138
  * @summary 대용량 업로드 1/2 — 업로드 주소 발급
1139
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1139
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1140
1140
  * @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
1141
1141
  * @param {*} [options] Override http request option.
1142
1142
  * @throws {RequiredError}
1143
1143
  */
1144
1144
  createFileUploadUrl(idempotencyKey: string, createUploadUrlRequestDto: CreateUploadUrlRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<CreateFileUploadUrl201Response, any, {}>>;
1145
1145
  /**
1146
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 1회. 수신 주소가 바뀌면 새로 만들지 말고 `PATCH` 고치세요 — 그래야 시크릿과 전송 이력이 유지됩니다. **서명 시크릿은 이 응답에서 한 번만 나갑니다.** 서버는 해시만 보관하므로 조회로 다시 받을 수 없습니다. 응답의 `secret` 을 즉시 안전한 곳에 보관하세요. 잃어버렸다면 복구가 아니라 `POST /v2/webhook-endpoints/{endpointId}/rotate-secret` 으로 **재발급**해야 합니다. **거절되는 경우와 고치는 법:** - `400` `url` HTTPS 아니거나 형식이 잘못됨, `eventTypes` 비었거나 목록 값 (`ping` 은 구독 불가). 값을 고쳐 재시도하세요. - `400` `Idempotency-Key` 헤더 누락/형식 오류. UUID v4 를 실어 보내세요. - `403` 토큰에 `webhooks:write` 스코프가 없음. 키 발급 설정을 넓혀야 합니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 — 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 계산해 **base64** 인코딩하고, `webhook-signature` `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 공백으로 구분된 **여러 서명**을 실을 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 같은 값)도 실립니다 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` `{\"status\":\"ACTIVE\"}` 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
1146
+ * 수신 주소와 구독할 이벤트를 등록합니다. 연동 초기 1 호출합니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - **서명 시크릿은 이 응답에서 한 번만 나갑니다.** 서버는 해시만 보관하므로 조회로 다시 받을 수 없습니다. 잃어버렸다면 `POST /v2/webhook-endpoints/{endpointId}/rotate-secret`으로 재발급합니다. - 수신 주소가 바뀌면 새로 만들지 말고 `PATCH`로 고치세요. 시크릿과 전송 이력이 유지됩니다. - `url`은 HTTPS만 허용하고 `eventTypes`는 아래 목록 안의 값이어야 합니다. 어기면 400입니다. ### 서명 검증 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약입니다. 직접 짜지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿(`whsec_…`)을 그대로 넘기세요. ```ts import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); // 실패하면 예외 ``` 라이브러리를 쓸 수 없다면 헤더 셋으로 직접 검증합니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 base64 디코드한 바이트가 HMAC 키입니다. 2. `{webhook-id}.{webhook-timestamp}.{본문}`을 연결합니다. 본문은 **파싱 전 원문 바이트**여야 합니다. JSON을 다시 직렬화하면 순서·공백이 달라져 서명이 어긋납니다. 3. HMAC-SHA256을 base64로 인코딩해 `webhook-signature`의 `v1,` 뒤 값과 상수 시간 함수로 비교합니다. 4. `webhook-timestamp`가 5 이상 지났으면 거절합니다. `webhook-signature`에는 서명이 여러 실릴있으므로(키 회전용) 하나라도 맞으면 통과로 처리하세요. ### 중복 제거 `webhook-id`가 이벤트 식별자입니다. 재시도에도 같은 값이 오므로 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상이며 중복 제거는 수신측 책임입니다. `webhook-event-type` 헤더에 본문 `type`과 같은 값이 실려, 본문을 파싱하기 전에 거를 수 있습니다. ### 재시도와 자동 중지 2xx를 돌려주면 성공입니다. 그 외에는 최대 7회 재시도하며 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간입니다. 처리가 길면 먼저 2xx를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 `DISABLED`로 내려갑니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}`에 `{\"status\":\"ACTIVE\"}`로 되살리세요. ### 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping`은 연결 확인 전용이라 구독할 수 없습니다. 놓친 이벤트는 `GET /v2/webhook-deliveries`로 조회해 메웁니다.
1147
1147
  * @summary 웹훅 구독 등록
1148
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1148
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1149
1149
  * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
1150
1150
  * @param {*} [options] Override http request option.
1151
1151
  * @throws {RequiredError}
1152
1152
  */
1153
1153
  createWebhookEndpoint(idempotencyKey: string, createWebhookEndpointRequestDto: CreateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<CreateWebhookEndpoint201Response, any, {}>>;
1154
1154
  /**
1155
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH {\"status\":\"DISABLED\"}` 쓰세요 시크릿과 이벤트 구성이 남아 그대로 되살릴 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1155
+ * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 되돌릴없습니다. 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. 잠시만 멈추려면 `PATCH`로 `{\"status\":\"DISABLED\"}`를 보내세요. - `If-Match`가 필수입니다. 누락은 428, 그 사이 구독이 바뀌었으면 412입니다.
1156
1156
  * @summary 웹훅 구독 삭제
1157
1157
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1158
- * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
1159
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1158
+ * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412로 거절되며 아무것도 변경되지 않습니다.
1159
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1160
1160
  * @param {*} [options] Override http request option.
1161
1161
  * @throws {RequiredError}
1162
1162
  */
1163
1163
  deleteWebhookEndpoint(endpointId: string, ifMatch: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}>>;
1164
1164
  /**
1165
- * 무인증 — `fileKey` 자체가 capability 다(키를 아는 쪽이 곧 접근 권한을 가진다). 파트너 응답의 `fileUrl`/`fullUrl`URL 을 가리킨다. 요청 시점에 서명하므로 URL 을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}` 파일 메타와 `downloadUrl` v2 응답 규약으로 돌려줍니다. 이 안정 URL 은 파트너 응답의 `fileUrl`/`fullUrl` 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
1165
+ * 무인증 — `fileKey` 자체가 capability 다(키를 아는 쪽이 곧 접근 권한을 가진다). 파트너 응답의 `fileUrl`/`fullUrl`이 이 URL을 가리킨다. 요청 시점에 서명하므로 URL을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}`가 파일 메타와 `downloadUrl`을 v2 응답 규약으로 돌려줍니다. 이 안정 URL은 파트너 응답의 `fileUrl`/`fullUrl`이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
1166
1166
  * @summary 파일 다운로드
1167
- * @param {string} fileKey 파일 키 — 영문 대소문자·숫자 32자. 업로드(&#x60;POST /v1|/v2/files&#x60;) 응답에서 받은 값. 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다.
1167
+ * @param {string} fileKey 파일 키 — 영문 대소문자·숫자 32자. 업로드(&#x60;POST /v1|/v2/files&#x60;) 응답에서 받은 값. 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex가 아닌 문자가 들어갑니다.
1168
1168
  * @param {*} [options] Override http request option.
1169
1169
  * @throws {RequiredError}
1170
1170
  */
1171
1171
  downloadFile(fileKey: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}>>;
1172
1172
  /**
1173
- * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 응답의 `status` 아니라 `participants[].isWinner` 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류는 이 응답에 실립니다.** `contractDocuments[]` 서류별 `paperCode`·`paperName`· `fileKey`·`downloadUrl`·`uploadedAt`·`winnerSequence` 를 담습니다 — 계약서류만 따로 받는 엔드포인트는 두지 않습니다. `generationState` **관측 전용**이며 `DEAD_LETTER` 보이면 자동 재시도가 소진된 상태라 API 되살릴 수 없습니다(운영에 문의하세요). **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1173
+ * 공고 건의 전체 정보를 조회합니다 — 기본 정보, 납품·대금 조건, 담당자, 품목, 응찰 참여자, 계약서류, 검수 상태. 스코프 `bids:read`. - 낙찰 여부는 `status`가 아니라 `participants[].isWinner`로 판단합니다. `AWARDED` 상태는 없어(낙찰 직후 `CONTRACT_IN_PROGRESS`) `status === \'AWARDED\'` 폴링은 끝나지 않습니다. - 계약서류는 `contractDocuments[]`에 실립니다. 따로 받는 엔드포인트는 없습니다. - 여러 건은 `GET /v2/bid-results`로 번에 받습니다. - 다른 발주기관의 공고는 403입니다.
1174
1174
  * @summary 공고 상세 조회
1175
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1176
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1175
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1176
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1177
1177
  * @param {*} [options] Override http request option.
1178
1178
  * @throws {RequiredError}
1179
1179
  */
1180
1180
  getBid(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<GetBid200Response, any, {}>>;
1181
1181
  /**
1182
- * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 다른 조회에서 일부 참가자 정보가 가려지는 경우와 무관하게, 이 정산 정보는 읽기 전용으로 항상 그대로 제공됩니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
1182
+ * 낙찰 공급사의 사업자·계좌 정보와 공급가액·부가세, 응찰 품목내역을 조회합니다. 대금 지급에 필요한 값입니다. 스코프 `invoices:read`(종전 `bids:read`에서 변경). 다른 조회에서 참가자 정보가 가려지는 경우와 무관하게응답은 항상 그대로 나갑니다.
1183
1183
  * @summary 정산 정보 조회
1184
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1185
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1184
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1185
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1186
1186
  * @param {*} [options] Override http request option.
1187
1187
  * @throws {RequiredError}
1188
1188
  */
1189
1189
  getBidSettlement(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<GetBidSettlement200Response, any, {}>>;
1190
1190
  /**
1191
- * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
1191
+ * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. 스코프 `invoices:read`(종전 `contracts:read`에서 변경).
1192
1192
  * @summary 거래명세서 조회
1193
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1193
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1194
1194
  * @param {number} [paperCode] 거래명세서 서식 코드. 생략하면 해당 공고에 적용된 기본 서식으로 조회합니다. 기관에 서식이 여러 벌인 경우에만 지정하세요.
1195
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1195
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1196
1196
  * @param {*} [options] Override http request option.
1197
1197
  * @throws {RequiredError}
1198
1198
  */
1199
1199
  getBidStatement(bidRef: string, paperCode?: number, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<GetBidStatement200Response, any, {}>>;
1200
1200
  /**
1201
- * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey` 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
1201
+ * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey`만 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName`에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
1202
1202
  * @summary 파일 정보 조회
1203
1203
  * @param {string} fileKey 파일 키 — 업로드 응답의 fileKey(영문 대소문자·숫자 32자).
1204
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1204
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1205
1205
  * @param {*} [options] Override http request option.
1206
1206
  * @throws {RequiredError}
1207
1207
  */
@@ -1215,19 +1215,19 @@ export declare class PartnerApiApi extends BaseAPI {
1215
1215
  */
1216
1216
  getSemoContractTaxinvoiceStatus(externalContractId: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<SemoContractTaxinvoiceStatusResponseDto, any, {}>>;
1217
1217
  /**
1218
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
1218
+ * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write`를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
1219
1219
  * @summary 공급사 카드결제 가능 여부
1220
1220
  * @param {string} memberId 계약업체 회원 ID
1221
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1221
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1222
1222
  * @param {*} [options] Override http request option.
1223
1223
  * @throws {RequiredError}
1224
1224
  */
1225
1225
  getSupplierCardPayableV2(memberId: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<GetSupplierCardPayableV2200Response, any, {}>>;
1226
1226
  /**
1227
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 `endpointId` 확인하세요. **필수 스코프:** `webhooks:read`
1227
+ * 구독 1건의 현재 상태를 조회합니다. 스코프 `webhooks:read`. 수정·삭제 전에 먼저 호출해 응답 헤더의 `ETag`를 `If-Match`에 실어야 합니다. 없는 구독이거나 다른 파트너 키의 구독이면 404입니다. 서명 시크릿은 실리지 않습니다.
1228
1228
  * @summary 웹훅 구독 단건 조회
1229
1229
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1230
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1230
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1231
1231
  * @param {*} [options] Override http request option.
1232
1232
  * @throws {RequiredError}
1233
1233
  */
@@ -1235,35 +1235,35 @@ export declare class PartnerApiApi extends BaseAPI {
1235
1235
  /**
1236
1236
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
1237
1237
  * @summary Partner API 헬스체크
1238
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1238
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1239
1239
  * @param {*} [options] Override http request option.
1240
1240
  * @throws {RequiredError}
1241
1241
  */
1242
1242
  healthControllerCheck(ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<HealthControllerCheck200Response, any, {}>>;
1243
1243
  /**
1244
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고를 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에 실린 `ETag` 다음 요청의 `If-None-Match` 되보내면, 결과가 그대로일 때 `304` 본문 없이 받습니다. **식별자 전달:** `?bidRefs=A,B,C`(쉼표) 또는 `?bidRefs=A&bidRefs=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다. 요청한 건수와 받은 건수가 다를 수 있으므로, 보낸 값이 공고번호였다면 `bidId` 로, 구매번호였다면 `purchaseNo` 로 대조하세요. **공고 하나만 볼 때도** `bidRefs` 에 하나만 넣으면 됩니다. 응찰 결과 외에 납품 조건·품목·계약서류까지 필요하면 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요.
1244
+ * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. - 결과 확인은 공고를 하나씩 조회하지 말고 이 엔드포인트로 최대 100건씩 받습니다. 응답의 `ETag`를 다음 요청의 `If-None-Match`로 보내면 변화가 없을본문 없이 `304`로 끝납니다. - 식별자는 `?bidRefs=A,B,C`와 `?bidRefs=A&bidRefs=B` 둘 다 됩니다. - 없거나 대행 범위 밖인 식별자는 오류가 아니라 응답에서 빠집니다. 보낸 값이 공고번호면 `bidId`, 구매번호면 `purchaseNo`로 대조합니다.
1245
1245
  * @summary 공고 결과 조회
1246
- * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60; 반복해 전달합니다. 최대 100건입니다.
1247
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1246
+ * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60;를 반복해 전달합니다. 최대 100건입니다.
1247
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1248
1248
  * @param {*} [options] Override http request option.
1249
1249
  * @throws {RequiredError}
1250
1250
  */
1251
1251
  listBidResults(bidRefs: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<ListBidResults200Response, any, {}>>;
1252
1252
  /**
1253
- * 발주처(API 바인딩)의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(쿼리에 buyerId 넣지 않습니다). **페이지네이션(cursor):** `limit`(1~100, 기본 100) + `cursor`(불투명 토큰). 응답 `meta.nextCursor` 다음 요청 `cursor` 전달하면 다음 페이지를 받습니다. `meta.hasMore` `false`(= `nextCursor` 가 `null`)이면 마지막 페이지입니다. 목록 자체는 `data` 에 배열로 실립니다. **상태·낙찰방법:** 공개값(의미 문자열)으로 반환됩니다. 낙찰 여부는 상태가 아니라 낙찰 결과 조회의 `participants[].isWinner` 관측합니다(AWARDED 상태는 없습니다).
1253
+ * API 키에 연결된 발주기관의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. - 발주기관은 키로 결정됩니다(`buyerId`를 보내지 않습니다). - 페이지네이션: `limit`(1~100, 기본 100) `cursor`. 응답 `meta.nextCursor`를 다음 요청의 `cursor`로 보내고, `meta.hasMore`가 `false`면 마지막 페이지입니다. - 낙찰 여부는 공고 상태가 아니라 `GET /v2/bid-results`의 `participants[].isWinner`로 판단합니다. `AWARDED` 상태는 없습니다.
1254
1254
  * @summary 공고 목록 조회
1255
1255
  * @param {number} [limit] 페이지 크기(1~100, 기본 100).
1256
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 그대로 전달한다. 미지정 페이지. &#x60;nextCursor&#x3D;null&#x60; 이면 마지막 페이지다.
1257
- * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
1256
+ * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60;를 그대로 보냅니다. 생략하면페이지이고, &#x60;nextCursor&#x60;가 &#x60;null&#x60;이면 마지막 페이지입니다.
1257
+ * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
1258
1258
  * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회합니다.
1259
1259
  * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
1260
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1260
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1261
1261
  * @param {*} [options] Override http request option.
1262
1262
  * @throws {RequiredError}
1263
1263
  */
1264
1264
  listBids(limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<ListBids200Response, any, {}>>;
1265
1265
  /**
1266
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market 이 데이터를 채워 PDF 로 만들어 주는 서류입니다. 생성 API 의 `paperCodes` 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents` v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1266
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market이 데이터를 채워 PDF로 만들어 주는 서류입니다. 생성 API의 `paperCodes`에 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidRef}/contract-documents`가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1267
1267
  * @summary 거래에 필요한 계약서류 목록 조회
1268
1268
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
1269
1269
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -1272,49 +1272,49 @@ export declare class PartnerApiApi extends BaseAPI {
1272
1272
  */
1273
1273
  listExternalContractDocuments(buyerId: string, bidType: ListExternalContractDocumentsBidTypeEnum, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<ExternalContractDocumentsResponseDto, any, {}>>;
1274
1274
  /**
1275
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 걸러 다시 처리하면 됩니다. - \"이벤트가 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 같고 `attempt` 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 다음 요청의 `cursor` 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
1275
+ * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문, 수신측 응답 상태, 다음 재시도 시각이 함께 실립니다. 스코프 `webhooks:read`. - 수신측 장애로 놓친 이벤트는 `status=EXHAUSTED`로 걸러 다시 처리합니다. 웹훅의 폴링 대체 경로입니다. - 재시도마다 한 행이며 `eventId`가 같고 `attempt`만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단합니다. - 페이지네이션: 응답 `nextCursor`를 다음 요청의 `cursor`로 보냅니다. `null`이면 마지막 페이지입니다.
1276
1276
  * @summary 웹훅 전송 이력 조회
1277
1277
  * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
1278
1278
  * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
1279
1279
  * @param {number} [limit] 페이지 크기(1~200, 기본 50).
1280
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 그대로 전달합니다. 미지정 시 첫 페이지.
1281
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1280
+ * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60;를 그대로 전달합니다. 미지정 시 첫 페이지.
1281
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1282
1282
  * @param {*} [options] Override http request option.
1283
1283
  * @throws {RequiredError}
1284
1284
  */
1285
1285
  listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<ListWebhookDeliveries200Response, any, {}>>;
1286
1286
  /**
1287
- * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 을 계산해 **base64** 로 인코딩하고, `webhook-signature` 의 `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 는 공백으로 구분된 **여러 서명**을 실을 수 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 과 같은 값)도 실립니다 — 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 — 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 로 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` `{\"status\":\"ACTIVE\"}` 로 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 은 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
1287
+ * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. 스코프 `webhooks:read`. 발송이 멈춘 이유는 `status`와 `consecutiveFailures`로 확인합니다. 서명 시크릿은 실리지 않습니다. 수신측 구현 방법은 `POST /v2/webhook-endpoints` 설명에 있습니다.
1288
1288
  * @summary 웹훅 구독 목록 조회
1289
- * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1289
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60;로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1290
1290
  * @param {*} [options] Override http request option.
1291
1291
  * @throws {RequiredError}
1292
1292
  */
1293
1293
  listWebhookEndpoints(ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<ListWebhookEndpoints200Response, any, {}>>;
1294
1294
  /**
1295
- * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(FAILED)로 전환됩니다. - 유찰사유 코드와 상세가 기록됩니다. **유찰사유 값 목록(failureReasonCode 공개값):** | | 의미 | |------|------| | `ABOVE_TARGET_PRICE` | 예정가격 초과 | | `DEPT_MISMATCH` | 자격 미달 | | `NEEDS_EXPERTISE` | 전문성 필요 | | `OTHER` | 기타 (`failureReasonDetail` 필수) | | `NO_PARTICIPANT` | 참가자 없음 | | `SINGLE_PARTICIPANT` | 단독 참가 | | `LESS_THAN_TWO` | 2인 미만 | | `BELOW_MINIMUM` | 최저가 미달 | **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 를 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1295
+ * 공고를 유찰 처리합니다. 입찰 마감 상태에서 호출합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. 공고 상태가 유찰(`FAILED`)로 바뀌고 유찰사유가 기록됩니다. 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다). | `failureReasonCode` | 의미 | | --- | --- | | `ABOVE_TARGET_PRICE` | 예정가격 초과 | | `DEPT_MISMATCH` | 자격 미달 | | `NEEDS_EXPERTISE` | 전문성 필요 | | `NO_PARTICIPANT` | 참가자 없음 | | `SINGLE_PARTICIPANT` | 단독 참가 | | `LESS_THAN_TWO` | 2인 미만 | | `BELOW_MINIMUM` | 최저가 미달 | | `OTHER` | 기타(`failureReasonDetail` 필수) |
1296
1296
  * @summary 유찰 처리
1297
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1298
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1297
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1298
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1299
1299
  * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
1300
1300
  * @param {*} [options] Override http request option.
1301
1301
  * @throws {RequiredError}
1302
1302
  */
1303
1303
  markBidFailed(bidRef: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<MarkBidFailed201Response, any, {}>>;
1304
1304
  /**
1305
- * 낙찰 결과를 등록합니다. 요청의 응답은 처리 상태 `AWARDED` 반환합니다. **호출 시점:** 입찰 마감 후 낙찰자가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 낙찰자(공급사)의 응찰 건이 낙찰 처리됩니다. - 이후 **공고의 조회 상태(status)는 계약진행(CONTRACT_IN_PROGRESS)** 으로 진행합니다. `AWARDED` 라는 공고 status 존재하지 않으므로, 낙찰 여부는 `GET /v2/bids/{bidRef}/results` 의 `participants[].isWinner` 또는 `GET /v2/bids/{bidRef}` 의 status(=계약진행)로 관측하세요(`status === \'AWARDED\'` 폴링 금지). - 협상 방식(NEGOTIATION/NEGOTIATION_AUTO) 공고는 이 엔드포인트 전에 `POST /v2/bids/{bidRef}/negotiation-scores`(협상 점수평가)로 평가를 완료해야 합니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 24시간 캐시 응답 반환.
1305
+ * 낙찰 결과를 등록합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. - 입찰 마감(입찰완료) 상태에서 호출합니다. - 낙찰 공고 상태는 계약진행(`CONTRACT_IN_PROGRESS`)입니다. `AWARDED` 공고 상태는 없으므로 낙찰 여부는 `participants[].isWinner`로 판단합니다. - 협상 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) 공고는 `POST /v2/bids/{bidRef}/negotiation-scores`로 평가를 마쳐야 호출할 있습니다. - 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다). - 같은 키와 같은 body 재전송하면 24시간 동안 캐시된 응답을 돌려줍니다.
1306
1306
  * @summary 낙찰 결과 전송
1307
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1308
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1307
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1308
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1309
1309
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
1310
1310
  * @param {*} [options] Override http request option.
1311
1311
  * @throws {RequiredError}
1312
1312
  */
1313
1313
  registerAward(bidRef: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<RegisterAward201Response, any, {}>>;
1314
1314
  /**
1315
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 요청 본문에 직접 싣지 마세요 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 받고, 32자 키를 요청의 `attachments` 배열에 넣습니다.
1315
+ * 공고를 등록합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. 첨부는 방법 하나입니다. - `attachments` 원소에 `{ fileName, url }` 또는 `{ fileName, base64 }`를 그대로 넣습니다. - 여러 공고에서 재사용할 파일은 `POST /v2/files`로 먼저 올려 받은 `fileKey`를 넣습니다.
1316
1316
  * @summary 공고 등록
1317
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1317
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1318
1318
  * @param {CreateBidRequestDto} createBidRequestDto
1319
1319
  * @param {*} [options] Override http request option.
1320
1320
  * @throws {RequiredError}
@@ -1323,17 +1323,17 @@ export declare class PartnerApiApi extends BaseAPI {
1323
1323
  /**
1324
1324
  * 외부에서 맺어진 계약 1건을 씨마켓의 **세금계산서 발행 대상**으로 등록합니다. **등록 후 동선:** 발주기관이 씨마켓 [나의 계약 관리] 에서 계산서 발급을 요청하고, 공급기업이 같은 화면에서 발행합니다. 계산서의 **공급자는 공급기업, 공급받는자는 발주기관**입니다. **대금 흐름:** 씨마켓은 이 거래의 대금을 받지 않습니다 — 발행 경로만 제공합니다. **금액:** `supplyPrice` 는 **부가세를 뺀 과세 공급가액**입니다(결제창 API 가 부가세 포함가를 받는 것과 다릅니다). 과세·면세 공급가액이 모두 0 이면 400 입니다. **사전 조건:** 두 회원 ID 가 씨마켓에 실재해야 합니다. 회원 ID 가 곧 소유권이라, 없는 회원으로 등록하면 아무도 열 수 없는 계산서 대상이 됩니다. **필수 스코프:** `contracts:write`. 바인딩된 발주처 외의 발주기관을 대신하려면 대행 범위에 그 회원이 있어야 합니다. **멱등성:** `externalContractId` 가 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 대상을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
1325
1325
  * @summary 계약 발행대상 등록
1326
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1326
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1327
1327
  * @param {RegisterSemoContractRequestDto} registerSemoContractRequestDto
1328
1328
  * @param {*} [options] Override http request option.
1329
1329
  * @throws {RequiredError}
1330
1330
  */
1331
1331
  registerSemoContract(idempotencyKey: string, registerSemoContractRequestDto: RegisterSemoContractRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<SemoContractRegisteredResponseDto, any, {}>>;
1332
1332
  /**
1333
- * 한 공고의 계산서를 여러 장으로 나눠 발급해 달라고 청구합니다. 스코프 `invoices:write`. **청구만 접수합니다.** 호출이 계산서를 발행하지는 않습니다 접수된 청구는 정산 파이프라인이 처리하며, 진행 여부는 `GET /v2/bids/{bidRef}` `taxInvoiceRequested` 관측합니다. **나눠 담을 금액을 보냅니다.** `supplyAmount`(공급가액)와 `vat`(부가세)는 이번 장에 실을 금액입니다. 남은 금액을 다시 나누려면 같은 공고에 청구를 한 번 더 보냅니다 — 그때는 **새 `Idempotency-Key`** 쓰세요. 같은 키로 다시 보내면 앞선 청구의 응답이 그대로 재생됩니다. **발급 희망일**(`issueDate`)은 선택이며 미래 일자는 400 입니다. 미지정 시 서버 기본값을 씁니다.
1333
+ * 한 공고의 계산서를 여러 장으로 나눠 발급해 달라고 청구합니다. 스코프 `invoices:write` · `Idempotency-Key` 헤더 필수. - 청구만 접수합니다. 발행은 정산 파이프라인이 처리하며 진행 여부는 `GET /v2/bids/{bidRef}`의 `taxInvoiceRequested`로 확인합니다. - `supplyAmount`와 `vat`는 이번 장에 실을 금액입니다. 남은 금액을 다시 나누려면 **새 `Idempotency-Key`**로 청구합니다. 같은 키는 앞선 청구의 응답을 그대로 돌려줍니다. - `issueDate`는 선택이며 미래 일자는 400입니다.
1334
1334
  * @summary 계산서 분할 발급 청구
1335
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1336
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1335
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1336
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1337
1337
  * @param {RequestInvoiceSplitRequestDto} requestInvoiceSplitRequestDto
1338
1338
  * @param {*} [options] Override http request option.
1339
1339
  * @throws {RequiredError}
@@ -1342,67 +1342,67 @@ export declare class PartnerApiApi extends BaseAPI {
1342
1342
  /**
1343
1343
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1344
1344
  * @summary 낙찰 되돌리기
1345
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1346
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1345
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1346
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1347
1347
  * @param {RevertAwardRequestDto} revertAwardRequestDto
1348
1348
  * @param {*} [options] Override http request option.
1349
1349
  * @throws {RequiredError}
1350
1350
  */
1351
1351
  revertAward(bidRef: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<RevertAward200Response, any, {}>>;
1352
1352
  /**
1353
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
1353
+ * 서명 시크릿을 새로 발급합니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 시크릿은 이 응답에서 한 번만 나가고 `secretVersion`이 1 올라갑니다. - **옛 시크릿은 즉시 무효입니다.** 유예가 없으므로 순서를 지키세요 — ① 수신측이 옛 값과 새 값을 모두 받아들이도록 배포 → ② 이 호출 → ③ 새 반영 → ④ 옛 값 제거. - 같은 `Idempotency-Key`로 다시 부르면 새로 발급하지 않고 처음 발급한 값을 돌려줍니다(24시간).
1354
1354
  * @summary 웹훅 서명 시크릿 재발급
1355
1355
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1356
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1356
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1357
1357
  * @param {*} [options] Override http request option.
1358
1358
  * @throws {RequiredError}
1359
1359
  */
1360
1360
  rotateWebhookSecret(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<CreateWebhookEndpoint201Response, any, {}>>;
1361
1361
  /**
1362
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` `delivered: false` 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
1362
+ * 등록된 주소로 `ping` 이벤트를 1회 보내고 결과를 돌려줍니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - 수신측이 받지 못해도 응답은 200이고 `delivered: false`입니다. 원인은 `responseStatus`와 `error`로 좁힙니다. - 실제 이벤트와 같은 서명 헤더가 실리므로 검증 코드를 그대로 시험할 수 있습니다. - 다시 보내려면 `Idempotency-Key`를 쓰세요. 같은 키는 24시간 동안 직전 결과를 돌려줍니다.
1363
1363
  * @summary 웹훅 연결 확인 발송
1364
1364
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1365
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1365
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1366
1366
  * @param {*} [options] Override http request option.
1367
1367
  * @throws {RequiredError}
1368
1368
  */
1369
1369
  sendWebhookTestEvent(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<SendWebhookTestEvent200Response, any, {}>>;
1370
1370
  /**
1371
- * 협상방식(NEGOTIATION/NEGOTIATION_AUTO) 공고의 응찰자별 점수를 입력합니다. **호출 시점:** 입찰 마감 후 낙찰(`POST /v2/bids/{bidRef}/award`) 전. 협상방식 공고는 이 평가를 완료해야 낙찰에 진입할 수 있습니다. **부수효과:** - 응찰자별 기술점수(및 선택적 가격점수 override)가 기록됩니다. - `complete=true` 평가완료 게이트까지 적용돼 낙찰 진입이 가능해집니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 시 24시간 내 캐시 응답 반환.
1371
+ * 협상 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) 공고의 응찰자별 점수를 입력합니다. 스코프 `awards:write` · `Idempotency-Key` 헤더 필수. - 입찰 마감 후 낙찰(`POST /v2/bids/{bidRef}/award`) 전에 호출합니다. 협상 방식 공고는 이 평가를 마쳐야 낙찰에 진입합니다. - `complete=true`면 평가완료로 처리되어 낙찰을 호출할 있습니다. - 발주기관은 API 키로 결정됩니다(`buyerId`를 보내지 않습니다).
1372
1372
  * @summary 협상 점수평가
1373
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1374
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1373
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1374
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1375
1375
  * @param {SubmitNegotiationScoresRequestDto} submitNegotiationScoresRequestDto
1376
1376
  * @param {*} [options] Override http request option.
1377
1377
  * @throws {RequiredError}
1378
1378
  */
1379
1379
  submitNegotiationScores(bidRef: string, idempotencyKey: string, submitNegotiationScoresRequestDto: SubmitNegotiationScoresRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<SubmitNegotiationScores201Response, any, {}>>;
1380
1380
  /**
1381
- * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEditHistory=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
1381
+ * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` · `Idempotency-Key` 헤더 필수. - 진행중·초안 상태만 수정할 수 있습니다. 마감·취소된 공고는 거부됩니다. - 낙찰방법(`awardMethod`)은 수정할 없고, 참여자가 있으면 입찰방식·면허·예산·품목 일부가 잠깁니다. - 한 섹션을 수정하려면 섹션의 필수 필드를 함께 보냅니다. - `hideEditHistory=true`면 변경이력을 비공개로 남기고 노출 카운터를 올리지 않습니다.
1382
1382
  * @summary 공고 수정
1383
- * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1384
- * @param {string} ifMatch 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1385
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1383
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 연결된 발주기관 범위에서 최신 라운드 공고로 해소됩니다.
1384
+ * @param {string} ifMatch 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412로 거절되며 아무것도 수정되지 않습니다.
1385
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1386
1386
  * @param {UpdateBidRequestDto} updateBidRequestDto
1387
1387
  * @param {*} [options] Override http request option.
1388
1388
  * @throws {RequiredError}
1389
1389
  */
1390
1390
  updateBid(bidRef: string, ifMatch: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<UpdateBid200Response, any, {}>>;
1391
1391
  /**
1392
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 헤더가 없으면 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` 헤더를 빼먹었습니다. 조회 `ETag` 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1392
+ * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. 스코프 `webhooks:write` · `Idempotency-Key` 헤더 필수. - `eventTypes`는 치환입니다. 하나를 더하려면 기존 목록을 포함한 전체를 보냅니다. - `If-Match`가 필수입니다. `GET`으로 받은 `ETag`를 그대로 실으세요. 누락은 428, 사이 구독이 바뀌었으면 412이며 아무것도 수정되지 않습니다. - 연속 실패로 자동 중지된 구독은 `{\"status\":\"ACTIVE\"}`로 되살립니다. - 시크릿은 이 경로로 바뀌지 않습니다. 재발급은 `rotate-secret`입니다.
1393
1393
  * @summary 웹훅 구독 수정
1394
1394
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1395
- * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
1396
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1395
+ * @param {string} ifMatch 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412로 거절되며 아무것도 변경되지 않습니다.
1396
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1397
1397
  * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
1398
1398
  * @param {*} [options] Override http request option.
1399
1399
  * @throws {RequiredError}
1400
1400
  */
1401
1401
  updateWebhookEndpoint(endpointId: string, ifMatch: string, idempotencyKey: string, updateWebhookEndpointRequestDto: UpdateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<GetWebhookEndpoint200Response, any, {}>>;
1402
1402
  /**
1403
- * **첨부 업로드의 기본 경로입니다. 23MB 이하면 호출 하나로 끝납니다.** 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **23MB 를 넘으면 경로를 바꿔야 합니다.** 상한이 셋으로 갈립니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 이 호출 + `base64` | **23MB** (본문이 c-market 을 통과하며 base64 팽창 4/3 이 얹힘) | 1 | | 이 호출 + `url` | **30MB** (c-market 이 대신 내려받아 팽창은 없지만 서버 경유 천장은 그대로) | 1 | | `POST /v2/files/upload-url` 로 시작하는 2단계 | **100MB** (바이트가 c-market 을 지나지 않음) | 2 + 스토리지 PUT | c-market 내려받을 있는 https 주소에 파일을 올려 둘 수 있다면 `url` 이 30MB 까지를 1콜로 덮습니다. 그 이상이거나 주소를 열 수 없으면 2단계 경로를 쓰세요. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 그대로 넣으면 호출 없이 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1403
+ * 공고 첨부파일을 올리고 `fileKey`를 받습니다. 스코프 `files:write` · `Idempotency-Key` 헤더 필수. `base64`와 `url` 중 하나만 보냅니다. 받은 `fileKey`는 공고 등록·수정의 `attachments`에 넣습니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 이 호출 + `base64` | 23MB | 1 | | 이 호출 + `url` | 30MB | 1 | | `POST /v2/files/upload-url` 2단계 | 100MB | 2 + 스토리지 PUT | 공고에만 쓰는 파일이면 `POST /v2/bids`의 `attachments`에 `url`·`base64`를 직접 넣어호출을 생략할 있습니다.
1404
1404
  * @summary 공고 첨부파일 업로드 (기본)
1405
- * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;) 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1405
+ * @param {string} idempotencyKey 멱등키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때는 처음과 같은 키를 보내야** 중복 생성이 막힙니다. 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청이 됩니다. UUID v4를 만들어 연동 시스템에 저장하거나, 요청 내용에서 결정적으로 파생하세요(예: &#x60;bid-create-{구매번호}&#x60;). 같은 키와 같은 body는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1406
1406
  * @param {UploadFileRequestDto} uploadFileRequestDto
1407
1407
  * @param {*} [options] Override http request option.
1408
1408
  * @throws {RequiredError}