@cmarket/partner-sdk 33.1.0 → 35.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 (940) hide show
  1. package/README.md +14 -65
  2. package/api/oauth-api.ts +2 -2
  3. package/api/partner-v1-api.ts +2 -2
  4. package/api/partner-v2-api.ts +243 -1494
  5. package/api/well-known-api.ts +2 -2
  6. package/api.ts +2 -2
  7. package/base.ts +2 -2
  8. package/common.ts +2 -2
  9. package/configuration.ts +2 -2
  10. package/dist/api/oauth-api.d.ts +2 -2
  11. package/dist/api/oauth-api.js +2 -2
  12. package/dist/api/partner-v1-api.d.ts +2 -2
  13. package/dist/api/partner-v1-api.js +2 -2
  14. package/dist/api/partner-v2-api.d.ts +122 -678
  15. package/dist/api/partner-v2-api.js +269 -1439
  16. package/dist/api/well-known-api.d.ts +2 -2
  17. package/dist/api/well-known-api.js +2 -2
  18. package/dist/api.d.ts +2 -2
  19. package/dist/api.js +2 -2
  20. package/dist/base.d.ts +2 -2
  21. package/dist/base.js +2 -2
  22. package/dist/common.d.ts +2 -2
  23. package/dist/common.js +2 -2
  24. package/dist/configuration.d.ts +2 -2
  25. package/dist/configuration.js +2 -2
  26. package/dist/esm/api/oauth-api.d.ts +2 -2
  27. package/dist/esm/api/oauth-api.js +2 -2
  28. package/dist/esm/api/partner-v1-api.d.ts +2 -2
  29. package/dist/esm/api/partner-v1-api.js +2 -2
  30. package/dist/esm/api/partner-v2-api.d.ts +122 -678
  31. package/dist/esm/api/partner-v2-api.js +269 -1439
  32. package/dist/esm/api/well-known-api.d.ts +2 -2
  33. package/dist/esm/api/well-known-api.js +2 -2
  34. package/dist/esm/api.d.ts +2 -2
  35. package/dist/esm/api.js +2 -2
  36. package/dist/esm/base.d.ts +2 -2
  37. package/dist/esm/base.js +2 -2
  38. package/dist/esm/common.d.ts +2 -2
  39. package/dist/esm/common.js +2 -2
  40. package/dist/esm/configuration.d.ts +2 -2
  41. package/dist/esm/configuration.js +2 -2
  42. package/dist/esm/index.d.ts +2 -2
  43. package/dist/esm/index.js +2 -2
  44. package/dist/esm/models/acceptance-result-response-dto.d.ts +2 -2
  45. package/dist/esm/models/acceptance-result-response-dto.js +2 -2
  46. package/dist/esm/models/acceptance-result-v1-response-dto.d.ts +2 -2
  47. package/dist/esm/models/acceptance-result-v1-response-dto.js +2 -2
  48. package/dist/esm/models/acknowledge-products-v1-request-dto.d.ts +2 -2
  49. package/dist/esm/models/acknowledge-products-v1-request-dto.js +2 -2
  50. package/dist/esm/models/api-catalog-dto.d.ts +2 -2
  51. package/dist/esm/models/api-catalog-dto.js +2 -2
  52. package/dist/esm/models/api-catalog-entry-dto.d.ts +2 -2
  53. package/dist/esm/models/api-catalog-entry-dto.js +2 -2
  54. package/dist/esm/models/api-catalog-link-dto.d.ts +2 -2
  55. package/dist/esm/models/api-catalog-link-dto.js +2 -2
  56. package/dist/esm/models/authorization-server-metadata-dto.d.ts +2 -2
  57. package/dist/esm/models/authorization-server-metadata-dto.js +2 -2
  58. package/dist/esm/models/award-method-public.d.ts +2 -2
  59. package/dist/esm/models/award-method-public.js +2 -2
  60. package/dist/esm/models/award-registered-response-dto.d.ts +2 -2
  61. package/dist/esm/models/award-registered-response-dto.js +2 -2
  62. package/dist/esm/models/award-registered-v2-response-dto.d.ts +2 -2
  63. package/dist/esm/models/award-registered-v2-response-dto.js +2 -2
  64. package/dist/esm/models/award-reverted-v2-response-dto.d.ts +2 -2
  65. package/dist/esm/models/award-reverted-v2-response-dto.js +2 -2
  66. package/dist/esm/models/bid-acceptance-dto.d.ts +2 -2
  67. package/dist/esm/models/bid-acceptance-dto.js +2 -2
  68. package/dist/esm/models/bid-attachment-v1-dto.d.ts +2 -2
  69. package/dist/esm/models/bid-attachment-v1-dto.js +2 -2
  70. package/dist/esm/models/bid-bond-dto.d.ts +2 -2
  71. package/dist/esm/models/bid-bond-dto.js +2 -2
  72. package/dist/esm/models/bid-bond-v1-dto.d.ts +2 -2
  73. package/dist/esm/models/bid-bond-v1-dto.js +2 -2
  74. package/dist/esm/models/bid-cancelled-response-dto.d.ts +2 -2
  75. package/dist/esm/models/bid-cancelled-response-dto.js +2 -2
  76. package/dist/esm/models/bid-contact-dto.d.ts +2 -2
  77. package/dist/esm/models/bid-contact-dto.js +2 -2
  78. package/dist/esm/models/bid-contacts-dto.d.ts +2 -2
  79. package/dist/esm/models/bid-contacts-dto.js +2 -2
  80. package/dist/esm/models/bid-contract-document-dto.d.ts +2 -2
  81. package/dist/esm/models/bid-contract-document-dto.js +2 -2
  82. package/dist/esm/models/bid-contract-documents-batch-v1-request-dto.d.ts +2 -2
  83. package/dist/esm/models/bid-contract-documents-batch-v1-request-dto.js +2 -2
  84. package/dist/esm/models/bid-contract-documents-v1-response-dto.d.ts +2 -2
  85. package/dist/esm/models/bid-contract-documents-v1-response-dto.js +2 -2
  86. package/dist/esm/models/bid-created-response-dto.d.ts +2 -2
  87. package/dist/esm/models/bid-created-response-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 +2 -2
  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-document-v1-dto.d.ts +2 -2
  95. package/dist/esm/models/bid-document-v1-dto.js +2 -2
  96. package/dist/esm/models/bid-failed-response-dto.d.ts +2 -2
  97. package/dist/esm/models/bid-failed-response-dto.js +2 -2
  98. package/dist/esm/models/bid-failed-v2-response-dto.d.ts +2 -2
  99. package/dist/esm/models/bid-failed-v2-response-dto.js +2 -2
  100. package/dist/esm/models/bid-failure-reason.d.ts +2 -2
  101. package/dist/esm/models/bid-failure-reason.js +2 -2
  102. package/dist/esm/models/bid-item-dto.d.ts +2 -2
  103. package/dist/esm/models/bid-item-dto.js +2 -2
  104. package/dist/esm/models/bid-item-v1-dto.d.ts +2 -2
  105. package/dist/esm/models/bid-item-v1-dto.js +2 -2
  106. package/dist/esm/models/bid-lifecycle-dto.d.ts +2 -2
  107. package/dist/esm/models/bid-lifecycle-dto.js +2 -2
  108. package/dist/esm/models/bid-manager-dto.d.ts +2 -2
  109. package/dist/esm/models/bid-manager-dto.js +2 -2
  110. package/dist/esm/models/bid-manager-v1-dto.d.ts +2 -2
  111. package/dist/esm/models/bid-manager-v1-dto.js +2 -2
  112. package/dist/esm/models/bid-payment-terms-dto.d.ts +2 -2
  113. package/dist/esm/models/bid-payment-terms-dto.js +2 -2
  114. package/dist/esm/models/bid-product-dto.d.ts +2 -2
  115. package/dist/esm/models/bid-product-dto.js +2 -2
  116. package/dist/esm/models/bid-public-status.d.ts +2 -2
  117. package/dist/esm/models/bid-public-status.js +2 -2
  118. package/dist/esm/models/bid-registered-response-dto.d.ts +2 -2
  119. package/dist/esm/models/bid-registered-response-dto.js +2 -2
  120. package/dist/esm/models/bid-result-participant-attachment-dto.d.ts +2 -2
  121. package/dist/esm/models/bid-result-participant-attachment-dto.js +2 -2
  122. package/dist/esm/models/bid-result-participant-dto.d.ts +2 -2
  123. package/dist/esm/models/bid-result-participant-dto.js +2 -2
  124. package/dist/esm/models/bid-result-v1-attachment-dto.d.ts +2 -2
  125. package/dist/esm/models/bid-result-v1-attachment-dto.js +2 -2
  126. package/dist/esm/models/bid-result-v1-bid-product-info-dto.d.ts +2 -2
  127. package/dist/esm/models/bid-result-v1-bid-product-info-dto.js +2 -2
  128. package/dist/esm/models/bid-result-v1-participant-dto.d.ts +2 -2
  129. package/dist/esm/models/bid-result-v1-participant-dto.js +2 -2
  130. package/dist/esm/models/bid-result-v1-product-dto.d.ts +2 -2
  131. package/dist/esm/models/bid-result-v1-product-dto.js +2 -2
  132. package/dist/esm/models/bid-results-batch-v1-request-dto.d.ts +2 -2
  133. package/dist/esm/models/bid-results-batch-v1-request-dto.js +2 -2
  134. package/dist/esm/models/bid-results-response-dto.d.ts +2 -2
  135. package/dist/esm/models/bid-results-response-dto.js +2 -2
  136. package/dist/esm/models/bid-results-v1-response-dto.d.ts +2 -2
  137. package/dist/esm/models/bid-results-v1-response-dto.js +2 -2
  138. package/dist/esm/models/bid-settlement-line-item-dto.d.ts +2 -2
  139. package/dist/esm/models/bid-settlement-line-item-dto.js +2 -2
  140. package/dist/esm/models/bid-settlement-participant-dto.d.ts +2 -2
  141. package/dist/esm/models/bid-settlement-participant-dto.js +2 -2
  142. package/dist/esm/models/bid-settlement-response-dto.d.ts +2 -2
  143. package/dist/esm/models/bid-settlement-response-dto.js +2 -2
  144. package/dist/esm/models/bid-statement-response-dto.d.ts +2 -2
  145. package/dist/esm/models/bid-statement-response-dto.js +2 -2
  146. package/dist/esm/models/bid-statement-v1-response-dto.d.ts +2 -2
  147. package/dist/esm/models/bid-statement-v1-response-dto.js +2 -2
  148. package/dist/esm/models/bid-status.d.ts +2 -2
  149. package/dist/esm/models/bid-status.js +2 -2
  150. package/dist/esm/models/bid-summary-dto.d.ts +2 -2
  151. package/dist/esm/models/bid-summary-dto.js +2 -2
  152. package/dist/esm/models/bid-updated-response-dto.d.ts +2 -2
  153. package/dist/esm/models/bid-updated-response-dto.js +2 -2
  154. package/dist/esm/models/cancel-bid-request-dto.d.ts +2 -2
  155. package/dist/esm/models/cancel-bid-request-dto.js +2 -2
  156. package/dist/esm/models/cancel-bid200-response.d.ts +2 -2
  157. package/dist/esm/models/cancel-bid200-response.js +2 -2
  158. package/dist/esm/models/card-payment-request-response-dto.d.ts +2 -2
  159. package/dist/esm/models/card-payment-request-response-dto.js +2 -2
  160. package/dist/esm/models/complete-acceptance-request-dto.d.ts +2 -2
  161. package/dist/esm/models/complete-acceptance-request-dto.js +2 -2
  162. package/dist/esm/models/complete-acceptance-v1-request-dto.d.ts +2 -2
  163. package/dist/esm/models/complete-acceptance-v1-request-dto.js +2 -2
  164. package/dist/esm/models/complete-acceptance200-response.d.ts +2 -2
  165. package/dist/esm/models/complete-acceptance200-response.js +2 -2
  166. package/dist/esm/models/complete-invoice200-response.d.ts +2 -2
  167. package/dist/esm/models/complete-invoice200-response.js +2 -2
  168. package/dist/esm/models/contract-document-item-dto.d.ts +2 -2
  169. package/dist/esm/models/contract-document-item-dto.js +2 -2
  170. package/dist/esm/models/contract-restriction-confirm-input-dto.d.ts +2 -2
  171. package/dist/esm/models/contract-restriction-confirm-input-dto.js +2 -2
  172. package/dist/esm/models/create-bid-request-dto.d.ts +2 -2
  173. package/dist/esm/models/create-bid-request-dto.js +2 -2
  174. package/dist/esm/models/create-bid-v1-request-dto.d.ts +2 -2
  175. package/dist/esm/models/create-bid-v1-request-dto.js +2 -2
  176. package/dist/esm/models/create-card-payment-request-dto.d.ts +2 -2
  177. package/dist/esm/models/create-card-payment-request-dto.js +2 -2
  178. package/dist/esm/models/create-external-contract-documents-request-dto.d.ts +2 -2
  179. package/dist/esm/models/create-external-contract-documents-request-dto.js +2 -2
  180. package/dist/esm/models/create-external-contract-documents-response-dto.d.ts +2 -2
  181. package/dist/esm/models/create-external-contract-documents-response-dto.js +2 -2
  182. package/dist/esm/models/external-contract-document-item-dto.d.ts +2 -2
  183. package/dist/esm/models/external-contract-document-item-dto.js +2 -2
  184. package/dist/esm/models/external-contract-documents-response-dto.d.ts +2 -2
  185. package/dist/esm/models/external-contract-documents-response-dto.js +2 -2
  186. package/dist/esm/models/external-contract-item-dto.d.ts +2 -2
  187. package/dist/esm/models/external-contract-item-dto.js +2 -2
  188. package/dist/esm/models/external-contract-snapshot-dto.d.ts +2 -2
  189. package/dist/esm/models/external-contract-snapshot-dto.js +2 -2
  190. package/dist/esm/models/external-document-inputs-dto.d.ts +2 -2
  191. package/dist/esm/models/external-document-inputs-dto.js +2 -2
  192. package/dist/esm/models/file-meta-response-dto.d.ts +2 -2
  193. package/dist/esm/models/file-meta-response-dto.js +2 -2
  194. package/dist/esm/models/file-uploaded-response-dto.d.ts +2 -2
  195. package/dist/esm/models/file-uploaded-response-dto.js +2 -2
  196. package/dist/esm/models/file-uploaded-v1-response-dto.d.ts +2 -2
  197. package/dist/esm/models/file-uploaded-v1-response-dto.js +2 -2
  198. package/dist/esm/models/generated-external-contract-document-dto.d.ts +2 -2
  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/health-controller-check200-response.d.ts +2 -2
  209. package/dist/esm/models/health-controller-check200-response.js +2 -2
  210. package/dist/esm/models/health-response-dto.d.ts +2 -2
  211. package/dist/esm/models/health-response-dto.js +2 -2
  212. package/dist/esm/models/hierarchical-region-dto.d.ts +2 -2
  213. package/dist/esm/models/hierarchical-region-dto.js +2 -2
  214. package/dist/esm/models/hierarchical-region-v1-dto.d.ts +2 -2
  215. package/dist/esm/models/hierarchical-region-v1-dto.js +2 -2
  216. package/dist/esm/models/index.d.ts +0 -36
  217. package/dist/esm/models/index.js +0 -36
  218. package/dist/esm/models/introspect-request-dto.d.ts +2 -2
  219. package/dist/esm/models/introspect-request-dto.js +2 -2
  220. package/dist/esm/models/introspection-response-dto.d.ts +2 -2
  221. package/dist/esm/models/introspection-response-dto.js +2 -2
  222. package/dist/esm/models/invalid-param-dto.d.ts +2 -2
  223. package/dist/esm/models/invalid-param-dto.js +2 -2
  224. package/dist/esm/models/invoice-completed-response-dto.d.ts +2 -2
  225. package/dist/esm/models/invoice-completed-response-dto.js +2 -2
  226. package/dist/esm/models/list-bid-results200-response.d.ts +2 -2
  227. package/dist/esm/models/list-bid-results200-response.js +2 -2
  228. package/dist/esm/models/list-bids-response-dto.d.ts +2 -2
  229. package/dist/esm/models/list-bids-response-dto.js +2 -2
  230. package/dist/esm/models/list-bids200-response.d.ts +2 -2
  231. package/dist/esm/models/list-bids200-response.js +2 -2
  232. package/dist/esm/models/mark-bid-failed-request-dto.d.ts +2 -2
  233. package/dist/esm/models/mark-bid-failed-request-dto.js +2 -2
  234. package/dist/esm/models/mark-bid-failed-v1-request-dto.d.ts +2 -2
  235. package/dist/esm/models/mark-bid-failed-v1-request-dto.js +2 -2
  236. package/dist/esm/models/mark-bid-failed201-response.d.ts +2 -2
  237. package/dist/esm/models/mark-bid-failed201-response.js +2 -2
  238. package/dist/esm/models/negotiation-score-v1-dto.d.ts +2 -2
  239. package/dist/esm/models/negotiation-score-v1-dto.js +2 -2
  240. package/dist/esm/models/negotiation-scored-response-dto.d.ts +2 -2
  241. package/dist/esm/models/negotiation-scored-response-dto.js +2 -2
  242. package/dist/esm/models/oauth-error-response-dto.d.ts +2 -2
  243. package/dist/esm/models/oauth-error-response-dto.js +2 -2
  244. package/dist/esm/models/preconditions-dto.d.ts +2 -2
  245. package/dist/esm/models/preconditions-dto.js +2 -2
  246. package/dist/esm/models/preconditions-v1-dto.d.ts +2 -2
  247. package/dist/esm/models/preconditions-v1-dto.js +2 -2
  248. package/dist/esm/models/problem-details-dto.d.ts +2 -2
  249. package/dist/esm/models/problem-details-dto.js +2 -2
  250. package/dist/esm/models/product-receipt-v1-response-dto.d.ts +2 -2
  251. package/dist/esm/models/product-receipt-v1-response-dto.js +2 -2
  252. package/dist/esm/models/product-v1-response-dto.d.ts +2 -2
  253. package/dist/esm/models/product-v1-response-dto.js +2 -2
  254. package/dist/esm/models/protected-resource-metadata-dto.d.ts +2 -2
  255. package/dist/esm/models/protected-resource-metadata-dto.js +2 -2
  256. package/dist/esm/models/register-award-request-dto.d.ts +2 -2
  257. package/dist/esm/models/register-award-request-dto.js +2 -2
  258. package/dist/esm/models/register-award-v1-request-dto.d.ts +2 -2
  259. package/dist/esm/models/register-award-v1-request-dto.js +2 -2
  260. package/dist/esm/models/register-award201-response.d.ts +2 -2
  261. package/dist/esm/models/register-award201-response.js +2 -2
  262. package/dist/esm/models/register-bid201-response.d.ts +2 -2
  263. package/dist/esm/models/register-bid201-response.js +2 -2
  264. package/dist/esm/models/register-semo-contract-request-dto.d.ts +2 -2
  265. package/dist/esm/models/register-semo-contract-request-dto.js +2 -2
  266. package/dist/esm/models/request-split-invoice-v1-request-dto.d.ts +2 -2
  267. package/dist/esm/models/request-split-invoice-v1-request-dto.js +2 -2
  268. package/dist/esm/models/retiree-roster-input-dto.d.ts +2 -2
  269. package/dist/esm/models/retiree-roster-input-dto.js +2 -2
  270. package/dist/esm/models/retiree-roster-row-dto.d.ts +2 -2
  271. package/dist/esm/models/retiree-roster-row-dto.js +2 -2
  272. package/dist/esm/models/revert-award-request-dto.d.ts +2 -2
  273. package/dist/esm/models/revert-award-request-dto.js +2 -2
  274. package/dist/esm/models/revert-award200-response.d.ts +2 -2
  275. package/dist/esm/models/revert-award200-response.js +2 -2
  276. package/dist/esm/models/revoke-request-dto.d.ts +2 -2
  277. package/dist/esm/models/revoke-request-dto.js +2 -2
  278. package/dist/esm/models/semo-contract-registered-response-dto.d.ts +2 -2
  279. package/dist/esm/models/semo-contract-registered-response-dto.js +2 -2
  280. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.d.ts +2 -2
  281. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.js +2 -2
  282. package/dist/esm/models/split-invoice-v1-response-dto.d.ts +2 -2
  283. package/dist/esm/models/split-invoice-v1-response-dto.js +2 -2
  284. package/dist/esm/models/statement-document-dto.d.ts +2 -2
  285. package/dist/esm/models/statement-document-dto.js +2 -2
  286. package/dist/esm/models/statement-product-dto.d.ts +2 -2
  287. package/dist/esm/models/statement-product-dto.js +2 -2
  288. package/dist/esm/models/statement-v1-document-dto.d.ts +2 -2
  289. package/dist/esm/models/statement-v1-document-dto.js +2 -2
  290. package/dist/esm/models/statement-v1-product-dto.d.ts +2 -2
  291. package/dist/esm/models/statement-v1-product-dto.js +2 -2
  292. package/dist/esm/models/submit-negotiation-scores-v1-request-dto.d.ts +2 -2
  293. package/dist/esm/models/submit-negotiation-scores-v1-request-dto.js +2 -2
  294. package/dist/esm/models/supplier-card-payable-response-dto.d.ts +2 -2
  295. package/dist/esm/models/supplier-card-payable-response-dto.js +2 -2
  296. package/dist/esm/models/supplier-tax-type.d.ts +2 -2
  297. package/dist/esm/models/supplier-tax-type.js +2 -2
  298. package/dist/esm/models/token-request-dto.d.ts +2 -2
  299. package/dist/esm/models/token-request-dto.js +2 -2
  300. package/dist/esm/models/token-response-dto.d.ts +2 -2
  301. package/dist/esm/models/token-response-dto.js +2 -2
  302. package/dist/esm/models/update-bid-request-dto.d.ts +2 -2
  303. package/dist/esm/models/update-bid-request-dto.js +2 -2
  304. package/dist/esm/models/update-bid200-response.d.ts +2 -2
  305. package/dist/esm/models/update-bid200-response.js +2 -2
  306. package/dist/esm/models/upload-file-request-dto.d.ts +2 -2
  307. package/dist/esm/models/upload-file-request-dto.js +2 -2
  308. package/dist/esm/models/upload-file-v1-request-dto.d.ts +2 -2
  309. package/dist/esm/models/upload-file-v1-request-dto.js +2 -2
  310. package/dist/esm/models/upload-file201-response.d.ts +2 -2
  311. package/dist/esm/models/upload-file201-response.js +2 -2
  312. package/dist/index.d.ts +2 -2
  313. package/dist/index.js +2 -2
  314. package/dist/models/acceptance-result-response-dto.d.ts +2 -2
  315. package/dist/models/acceptance-result-response-dto.js +2 -2
  316. package/dist/models/acceptance-result-v1-response-dto.d.ts +2 -2
  317. package/dist/models/acceptance-result-v1-response-dto.js +2 -2
  318. package/dist/models/acknowledge-products-v1-request-dto.d.ts +2 -2
  319. package/dist/models/acknowledge-products-v1-request-dto.js +2 -2
  320. package/dist/models/api-catalog-dto.d.ts +2 -2
  321. package/dist/models/api-catalog-dto.js +2 -2
  322. package/dist/models/api-catalog-entry-dto.d.ts +2 -2
  323. package/dist/models/api-catalog-entry-dto.js +2 -2
  324. package/dist/models/api-catalog-link-dto.d.ts +2 -2
  325. package/dist/models/api-catalog-link-dto.js +2 -2
  326. package/dist/models/authorization-server-metadata-dto.d.ts +2 -2
  327. package/dist/models/authorization-server-metadata-dto.js +2 -2
  328. package/dist/models/award-method-public.d.ts +2 -2
  329. package/dist/models/award-method-public.js +2 -2
  330. package/dist/models/award-registered-response-dto.d.ts +2 -2
  331. package/dist/models/award-registered-response-dto.js +2 -2
  332. package/dist/models/award-registered-v2-response-dto.d.ts +2 -2
  333. package/dist/models/award-registered-v2-response-dto.js +2 -2
  334. package/dist/models/award-reverted-v2-response-dto.d.ts +2 -2
  335. package/dist/models/award-reverted-v2-response-dto.js +2 -2
  336. package/dist/models/bid-acceptance-dto.d.ts +2 -2
  337. package/dist/models/bid-acceptance-dto.js +2 -2
  338. package/dist/models/bid-attachment-v1-dto.d.ts +2 -2
  339. package/dist/models/bid-attachment-v1-dto.js +2 -2
  340. package/dist/models/bid-bond-dto.d.ts +2 -2
  341. package/dist/models/bid-bond-dto.js +2 -2
  342. package/dist/models/bid-bond-v1-dto.d.ts +2 -2
  343. package/dist/models/bid-bond-v1-dto.js +2 -2
  344. package/dist/models/bid-cancelled-response-dto.d.ts +2 -2
  345. package/dist/models/bid-cancelled-response-dto.js +2 -2
  346. package/dist/models/bid-contact-dto.d.ts +2 -2
  347. package/dist/models/bid-contact-dto.js +2 -2
  348. package/dist/models/bid-contacts-dto.d.ts +2 -2
  349. package/dist/models/bid-contacts-dto.js +2 -2
  350. package/dist/models/bid-contract-document-dto.d.ts +2 -2
  351. package/dist/models/bid-contract-document-dto.js +2 -2
  352. package/dist/models/bid-contract-documents-batch-v1-request-dto.d.ts +2 -2
  353. package/dist/models/bid-contract-documents-batch-v1-request-dto.js +2 -2
  354. package/dist/models/bid-contract-documents-v1-response-dto.d.ts +2 -2
  355. package/dist/models/bid-contract-documents-v1-response-dto.js +2 -2
  356. package/dist/models/bid-created-response-dto.d.ts +2 -2
  357. package/dist/models/bid-created-response-dto.js +2 -2
  358. package/dist/models/bid-delivery-terms-dto.d.ts +2 -2
  359. package/dist/models/bid-delivery-terms-dto.js +2 -2
  360. package/dist/models/bid-detail-response-dto.d.ts +2 -2
  361. package/dist/models/bid-detail-response-dto.js +2 -2
  362. package/dist/models/bid-document-dto.d.ts +2 -2
  363. package/dist/models/bid-document-dto.js +2 -2
  364. package/dist/models/bid-document-v1-dto.d.ts +2 -2
  365. package/dist/models/bid-document-v1-dto.js +2 -2
  366. package/dist/models/bid-failed-response-dto.d.ts +2 -2
  367. package/dist/models/bid-failed-response-dto.js +2 -2
  368. package/dist/models/bid-failed-v2-response-dto.d.ts +2 -2
  369. package/dist/models/bid-failed-v2-response-dto.js +2 -2
  370. package/dist/models/bid-failure-reason.d.ts +2 -2
  371. package/dist/models/bid-failure-reason.js +2 -2
  372. package/dist/models/bid-item-dto.d.ts +2 -2
  373. package/dist/models/bid-item-dto.js +2 -2
  374. package/dist/models/bid-item-v1-dto.d.ts +2 -2
  375. package/dist/models/bid-item-v1-dto.js +2 -2
  376. package/dist/models/bid-lifecycle-dto.d.ts +2 -2
  377. package/dist/models/bid-lifecycle-dto.js +2 -2
  378. package/dist/models/bid-manager-dto.d.ts +2 -2
  379. package/dist/models/bid-manager-dto.js +2 -2
  380. package/dist/models/bid-manager-v1-dto.d.ts +2 -2
  381. package/dist/models/bid-manager-v1-dto.js +2 -2
  382. package/dist/models/bid-payment-terms-dto.d.ts +2 -2
  383. package/dist/models/bid-payment-terms-dto.js +2 -2
  384. package/dist/models/bid-product-dto.d.ts +2 -2
  385. package/dist/models/bid-product-dto.js +2 -2
  386. package/dist/models/bid-public-status.d.ts +2 -2
  387. package/dist/models/bid-public-status.js +2 -2
  388. package/dist/models/bid-registered-response-dto.d.ts +2 -2
  389. package/dist/models/bid-registered-response-dto.js +2 -2
  390. package/dist/models/bid-result-participant-attachment-dto.d.ts +2 -2
  391. package/dist/models/bid-result-participant-attachment-dto.js +2 -2
  392. package/dist/models/bid-result-participant-dto.d.ts +2 -2
  393. package/dist/models/bid-result-participant-dto.js +2 -2
  394. package/dist/models/bid-result-v1-attachment-dto.d.ts +2 -2
  395. package/dist/models/bid-result-v1-attachment-dto.js +2 -2
  396. package/dist/models/bid-result-v1-bid-product-info-dto.d.ts +2 -2
  397. package/dist/models/bid-result-v1-bid-product-info-dto.js +2 -2
  398. package/dist/models/bid-result-v1-participant-dto.d.ts +2 -2
  399. package/dist/models/bid-result-v1-participant-dto.js +2 -2
  400. package/dist/models/bid-result-v1-product-dto.d.ts +2 -2
  401. package/dist/models/bid-result-v1-product-dto.js +2 -2
  402. package/dist/models/bid-results-batch-v1-request-dto.d.ts +2 -2
  403. package/dist/models/bid-results-batch-v1-request-dto.js +2 -2
  404. package/dist/models/bid-results-response-dto.d.ts +2 -2
  405. package/dist/models/bid-results-response-dto.js +2 -2
  406. package/dist/models/bid-results-v1-response-dto.d.ts +2 -2
  407. package/dist/models/bid-results-v1-response-dto.js +2 -2
  408. package/dist/models/bid-settlement-line-item-dto.d.ts +2 -2
  409. package/dist/models/bid-settlement-line-item-dto.js +2 -2
  410. package/dist/models/bid-settlement-participant-dto.d.ts +2 -2
  411. package/dist/models/bid-settlement-participant-dto.js +2 -2
  412. package/dist/models/bid-settlement-response-dto.d.ts +2 -2
  413. package/dist/models/bid-settlement-response-dto.js +2 -2
  414. package/dist/models/bid-statement-response-dto.d.ts +2 -2
  415. package/dist/models/bid-statement-response-dto.js +2 -2
  416. package/dist/models/bid-statement-v1-response-dto.d.ts +2 -2
  417. package/dist/models/bid-statement-v1-response-dto.js +2 -2
  418. package/dist/models/bid-status.d.ts +2 -2
  419. package/dist/models/bid-status.js +2 -2
  420. package/dist/models/bid-summary-dto.d.ts +2 -2
  421. package/dist/models/bid-summary-dto.js +2 -2
  422. package/dist/models/bid-updated-response-dto.d.ts +2 -2
  423. package/dist/models/bid-updated-response-dto.js +2 -2
  424. package/dist/models/cancel-bid-request-dto.d.ts +2 -2
  425. package/dist/models/cancel-bid-request-dto.js +2 -2
  426. package/dist/models/cancel-bid200-response.d.ts +2 -2
  427. package/dist/models/cancel-bid200-response.js +2 -2
  428. package/dist/models/card-payment-request-response-dto.d.ts +2 -2
  429. package/dist/models/card-payment-request-response-dto.js +2 -2
  430. package/dist/models/complete-acceptance-request-dto.d.ts +2 -2
  431. package/dist/models/complete-acceptance-request-dto.js +2 -2
  432. package/dist/models/complete-acceptance-v1-request-dto.d.ts +2 -2
  433. package/dist/models/complete-acceptance-v1-request-dto.js +2 -2
  434. package/dist/models/complete-acceptance200-response.d.ts +2 -2
  435. package/dist/models/complete-acceptance200-response.js +2 -2
  436. package/dist/models/complete-invoice200-response.d.ts +2 -2
  437. package/dist/models/complete-invoice200-response.js +2 -2
  438. package/dist/models/contract-document-item-dto.d.ts +2 -2
  439. package/dist/models/contract-document-item-dto.js +2 -2
  440. package/dist/models/contract-restriction-confirm-input-dto.d.ts +2 -2
  441. package/dist/models/contract-restriction-confirm-input-dto.js +2 -2
  442. package/dist/models/create-bid-request-dto.d.ts +2 -2
  443. package/dist/models/create-bid-request-dto.js +2 -2
  444. package/dist/models/create-bid-v1-request-dto.d.ts +2 -2
  445. package/dist/models/create-bid-v1-request-dto.js +2 -2
  446. package/dist/models/create-card-payment-request-dto.d.ts +2 -2
  447. package/dist/models/create-card-payment-request-dto.js +2 -2
  448. package/dist/models/create-external-contract-documents-request-dto.d.ts +2 -2
  449. package/dist/models/create-external-contract-documents-request-dto.js +2 -2
  450. package/dist/models/create-external-contract-documents-response-dto.d.ts +2 -2
  451. package/dist/models/create-external-contract-documents-response-dto.js +2 -2
  452. package/dist/models/external-contract-document-item-dto.d.ts +2 -2
  453. package/dist/models/external-contract-document-item-dto.js +2 -2
  454. package/dist/models/external-contract-documents-response-dto.d.ts +2 -2
  455. package/dist/models/external-contract-documents-response-dto.js +2 -2
  456. package/dist/models/external-contract-item-dto.d.ts +2 -2
  457. package/dist/models/external-contract-item-dto.js +2 -2
  458. package/dist/models/external-contract-snapshot-dto.d.ts +2 -2
  459. package/dist/models/external-contract-snapshot-dto.js +2 -2
  460. package/dist/models/external-document-inputs-dto.d.ts +2 -2
  461. package/dist/models/external-document-inputs-dto.js +2 -2
  462. package/dist/models/file-meta-response-dto.d.ts +2 -2
  463. package/dist/models/file-meta-response-dto.js +2 -2
  464. package/dist/models/file-uploaded-response-dto.d.ts +2 -2
  465. package/dist/models/file-uploaded-response-dto.js +2 -2
  466. package/dist/models/file-uploaded-v1-response-dto.d.ts +2 -2
  467. package/dist/models/file-uploaded-v1-response-dto.js +2 -2
  468. package/dist/models/generated-external-contract-document-dto.d.ts +2 -2
  469. package/dist/models/generated-external-contract-document-dto.js +2 -2
  470. package/dist/models/get-bid-settlement200-response.d.ts +2 -2
  471. package/dist/models/get-bid-settlement200-response.js +2 -2
  472. package/dist/models/get-bid-statement200-response.d.ts +2 -2
  473. package/dist/models/get-bid-statement200-response.js +2 -2
  474. package/dist/models/get-bid200-response.d.ts +2 -2
  475. package/dist/models/get-bid200-response.js +2 -2
  476. package/dist/models/get-file-meta200-response.d.ts +2 -2
  477. package/dist/models/get-file-meta200-response.js +2 -2
  478. package/dist/models/health-controller-check200-response.d.ts +2 -2
  479. package/dist/models/health-controller-check200-response.js +2 -2
  480. package/dist/models/health-response-dto.d.ts +2 -2
  481. package/dist/models/health-response-dto.js +2 -2
  482. package/dist/models/hierarchical-region-dto.d.ts +2 -2
  483. package/dist/models/hierarchical-region-dto.js +2 -2
  484. package/dist/models/hierarchical-region-v1-dto.d.ts +2 -2
  485. package/dist/models/hierarchical-region-v1-dto.js +2 -2
  486. package/dist/models/index.d.ts +0 -36
  487. package/dist/models/index.js +0 -36
  488. package/dist/models/introspect-request-dto.d.ts +2 -2
  489. package/dist/models/introspect-request-dto.js +2 -2
  490. package/dist/models/introspection-response-dto.d.ts +2 -2
  491. package/dist/models/introspection-response-dto.js +2 -2
  492. package/dist/models/invalid-param-dto.d.ts +2 -2
  493. package/dist/models/invalid-param-dto.js +2 -2
  494. package/dist/models/invoice-completed-response-dto.d.ts +2 -2
  495. package/dist/models/invoice-completed-response-dto.js +2 -2
  496. package/dist/models/list-bid-results200-response.d.ts +2 -2
  497. package/dist/models/list-bid-results200-response.js +2 -2
  498. package/dist/models/list-bids-response-dto.d.ts +2 -2
  499. package/dist/models/list-bids-response-dto.js +2 -2
  500. package/dist/models/list-bids200-response.d.ts +2 -2
  501. package/dist/models/list-bids200-response.js +2 -2
  502. package/dist/models/mark-bid-failed-request-dto.d.ts +2 -2
  503. package/dist/models/mark-bid-failed-request-dto.js +2 -2
  504. package/dist/models/mark-bid-failed-v1-request-dto.d.ts +2 -2
  505. package/dist/models/mark-bid-failed-v1-request-dto.js +2 -2
  506. package/dist/models/mark-bid-failed201-response.d.ts +2 -2
  507. package/dist/models/mark-bid-failed201-response.js +2 -2
  508. package/dist/models/negotiation-score-v1-dto.d.ts +2 -2
  509. package/dist/models/negotiation-score-v1-dto.js +2 -2
  510. package/dist/models/negotiation-scored-response-dto.d.ts +2 -2
  511. package/dist/models/negotiation-scored-response-dto.js +2 -2
  512. package/dist/models/oauth-error-response-dto.d.ts +2 -2
  513. package/dist/models/oauth-error-response-dto.js +2 -2
  514. package/dist/models/preconditions-dto.d.ts +2 -2
  515. package/dist/models/preconditions-dto.js +2 -2
  516. package/dist/models/preconditions-v1-dto.d.ts +2 -2
  517. package/dist/models/preconditions-v1-dto.js +2 -2
  518. package/dist/models/problem-details-dto.d.ts +2 -2
  519. package/dist/models/problem-details-dto.js +2 -2
  520. package/dist/models/product-receipt-v1-response-dto.d.ts +2 -2
  521. package/dist/models/product-receipt-v1-response-dto.js +2 -2
  522. package/dist/models/product-v1-response-dto.d.ts +2 -2
  523. package/dist/models/product-v1-response-dto.js +2 -2
  524. package/dist/models/protected-resource-metadata-dto.d.ts +2 -2
  525. package/dist/models/protected-resource-metadata-dto.js +2 -2
  526. package/dist/models/register-award-request-dto.d.ts +2 -2
  527. package/dist/models/register-award-request-dto.js +2 -2
  528. package/dist/models/register-award-v1-request-dto.d.ts +2 -2
  529. package/dist/models/register-award-v1-request-dto.js +2 -2
  530. package/dist/models/register-award201-response.d.ts +2 -2
  531. package/dist/models/register-award201-response.js +2 -2
  532. package/dist/models/register-bid201-response.d.ts +2 -2
  533. package/dist/models/register-bid201-response.js +2 -2
  534. package/dist/models/register-semo-contract-request-dto.d.ts +2 -2
  535. package/dist/models/register-semo-contract-request-dto.js +2 -2
  536. package/dist/models/request-split-invoice-v1-request-dto.d.ts +2 -2
  537. package/dist/models/request-split-invoice-v1-request-dto.js +2 -2
  538. package/dist/models/retiree-roster-input-dto.d.ts +2 -2
  539. package/dist/models/retiree-roster-input-dto.js +2 -2
  540. package/dist/models/retiree-roster-row-dto.d.ts +2 -2
  541. package/dist/models/retiree-roster-row-dto.js +2 -2
  542. package/dist/models/revert-award-request-dto.d.ts +2 -2
  543. package/dist/models/revert-award-request-dto.js +2 -2
  544. package/dist/models/revert-award200-response.d.ts +2 -2
  545. package/dist/models/revert-award200-response.js +2 -2
  546. package/dist/models/revoke-request-dto.d.ts +2 -2
  547. package/dist/models/revoke-request-dto.js +2 -2
  548. package/dist/models/semo-contract-registered-response-dto.d.ts +2 -2
  549. package/dist/models/semo-contract-registered-response-dto.js +2 -2
  550. package/dist/models/semo-contract-taxinvoice-status-response-dto.d.ts +2 -2
  551. package/dist/models/semo-contract-taxinvoice-status-response-dto.js +2 -2
  552. package/dist/models/split-invoice-v1-response-dto.d.ts +2 -2
  553. package/dist/models/split-invoice-v1-response-dto.js +2 -2
  554. package/dist/models/statement-document-dto.d.ts +2 -2
  555. package/dist/models/statement-document-dto.js +2 -2
  556. package/dist/models/statement-product-dto.d.ts +2 -2
  557. package/dist/models/statement-product-dto.js +2 -2
  558. package/dist/models/statement-v1-document-dto.d.ts +2 -2
  559. package/dist/models/statement-v1-document-dto.js +2 -2
  560. package/dist/models/statement-v1-product-dto.d.ts +2 -2
  561. package/dist/models/statement-v1-product-dto.js +2 -2
  562. package/dist/models/submit-negotiation-scores-v1-request-dto.d.ts +2 -2
  563. package/dist/models/submit-negotiation-scores-v1-request-dto.js +2 -2
  564. package/dist/models/supplier-card-payable-response-dto.d.ts +2 -2
  565. package/dist/models/supplier-card-payable-response-dto.js +2 -2
  566. package/dist/models/supplier-tax-type.d.ts +2 -2
  567. package/dist/models/supplier-tax-type.js +2 -2
  568. package/dist/models/token-request-dto.d.ts +2 -2
  569. package/dist/models/token-request-dto.js +2 -2
  570. package/dist/models/token-response-dto.d.ts +2 -2
  571. package/dist/models/token-response-dto.js +2 -2
  572. package/dist/models/update-bid-request-dto.d.ts +2 -2
  573. package/dist/models/update-bid-request-dto.js +2 -2
  574. package/dist/models/update-bid200-response.d.ts +2 -2
  575. package/dist/models/update-bid200-response.js +2 -2
  576. package/dist/models/upload-file-request-dto.d.ts +2 -2
  577. package/dist/models/upload-file-request-dto.js +2 -2
  578. package/dist/models/upload-file-v1-request-dto.d.ts +2 -2
  579. package/dist/models/upload-file-v1-request-dto.js +2 -2
  580. package/dist/models/upload-file201-response.d.ts +2 -2
  581. package/dist/models/upload-file201-response.js +2 -2
  582. package/docs/PartnerV2Api.md +210 -1158
  583. package/index.ts +2 -2
  584. package/models/acceptance-result-response-dto.ts +2 -2
  585. package/models/acceptance-result-v1-response-dto.ts +2 -2
  586. package/models/acknowledge-products-v1-request-dto.ts +2 -2
  587. package/models/api-catalog-dto.ts +2 -2
  588. package/models/api-catalog-entry-dto.ts +2 -2
  589. package/models/api-catalog-link-dto.ts +2 -2
  590. package/models/authorization-server-metadata-dto.ts +2 -2
  591. package/models/award-method-public.ts +2 -2
  592. package/models/award-registered-response-dto.ts +2 -2
  593. package/models/award-registered-v2-response-dto.ts +2 -2
  594. package/models/award-reverted-v2-response-dto.ts +2 -2
  595. package/models/bid-acceptance-dto.ts +2 -2
  596. package/models/bid-attachment-v1-dto.ts +2 -2
  597. package/models/bid-bond-dto.ts +2 -2
  598. package/models/bid-bond-v1-dto.ts +2 -2
  599. package/models/bid-cancelled-response-dto.ts +2 -2
  600. package/models/bid-contact-dto.ts +2 -2
  601. package/models/bid-contacts-dto.ts +2 -2
  602. package/models/bid-contract-document-dto.ts +2 -2
  603. package/models/bid-contract-documents-batch-v1-request-dto.ts +2 -2
  604. package/models/bid-contract-documents-v1-response-dto.ts +2 -2
  605. package/models/bid-created-response-dto.ts +2 -2
  606. package/models/bid-delivery-terms-dto.ts +2 -2
  607. package/models/bid-detail-response-dto.ts +2 -2
  608. package/models/bid-document-dto.ts +2 -2
  609. package/models/bid-document-v1-dto.ts +2 -2
  610. package/models/bid-failed-response-dto.ts +2 -2
  611. package/models/bid-failed-v2-response-dto.ts +2 -2
  612. package/models/bid-failure-reason.ts +2 -2
  613. package/models/bid-item-dto.ts +2 -2
  614. package/models/bid-item-v1-dto.ts +2 -2
  615. package/models/bid-lifecycle-dto.ts +2 -2
  616. package/models/bid-manager-dto.ts +2 -2
  617. package/models/bid-manager-v1-dto.ts +2 -2
  618. package/models/bid-payment-terms-dto.ts +2 -2
  619. package/models/bid-product-dto.ts +2 -2
  620. package/models/bid-public-status.ts +2 -2
  621. package/models/bid-registered-response-dto.ts +2 -2
  622. package/models/bid-result-participant-attachment-dto.ts +2 -2
  623. package/models/bid-result-participant-dto.ts +2 -2
  624. package/models/bid-result-v1-attachment-dto.ts +2 -2
  625. package/models/bid-result-v1-bid-product-info-dto.ts +2 -2
  626. package/models/bid-result-v1-participant-dto.ts +2 -2
  627. package/models/bid-result-v1-product-dto.ts +2 -2
  628. package/models/bid-results-batch-v1-request-dto.ts +2 -2
  629. package/models/bid-results-response-dto.ts +2 -2
  630. package/models/bid-results-v1-response-dto.ts +2 -2
  631. package/models/bid-settlement-line-item-dto.ts +2 -2
  632. package/models/bid-settlement-participant-dto.ts +2 -2
  633. package/models/bid-settlement-response-dto.ts +2 -2
  634. package/models/bid-statement-response-dto.ts +2 -2
  635. package/models/bid-statement-v1-response-dto.ts +2 -2
  636. package/models/bid-status.ts +2 -2
  637. package/models/bid-summary-dto.ts +2 -2
  638. package/models/bid-updated-response-dto.ts +2 -2
  639. package/models/cancel-bid-request-dto.ts +2 -2
  640. package/models/cancel-bid200-response.ts +2 -2
  641. package/models/card-payment-request-response-dto.ts +2 -2
  642. package/models/complete-acceptance-request-dto.ts +2 -2
  643. package/models/complete-acceptance-v1-request-dto.ts +2 -2
  644. package/models/complete-acceptance200-response.ts +2 -2
  645. package/models/complete-invoice200-response.ts +2 -2
  646. package/models/contract-document-item-dto.ts +2 -2
  647. package/models/contract-restriction-confirm-input-dto.ts +2 -2
  648. package/models/create-bid-request-dto.ts +2 -2
  649. package/models/create-bid-v1-request-dto.ts +2 -2
  650. package/models/create-card-payment-request-dto.ts +2 -2
  651. package/models/create-external-contract-documents-request-dto.ts +2 -2
  652. package/models/create-external-contract-documents-response-dto.ts +2 -2
  653. package/models/external-contract-document-item-dto.ts +2 -2
  654. package/models/external-contract-documents-response-dto.ts +2 -2
  655. package/models/external-contract-item-dto.ts +2 -2
  656. package/models/external-contract-snapshot-dto.ts +2 -2
  657. package/models/external-document-inputs-dto.ts +2 -2
  658. package/models/file-meta-response-dto.ts +2 -2
  659. package/models/file-uploaded-response-dto.ts +2 -2
  660. package/models/file-uploaded-v1-response-dto.ts +2 -2
  661. package/models/generated-external-contract-document-dto.ts +2 -2
  662. package/models/get-bid-settlement200-response.ts +2 -2
  663. package/models/get-bid-statement200-response.ts +2 -2
  664. package/models/get-bid200-response.ts +2 -2
  665. package/models/get-file-meta200-response.ts +2 -2
  666. package/models/health-controller-check200-response.ts +2 -2
  667. package/models/health-response-dto.ts +2 -2
  668. package/models/hierarchical-region-dto.ts +2 -2
  669. package/models/hierarchical-region-v1-dto.ts +2 -2
  670. package/models/index.ts +0 -36
  671. package/models/introspect-request-dto.ts +2 -2
  672. package/models/introspection-response-dto.ts +2 -2
  673. package/models/invalid-param-dto.ts +2 -2
  674. package/models/invoice-completed-response-dto.ts +2 -2
  675. package/models/list-bid-results200-response.ts +2 -2
  676. package/models/list-bids-response-dto.ts +2 -2
  677. package/models/list-bids200-response.ts +2 -2
  678. package/models/mark-bid-failed-request-dto.ts +2 -2
  679. package/models/mark-bid-failed-v1-request-dto.ts +2 -2
  680. package/models/mark-bid-failed201-response.ts +2 -2
  681. package/models/negotiation-score-v1-dto.ts +2 -2
  682. package/models/negotiation-scored-response-dto.ts +2 -2
  683. package/models/oauth-error-response-dto.ts +2 -2
  684. package/models/preconditions-dto.ts +2 -2
  685. package/models/preconditions-v1-dto.ts +2 -2
  686. package/models/problem-details-dto.ts +2 -2
  687. package/models/product-receipt-v1-response-dto.ts +2 -2
  688. package/models/product-v1-response-dto.ts +2 -2
  689. package/models/protected-resource-metadata-dto.ts +2 -2
  690. package/models/register-award-request-dto.ts +2 -2
  691. package/models/register-award-v1-request-dto.ts +2 -2
  692. package/models/register-award201-response.ts +2 -2
  693. package/models/register-bid201-response.ts +2 -2
  694. package/models/register-semo-contract-request-dto.ts +2 -2
  695. package/models/request-split-invoice-v1-request-dto.ts +2 -2
  696. package/models/retiree-roster-input-dto.ts +2 -2
  697. package/models/retiree-roster-row-dto.ts +2 -2
  698. package/models/revert-award-request-dto.ts +2 -2
  699. package/models/revert-award200-response.ts +2 -2
  700. package/models/revoke-request-dto.ts +2 -2
  701. package/models/semo-contract-registered-response-dto.ts +2 -2
  702. package/models/semo-contract-taxinvoice-status-response-dto.ts +2 -2
  703. package/models/split-invoice-v1-response-dto.ts +2 -2
  704. package/models/statement-document-dto.ts +2 -2
  705. package/models/statement-product-dto.ts +2 -2
  706. package/models/statement-v1-document-dto.ts +2 -2
  707. package/models/statement-v1-product-dto.ts +2 -2
  708. package/models/submit-negotiation-scores-v1-request-dto.ts +2 -2
  709. package/models/supplier-card-payable-response-dto.ts +2 -2
  710. package/models/supplier-tax-type.ts +2 -2
  711. package/models/token-request-dto.ts +2 -2
  712. package/models/token-response-dto.ts +2 -2
  713. package/models/update-bid-request-dto.ts +2 -2
  714. package/models/update-bid200-response.ts +2 -2
  715. package/models/upload-file-request-dto.ts +2 -2
  716. package/models/upload-file-v1-request-dto.ts +2 -2
  717. package/models/upload-file201-response.ts +2 -2
  718. package/package.json +1 -1
  719. package/api/webhooks-api.ts +0 -636
  720. package/dist/api/webhooks-api.d.ts +0 -304
  721. package/dist/api/webhooks-api.js +0 -621
  722. package/dist/esm/api/webhooks-api.d.ts +0 -304
  723. package/dist/esm/api/webhooks-api.js +0 -614
  724. package/dist/esm/models/acknowledge-product-receipt200-response.d.ts +0 -21
  725. package/dist/esm/models/acknowledge-product-receipt200-response.js +0 -14
  726. package/dist/esm/models/acknowledge-products-request-dto.d.ts +0 -17
  727. package/dist/esm/models/acknowledge-products-request-dto.js +0 -14
  728. package/dist/esm/models/bid-published-response-dto.d.ts +0 -25
  729. package/dist/esm/models/bid-published-response-dto.js +0 -16
  730. package/dist/esm/models/contract-documents-regenerated-response-dto.d.ts +0 -21
  731. package/dist/esm/models/contract-documents-regenerated-response-dto.js +0 -14
  732. package/dist/esm/models/create-card-payment200-response.d.ts +0 -21
  733. package/dist/esm/models/create-card-payment200-response.js +0 -14
  734. package/dist/esm/models/create-webhook-endpoint-request-dto.d.ts +0 -22
  735. package/dist/esm/models/create-webhook-endpoint-request-dto.js +0 -14
  736. package/dist/esm/models/create-webhook-endpoint201-response.d.ts +0 -21
  737. package/dist/esm/models/create-webhook-endpoint201-response.js +0 -14
  738. package/dist/esm/models/get-bid-results200-response.d.ts +0 -21
  739. package/dist/esm/models/get-bid-results200-response.js +0 -14
  740. package/dist/esm/models/get-supplier-card-payable-v2200-response.d.ts +0 -21
  741. package/dist/esm/models/get-supplier-card-payable-v2200-response.js +0 -14
  742. package/dist/esm/models/get-webhook-endpoint200-response.d.ts +0 -21
  743. package/dist/esm/models/get-webhook-endpoint200-response.js +0 -14
  744. package/dist/esm/models/list-products200-response.d.ts +0 -21
  745. package/dist/esm/models/list-products200-response.js +0 -14
  746. package/dist/esm/models/list-webhook-deliveries-response-dto.d.ts +0 -22
  747. package/dist/esm/models/list-webhook-deliveries-response-dto.js +0 -14
  748. package/dist/esm/models/list-webhook-deliveries200-response.d.ts +0 -21
  749. package/dist/esm/models/list-webhook-deliveries200-response.js +0 -14
  750. package/dist/esm/models/list-webhook-endpoints200-response.d.ts +0 -21
  751. package/dist/esm/models/list-webhook-endpoints200-response.js +0 -14
  752. package/dist/esm/models/on-bid-award-reverted-request.d.ts +0 -16
  753. package/dist/esm/models/on-bid-award-reverted-request.js +0 -14
  754. package/dist/esm/models/on-bid-awarded-request.d.ts +0 -16
  755. package/dist/esm/models/on-bid-awarded-request.js +0 -14
  756. package/dist/esm/models/on-bid-canceled-request.d.ts +0 -16
  757. package/dist/esm/models/on-bid-canceled-request.js +0 -14
  758. package/dist/esm/models/on-bid-closed-request.d.ts +0 -16
  759. package/dist/esm/models/on-bid-closed-request.js +0 -14
  760. package/dist/esm/models/on-bid-failed-request.d.ts +0 -16
  761. package/dist/esm/models/on-bid-failed-request.js +0 -14
  762. package/dist/esm/models/on-ping-request.d.ts +0 -16
  763. package/dist/esm/models/on-ping-request.js +0 -14
  764. package/dist/esm/models/partner-webhook-delivery-status.d.ts +0 -18
  765. package/dist/esm/models/partner-webhook-delivery-status.js +0 -19
  766. package/dist/esm/models/partner-webhook-endpoint-status.d.ts +0 -19
  767. package/dist/esm/models/partner-webhook-endpoint-status.js +0 -20
  768. package/dist/esm/models/partner-webhook-event-type.d.ts +0 -22
  769. package/dist/esm/models/partner-webhook-event-type.js +0 -23
  770. package/dist/esm/models/product-receipt-response-dto.d.ts +0 -17
  771. package/dist/esm/models/product-receipt-response-dto.js +0 -14
  772. package/dist/esm/models/product-response-dto.d.ts +0 -77
  773. package/dist/esm/models/product-response-dto.js +0 -14
  774. package/dist/esm/models/publish-bid200-response.d.ts +0 -21
  775. package/dist/esm/models/publish-bid200-response.js +0 -14
  776. package/dist/esm/models/regenerate-contract-documents201-response.d.ts +0 -21
  777. package/dist/esm/models/regenerate-contract-documents201-response.js +0 -14
  778. package/dist/esm/models/send-webhook-test-event200-response.d.ts +0 -21
  779. package/dist/esm/models/send-webhook-test-event200-response.js +0 -14
  780. package/dist/esm/models/update-webhook-endpoint-request-dto.d.ts +0 -27
  781. package/dist/esm/models/update-webhook-endpoint-request-dto.js +0 -14
  782. package/dist/esm/models/webhook-bid-event-data.d.ts +0 -33
  783. package/dist/esm/models/webhook-bid-event-data.js +0 -14
  784. package/dist/esm/models/webhook-delivery-dto.d.ts +0 -73
  785. package/dist/esm/models/webhook-delivery-dto.js +0 -21
  786. package/dist/esm/models/webhook-endpoint-dto.d.ts +0 -55
  787. package/dist/esm/models/webhook-endpoint-dto.js +0 -14
  788. package/dist/esm/models/webhook-endpoint-with-secret-dto.d.ts +0 -59
  789. package/dist/esm/models/webhook-endpoint-with-secret-dto.js +0 -14
  790. package/dist/esm/models/webhook-event-envelope.d.ts +0 -34
  791. package/dist/esm/models/webhook-event-envelope.js +0 -14
  792. package/dist/esm/models/webhook-ping-event-data.d.ts +0 -20
  793. package/dist/esm/models/webhook-ping-event-data.js +0 -14
  794. package/dist/esm/models/webhook-test-result-dto.d.ts +0 -25
  795. package/dist/esm/models/webhook-test-result-dto.js +0 -14
  796. package/dist/models/acknowledge-product-receipt200-response.d.ts +0 -21
  797. package/dist/models/acknowledge-product-receipt200-response.js +0 -15
  798. package/dist/models/acknowledge-products-request-dto.d.ts +0 -17
  799. package/dist/models/acknowledge-products-request-dto.js +0 -15
  800. package/dist/models/bid-published-response-dto.d.ts +0 -25
  801. package/dist/models/bid-published-response-dto.js +0 -19
  802. package/dist/models/contract-documents-regenerated-response-dto.d.ts +0 -21
  803. package/dist/models/contract-documents-regenerated-response-dto.js +0 -15
  804. package/dist/models/create-card-payment200-response.d.ts +0 -21
  805. package/dist/models/create-card-payment200-response.js +0 -15
  806. package/dist/models/create-webhook-endpoint-request-dto.d.ts +0 -22
  807. package/dist/models/create-webhook-endpoint-request-dto.js +0 -15
  808. package/dist/models/create-webhook-endpoint201-response.d.ts +0 -21
  809. package/dist/models/create-webhook-endpoint201-response.js +0 -15
  810. package/dist/models/get-bid-results200-response.d.ts +0 -21
  811. package/dist/models/get-bid-results200-response.js +0 -15
  812. package/dist/models/get-supplier-card-payable-v2200-response.d.ts +0 -21
  813. package/dist/models/get-supplier-card-payable-v2200-response.js +0 -15
  814. package/dist/models/get-webhook-endpoint200-response.d.ts +0 -21
  815. package/dist/models/get-webhook-endpoint200-response.js +0 -15
  816. package/dist/models/list-products200-response.d.ts +0 -21
  817. package/dist/models/list-products200-response.js +0 -15
  818. package/dist/models/list-webhook-deliveries-response-dto.d.ts +0 -22
  819. package/dist/models/list-webhook-deliveries-response-dto.js +0 -15
  820. package/dist/models/list-webhook-deliveries200-response.d.ts +0 -21
  821. package/dist/models/list-webhook-deliveries200-response.js +0 -15
  822. package/dist/models/list-webhook-endpoints200-response.d.ts +0 -21
  823. package/dist/models/list-webhook-endpoints200-response.js +0 -15
  824. package/dist/models/on-bid-award-reverted-request.d.ts +0 -16
  825. package/dist/models/on-bid-award-reverted-request.js +0 -15
  826. package/dist/models/on-bid-awarded-request.d.ts +0 -16
  827. package/dist/models/on-bid-awarded-request.js +0 -15
  828. package/dist/models/on-bid-canceled-request.d.ts +0 -16
  829. package/dist/models/on-bid-canceled-request.js +0 -15
  830. package/dist/models/on-bid-closed-request.d.ts +0 -16
  831. package/dist/models/on-bid-closed-request.js +0 -15
  832. package/dist/models/on-bid-failed-request.d.ts +0 -16
  833. package/dist/models/on-bid-failed-request.js +0 -15
  834. package/dist/models/on-ping-request.d.ts +0 -16
  835. package/dist/models/on-ping-request.js +0 -15
  836. package/dist/models/partner-webhook-delivery-status.d.ts +0 -18
  837. package/dist/models/partner-webhook-delivery-status.js +0 -22
  838. package/dist/models/partner-webhook-endpoint-status.d.ts +0 -19
  839. package/dist/models/partner-webhook-endpoint-status.js +0 -23
  840. package/dist/models/partner-webhook-event-type.d.ts +0 -22
  841. package/dist/models/partner-webhook-event-type.js +0 -26
  842. package/dist/models/product-receipt-response-dto.d.ts +0 -17
  843. package/dist/models/product-receipt-response-dto.js +0 -15
  844. package/dist/models/product-response-dto.d.ts +0 -77
  845. package/dist/models/product-response-dto.js +0 -15
  846. package/dist/models/publish-bid200-response.d.ts +0 -21
  847. package/dist/models/publish-bid200-response.js +0 -15
  848. package/dist/models/regenerate-contract-documents201-response.d.ts +0 -21
  849. package/dist/models/regenerate-contract-documents201-response.js +0 -15
  850. package/dist/models/send-webhook-test-event200-response.d.ts +0 -21
  851. package/dist/models/send-webhook-test-event200-response.js +0 -15
  852. package/dist/models/update-webhook-endpoint-request-dto.d.ts +0 -27
  853. package/dist/models/update-webhook-endpoint-request-dto.js +0 -15
  854. package/dist/models/webhook-bid-event-data.d.ts +0 -33
  855. package/dist/models/webhook-bid-event-data.js +0 -15
  856. package/dist/models/webhook-delivery-dto.d.ts +0 -73
  857. package/dist/models/webhook-delivery-dto.js +0 -24
  858. package/dist/models/webhook-endpoint-dto.d.ts +0 -55
  859. package/dist/models/webhook-endpoint-dto.js +0 -15
  860. package/dist/models/webhook-endpoint-with-secret-dto.d.ts +0 -59
  861. package/dist/models/webhook-endpoint-with-secret-dto.js +0 -15
  862. package/dist/models/webhook-event-envelope.d.ts +0 -34
  863. package/dist/models/webhook-event-envelope.js +0 -15
  864. package/dist/models/webhook-ping-event-data.d.ts +0 -20
  865. package/dist/models/webhook-ping-event-data.js +0 -15
  866. package/dist/models/webhook-test-result-dto.d.ts +0 -25
  867. package/dist/models/webhook-test-result-dto.js +0 -15
  868. package/docs/AcknowledgeProductReceipt200Response.md +0 -22
  869. package/docs/AcknowledgeProductsRequestDto.md +0 -20
  870. package/docs/BidPublishedResponseDto.md +0 -22
  871. package/docs/ContractDocumentsRegeneratedResponseDto.md +0 -22
  872. package/docs/CreateCardPayment200Response.md +0 -22
  873. package/docs/CreateWebhookEndpoint201Response.md +0 -22
  874. package/docs/CreateWebhookEndpointRequestDto.md +0 -22
  875. package/docs/GetBidResults200Response.md +0 -22
  876. package/docs/GetSupplierCardPayableV2200Response.md +0 -22
  877. package/docs/GetWebhookEndpoint200Response.md +0 -22
  878. package/docs/ListProducts200Response.md +0 -22
  879. package/docs/ListWebhookDeliveries200Response.md +0 -22
  880. package/docs/ListWebhookDeliveriesResponseDto.md +0 -22
  881. package/docs/ListWebhookEndpoints200Response.md +0 -22
  882. package/docs/OnBidAwardRevertedRequest.md +0 -26
  883. package/docs/OnBidAwardedRequest.md +0 -26
  884. package/docs/OnBidCanceledRequest.md +0 -26
  885. package/docs/OnBidClosedRequest.md +0 -26
  886. package/docs/OnBidFailedRequest.md +0 -26
  887. package/docs/OnPingRequest.md +0 -26
  888. package/docs/PartnerWebhookDeliveryStatus.md +0 -14
  889. package/docs/PartnerWebhookEndpointStatus.md +0 -11
  890. package/docs/PartnerWebhookEventType.md +0 -17
  891. package/docs/ProductReceiptResponseDto.md +0 -20
  892. package/docs/ProductResponseDto.md +0 -50
  893. package/docs/PublishBid200Response.md +0 -22
  894. package/docs/RegenerateContractDocuments201Response.md +0 -22
  895. package/docs/SendWebhookTestEvent200Response.md +0 -22
  896. package/docs/UpdateWebhookEndpointRequestDto.md +0 -24
  897. package/docs/WebhookBidEventData.md +0 -27
  898. package/docs/WebhookDeliveryDto.md +0 -42
  899. package/docs/WebhookEndpointDto.md +0 -38
  900. package/docs/WebhookEndpointWithSecretDto.md +0 -40
  901. package/docs/WebhookEventEnvelope.md +0 -27
  902. package/docs/WebhookPingEventData.md +0 -21
  903. package/docs/WebhookTestResultDto.md +0 -24
  904. package/docs/WebhooksApi.md +0 -385
  905. package/models/acknowledge-product-receipt200-response.ts +0 -27
  906. package/models/acknowledge-products-request-dto.ts +0 -23
  907. package/models/bid-published-response-dto.ts +0 -34
  908. package/models/contract-documents-regenerated-response-dto.ts +0 -27
  909. package/models/create-card-payment200-response.ts +0 -27
  910. package/models/create-webhook-endpoint-request-dto.ts +0 -30
  911. package/models/create-webhook-endpoint201-response.ts +0 -27
  912. package/models/get-bid-results200-response.ts +0 -27
  913. package/models/get-supplier-card-payable-v2200-response.ts +0 -27
  914. package/models/get-webhook-endpoint200-response.ts +0 -27
  915. package/models/list-products200-response.ts +0 -27
  916. package/models/list-webhook-deliveries-response-dto.ts +0 -30
  917. package/models/list-webhook-deliveries200-response.ts +0 -27
  918. package/models/list-webhook-endpoints200-response.ts +0 -27
  919. package/models/on-bid-award-reverted-request.ts +0 -28
  920. package/models/on-bid-awarded-request.ts +0 -28
  921. package/models/on-bid-canceled-request.ts +0 -28
  922. package/models/on-bid-closed-request.ts +0 -28
  923. package/models/on-bid-failed-request.ts +0 -28
  924. package/models/on-ping-request.ts +0 -28
  925. package/models/partner-webhook-delivery-status.ts +0 -28
  926. package/models/partner-webhook-endpoint-status.ts +0 -29
  927. package/models/partner-webhook-event-type.ts +0 -32
  928. package/models/product-receipt-response-dto.ts +0 -23
  929. package/models/product-response-dto.ts +0 -83
  930. package/models/publish-bid200-response.ts +0 -27
  931. package/models/regenerate-contract-documents201-response.ts +0 -27
  932. package/models/send-webhook-test-event200-response.ts +0 -27
  933. package/models/update-webhook-endpoint-request-dto.ts +0 -39
  934. package/models/webhook-bid-event-data.ts +0 -43
  935. package/models/webhook-delivery-dto.ts +0 -82
  936. package/models/webhook-endpoint-dto.ts +0 -67
  937. package/models/webhook-endpoint-with-secret-dto.ts +0 -71
  938. package/models/webhook-event-envelope.ts +0 -38
  939. package/models/webhook-ping-event-data.ts +0 -26
  940. package/models/webhook-test-result-dto.ts +0 -31
@@ -2,9 +2,9 @@
2
2
  /* eslint-disable */
3
3
  /**
4
4
  * CMARKET V6 Partner API
5
- * 외부 ERP 연동용 RESTful API. ## 버전별 인증 - **_/v2** — OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰 발급 후 `Authorization: Bearer <token>` 헤더. - **_/v1** — V5 충실 platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) 헤더로 전송. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분할 것. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않는다. 범위 밖이면 스코프와 무관하게 403 이다. 대행 범위는 키마다 둘 중 하나로 설정된다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청할 것. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `meta` 키는 아예 나가지 않습니다(빈 객체를 싣지 않습니다). 봉투를 쓰지 않는 표면은 셋입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, `/v1/_*` 은 동결된 레거시 표면이며, 파일 내용 응답은 본문이 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 별로 명시돼 있다. 새 slug 은 추가될 수 있으므로, 모르는 slug 을 만나면 `type` 이 아니라 **HTTP 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` 가 실린다. ## 버전 수명(deprecation/sunset) - **_/v1** 은 레거시 V5 cutover 완료 시점까지 유지되는 충실 프록시입니다. 폐지 일정이 정해지면 /v1 응답에 헤더 세 개가 실립니다 — `Deprecation`(RFC 9745, `@<epoch초>`) · `Sunset`(RFC 8594, HTTP-date) · `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` — 이전 안내 문서를 가리킵니다). 일정이 정해지기 전에는 셋 다 나가지 않습니다. 종료일이 지난 뒤의 호출은 `404` 가 아니라 **`410 Gone`** 과 `type: …/endpoint-sunset` 으로 거절됩니다. 둘의 뜻이 다릅니다 — `404` 는 \"그런 것이 있었는지 모르겠다\", `410` 은 \"있었고 의도적으로 없앴다\" 입니다. `410` 을 받으면 경로 오타를 의심하지 말고 /v2 로 이전하세요. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지한다. 소비자는 이 헤더를 모니터링할 것.
5
+ * 외부 ERP 연동용 RESTful API. ## 버전별 인증 - **_/v2** — OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰 발급 후 `Authorization: Bearer <token>` 헤더. - **_/v1** — V5 충실 platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) 헤더로 전송. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분할 것. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않는다. 범위 밖이면 스코프와 무관하게 403 이다. 대행 범위는 키마다 둘 중 하나로 설정된다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청할 것. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `meta` 키는 아예 나가지 않습니다(빈 객체를 싣지 않습니다). 봉투를 쓰지 않는 표면은 셋입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, `/v1/_*` 은 동결된 레거시 표면이며, 파일 내용 응답은 본문이 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 별로 명시돼 있다. 새 slug 은 추가될 수 있으므로, 모르는 slug 을 만나면 `type` 이 아니라 **HTTP 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` 가 실린다. ## 버전 수명(deprecation/sunset) - **_/v1** 은 레거시 V5 cutover 완료 시점까지 유지되는 충실 프록시입니다. 폐지 일정이 정해지면 /v1 응답에 헤더 세 개가 실립니다 — `Deprecation`(RFC 9745, `@<epoch초>`) · `Sunset`(RFC 8594, HTTP-date) · `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` — 이전 안내 문서를 가리킵니다). 일정이 정해지기 전에는 셋 다 나가지 않습니다. 종료일이 지난 뒤의 호출은 `404` 가 아니라 **`410 Gone`** 과 `type: …/endpoint-sunset` 으로 거절됩니다. 둘의 뜻이 다릅니다 — `404` 는 \"그런 것이 있었는지 모르겠다\", `410` 은 \"있었고 의도적으로 없앴다\" 입니다. `410` 을 받으면 경로 오타를 의심하지 말고 /v2 로 이전하세요. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지한다. 소비자는 이 헤더를 모니터링할 것.
6
6
  *
7
- * The version of the OpenAPI document: 33.1.0
7
+ * The version of the OpenAPI document: 35.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -32,63 +32,23 @@ import { BASE_PATH, BaseAPI, operationServerMap } from '../base';
32
32
  export const PartnerV2ApiAxiosParamCreator = function (configuration) {
33
33
  return {
34
34
  /**
35
- * 저장을 마친 물품을 전송완료로 표시해 다음 조회에서 제외합니다. **되돌릴 수 없습니다.** 표시한 물품은 `GET /v2/products` 다시 내려오지 않으므로, 자기 시스템에 저장이 끝난 뒤에 호출하세요. **표시 범위는 기관 그룹으로 잠깁니다.** 다른 기관의 물품 코드를 섞어 보내면 건은 표시되지 않고 `acknowledged` 요청 수보다 작게 돌아옵니다. **필수 스코프:** `products:write` **멱등성:** `Idempotency-Key` 헤더 필수.
36
- * @summary 물품 수신확인
37
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
38
- * @param {AcknowledgeProductsRequestDto} acknowledgeProductsRequestDto
39
- * @param {*} [options] Override http request option.
40
- * @throws {RequiredError}
41
- */
42
- acknowledgeProductReceipt: (idempotencyKey_1, acknowledgeProductsRequestDto_1, ...args_1) => __awaiter(this, [idempotencyKey_1, acknowledgeProductsRequestDto_1, ...args_1], void 0, function* (idempotencyKey, acknowledgeProductsRequestDto, options = {}) {
43
- // verify required parameter 'idempotencyKey' is not null or undefined
44
- assertParamExists('acknowledgeProductReceipt', 'idempotencyKey', idempotencyKey);
45
- // verify required parameter 'acknowledgeProductsRequestDto' is not null or undefined
46
- assertParamExists('acknowledgeProductReceipt', 'acknowledgeProductsRequestDto', acknowledgeProductsRequestDto);
47
- const localVarPath = `/v2/products/receipts`;
48
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
49
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
50
- let baseOptions;
51
- if (configuration) {
52
- baseOptions = configuration.baseOptions;
53
- }
54
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
55
- const localVarHeaderParameter = {};
56
- const localVarQueryParameter = {};
57
- // authentication partner-oauth2 required
58
- // oauth required
59
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["products:write"], configuration);
60
- localVarHeaderParameter['Content-Type'] = 'application/json';
61
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
62
- if (idempotencyKey != null) {
63
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
64
- }
65
- setSearchParams(localVarUrlObj, localVarQueryParameter);
66
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
67
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
68
- localVarRequestOptions.data = serializeDataIfNeeded(acknowledgeProductsRequestDto, localVarRequestOptions, configuration);
69
- return {
70
- url: toPathString(localVarUrlObj),
71
- options: localVarRequestOptions,
72
- };
73
- }),
74
- /**
75
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 → 409. 타 발주처 공고 → 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidId}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
35
+ * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
76
36
  * @summary 공고 취소
77
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
37
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
78
38
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
79
39
  * @param {CancelBidRequestDto} cancelBidRequestDto
80
40
  * @param {*} [options] Override http request option.
81
41
  * @throws {RequiredError}
82
42
  */
83
- cancelBid: (bidId_1, idempotencyKey_1, cancelBidRequestDto_1, ...args_1) => __awaiter(this, [bidId_1, idempotencyKey_1, cancelBidRequestDto_1, ...args_1], void 0, function* (bidId, idempotencyKey, cancelBidRequestDto, options = {}) {
84
- // verify required parameter 'bidId' is not null or undefined
85
- assertParamExists('cancelBid', 'bidId', bidId);
43
+ cancelBid: (bidRef_1, idempotencyKey_1, cancelBidRequestDto_1, ...args_1) => __awaiter(this, [bidRef_1, idempotencyKey_1, cancelBidRequestDto_1, ...args_1], void 0, function* (bidRef, idempotencyKey, cancelBidRequestDto, options = {}) {
44
+ // verify required parameter 'bidRef' is not null or undefined
45
+ assertParamExists('cancelBid', 'bidRef', bidRef);
86
46
  // verify required parameter 'idempotencyKey' is not null or undefined
87
47
  assertParamExists('cancelBid', 'idempotencyKey', idempotencyKey);
88
48
  // verify required parameter 'cancelBidRequestDto' is not null or undefined
89
49
  assertParamExists('cancelBid', 'cancelBidRequestDto', cancelBidRequestDto);
90
- const localVarPath = `/v2/bids/{bidId}/cancel`
91
- .replace('{bidId}', encodeURIComponent(String(bidId)));
50
+ const localVarPath = `/v2/bids/{bidRef}/cancel`
51
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
92
52
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
93
53
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
94
54
  let baseOptions;
@@ -116,23 +76,23 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
116
76
  };
117
77
  }),
118
78
  /**
119
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **V5 대응:** `acceptanceCompleteSend` — BidApi.xml `acceptanceComplete` 액션의 V6 후속. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 응답은 204가 아닌 200입니다 — 멱등성 인터셉터가 구체 바디를 캐시하고 SDK 가 타입드 응답을 필요로 하기 때문. **V5-compat 안내:** 거래명세서·검수보고서에 찍힐 구매사 사업자정보·담당자·작성일자 override(11종)는 modern v2 표면에서 제거됐습니다. 필요 시 V5 충실 카운터파트 `POST /v1/bids/{bidId}/acceptance`(`CompleteAcceptanceV1RequestDto`)를 사용하세요. **낙찰자 식별:** `winnerMemberId`(공급사 memberId). 내부 joinSeq 해소는 backend 가 처리합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
79
+ * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **V5 대응:** `acceptanceCompleteSend` — BidApi.xml `acceptanceComplete` 액션의 V6 후속. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 응답은 204가 아닌 200입니다 — 멱등성 인터셉터가 구체 바디를 캐시하고 SDK 가 타입드 응답을 필요로 하기 때문. **V5-compat 안내:** 거래명세서·검수보고서에 찍힐 구매사 사업자정보·담당자·작성일자 override(11종)는 modern v2 표면에서 제거됐습니다. 필요 시 V5 충실 카운터파트 `POST /v1/bids/{bidRef}/acceptance`(`CompleteAcceptanceV1RequestDto`)를 사용하세요. **낙찰자 식별:** `winnerMemberId`(공급사 memberId). 내부 joinSeq 해소는 backend 가 처리합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
120
80
  * @summary 검수완료 전송
121
- * @param {string} bidId 공고 ID(&#x3D; backend bidId &#x3D; 등록 응답의 bidNo).
81
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
122
82
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
123
83
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
124
84
  * @param {*} [options] Override http request option.
125
85
  * @throws {RequiredError}
126
86
  */
127
- completeAcceptance: (bidId_1, idempotencyKey_1, completeAcceptanceRequestDto_1, ...args_1) => __awaiter(this, [bidId_1, idempotencyKey_1, completeAcceptanceRequestDto_1, ...args_1], void 0, function* (bidId, idempotencyKey, completeAcceptanceRequestDto, options = {}) {
128
- // verify required parameter 'bidId' is not null or undefined
129
- assertParamExists('completeAcceptance', 'bidId', bidId);
87
+ completeAcceptance: (bidRef_1, idempotencyKey_1, completeAcceptanceRequestDto_1, ...args_1) => __awaiter(this, [bidRef_1, idempotencyKey_1, completeAcceptanceRequestDto_1, ...args_1], void 0, function* (bidRef, idempotencyKey, completeAcceptanceRequestDto, options = {}) {
88
+ // verify required parameter 'bidRef' is not null or undefined
89
+ assertParamExists('completeAcceptance', 'bidRef', bidRef);
130
90
  // verify required parameter 'idempotencyKey' is not null or undefined
131
91
  assertParamExists('completeAcceptance', 'idempotencyKey', idempotencyKey);
132
92
  // verify required parameter 'completeAcceptanceRequestDto' is not null or undefined
133
93
  assertParamExists('completeAcceptance', 'completeAcceptanceRequestDto', completeAcceptanceRequestDto);
134
- const localVarPath = `/v2/bids/{bidId}/acceptance`
135
- .replace('{bidId}', encodeURIComponent(String(bidId)));
94
+ const localVarPath = `/v2/bids/{bidRef}/acceptance`
95
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
136
96
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
137
97
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
138
98
  let baseOptions;
@@ -162,18 +122,18 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
162
122
  /**
163
123
  * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
164
124
  * @summary 정산 마감(송장 강제완료)
165
- * @param {string} bidId
125
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
166
126
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
167
127
  * @param {*} [options] Override http request option.
168
128
  * @throws {RequiredError}
169
129
  */
170
- completeInvoice: (bidId_1, idempotencyKey_1, ...args_1) => __awaiter(this, [bidId_1, idempotencyKey_1, ...args_1], void 0, function* (bidId, idempotencyKey, options = {}) {
171
- // verify required parameter 'bidId' is not null or undefined
172
- assertParamExists('completeInvoice', 'bidId', bidId);
130
+ completeInvoice: (bidRef_1, idempotencyKey_1, ...args_1) => __awaiter(this, [bidRef_1, idempotencyKey_1, ...args_1], void 0, function* (bidRef, idempotencyKey, options = {}) {
131
+ // verify required parameter 'bidRef' is not null or undefined
132
+ assertParamExists('completeInvoice', 'bidRef', bidRef);
173
133
  // verify required parameter 'idempotencyKey' is not null or undefined
174
134
  assertParamExists('completeInvoice', 'idempotencyKey', idempotencyKey);
175
- const localVarPath = `/v2/bids/{bidId}/settlement/complete`
176
- .replace('{bidId}', encodeURIComponent(String(bidId)));
135
+ const localVarPath = `/v2/bids/{bidRef}/settlement/complete`
136
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
177
137
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
178
138
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
179
139
  let baseOptions;
@@ -198,46 +158,6 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
198
158
  options: localVarRequestOptions,
199
159
  };
200
160
  }),
201
- /**
202
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
203
- * @summary 결제창 발행
204
- * @param {string} idempotencyKey 재시도 안전을 위한 멱등 키.
205
- * @param {CreateCardPaymentRequestDto} createCardPaymentRequestDto
206
- * @param {*} [options] Override http request option.
207
- * @throws {RequiredError}
208
- */
209
- createCardPayment: (idempotencyKey_1, createCardPaymentRequestDto_1, ...args_1) => __awaiter(this, [idempotencyKey_1, createCardPaymentRequestDto_1, ...args_1], void 0, function* (idempotencyKey, createCardPaymentRequestDto, options = {}) {
210
- // verify required parameter 'idempotencyKey' is not null or undefined
211
- assertParamExists('createCardPayment', 'idempotencyKey', idempotencyKey);
212
- // verify required parameter 'createCardPaymentRequestDto' is not null or undefined
213
- assertParamExists('createCardPayment', 'createCardPaymentRequestDto', createCardPaymentRequestDto);
214
- const localVarPath = `/v2/card-payments`;
215
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
216
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
217
- let baseOptions;
218
- if (configuration) {
219
- baseOptions = configuration.baseOptions;
220
- }
221
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
222
- const localVarHeaderParameter = {};
223
- const localVarQueryParameter = {};
224
- // authentication partner-oauth2 required
225
- // oauth required
226
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["payments:write"], configuration);
227
- localVarHeaderParameter['Content-Type'] = 'application/json';
228
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
229
- if (idempotencyKey != null) {
230
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
231
- }
232
- setSearchParams(localVarUrlObj, localVarQueryParameter);
233
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
234
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
235
- localVarRequestOptions.data = serializeDataIfNeeded(createCardPaymentRequestDto, localVarRequestOptions, configuration);
236
- return {
237
- url: toPathString(localVarUrlObj),
238
- options: localVarRequestOptions,
239
- };
240
- }),
241
161
  /**
242
162
  * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인(APPROVED)되어 바로 결제 가능합니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. 거기서 카드를 골라 결제합니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/card-payment-requests/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — 같은 기능을 v2 응답 규약으로 제공하는 `POST /v2/card-payments` 와 `GET /v2/suppliers/{memberId}/card-payable` 를 신규 연동에 권합니다. 이 경로도 계속 동작하며 중단 일정은 없습니다.
243
163
  * @summary 결제창 발행 (구 경로)
@@ -280,7 +200,7 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
280
200
  };
281
201
  }),
282
202
  /**
283
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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/{bidId}/contract-documents` 가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
203
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
284
204
  * @summary 계약서류 생성
285
205
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
286
206
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
@@ -319,97 +239,6 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
319
239
  options: localVarRequestOptions,
320
240
  };
321
241
  }),
322
- /**
323
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 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` 헤더 필수. ### 서명 검증 (필수) 발송 요청마다 헤더 `X-CMarket-Signature` 가 실립니다. ``` X-CMarket-Signature: t=<unix초>,v1=<hex> ``` `v1` 은 `HMAC-SHA256(secret, \"${t}.${요청 본문 원문}\")` 의 소문자 hex 입니다. 1. 헤더를 `t` 와 `v1` 로 나눕니다. 2. `\"${t}.${본문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. 등록 시 받은 시크릿으로 HMAC-SHA256 을 계산해 `v1` 과 비교합니다. 비교는 **상수 시간** 비교 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `t` 가 현재 시각으로부터 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). ### 중복 제거 `X-CMarket-Event-Id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. ### 응답과 재시도 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
324
- * @summary 웹훅 구독 등록
325
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
326
- * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
327
- * @param {*} [options] Override http request option.
328
- * @throws {RequiredError}
329
- */
330
- createWebhookEndpoint: (idempotencyKey_1, createWebhookEndpointRequestDto_1, ...args_1) => __awaiter(this, [idempotencyKey_1, createWebhookEndpointRequestDto_1, ...args_1], void 0, function* (idempotencyKey, createWebhookEndpointRequestDto, options = {}) {
331
- // verify required parameter 'idempotencyKey' is not null or undefined
332
- assertParamExists('createWebhookEndpoint', 'idempotencyKey', idempotencyKey);
333
- // verify required parameter 'createWebhookEndpointRequestDto' is not null or undefined
334
- assertParamExists('createWebhookEndpoint', 'createWebhookEndpointRequestDto', createWebhookEndpointRequestDto);
335
- const localVarPath = `/v2/webhook-endpoints`;
336
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
337
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
338
- let baseOptions;
339
- if (configuration) {
340
- baseOptions = configuration.baseOptions;
341
- }
342
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
343
- const localVarHeaderParameter = {};
344
- const localVarQueryParameter = {};
345
- // authentication partner-oauth2 required
346
- // oauth required
347
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:write"], configuration);
348
- localVarHeaderParameter['Content-Type'] = 'application/json';
349
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
350
- if (idempotencyKey != null) {
351
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
352
- }
353
- setSearchParams(localVarUrlObj, localVarQueryParameter);
354
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
355
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
356
- localVarRequestOptions.data = serializeDataIfNeeded(createWebhookEndpointRequestDto, localVarRequestOptions, configuration);
357
- return {
358
- url: toPathString(localVarUrlObj),
359
- options: localVarRequestOptions,
360
- };
361
- }),
362
- /**
363
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH … {\"status\":\"DISABLED\"}` 를 쓰세요 — 시크릿과 이벤트 구성이 남아 그대로 되살릴 수 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 가 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` — 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
364
- * @summary 웹훅 구독 삭제
365
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
366
- * @param {string} ifMatch
367
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
368
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
369
- * @param {*} [options] Override http request option.
370
- * @throws {RequiredError}
371
- */
372
- deleteWebhookEndpoint: (endpointId_1, ifMatch_1, ifMatch2_1, idempotencyKey_1, ...args_1) => __awaiter(this, [endpointId_1, ifMatch_1, ifMatch2_1, idempotencyKey_1, ...args_1], void 0, function* (endpointId, ifMatch, ifMatch2, idempotencyKey, options = {}) {
373
- // verify required parameter 'endpointId' is not null or undefined
374
- assertParamExists('deleteWebhookEndpoint', 'endpointId', endpointId);
375
- // verify required parameter 'ifMatch' is not null or undefined
376
- assertParamExists('deleteWebhookEndpoint', 'ifMatch', ifMatch);
377
- // verify required parameter 'ifMatch2' is not null or undefined
378
- assertParamExists('deleteWebhookEndpoint', 'ifMatch2', ifMatch2);
379
- // verify required parameter 'idempotencyKey' is not null or undefined
380
- assertParamExists('deleteWebhookEndpoint', 'idempotencyKey', idempotencyKey);
381
- const localVarPath = `/v2/webhook-endpoints/{endpointId}`
382
- .replace('{endpointId}', encodeURIComponent(String(endpointId)));
383
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
384
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
385
- let baseOptions;
386
- if (configuration) {
387
- baseOptions = configuration.baseOptions;
388
- }
389
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'DELETE' }, baseOptions), options);
390
- const localVarHeaderParameter = {};
391
- const localVarQueryParameter = {};
392
- // authentication partner-oauth2 required
393
- // oauth required
394
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:write"], configuration);
395
- localVarHeaderParameter['Accept'] = 'application/problem+json';
396
- if (ifMatch != null) {
397
- localVarHeaderParameter['if-match'] = String(ifMatch);
398
- }
399
- if (ifMatch2 != null) {
400
- localVarHeaderParameter['If-Match'] = String(ifMatch2);
401
- }
402
- if (idempotencyKey != null) {
403
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
404
- }
405
- setSearchParams(localVarUrlObj, localVarQueryParameter);
406
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
407
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
408
- return {
409
- url: toPathString(localVarUrlObj),
410
- options: localVarRequestOptions,
411
- };
412
- }),
413
242
  /**
414
243
  * 무인증 — `fileKey` 자체가 capability 다(V5 `/download/{fileKey}` 와 같은 보안 모델). 파트너 응답의 `fileUrl`/`fullUrl` 이 이 URL 을 가리킨다. 요청 시점에 서명하므로 URL 을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}` 가 파일 메타와 `downloadUrl` 을 v2 응답 규약으로 돌려줍니다. 이 안정 URL 은 파트너 응답의 `fileUrl`/`fullUrl` 이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
415
244
  * @summary 파일 다운로드 — 안정 URL(302)
@@ -440,50 +269,17 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
440
269
  };
441
270
  }),
442
271
  /**
443
- * 공고의 현재 상태와 라이프사이클 하위 상태(계약서류 생성·정산·세금계산서) 조회합니다. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감·세금계산서 발행 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 낙찰 결과 조회(`GET /v2/bids/{bidId}/results`)의 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
444
- * @summary 공고 단건(라이프사이클) 조회
445
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
446
- * @param {*} [options] Override http request option.
447
- * @throws {RequiredError}
448
- */
449
- getBid: (bidId_1, ...args_1) => __awaiter(this, [bidId_1, ...args_1], void 0, function* (bidId, options = {}) {
450
- // verify required parameter 'bidId' is not null or undefined
451
- assertParamExists('getBid', 'bidId', bidId);
452
- const localVarPath = `/v2/bids/{bidId}`
453
- .replace('{bidId}', encodeURIComponent(String(bidId)));
454
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
455
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
456
- let baseOptions;
457
- if (configuration) {
458
- baseOptions = configuration.baseOptions;
459
- }
460
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);
461
- const localVarHeaderParameter = {};
462
- const localVarQueryParameter = {};
463
- // authentication partner-oauth2 required
464
- // oauth required
465
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["bids:read"], configuration);
466
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
467
- setSearchParams(localVarUrlObj, localVarQueryParameter);
468
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
469
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
470
- return {
471
- url: toPathString(localVarUrlObj),
472
- options: localVarRequestOptions,
473
- };
474
- }),
475
- /**
476
- * 공고의 응찰 참여 업체·순위·낙찰 여부를 조회한다. scope bids:read.
477
- * @summary 공고 결과 조회
478
- * @param {string} bidId
272
+ * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류:** `contractDocuments[].generationState` 는 **관측 전용**입니다. `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태이며 API 로 되살릴 수 없습니다 — 운영에 문의하세요. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
273
+ * @summary 공고 상세 조회
274
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
479
275
  * @param {*} [options] Override http request option.
480
276
  * @throws {RequiredError}
481
277
  */
482
- getBidResults: (bidId_1, ...args_1) => __awaiter(this, [bidId_1, ...args_1], void 0, function* (bidId, options = {}) {
483
- // verify required parameter 'bidId' is not null or undefined
484
- assertParamExists('getBidResults', 'bidId', bidId);
485
- const localVarPath = `/v2/bids/{bidId}/result`
486
- .replace('{bidId}', encodeURIComponent(String(bidId)));
278
+ getBid: (bidRef_1, ...args_1) => __awaiter(this, [bidRef_1, ...args_1], void 0, function* (bidRef, options = {}) {
279
+ // verify required parameter 'bidRef' is not null or undefined
280
+ assertParamExists('getBid', 'bidRef', bidRef);
281
+ const localVarPath = `/v2/bids/{bidRef}`
282
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
487
283
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
488
284
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
489
285
  let baseOptions;
@@ -508,15 +304,15 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
508
304
  /**
509
305
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 가시성 마스킹과는 직교한 정산 데이터이며 읽기 전용입니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
510
306
  * @summary 정산 정보 조회
511
- * @param {string} bidId
307
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
512
308
  * @param {*} [options] Override http request option.
513
309
  * @throws {RequiredError}
514
310
  */
515
- getBidSettlement: (bidId_1, ...args_1) => __awaiter(this, [bidId_1, ...args_1], void 0, function* (bidId, options = {}) {
516
- // verify required parameter 'bidId' is not null or undefined
517
- assertParamExists('getBidSettlement', 'bidId', bidId);
518
- const localVarPath = `/v2/bids/{bidId}/settlement`
519
- .replace('{bidId}', encodeURIComponent(String(bidId)));
311
+ getBidSettlement: (bidRef_1, ...args_1) => __awaiter(this, [bidRef_1, ...args_1], void 0, function* (bidRef, options = {}) {
312
+ // verify required parameter 'bidRef' is not null or undefined
313
+ assertParamExists('getBidSettlement', 'bidRef', bidRef);
314
+ const localVarPath = `/v2/bids/{bidRef}/settlement`
315
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
520
316
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
521
317
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
522
318
  let baseOptions;
@@ -541,16 +337,16 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
541
337
  /**
542
338
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
543
339
  * @summary 거래명세서 조회
544
- * @param {string} bidId
340
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
545
341
  * @param {number} [paperCode]
546
342
  * @param {*} [options] Override http request option.
547
343
  * @throws {RequiredError}
548
344
  */
549
- getBidStatement: (bidId_1, paperCode_1, ...args_1) => __awaiter(this, [bidId_1, paperCode_1, ...args_1], void 0, function* (bidId, paperCode, options = {}) {
550
- // verify required parameter 'bidId' is not null or undefined
551
- assertParamExists('getBidStatement', 'bidId', bidId);
552
- const localVarPath = `/v2/bids/{bidId}/statement`
553
- .replace('{bidId}', encodeURIComponent(String(bidId)));
345
+ getBidStatement: (bidRef_1, paperCode_1, ...args_1) => __awaiter(this, [bidRef_1, paperCode_1, ...args_1], void 0, function* (bidRef, paperCode, options = {}) {
346
+ // verify required parameter 'bidRef' is not null or undefined
347
+ assertParamExists('getBidStatement', 'bidRef', bidRef);
348
+ const localVarPath = `/v2/bids/{bidRef}/statement`
349
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
554
350
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
555
351
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
556
352
  let baseOptions;
@@ -675,72 +471,6 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
675
471
  options: localVarRequestOptions,
676
472
  };
677
473
  }),
678
- /**
679
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
680
- * @summary 공급사 카드결제 가능 여부
681
- * @param {string} memberId 계약업체 회원 ID
682
- * @param {*} [options] Override http request option.
683
- * @throws {RequiredError}
684
- */
685
- getSupplierCardPayableV2: (memberId_1, ...args_1) => __awaiter(this, [memberId_1, ...args_1], void 0, function* (memberId, options = {}) {
686
- // verify required parameter 'memberId' is not null or undefined
687
- assertParamExists('getSupplierCardPayableV2', 'memberId', memberId);
688
- const localVarPath = `/v2/suppliers/{memberId}/card-payable`
689
- .replace('{memberId}', encodeURIComponent(String(memberId)));
690
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
691
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
692
- let baseOptions;
693
- if (configuration) {
694
- baseOptions = configuration.baseOptions;
695
- }
696
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);
697
- const localVarHeaderParameter = {};
698
- const localVarQueryParameter = {};
699
- // authentication partner-oauth2 required
700
- // oauth required
701
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["payments:read"], configuration);
702
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
703
- setSearchParams(localVarUrlObj, localVarQueryParameter);
704
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
705
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
706
- return {
707
- url: toPathString(localVarUrlObj),
708
- options: localVarRequestOptions,
709
- };
710
- }),
711
- /**
712
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
713
- * @summary 웹훅 구독 단건 조회
714
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
715
- * @param {*} [options] Override http request option.
716
- * @throws {RequiredError}
717
- */
718
- getWebhookEndpoint: (endpointId_1, ...args_1) => __awaiter(this, [endpointId_1, ...args_1], void 0, function* (endpointId, options = {}) {
719
- // verify required parameter 'endpointId' is not null or undefined
720
- assertParamExists('getWebhookEndpoint', 'endpointId', endpointId);
721
- const localVarPath = `/v2/webhook-endpoints/{endpointId}`
722
- .replace('{endpointId}', encodeURIComponent(String(endpointId)));
723
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
724
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
725
- let baseOptions;
726
- if (configuration) {
727
- baseOptions = configuration.baseOptions;
728
- }
729
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);
730
- const localVarHeaderParameter = {};
731
- const localVarQueryParameter = {};
732
- // authentication partner-oauth2 required
733
- // oauth required
734
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:read"], configuration);
735
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
736
- setSearchParams(localVarUrlObj, localVarQueryParameter);
737
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
738
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
739
- return {
740
- url: toPathString(localVarUrlObj),
741
- options: localVarRequestOptions,
742
- };
743
- }),
744
474
  /**
745
475
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
746
476
  * @summary Partner API 헬스체크
@@ -768,7 +498,7 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
768
498
  };
769
499
  }),
770
500
  /**
771
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 때 `304` 를 본문 없이 받습니다 — 마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 — 요청한 건수와 받은 건수가 다를 수 있으니 `bidId` 로 대조하세요. **목록이 길어 URL 부담되면** `POST /v2/bid-results/query` 쓰세요. 응답은 같습니다.
501
+ * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 때 `304` 를 본문 없이 받습니다 — 마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 — 요청한 건수와 받은 건수가 다를 수 있으니 `bidId` 로 대조하세요. **단건 조회:** 공고 하나만 때도 `bidIds` 에 하나만 넣거나 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요. 종전의 `GET /v2/bids/{bidRef}/result` 는 상세 응답의 부분집합이라 폐지됐습니다.
772
502
  * @summary 공고 결과 배치 조회
773
503
  * @param {string} bidIds 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidIds&#x60; 를 반복해 전달합니다. 최대 100건.
774
504
  * @param {*} [options] Override http request option.
@@ -852,7 +582,7 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
852
582
  };
853
583
  }),
854
584
  /**
855
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market 이 데이터를 채워 PDF 로 만들어 주는 서류입니다. 생성 API 의 `paperCodes` 에 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidId}/contract-documents` 가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
585
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
856
586
  * @summary 거래에 필요한 계약서류 목록 조회
857
587
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
858
588
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -893,288 +623,107 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
893
623
  };
894
624
  }),
895
625
  /**
896
- * 기관에 공유된 물품 **아직 전송되지 않은 것**을 조회합니다. **증분 피드입니다.** 가져간 물품을 `POST /v2/products/receipts` 수신확인하면 다음 조회 결과에서 빠집니다. 수신확인을 하지 않으면 같은 물품이 계속 내려옵니다. **권장 흐름:** 조회 자기 시스템에 저장 저장에 성공한 물품 코드만 수신확인. 저장 전에 수신확인하면 물품은 다시 받을 없습니다. **조회 범위:** 요청 키가 대행하는 기관 그룹입니다. 기관 그룹이 설정되지 않은 키는 403 입니다. **필수 스코프:** `products:read`
897
- * @summary 물품 카탈로그 조회
626
+ * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
627
+ * @summary 유찰 처리
628
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
629
+ * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
630
+ * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
898
631
  * @param {*} [options] Override http request option.
899
632
  * @throws {RequiredError}
900
633
  */
901
- listProducts: (...args_1) => __awaiter(this, [...args_1], void 0, function* (options = {}) {
902
- const localVarPath = `/v2/products`;
634
+ markBidFailed: (bidRef_1, idempotencyKey_1, markBidFailedRequestDto_1, ...args_1) => __awaiter(this, [bidRef_1, idempotencyKey_1, markBidFailedRequestDto_1, ...args_1], void 0, function* (bidRef, idempotencyKey, markBidFailedRequestDto, options = {}) {
635
+ // verify required parameter 'bidRef' is not null or undefined
636
+ assertParamExists('markBidFailed', 'bidRef', bidRef);
637
+ // verify required parameter 'idempotencyKey' is not null or undefined
638
+ assertParamExists('markBidFailed', 'idempotencyKey', idempotencyKey);
639
+ // verify required parameter 'markBidFailedRequestDto' is not null or undefined
640
+ assertParamExists('markBidFailed', 'markBidFailedRequestDto', markBidFailedRequestDto);
641
+ const localVarPath = `/v2/bids/{bidRef}/fail`
642
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
903
643
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
904
644
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
905
645
  let baseOptions;
906
646
  if (configuration) {
907
647
  baseOptions = configuration.baseOptions;
908
648
  }
909
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);
649
+ const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
910
650
  const localVarHeaderParameter = {};
911
651
  const localVarQueryParameter = {};
912
652
  // authentication partner-oauth2 required
913
653
  // oauth required
914
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["products:read"], configuration);
654
+ yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["awards:write"], configuration);
655
+ localVarHeaderParameter['Content-Type'] = 'application/json';
915
656
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
657
+ if (idempotencyKey != null) {
658
+ localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
659
+ }
916
660
  setSearchParams(localVarUrlObj, localVarQueryParameter);
917
661
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
918
662
  localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
663
+ localVarRequestOptions.data = serializeDataIfNeeded(markBidFailedRequestDto, localVarRequestOptions, configuration);
919
664
  return {
920
665
  url: toPathString(localVarUrlObj),
921
666
  options: localVarRequestOptions,
922
667
  };
923
668
  }),
924
669
  /**
925
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 `status=EXHAUSTED` 걸러 다시 처리하면 됩니다. - \"이벤트가 온다\" 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 행이며 `eventId` 가 같고 `attempt` 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 다음 요청의 `cursor` 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 허용 밖이거나 `limit` 범위를 벗어났습니다 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
926
- * @summary 웹훅 전송 이력 조회
927
- * @param {string} [endpointId] 구독의 전송만 조회합니다. 미지정이면 키의 모든 구독을 함께 조회합니다.
928
- * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
929
- * @param {number} [limit] 페이지 크기(1~200, 기본 50).
930
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
670
+ * 낙찰 결과를 등록합니다. 요청의 응답은 처리 상태 `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시간 캐시 응답 반환.
671
+ * @summary 낙찰 결과 전송
672
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
673
+ * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
674
+ * @param {RegisterAwardRequestDto} registerAwardRequestDto
931
675
  * @param {*} [options] Override http request option.
932
676
  * @throws {RequiredError}
933
677
  */
934
- listWebhookDeliveries: (endpointId_1, status_1, limit_1, cursor_1, ...args_1) => __awaiter(this, [endpointId_1, status_1, limit_1, cursor_1, ...args_1], void 0, function* (endpointId, status, limit, cursor, options = {}) {
935
- const localVarPath = `/v2/webhook-deliveries`;
678
+ registerAward: (bidRef_1, idempotencyKey_1, registerAwardRequestDto_1, ...args_1) => __awaiter(this, [bidRef_1, idempotencyKey_1, registerAwardRequestDto_1, ...args_1], void 0, function* (bidRef, idempotencyKey, registerAwardRequestDto, options = {}) {
679
+ // verify required parameter 'bidRef' is not null or undefined
680
+ assertParamExists('registerAward', 'bidRef', bidRef);
681
+ // verify required parameter 'idempotencyKey' is not null or undefined
682
+ assertParamExists('registerAward', 'idempotencyKey', idempotencyKey);
683
+ // verify required parameter 'registerAwardRequestDto' is not null or undefined
684
+ assertParamExists('registerAward', 'registerAwardRequestDto', registerAwardRequestDto);
685
+ const localVarPath = `/v2/bids/{bidRef}/award`
686
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
936
687
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
937
688
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
938
689
  let baseOptions;
939
690
  if (configuration) {
940
691
  baseOptions = configuration.baseOptions;
941
692
  }
942
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);
693
+ const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
943
694
  const localVarHeaderParameter = {};
944
695
  const localVarQueryParameter = {};
945
696
  // authentication partner-oauth2 required
946
697
  // oauth required
947
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:read"], configuration);
948
- if (endpointId !== undefined) {
949
- localVarQueryParameter['endpointId'] = endpointId;
950
- }
951
- if (status !== undefined) {
952
- localVarQueryParameter['status'] = status;
953
- }
954
- if (limit !== undefined) {
955
- localVarQueryParameter['limit'] = limit;
956
- }
957
- if (cursor !== undefined) {
958
- localVarQueryParameter['cursor'] = cursor;
959
- }
698
+ yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["awards:write"], configuration);
699
+ localVarHeaderParameter['Content-Type'] = 'application/json';
960
700
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
701
+ if (idempotencyKey != null) {
702
+ localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
703
+ }
961
704
  setSearchParams(localVarUrlObj, localVarQueryParameter);
962
705
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
963
706
  localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
707
+ localVarRequestOptions.data = serializeDataIfNeeded(registerAwardRequestDto, localVarRequestOptions, configuration);
964
708
  return {
965
709
  url: toPathString(localVarUrlObj),
966
710
  options: localVarRequestOptions,
967
711
  };
968
712
  }),
969
713
  /**
970
- * API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 발송 요청마다 헤더 `X-CMarket-Signature` 실립니다. ``` X-CMarket-Signature: t=<unix초>,v1=<hex> ``` `v1` 은 `HMAC-SHA256(secret, \"${t}.${요청 본문 원문}\")` 소문자 hex 입니다. 1. 헤더를 `t` 와 `v1` 로 나눕니다. 2. `\"${t}.${본문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. 등록 시 받은 시크릿으로 HMAC-SHA256 을 계산해 `v1` 과 비교합니다. 비교는 **상수 시간** 비교 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `t` 가 현재 시각으로부터 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). ### 중복 제거 `X-CMarket-Event-Id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. ### 응답과 재시도 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
971
- * @summary 웹훅 구독 목록 조회
714
+ * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 요청 본문에 직접 싣지 마세요 — 먼저 `POST /v2/files`(base64 또는 url)올려 `fileKey` 받고, 32자 키를 요청의 `attachments` 배열에 넣습니다.
715
+ * @summary 공고 등록
716
+ * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
717
+ * @param {CreateBidRequestDto} createBidRequestDto
972
718
  * @param {*} [options] Override http request option.
973
719
  * @throws {RequiredError}
974
720
  */
975
- listWebhookEndpoints: (...args_1) => __awaiter(this, [...args_1], void 0, function* (options = {}) {
976
- const localVarPath = `/v2/webhook-endpoints`;
977
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
978
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
979
- let baseOptions;
980
- if (configuration) {
981
- baseOptions = configuration.baseOptions;
982
- }
983
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'GET' }, baseOptions), options);
984
- const localVarHeaderParameter = {};
985
- const localVarQueryParameter = {};
986
- // authentication partner-oauth2 required
987
- // oauth required
988
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:read"], configuration);
989
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
990
- setSearchParams(localVarUrlObj, localVarQueryParameter);
991
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
992
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
993
- return {
994
- url: toPathString(localVarUrlObj),
995
- options: localVarRequestOptions,
996
- };
997
- }),
998
- /**
999
- * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 후 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
1000
- * @summary 유찰 처리
1001
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1002
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1003
- * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
1004
- * @param {*} [options] Override http request option.
1005
- * @throws {RequiredError}
1006
- */
1007
- markBidFailed: (bidId_1, idempotencyKey_1, markBidFailedRequestDto_1, ...args_1) => __awaiter(this, [bidId_1, idempotencyKey_1, markBidFailedRequestDto_1, ...args_1], void 0, function* (bidId, idempotencyKey, markBidFailedRequestDto, options = {}) {
1008
- // verify required parameter 'bidId' is not null or undefined
1009
- assertParamExists('markBidFailed', 'bidId', bidId);
1010
- // verify required parameter 'idempotencyKey' is not null or undefined
1011
- assertParamExists('markBidFailed', 'idempotencyKey', idempotencyKey);
1012
- // verify required parameter 'markBidFailedRequestDto' is not null or undefined
1013
- assertParamExists('markBidFailed', 'markBidFailedRequestDto', markBidFailedRequestDto);
1014
- const localVarPath = `/v2/bids/{bidId}/fail`
1015
- .replace('{bidId}', encodeURIComponent(String(bidId)));
1016
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1017
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1018
- let baseOptions;
1019
- if (configuration) {
1020
- baseOptions = configuration.baseOptions;
1021
- }
1022
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
1023
- const localVarHeaderParameter = {};
1024
- const localVarQueryParameter = {};
1025
- // authentication partner-oauth2 required
1026
- // oauth required
1027
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["awards:write"], configuration);
1028
- localVarHeaderParameter['Content-Type'] = 'application/json';
1029
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1030
- if (idempotencyKey != null) {
1031
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1032
- }
1033
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1034
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1035
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
1036
- localVarRequestOptions.data = serializeDataIfNeeded(markBidFailedRequestDto, localVarRequestOptions, configuration);
1037
- return {
1038
- url: toPathString(localVarUrlObj),
1039
- options: localVarRequestOptions,
1040
- };
1041
- }),
1042
- /**
1043
- * 초안(DRAFT) 상태로 등록된 공고를 진행중(ONGOING)으로 게시합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 연간/지명계약 등으로 초안 상태로 등록된 공고를 명시적으로 게시할 때. 등록 응답의 `status` 로 게시 필요 여부를 판별합니다. **전제조건:** 초안(DRAFT) 상태이고 마감(bidEndAt)이 미래여야 합니다. **거부:** 초안이 아니거나 마감이 지난 공고 → 409. 마감이 지났으면 먼저 마감일을 연장해야 합니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403). **멱등성:** `Idempotency-Key` 헤더 필수.
1044
- * @summary 공고 게시(초안 → 진행중)
1045
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1046
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
1047
- * @param {*} [options] Override http request option.
1048
- * @throws {RequiredError}
1049
- */
1050
- publishBid: (bidId_1, idempotencyKey_1, ...args_1) => __awaiter(this, [bidId_1, idempotencyKey_1, ...args_1], void 0, function* (bidId, idempotencyKey, options = {}) {
1051
- // verify required parameter 'bidId' is not null or undefined
1052
- assertParamExists('publishBid', 'bidId', bidId);
1053
- // verify required parameter 'idempotencyKey' is not null or undefined
1054
- assertParamExists('publishBid', 'idempotencyKey', idempotencyKey);
1055
- const localVarPath = `/v2/bids/{bidId}/publish`
1056
- .replace('{bidId}', encodeURIComponent(String(bidId)));
1057
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1058
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1059
- let baseOptions;
1060
- if (configuration) {
1061
- baseOptions = configuration.baseOptions;
1062
- }
1063
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
1064
- const localVarHeaderParameter = {};
1065
- const localVarQueryParameter = {};
1066
- // authentication partner-oauth2 required
1067
- // oauth required
1068
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["bids:write"], configuration);
1069
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1070
- if (idempotencyKey != null) {
1071
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1072
- }
1073
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1074
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1075
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
1076
- return {
1077
- url: toPathString(localVarUrlObj),
1078
- options: localVarRequestOptions,
1079
- };
1080
- }),
1081
- /**
1082
- * 공고의 자동생성 계약서류(발주서·공고결과·표준계약서 등)를 생성/재생성합니다. **V6 대응:** `RegenerateAllContractPdfsCommand` — 웹 어드민의 \"계약 서류 일괄 재생성\"과 동일 경로. **호출 시점:** 낙찰(계약 시작) 후 계약서류가 필요하거나, 생성에 실패한 서류를 다시 만들 때. **부수효과:** - 생성 실패(DEAD_LETTER) 상태의 자동생성 PDF 가 재생성 큐에 등록됩니다(비동기). - 승낙사항(ACCEPTANCE) 계열은 운영자 승인 워크플로가 필요해 이 경로에서 제외됩니다. **응답:** 즉시 파일이 아니라 큐 등록 결과(`enqueuedCount`/`skippedCount`)를 반환합니다. 잠시 후 자동 생성됩니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1083
- * @summary 계약서류 생성(재생성)
1084
- * @param {string} bidId 공고번호(buy_idx, 예 CM…) 또는 외부 구매번호(bid_puchase_no).
1085
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1086
- * @param {*} [options] Override http request option.
1087
- * @throws {RequiredError}
1088
- */
1089
- regenerateContractDocuments: (bidId_1, idempotencyKey_1, ...args_1) => __awaiter(this, [bidId_1, idempotencyKey_1, ...args_1], void 0, function* (bidId, idempotencyKey, options = {}) {
1090
- // verify required parameter 'bidId' is not null or undefined
1091
- assertParamExists('regenerateContractDocuments', 'bidId', bidId);
1092
- // verify required parameter 'idempotencyKey' is not null or undefined
1093
- assertParamExists('regenerateContractDocuments', 'idempotencyKey', idempotencyKey);
1094
- const localVarPath = `/v2/bids/{bidId}/contract-documents`
1095
- .replace('{bidId}', encodeURIComponent(String(bidId)));
1096
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1097
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1098
- let baseOptions;
1099
- if (configuration) {
1100
- baseOptions = configuration.baseOptions;
1101
- }
1102
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
1103
- const localVarHeaderParameter = {};
1104
- const localVarQueryParameter = {};
1105
- // authentication partner-oauth2 required
1106
- // oauth required
1107
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["contracts:write"], configuration);
1108
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1109
- if (idempotencyKey != null) {
1110
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1111
- }
1112
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1113
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1114
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
1115
- return {
1116
- url: toPathString(localVarUrlObj),
1117
- options: localVarRequestOptions,
1118
- };
1119
- }),
1120
- /**
1121
- * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `AWARDED` 를 반환합니다. **호출 시점:** 입찰 마감 후 낙찰자가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 낙찰자(공급사)의 응찰 건이 낙찰 처리됩니다. - 이후 **공고의 조회 상태(status)는 계약진행(CONTRACT_IN_PROGRESS)** 으로 진행합니다. `AWARDED` 라는 공고 status 는 존재하지 않으므로, 낙찰 여부는 `GET /v2/bids/{bidId}/results` 의 `participants[].isWinner` 또는 `GET /v2/bids/{bidId}` 의 status(=계약진행)로 관측하세요(`status === \'AWARDED\'` 폴링 금지). - 협상 방식(NEGOTIATION/NEGOTIATION_AUTO) 공고는 이 엔드포인트 전에 `POST /v2/bids/{bidId}/negotiation-scores`(협상 점수평가)로 평가를 완료해야 합니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 를 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 시 24시간 내 캐시 응답 반환.
1122
- * @summary 낙찰 결과 전송
1123
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1124
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1125
- * @param {RegisterAwardRequestDto} registerAwardRequestDto
1126
- * @param {*} [options] Override http request option.
1127
- * @throws {RequiredError}
1128
- */
1129
- registerAward: (bidId_1, idempotencyKey_1, registerAwardRequestDto_1, ...args_1) => __awaiter(this, [bidId_1, idempotencyKey_1, registerAwardRequestDto_1, ...args_1], void 0, function* (bidId, idempotencyKey, registerAwardRequestDto, options = {}) {
1130
- // verify required parameter 'bidId' is not null or undefined
1131
- assertParamExists('registerAward', 'bidId', bidId);
1132
- // verify required parameter 'idempotencyKey' is not null or undefined
1133
- assertParamExists('registerAward', 'idempotencyKey', idempotencyKey);
1134
- // verify required parameter 'registerAwardRequestDto' is not null or undefined
1135
- assertParamExists('registerAward', 'registerAwardRequestDto', registerAwardRequestDto);
1136
- const localVarPath = `/v2/bids/{bidId}/award`
1137
- .replace('{bidId}', encodeURIComponent(String(bidId)));
1138
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1139
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1140
- let baseOptions;
1141
- if (configuration) {
1142
- baseOptions = configuration.baseOptions;
1143
- }
1144
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
1145
- const localVarHeaderParameter = {};
1146
- const localVarQueryParameter = {};
1147
- // authentication partner-oauth2 required
1148
- // oauth required
1149
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["awards:write"], configuration);
1150
- localVarHeaderParameter['Content-Type'] = 'application/json';
1151
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1152
- if (idempotencyKey != null) {
1153
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1154
- }
1155
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1156
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1157
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
1158
- localVarRequestOptions.data = serializeDataIfNeeded(registerAwardRequestDto, localVarRequestOptions, configuration);
1159
- return {
1160
- url: toPathString(localVarUrlObj),
1161
- options: localVarRequestOptions,
1162
- };
1163
- }),
1164
- /**
1165
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수.
1166
- * @summary 공고 등록
1167
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
1168
- * @param {CreateBidRequestDto} createBidRequestDto
1169
- * @param {*} [options] Override http request option.
1170
- * @throws {RequiredError}
1171
- */
1172
- registerBid: (idempotencyKey_1, createBidRequestDto_1, ...args_1) => __awaiter(this, [idempotencyKey_1, createBidRequestDto_1, ...args_1], void 0, function* (idempotencyKey, createBidRequestDto, options = {}) {
1173
- // verify required parameter 'idempotencyKey' is not null or undefined
1174
- assertParamExists('registerBid', 'idempotencyKey', idempotencyKey);
1175
- // verify required parameter 'createBidRequestDto' is not null or undefined
1176
- assertParamExists('registerBid', 'createBidRequestDto', createBidRequestDto);
1177
- const localVarPath = `/v2/bids`;
721
+ registerBid: (idempotencyKey_1, createBidRequestDto_1, ...args_1) => __awaiter(this, [idempotencyKey_1, createBidRequestDto_1, ...args_1], void 0, function* (idempotencyKey, createBidRequestDto, options = {}) {
722
+ // verify required parameter 'idempotencyKey' is not null or undefined
723
+ assertParamExists('registerBid', 'idempotencyKey', idempotencyKey);
724
+ // verify required parameter 'createBidRequestDto' is not null or undefined
725
+ assertParamExists('registerBid', 'createBidRequestDto', createBidRequestDto);
726
+ const localVarPath = `/v2/bids`;
1178
727
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1179
728
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1180
729
  let baseOptions;
@@ -1244,21 +793,21 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
1244
793
  /**
1245
794
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1246
795
  * @summary 낙찰 되돌리기
1247
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
796
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1248
797
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
1249
798
  * @param {RevertAwardRequestDto} revertAwardRequestDto
1250
799
  * @param {*} [options] Override http request option.
1251
800
  * @throws {RequiredError}
1252
801
  */
1253
- revertAward: (bidId_1, idempotencyKey_1, revertAwardRequestDto_1, ...args_1) => __awaiter(this, [bidId_1, idempotencyKey_1, revertAwardRequestDto_1, ...args_1], void 0, function* (bidId, idempotencyKey, revertAwardRequestDto, options = {}) {
1254
- // verify required parameter 'bidId' is not null or undefined
1255
- assertParamExists('revertAward', 'bidId', bidId);
802
+ revertAward: (bidRef_1, idempotencyKey_1, revertAwardRequestDto_1, ...args_1) => __awaiter(this, [bidRef_1, idempotencyKey_1, revertAwardRequestDto_1, ...args_1], void 0, function* (bidRef, idempotencyKey, revertAwardRequestDto, options = {}) {
803
+ // verify required parameter 'bidRef' is not null or undefined
804
+ assertParamExists('revertAward', 'bidRef', bidRef);
1256
805
  // verify required parameter 'idempotencyKey' is not null or undefined
1257
806
  assertParamExists('revertAward', 'idempotencyKey', idempotencyKey);
1258
807
  // verify required parameter 'revertAwardRequestDto' is not null or undefined
1259
808
  assertParamExists('revertAward', 'revertAwardRequestDto', revertAwardRequestDto);
1260
- const localVarPath = `/v2/bids/{bidId}/award`
1261
- .replace('{bidId}', encodeURIComponent(String(bidId)));
809
+ const localVarPath = `/v2/bids/{bidRef}/award`
810
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
1262
811
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1263
812
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1264
813
  let baseOptions;
@@ -1285,98 +834,20 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
1285
834
  options: localVarRequestOptions,
1286
835
  };
1287
836
  }),
1288
- /**
1289
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 이 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 수 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 새 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 를 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
1290
- * @summary 웹훅 서명 시크릿 재발급
1291
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1292
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1293
- * @param {*} [options] Override http request option.
1294
- * @throws {RequiredError}
1295
- */
1296
- rotateWebhookSecret: (endpointId_1, idempotencyKey_1, ...args_1) => __awaiter(this, [endpointId_1, idempotencyKey_1, ...args_1], void 0, function* (endpointId, idempotencyKey, options = {}) {
1297
- // verify required parameter 'endpointId' is not null or undefined
1298
- assertParamExists('rotateWebhookSecret', 'endpointId', endpointId);
1299
- // verify required parameter 'idempotencyKey' is not null or undefined
1300
- assertParamExists('rotateWebhookSecret', 'idempotencyKey', idempotencyKey);
1301
- const localVarPath = `/v2/webhook-endpoints/{endpointId}/rotate-secret`
1302
- .replace('{endpointId}', encodeURIComponent(String(endpointId)));
1303
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1304
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1305
- let baseOptions;
1306
- if (configuration) {
1307
- baseOptions = configuration.baseOptions;
1308
- }
1309
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
1310
- const localVarHeaderParameter = {};
1311
- const localVarQueryParameter = {};
1312
- // authentication partner-oauth2 required
1313
- // oauth required
1314
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:write"], configuration);
1315
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1316
- if (idempotencyKey != null) {
1317
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1318
- }
1319
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1320
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1321
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
1322
- return {
1323
- url: toPathString(localVarUrlObj),
1324
- options: localVarRequestOptions,
1325
- };
1326
- }),
1327
- /**
1328
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 그 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` 에 `delivered: false` 로 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 은 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
1329
- * @summary 웹훅 연결 확인 발송
1330
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1331
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1332
- * @param {*} [options] Override http request option.
1333
- * @throws {RequiredError}
1334
- */
1335
- sendWebhookTestEvent: (endpointId_1, idempotencyKey_1, ...args_1) => __awaiter(this, [endpointId_1, idempotencyKey_1, ...args_1], void 0, function* (endpointId, idempotencyKey, options = {}) {
1336
- // verify required parameter 'endpointId' is not null or undefined
1337
- assertParamExists('sendWebhookTestEvent', 'endpointId', endpointId);
1338
- // verify required parameter 'idempotencyKey' is not null or undefined
1339
- assertParamExists('sendWebhookTestEvent', 'idempotencyKey', idempotencyKey);
1340
- const localVarPath = `/v2/webhook-endpoints/{endpointId}/test`
1341
- .replace('{endpointId}', encodeURIComponent(String(endpointId)));
1342
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1343
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1344
- let baseOptions;
1345
- if (configuration) {
1346
- baseOptions = configuration.baseOptions;
1347
- }
1348
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
1349
- const localVarHeaderParameter = {};
1350
- const localVarQueryParameter = {};
1351
- // authentication partner-oauth2 required
1352
- // oauth required
1353
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:write"], configuration);
1354
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1355
- if (idempotencyKey != null) {
1356
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1357
- }
1358
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1359
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1360
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
1361
- return {
1362
- url: toPathString(localVarUrlObj),
1363
- options: localVarRequestOptions,
1364
- };
1365
- }),
1366
837
  /**
1367
838
  * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEdit=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
1368
839
  * @summary 공고 수정
1369
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
840
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1370
841
  * @param {string} ifMatch
1371
- * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidId}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
842
+ * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1372
843
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
1373
844
  * @param {UpdateBidRequestDto} updateBidRequestDto
1374
845
  * @param {*} [options] Override http request option.
1375
846
  * @throws {RequiredError}
1376
847
  */
1377
- updateBid: (bidId_1, ifMatch_1, ifMatch2_1, idempotencyKey_1, updateBidRequestDto_1, ...args_1) => __awaiter(this, [bidId_1, ifMatch_1, ifMatch2_1, idempotencyKey_1, updateBidRequestDto_1, ...args_1], void 0, function* (bidId, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options = {}) {
1378
- // verify required parameter 'bidId' is not null or undefined
1379
- assertParamExists('updateBid', 'bidId', bidId);
848
+ updateBid: (bidRef_1, ifMatch_1, ifMatch2_1, idempotencyKey_1, updateBidRequestDto_1, ...args_1) => __awaiter(this, [bidRef_1, ifMatch_1, ifMatch2_1, idempotencyKey_1, updateBidRequestDto_1, ...args_1], void 0, function* (bidRef, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options = {}) {
849
+ // verify required parameter 'bidRef' is not null or undefined
850
+ assertParamExists('updateBid', 'bidRef', bidRef);
1380
851
  // verify required parameter 'ifMatch' is not null or undefined
1381
852
  assertParamExists('updateBid', 'ifMatch', ifMatch);
1382
853
  // verify required parameter 'ifMatch2' is not null or undefined
@@ -1385,8 +856,8 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
1385
856
  assertParamExists('updateBid', 'idempotencyKey', idempotencyKey);
1386
857
  // verify required parameter 'updateBidRequestDto' is not null or undefined
1387
858
  assertParamExists('updateBid', 'updateBidRequestDto', updateBidRequestDto);
1388
- const localVarPath = `/v2/bids/{bidId}`
1389
- .replace('{bidId}', encodeURIComponent(String(bidId)));
859
+ const localVarPath = `/v2/bids/{bidRef}`
860
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
1390
861
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1391
862
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1392
863
  let baseOptions;
@@ -1419,62 +890,6 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration) {
1419
890
  options: localVarRequestOptions,
1420
891
  };
1421
892
  }),
1422
- /**
1423
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 는 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 가 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 이 헤더가 없으면 두 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` — 헤더를 빼먹었습니다. 조회 후 `ETag` 를 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** — 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1424
- * @summary 웹훅 구독 수정
1425
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1426
- * @param {string} ifMatch
1427
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
1428
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1429
- * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
1430
- * @param {*} [options] Override http request option.
1431
- * @throws {RequiredError}
1432
- */
1433
- updateWebhookEndpoint: (endpointId_1, ifMatch_1, ifMatch2_1, idempotencyKey_1, updateWebhookEndpointRequestDto_1, ...args_1) => __awaiter(this, [endpointId_1, ifMatch_1, ifMatch2_1, idempotencyKey_1, updateWebhookEndpointRequestDto_1, ...args_1], void 0, function* (endpointId, ifMatch, ifMatch2, idempotencyKey, updateWebhookEndpointRequestDto, options = {}) {
1434
- // verify required parameter 'endpointId' is not null or undefined
1435
- assertParamExists('updateWebhookEndpoint', 'endpointId', endpointId);
1436
- // verify required parameter 'ifMatch' is not null or undefined
1437
- assertParamExists('updateWebhookEndpoint', 'ifMatch', ifMatch);
1438
- // verify required parameter 'ifMatch2' is not null or undefined
1439
- assertParamExists('updateWebhookEndpoint', 'ifMatch2', ifMatch2);
1440
- // verify required parameter 'idempotencyKey' is not null or undefined
1441
- assertParamExists('updateWebhookEndpoint', 'idempotencyKey', idempotencyKey);
1442
- // verify required parameter 'updateWebhookEndpointRequestDto' is not null or undefined
1443
- assertParamExists('updateWebhookEndpoint', 'updateWebhookEndpointRequestDto', updateWebhookEndpointRequestDto);
1444
- const localVarPath = `/v2/webhook-endpoints/{endpointId}`
1445
- .replace('{endpointId}', encodeURIComponent(String(endpointId)));
1446
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1447
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1448
- let baseOptions;
1449
- if (configuration) {
1450
- baseOptions = configuration.baseOptions;
1451
- }
1452
- const localVarRequestOptions = Object.assign(Object.assign({ method: 'PATCH' }, baseOptions), options);
1453
- const localVarHeaderParameter = {};
1454
- const localVarQueryParameter = {};
1455
- // authentication partner-oauth2 required
1456
- // oauth required
1457
- yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:write"], configuration);
1458
- localVarHeaderParameter['Content-Type'] = 'application/json';
1459
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1460
- if (ifMatch != null) {
1461
- localVarHeaderParameter['if-match'] = String(ifMatch);
1462
- }
1463
- if (ifMatch2 != null) {
1464
- localVarHeaderParameter['If-Match'] = String(ifMatch2);
1465
- }
1466
- if (idempotencyKey != null) {
1467
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1468
- }
1469
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1470
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1471
- localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
1472
- localVarRequestOptions.data = serializeDataIfNeeded(updateWebhookEndpointRequestDto, localVarRequestOptions, configuration);
1473
- return {
1474
- url: toPathString(localVarUrlObj),
1475
- options: localVarRequestOptions,
1476
- };
1477
- }),
1478
893
  /**
1479
894
  * 스코프 `files:write` + `Idempotency-Key` 헤더 필수. base64 또는 url 중 정확히 하나를 제출한다.
1480
895
  * @summary 공고 첨부파일 업로드(base64 또는 url) → fileKey
@@ -1518,53 +933,36 @@ export const PartnerV2ApiFp = function (configuration) {
1518
933
  const localVarAxiosParamCreator = PartnerV2ApiAxiosParamCreator(configuration);
1519
934
  return {
1520
935
  /**
1521
- * 저장을 마친 물품을 전송완료로 표시해 다음 조회에서 제외합니다. **되돌릴 수 없습니다.** 표시한 물품은 `GET /v2/products` 다시 내려오지 않으므로, 자기 시스템에 저장이 끝난 뒤에 호출하세요. **표시 범위는 기관 그룹으로 잠깁니다.** 다른 기관의 물품 코드를 섞어 보내면 건은 표시되지 않고 `acknowledged` 요청 수보다 작게 돌아옵니다. **필수 스코프:** `products:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1522
- * @summary 물품 수신확인
1523
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1524
- * @param {AcknowledgeProductsRequestDto} acknowledgeProductsRequestDto
1525
- * @param {*} [options] Override http request option.
1526
- * @throws {RequiredError}
1527
- */
1528
- acknowledgeProductReceipt(idempotencyKey, acknowledgeProductsRequestDto, options) {
1529
- return __awaiter(this, void 0, void 0, function* () {
1530
- var _a, _b, _c;
1531
- const localVarAxiosArgs = yield localVarAxiosParamCreator.acknowledgeProductReceipt(idempotencyKey, acknowledgeProductsRequestDto, options);
1532
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1533
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.acknowledgeProductReceipt']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1534
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1535
- });
1536
- },
1537
- /**
1538
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 → 409. 타 발주처 공고 → 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidId}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
936
+ * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
1539
937
  * @summary 공고 취소
1540
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
938
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1541
939
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
1542
940
  * @param {CancelBidRequestDto} cancelBidRequestDto
1543
941
  * @param {*} [options] Override http request option.
1544
942
  * @throws {RequiredError}
1545
943
  */
1546
- cancelBid(bidId, idempotencyKey, cancelBidRequestDto, options) {
944
+ cancelBid(bidRef, idempotencyKey, cancelBidRequestDto, options) {
1547
945
  return __awaiter(this, void 0, void 0, function* () {
1548
946
  var _a, _b, _c;
1549
- const localVarAxiosArgs = yield localVarAxiosParamCreator.cancelBid(bidId, idempotencyKey, cancelBidRequestDto, options);
947
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.cancelBid(bidRef, idempotencyKey, cancelBidRequestDto, options);
1550
948
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1551
949
  const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.cancelBid']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1552
950
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1553
951
  });
1554
952
  },
1555
953
  /**
1556
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **V5 대응:** `acceptanceCompleteSend` — BidApi.xml `acceptanceComplete` 액션의 V6 후속. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 응답은 204가 아닌 200입니다 — 멱등성 인터셉터가 구체 바디를 캐시하고 SDK 가 타입드 응답을 필요로 하기 때문. **V5-compat 안내:** 거래명세서·검수보고서에 찍힐 구매사 사업자정보·담당자·작성일자 override(11종)는 modern v2 표면에서 제거됐습니다. 필요 시 V5 충실 카운터파트 `POST /v1/bids/{bidId}/acceptance`(`CompleteAcceptanceV1RequestDto`)를 사용하세요. **낙찰자 식별:** `winnerMemberId`(공급사 memberId). 내부 joinSeq 해소는 backend 가 처리합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
954
+ * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **V5 대응:** `acceptanceCompleteSend` — BidApi.xml `acceptanceComplete` 액션의 V6 후속. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 응답은 204가 아닌 200입니다 — 멱등성 인터셉터가 구체 바디를 캐시하고 SDK 가 타입드 응답을 필요로 하기 때문. **V5-compat 안내:** 거래명세서·검수보고서에 찍힐 구매사 사업자정보·담당자·작성일자 override(11종)는 modern v2 표면에서 제거됐습니다. 필요 시 V5 충실 카운터파트 `POST /v1/bids/{bidRef}/acceptance`(`CompleteAcceptanceV1RequestDto`)를 사용하세요. **낙찰자 식별:** `winnerMemberId`(공급사 memberId). 내부 joinSeq 해소는 backend 가 처리합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1557
955
  * @summary 검수완료 전송
1558
- * @param {string} bidId 공고 ID(&#x3D; backend bidId &#x3D; 등록 응답의 bidNo).
956
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1559
957
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1560
958
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
1561
959
  * @param {*} [options] Override http request option.
1562
960
  * @throws {RequiredError}
1563
961
  */
1564
- completeAcceptance(bidId, idempotencyKey, completeAcceptanceRequestDto, options) {
962
+ completeAcceptance(bidRef, idempotencyKey, completeAcceptanceRequestDto, options) {
1565
963
  return __awaiter(this, void 0, void 0, function* () {
1566
964
  var _a, _b, _c;
1567
- const localVarAxiosArgs = yield localVarAxiosParamCreator.completeAcceptance(bidId, idempotencyKey, completeAcceptanceRequestDto, options);
965
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.completeAcceptance(bidRef, idempotencyKey, completeAcceptanceRequestDto, options);
1568
966
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1569
967
  const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.completeAcceptance']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1570
968
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1573,37 +971,20 @@ export const PartnerV2ApiFp = function (configuration) {
1573
971
  /**
1574
972
  * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1575
973
  * @summary 정산 마감(송장 강제완료)
1576
- * @param {string} bidId
974
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1577
975
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1578
976
  * @param {*} [options] Override http request option.
1579
977
  * @throws {RequiredError}
1580
978
  */
1581
- completeInvoice(bidId, idempotencyKey, options) {
979
+ completeInvoice(bidRef, idempotencyKey, options) {
1582
980
  return __awaiter(this, void 0, void 0, function* () {
1583
981
  var _a, _b, _c;
1584
- const localVarAxiosArgs = yield localVarAxiosParamCreator.completeInvoice(bidId, idempotencyKey, options);
982
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.completeInvoice(bidRef, idempotencyKey, options);
1585
983
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1586
984
  const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.completeInvoice']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1587
985
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1588
986
  });
1589
987
  },
1590
- /**
1591
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
1592
- * @summary 결제창 발행
1593
- * @param {string} idempotencyKey 재시도 안전을 위한 멱등 키.
1594
- * @param {CreateCardPaymentRequestDto} createCardPaymentRequestDto
1595
- * @param {*} [options] Override http request option.
1596
- * @throws {RequiredError}
1597
- */
1598
- createCardPayment(idempotencyKey, createCardPaymentRequestDto, options) {
1599
- return __awaiter(this, void 0, void 0, function* () {
1600
- var _a, _b, _c;
1601
- const localVarAxiosArgs = yield localVarAxiosParamCreator.createCardPayment(idempotencyKey, createCardPaymentRequestDto, options);
1602
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1603
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.createCardPayment']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1604
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1605
- });
1606
- },
1607
988
  /**
1608
989
  * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인(APPROVED)되어 바로 결제 가능합니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. 거기서 카드를 골라 결제합니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/card-payment-requests/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — 같은 기능을 v2 응답 규약으로 제공하는 `POST /v2/card-payments` 와 `GET /v2/suppliers/{memberId}/card-payable` 를 신규 연동에 권합니다. 이 경로도 계속 동작하며 중단 일정은 없습니다.
1609
990
  * @summary 결제창 발행 (구 경로)
@@ -1623,7 +1004,7 @@ export const PartnerV2ApiFp = function (configuration) {
1623
1004
  });
1624
1005
  },
1625
1006
  /**
1626
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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/{bidId}/contract-documents` 가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1007
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1627
1008
  * @summary 계약서류 생성
1628
1009
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1629
1010
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
@@ -1639,42 +1020,6 @@ export const PartnerV2ApiFp = function (configuration) {
1639
1020
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1640
1021
  });
1641
1022
  },
1642
- /**
1643
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 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` 헤더 필수. ### 서명 검증 (필수) 발송 요청마다 헤더 `X-CMarket-Signature` 가 실립니다. ``` X-CMarket-Signature: t=<unix초>,v1=<hex> ``` `v1` 은 `HMAC-SHA256(secret, \"${t}.${요청 본문 원문}\")` 의 소문자 hex 입니다. 1. 헤더를 `t` 와 `v1` 로 나눕니다. 2. `\"${t}.${본문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. 등록 시 받은 시크릿으로 HMAC-SHA256 을 계산해 `v1` 과 비교합니다. 비교는 **상수 시간** 비교 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `t` 가 현재 시각으로부터 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). ### 중복 제거 `X-CMarket-Event-Id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. ### 응답과 재시도 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
1644
- * @summary 웹훅 구독 등록
1645
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1646
- * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
1647
- * @param {*} [options] Override http request option.
1648
- * @throws {RequiredError}
1649
- */
1650
- createWebhookEndpoint(idempotencyKey, createWebhookEndpointRequestDto, options) {
1651
- return __awaiter(this, void 0, void 0, function* () {
1652
- var _a, _b, _c;
1653
- const localVarAxiosArgs = yield localVarAxiosParamCreator.createWebhookEndpoint(idempotencyKey, createWebhookEndpointRequestDto, options);
1654
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1655
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.createWebhookEndpoint']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1656
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1657
- });
1658
- },
1659
- /**
1660
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH … {\"status\":\"DISABLED\"}` 를 쓰세요 — 시크릿과 이벤트 구성이 남아 그대로 되살릴 수 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 가 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` — 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1661
- * @summary 웹훅 구독 삭제
1662
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1663
- * @param {string} ifMatch
1664
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
1665
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1666
- * @param {*} [options] Override http request option.
1667
- * @throws {RequiredError}
1668
- */
1669
- deleteWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, options) {
1670
- return __awaiter(this, void 0, void 0, function* () {
1671
- var _a, _b, _c;
1672
- const localVarAxiosArgs = yield localVarAxiosParamCreator.deleteWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, options);
1673
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1674
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.deleteWebhookEndpoint']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1675
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1676
- });
1677
- },
1678
1023
  /**
1679
1024
  * 무인증 — `fileKey` 자체가 capability 다(V5 `/download/{fileKey}` 와 같은 보안 모델). 파트너 응답의 `fileUrl`/`fullUrl` 이 이 URL 을 가리킨다. 요청 시점에 서명하므로 URL 을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}` 가 파일 메타와 `downloadUrl` 을 v2 응답 규약으로 돌려줍니다. 이 안정 URL 은 파트너 응답의 `fileUrl`/`fullUrl` 이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
1680
1025
  * @summary 파일 다운로드 — 안정 URL(302)
@@ -1692,48 +1037,32 @@ export const PartnerV2ApiFp = function (configuration) {
1692
1037
  });
1693
1038
  },
1694
1039
  /**
1695
- * 공고의 현재 상태와 라이프사이클 하위 상태(계약서류 생성·정산·세금계산서) 조회합니다. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감·세금계산서 발행 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 낙찰 결과 조회(`GET /v2/bids/{bidId}/results`)의 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1696
- * @summary 공고 단건(라이프사이클) 조회
1697
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1040
+ * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류:** `contractDocuments[].generationState` 는 **관측 전용**입니다. `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태이며 API 로 되살릴 수 없습니다 — 운영에 문의하세요. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1041
+ * @summary 공고 상세 조회
1042
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1698
1043
  * @param {*} [options] Override http request option.
1699
1044
  * @throws {RequiredError}
1700
1045
  */
1701
- getBid(bidId, options) {
1046
+ getBid(bidRef, options) {
1702
1047
  return __awaiter(this, void 0, void 0, function* () {
1703
1048
  var _a, _b, _c;
1704
- const localVarAxiosArgs = yield localVarAxiosParamCreator.getBid(bidId, options);
1049
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.getBid(bidRef, options);
1705
1050
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1706
1051
  const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.getBid']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1707
1052
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1708
1053
  });
1709
1054
  },
1710
- /**
1711
- * 공고의 응찰 참여 업체·순위·낙찰 여부를 조회한다. scope bids:read.
1712
- * @summary 공고 결과 조회
1713
- * @param {string} bidId
1714
- * @param {*} [options] Override http request option.
1715
- * @throws {RequiredError}
1716
- */
1717
- getBidResults(bidId, options) {
1718
- return __awaiter(this, void 0, void 0, function* () {
1719
- var _a, _b, _c;
1720
- const localVarAxiosArgs = yield localVarAxiosParamCreator.getBidResults(bidId, options);
1721
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1722
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.getBidResults']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1723
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1724
- });
1725
- },
1726
1055
  /**
1727
1056
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 가시성 마스킹과는 직교한 정산 데이터이며 읽기 전용입니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
1728
1057
  * @summary 정산 정보 조회
1729
- * @param {string} bidId
1058
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1730
1059
  * @param {*} [options] Override http request option.
1731
1060
  * @throws {RequiredError}
1732
1061
  */
1733
- getBidSettlement(bidId, options) {
1062
+ getBidSettlement(bidRef, options) {
1734
1063
  return __awaiter(this, void 0, void 0, function* () {
1735
1064
  var _a, _b, _c;
1736
- const localVarAxiosArgs = yield localVarAxiosParamCreator.getBidSettlement(bidId, options);
1065
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.getBidSettlement(bidRef, options);
1737
1066
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1738
1067
  const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.getBidSettlement']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1739
1068
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1742,15 +1071,15 @@ export const PartnerV2ApiFp = function (configuration) {
1742
1071
  /**
1743
1072
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
1744
1073
  * @summary 거래명세서 조회
1745
- * @param {string} bidId
1074
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1746
1075
  * @param {number} [paperCode]
1747
1076
  * @param {*} [options] Override http request option.
1748
1077
  * @throws {RequiredError}
1749
1078
  */
1750
- getBidStatement(bidId, paperCode, options) {
1079
+ getBidStatement(bidRef, paperCode, options) {
1751
1080
  return __awaiter(this, void 0, void 0, function* () {
1752
1081
  var _a, _b, _c;
1753
- const localVarAxiosArgs = yield localVarAxiosParamCreator.getBidStatement(bidId, paperCode, options);
1082
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.getBidStatement(bidRef, paperCode, options);
1754
1083
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1755
1084
  const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.getBidStatement']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1756
1085
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1782,250 +1111,135 @@ export const PartnerV2ApiFp = function (configuration) {
1782
1111
  getSemoContractTaxinvoiceStatus(externalContractId, options) {
1783
1112
  return __awaiter(this, void 0, void 0, function* () {
1784
1113
  var _a, _b, _c;
1785
- const localVarAxiosArgs = yield localVarAxiosParamCreator.getSemoContractTaxinvoiceStatus(externalContractId, options);
1786
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1787
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.getSemoContractTaxinvoiceStatus']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1788
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1789
- });
1790
- },
1791
- /**
1792
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어는 지지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **필수 스코프:** `payments:write` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — 같은 기능을 v2 응답 규약으로 제공하는 `POST /v2/card-payments` 와 `GET /v2/suppliers/{memberId}/card-payable` 를 신규 연동에 권합니다. 이 경로도 계속 동작하며 중단 일정은 없습니다.
1793
- * @summary 공급사 카드결제 가능 여부 (구 경로)
1794
- * @param {string} memberId 계약업체 회원 ID
1795
- * @param {*} [options] Override http request option.
1796
- * @deprecated
1797
- * @throws {RequiredError}
1798
- */
1799
- getSupplierCardPayable(memberId, options) {
1800
- return __awaiter(this, void 0, void 0, function* () {
1801
- var _a, _b, _c;
1802
- const localVarAxiosArgs = yield localVarAxiosParamCreator.getSupplierCardPayable(memberId, options);
1803
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1804
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.getSupplierCardPayable']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1805
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1806
- });
1807
- },
1808
- /**
1809
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
1810
- * @summary 공급사 카드결제 가능 여부
1811
- * @param {string} memberId 계약업체 회원 ID
1812
- * @param {*} [options] Override http request option.
1813
- * @throws {RequiredError}
1814
- */
1815
- getSupplierCardPayableV2(memberId, options) {
1816
- return __awaiter(this, void 0, void 0, function* () {
1817
- var _a, _b, _c;
1818
- const localVarAxiosArgs = yield localVarAxiosParamCreator.getSupplierCardPayableV2(memberId, options);
1819
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1820
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.getSupplierCardPayableV2']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1821
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1822
- });
1823
- },
1824
- /**
1825
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
1826
- * @summary 웹훅 구독 단건 조회
1827
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1828
- * @param {*} [options] Override http request option.
1829
- * @throws {RequiredError}
1830
- */
1831
- getWebhookEndpoint(endpointId, options) {
1832
- return __awaiter(this, void 0, void 0, function* () {
1833
- var _a, _b, _c;
1834
- const localVarAxiosArgs = yield localVarAxiosParamCreator.getWebhookEndpoint(endpointId, options);
1835
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1836
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.getWebhookEndpoint']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1837
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1838
- });
1839
- },
1840
- /**
1841
- * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
1842
- * @summary Partner API 헬스체크
1843
- * @param {*} [options] Override http request option.
1844
- * @throws {RequiredError}
1845
- */
1846
- healthControllerCheck(options) {
1847
- return __awaiter(this, void 0, void 0, function* () {
1848
- var _a, _b, _c;
1849
- const localVarAxiosArgs = yield localVarAxiosParamCreator.healthControllerCheck(options);
1850
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1851
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.healthControllerCheck']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1852
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1853
- });
1854
- },
1855
- /**
1856
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 때 `304` 를 본문 없이 받습니다 — 마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 — 요청한 건수와 받은 건수가 다를 수 있으니 `bidId` 로 대조하세요. **목록이 길어 URL 이 부담되면** `POST /v2/bid-results/query` 를 쓰세요. 응답은 같습니다.
1857
- * @summary 공고 결과 배치 조회
1858
- * @param {string} bidIds 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidIds&#x60; 를 반복해 전달합니다. 최대 100건.
1859
- * @param {*} [options] Override http request option.
1860
- * @throws {RequiredError}
1861
- */
1862
- listBidResults(bidIds, options) {
1863
- return __awaiter(this, void 0, void 0, function* () {
1864
- var _a, _b, _c;
1865
- const localVarAxiosArgs = yield localVarAxiosParamCreator.listBidResults(bidIds, options);
1866
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1867
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.listBidResults']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1868
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1869
- });
1870
- },
1871
- /**
1872
- * 발주처(API 키 바인딩)의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(쿼리에 buyerId 를 넣지 않습니다). **페이지네이션(cursor):** `limit`(1~100, 기본 100) + `cursor`(불투명 토큰). 응답의 `nextCursor` 를 다음 요청 `cursor` 로 전달하면 다음 페이지를 받습니다. `nextCursor=null` 이면 마지막 페이지입니다. **상태·낙찰방법:** 공개값(의미 문자열)으로 반환됩니다. 낙찰 여부는 상태가 아니라 낙찰 결과 조회의 `participants[].isWinner` 로 관측합니다(AWARDED 상태는 없습니다).
1873
- * @summary 공고 목록 조회
1874
- * @param {number} [limit] 페이지 크기(1~100, 기본 100).
1875
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달한다. 미지정 시 첫 페이지. &#x60;nextCursor&#x3D;null&#x60; 이면 마지막 페이지다.
1876
- * @param {Array<string>} [bidIds] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
1877
- * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회한다.
1878
- * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
1879
- * @param {*} [options] Override http request option.
1880
- * @throws {RequiredError}
1881
- */
1882
- listBids(limit, cursor, bidIds, status, include, options) {
1883
- return __awaiter(this, void 0, void 0, function* () {
1884
- var _a, _b, _c;
1885
- const localVarAxiosArgs = yield localVarAxiosParamCreator.listBids(limit, cursor, bidIds, status, include, options);
1886
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1887
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.listBids']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1888
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1889
- });
1890
- },
1891
- /**
1892
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market 이 데이터를 채워 PDF 로 만들어 주는 서류입니다. 생성 API 의 `paperCodes` 에 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidId}/contract-documents` 가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1893
- * @summary 거래에 필요한 계약서류 목록 조회
1894
- * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
1895
- * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
1896
- * @param {*} [options] Override http request option.
1897
- * @throws {RequiredError}
1898
- */
1899
- listExternalContractDocuments(buyerId, bidType, options) {
1900
- return __awaiter(this, void 0, void 0, function* () {
1901
- var _a, _b, _c;
1902
- const localVarAxiosArgs = yield localVarAxiosParamCreator.listExternalContractDocuments(buyerId, bidType, options);
1114
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.getSemoContractTaxinvoiceStatus(externalContractId, options);
1903
1115
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1904
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.listExternalContractDocuments']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1116
+ const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.getSemoContractTaxinvoiceStatus']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1905
1117
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1906
1118
  });
1907
1119
  },
1908
1120
  /**
1909
- * 기관에 공유된 물품 **아직 전송되지 않은 것**을 조회합니다. **증분 피드입니다.** 가져간 물품을 `POST /v2/products/receipts` 수신확인하면 다음 조회 결과에서 빠집니다. 수신확인을 하지 않으면 같은 물품이 계속 내려옵니다. **권장 흐름:** 조회 자기 시스템에 저장 저장에 성공한 물품 코드만 수신확인. 저장 전에 수신확인하면 물품은 다시 받을 없습니다. **조회 범위:** 요청 키가 대행하는 기관 그룹입니다. 기관 그룹이 설정되지 않은 키는 403 입니다. **필수 스코프:** `products:read`
1910
- * @summary 물품 카탈로그 조회
1121
+ * 계약업체가 카드결제로 대금을 받을 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어는 지지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **필수 스코프:** `payments:write` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 스키마입니다. 지금 연동하셔도 계속 동작합니다 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — 같은 기능을 v2 응답 규약으로 제공하는 `POST /v2/card-payments` 와 `GET /v2/suppliers/{memberId}/card-payable` 를 신규 연동에 권합니다. 이 경로도 계속 동작하며 중단 일정은 없습니다.
1122
+ * @summary 공급사 카드결제 가능 여부 (구 경로)
1123
+ * @param {string} memberId 계약업체 회원 ID
1911
1124
  * @param {*} [options] Override http request option.
1125
+ * @deprecated
1912
1126
  * @throws {RequiredError}
1913
1127
  */
1914
- listProducts(options) {
1128
+ getSupplierCardPayable(memberId, options) {
1915
1129
  return __awaiter(this, void 0, void 0, function* () {
1916
1130
  var _a, _b, _c;
1917
- const localVarAxiosArgs = yield localVarAxiosParamCreator.listProducts(options);
1131
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.getSupplierCardPayable(memberId, options);
1918
1132
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1919
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.listProducts']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1133
+ const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.getSupplierCardPayable']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1920
1134
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1921
1135
  });
1922
1136
  },
1923
1137
  /**
1924
- * API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 로 걸러 다시 처리하면 됩니다. - \"이벤트가 안 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 가 같고 `attempt` 만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 를 다음 요청의 `cursor` 로 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
1925
- * @summary 웹훅 전송 이력 조회
1926
- * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
1927
- * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
1928
- * @param {number} [limit] 페이지 크기(1~200, 기본 50).
1929
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
1138
+ * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
1139
+ * @summary Partner API 헬스체크
1930
1140
  * @param {*} [options] Override http request option.
1931
1141
  * @throws {RequiredError}
1932
1142
  */
1933
- listWebhookDeliveries(endpointId, status, limit, cursor, options) {
1143
+ healthControllerCheck(options) {
1934
1144
  return __awaiter(this, void 0, void 0, function* () {
1935
1145
  var _a, _b, _c;
1936
- const localVarAxiosArgs = yield localVarAxiosParamCreator.listWebhookDeliveries(endpointId, status, limit, cursor, options);
1146
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.healthControllerCheck(options);
1937
1147
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1938
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.listWebhookDeliveries']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1148
+ const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.healthControllerCheck']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1939
1149
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1940
1150
  });
1941
1151
  },
1942
1152
  /**
1943
- * API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 발송 요청마다 헤더 `X-CMarket-Signature` 가 실립니다. ``` X-CMarket-Signature: t=<unix초>,v1=<hex> ``` `v1` 은 `HMAC-SHA256(secret, \"${t}.${요청 본문 원문}\")` 소문자 hex 입니다. 1. 헤더를 `t` `v1` 로 나눕니다. 2. `\"${t}.${본문}\"` 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 JSON 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. 등록 시 받은 시크릿으로 HMAC-SHA256 을 계산해 `v1` 과 비교합니다. 비교는 **상수 시간** 비교 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `t` 가 현재 시각으로부터 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). ### 중복 제거 `X-CMarket-Event-Id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. ### 응답과 재시도 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` 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
1944
- * @summary 웹훅 구독 목록 조회
1153
+ * 여러 공고의 응찰 결과를 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 되보내면 결과가 그대로일 `304` 본문 없이 받습니다마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다요청한 건수와 받은 건수가 다를 있으니 `bidId` 대조하세요. **단건 조회:** 공고 하나만 때도 `bidIds` 하나만 넣거나 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요. 종전의 `GET /v2/bids/{bidRef}/result` 상세 응답의 부분집합이라 폐지됐습니다.
1154
+ * @summary 공고 결과 배치 조회
1155
+ * @param {string} bidIds 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidIds&#x60; 를 반복해 전달합니다. 최대 100건.
1945
1156
  * @param {*} [options] Override http request option.
1946
1157
  * @throws {RequiredError}
1947
1158
  */
1948
- listWebhookEndpoints(options) {
1159
+ listBidResults(bidIds, options) {
1949
1160
  return __awaiter(this, void 0, void 0, function* () {
1950
1161
  var _a, _b, _c;
1951
- const localVarAxiosArgs = yield localVarAxiosParamCreator.listWebhookEndpoints(options);
1162
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.listBidResults(bidIds, options);
1952
1163
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1953
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.listWebhookEndpoints']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1164
+ const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.listBidResults']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1954
1165
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1955
1166
  });
1956
1167
  },
1957
1168
  /**
1958
- * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
1959
- * @summary 유찰 처리
1960
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1961
- * @param {string} idempotencyKey 멱등성 (1~255자, [A-Za-z0-9_-]). 동일 + 동일 body 재전송캐시 응답 반환(24시간). UUID v4 권장.
1962
- * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
1169
+ * 발주처(API 바인딩)의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(쿼리에 buyerId 넣지 않습니다). **페이지네이션(cursor):** `limit`(1~100, 기본 100) + `cursor`(불투명 토큰). 응답의 `nextCursor` 다음 요청 `cursor` 전달하면 다음 페이지를 받습니다. `nextCursor=null` 이면 마지막 페이지입니다. **상태·낙찰방법:** 공개값(의미 문자열)으로 반환됩니다. 낙찰 여부는 상태가 아니라 낙찰 결과 조회의 `participants[].isWinner` 관측합니다(AWARDED 상태는 없습니다).
1170
+ * @summary 공고 목록 조회
1171
+ * @param {number} [limit] 페이지 크기(1~100, 기본 100).
1172
+ * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 그대로 전달한다. 미지정 페이지. &#x60;nextCursor&#x3D;null&#x60; 이면 마지막 페이지다.
1173
+ * @param {Array<string>} [bidIds] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
1174
+ * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회한다.
1175
+ * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
1963
1176
  * @param {*} [options] Override http request option.
1964
1177
  * @throws {RequiredError}
1965
1178
  */
1966
- markBidFailed(bidId, idempotencyKey, markBidFailedRequestDto, options) {
1179
+ listBids(limit, cursor, bidIds, status, include, options) {
1967
1180
  return __awaiter(this, void 0, void 0, function* () {
1968
1181
  var _a, _b, _c;
1969
- const localVarAxiosArgs = yield localVarAxiosParamCreator.markBidFailed(bidId, idempotencyKey, markBidFailedRequestDto, options);
1182
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.listBids(limit, cursor, bidIds, status, include, options);
1970
1183
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1971
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.markBidFailed']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1184
+ const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.listBids']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1972
1185
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1973
1186
  });
1974
1187
  },
1975
1188
  /**
1976
- * 초안(DRAFT) 상태로 등록된 공고를 진행중(ONGOING)으로 게시합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 연간/지명계약 등으로 초안 상태로 등록된 공고를 명시적으로 게시할 때. 등록 응답의 `status` 게시 필요 여부를 판별합니다. **전제조건:** 초안(DRAFT) 상태이고 마감(bidEndAt) 미래여야 합니다. **거부:** 초안이 아니거나 마감이 지난 공고 409. 마감이 지났으면 먼저 마감일을 연장해야 합니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 403). **멱등성:** `Idempotency-Key` 헤더 필수.
1977
- * @summary 공고 게시(초안 진행중)
1978
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1979
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
1189
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰) 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1190
+ * @summary 거래에 필요한 계약서류 목록 조회
1191
+ * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
1192
+ * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
1980
1193
  * @param {*} [options] Override http request option.
1981
1194
  * @throws {RequiredError}
1982
1195
  */
1983
- publishBid(bidId, idempotencyKey, options) {
1196
+ listExternalContractDocuments(buyerId, bidType, options) {
1984
1197
  return __awaiter(this, void 0, void 0, function* () {
1985
1198
  var _a, _b, _c;
1986
- const localVarAxiosArgs = yield localVarAxiosParamCreator.publishBid(bidId, idempotencyKey, options);
1199
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.listExternalContractDocuments(buyerId, bidType, options);
1987
1200
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
1988
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.publishBid']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1201
+ const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.listExternalContractDocuments']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1989
1202
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1990
1203
  });
1991
1204
  },
1992
1205
  /**
1993
- * 공고의 자동생성 계약서류(발주서·공고결과·표준계약서 등) 생성/재생성합니다. **V6 대응:** `RegenerateAllContractPdfsCommand` 어드민의 \"계약 서류 일괄 재생성\"과 동일 경로. **호출 시점:** 낙찰(계약 시작) 계약서류가 필요하거나, 생성에 실패한 서류를 다시 만들 때. **부수효과:** - 생성 실패(DEAD_LETTER) 상태의 자동생성 PDF 재생성 큐에 등록됩니다(비동기). - 승낙사항(ACCEPTANCE) 계열은 운영자 승인 워크플로가 필요해 경로에서 제외됩니다. **응답:** 즉시 파일이 아니라 등록 결과(`enqueuedCount`/`skippedCount`)를 반환합니다. 잠시 자동 생성됩니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1994
- * @summary 계약서류 생성(재생성)
1995
- * @param {string} bidId 공고번호(buy_idx, CM…) 또는 외부 구매번호(bid_puchase_no).
1206
+ * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 후 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
1207
+ * @summary 유찰 처리
1208
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1996
1209
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1210
+ * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
1997
1211
  * @param {*} [options] Override http request option.
1998
1212
  * @throws {RequiredError}
1999
1213
  */
2000
- regenerateContractDocuments(bidId, idempotencyKey, options) {
1214
+ markBidFailed(bidRef, idempotencyKey, markBidFailedRequestDto, options) {
2001
1215
  return __awaiter(this, void 0, void 0, function* () {
2002
1216
  var _a, _b, _c;
2003
- const localVarAxiosArgs = yield localVarAxiosParamCreator.regenerateContractDocuments(bidId, idempotencyKey, options);
1217
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.markBidFailed(bidRef, idempotencyKey, markBidFailedRequestDto, options);
2004
1218
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
2005
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.regenerateContractDocuments']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
1219
+ const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.markBidFailed']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
2006
1220
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2007
1221
  });
2008
1222
  },
2009
1223
  /**
2010
- * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `AWARDED` 를 반환합니다. **호출 시점:** 입찰 마감 후 낙찰자가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 낙찰자(공급사)의 응찰 건이 낙찰 처리됩니다. - 이후 **공고의 조회 상태(status)는 계약진행(CONTRACT_IN_PROGRESS)** 으로 진행합니다. `AWARDED` 라는 공고 status 는 존재하지 않으므로, 낙찰 여부는 `GET /v2/bids/{bidId}/results` 의 `participants[].isWinner` 또는 `GET /v2/bids/{bidId}` 의 status(=계약진행)로 관측하세요(`status === \'AWARDED\'` 폴링 금지). - 협상 방식(NEGOTIATION/NEGOTIATION_AUTO) 공고는 이 엔드포인트 전에 `POST /v2/bids/{bidId}/negotiation-scores`(협상 점수평가)로 평가를 완료해야 합니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 를 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 시 24시간 내 캐시 응답 반환.
1224
+ * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
2011
1225
  * @summary 낙찰 결과 전송
2012
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1226
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2013
1227
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2014
1228
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
2015
1229
  * @param {*} [options] Override http request option.
2016
1230
  * @throws {RequiredError}
2017
1231
  */
2018
- registerAward(bidId, idempotencyKey, registerAwardRequestDto, options) {
1232
+ registerAward(bidRef, idempotencyKey, registerAwardRequestDto, options) {
2019
1233
  return __awaiter(this, void 0, void 0, function* () {
2020
1234
  var _a, _b, _c;
2021
- const localVarAxiosArgs = yield localVarAxiosParamCreator.registerAward(bidId, idempotencyKey, registerAwardRequestDto, options);
1235
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.registerAward(bidRef, idempotencyKey, registerAwardRequestDto, options);
2022
1236
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
2023
1237
  const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.registerAward']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
2024
1238
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2025
1239
  });
2026
1240
  },
2027
1241
  /**
2028
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수.
1242
+ * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 이 요청 본문에 직접 싣지 마세요 — 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 를 받고, 그 32자 키를 이 요청의 `attachments` 배열에 넣습니다.
2029
1243
  * @summary 공고 등록
2030
1244
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
2031
1245
  * @param {CreateBidRequestDto} createBidRequestDto
@@ -2061,95 +1275,41 @@ export const PartnerV2ApiFp = function (configuration) {
2061
1275
  /**
2062
1276
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2063
1277
  * @summary 낙찰 되돌리기
2064
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1278
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2065
1279
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2066
1280
  * @param {RevertAwardRequestDto} revertAwardRequestDto
2067
1281
  * @param {*} [options] Override http request option.
2068
1282
  * @throws {RequiredError}
2069
1283
  */
2070
- revertAward(bidId, idempotencyKey, revertAwardRequestDto, options) {
1284
+ revertAward(bidRef, idempotencyKey, revertAwardRequestDto, options) {
2071
1285
  return __awaiter(this, void 0, void 0, function* () {
2072
1286
  var _a, _b, _c;
2073
- const localVarAxiosArgs = yield localVarAxiosParamCreator.revertAward(bidId, idempotencyKey, revertAwardRequestDto, options);
1287
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.revertAward(bidRef, idempotencyKey, revertAwardRequestDto, options);
2074
1288
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
2075
1289
  const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.revertAward']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
2076
1290
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2077
1291
  });
2078
1292
  },
2079
- /**
2080
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 이 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 수 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 새 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 를 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
2081
- * @summary 웹훅 서명 시크릿 재발급
2082
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2083
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2084
- * @param {*} [options] Override http request option.
2085
- * @throws {RequiredError}
2086
- */
2087
- rotateWebhookSecret(endpointId, idempotencyKey, options) {
2088
- return __awaiter(this, void 0, void 0, function* () {
2089
- var _a, _b, _c;
2090
- const localVarAxiosArgs = yield localVarAxiosParamCreator.rotateWebhookSecret(endpointId, idempotencyKey, options);
2091
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
2092
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.rotateWebhookSecret']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
2093
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2094
- });
2095
- },
2096
- /**
2097
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 그 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` 에 `delivered: false` 로 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 은 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
2098
- * @summary 웹훅 연결 확인 발송
2099
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2100
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2101
- * @param {*} [options] Override http request option.
2102
- * @throws {RequiredError}
2103
- */
2104
- sendWebhookTestEvent(endpointId, idempotencyKey, options) {
2105
- return __awaiter(this, void 0, void 0, function* () {
2106
- var _a, _b, _c;
2107
- const localVarAxiosArgs = yield localVarAxiosParamCreator.sendWebhookTestEvent(endpointId, idempotencyKey, options);
2108
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
2109
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.sendWebhookTestEvent']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
2110
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2111
- });
2112
- },
2113
1293
  /**
2114
1294
  * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEdit=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
2115
1295
  * @summary 공고 수정
2116
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1296
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2117
1297
  * @param {string} ifMatch
2118
- * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidId}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1298
+ * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
2119
1299
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
2120
1300
  * @param {UpdateBidRequestDto} updateBidRequestDto
2121
1301
  * @param {*} [options] Override http request option.
2122
1302
  * @throws {RequiredError}
2123
1303
  */
2124
- updateBid(bidId, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options) {
1304
+ updateBid(bidRef, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options) {
2125
1305
  return __awaiter(this, void 0, void 0, function* () {
2126
1306
  var _a, _b, _c;
2127
- const localVarAxiosArgs = yield localVarAxiosParamCreator.updateBid(bidId, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options);
1307
+ const localVarAxiosArgs = yield localVarAxiosParamCreator.updateBid(bidRef, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options);
2128
1308
  const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
2129
1309
  const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.updateBid']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
2130
1310
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2131
1311
  });
2132
1312
  },
2133
- /**
2134
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 는 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 가 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 이 헤더가 없으면 두 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` — 헤더를 빼먹었습니다. 조회 후 `ETag` 를 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** — 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2135
- * @summary 웹훅 구독 수정
2136
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2137
- * @param {string} ifMatch
2138
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
2139
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2140
- * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
2141
- * @param {*} [options] Override http request option.
2142
- * @throws {RequiredError}
2143
- */
2144
- updateWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, updateWebhookEndpointRequestDto, options) {
2145
- return __awaiter(this, void 0, void 0, function* () {
2146
- var _a, _b, _c;
2147
- const localVarAxiosArgs = yield localVarAxiosParamCreator.updateWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, updateWebhookEndpointRequestDto, options);
2148
- const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
2149
- const localVarOperationServerBasePath = (_c = (_b = operationServerMap['PartnerV2Api.updateWebhookEndpoint']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
2150
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2151
- });
2152
- },
2153
1313
  /**
2154
1314
  * 스코프 `files:write` + `Idempotency-Key` 헤더 필수. base64 또는 url 중 정확히 하나를 제출한다.
2155
1315
  * @summary 공고 첨부파일 업로드(base64 또는 url) → fileKey
@@ -2175,61 +1335,39 @@ export const PartnerV2ApiFactory = function (configuration, basePath, axios) {
2175
1335
  const localVarFp = PartnerV2ApiFp(configuration);
2176
1336
  return {
2177
1337
  /**
2178
- * 저장을 마친 물품을 전송완료로 표시해 다음 조회에서 제외합니다. **되돌릴 수 없습니다.** 표시한 물품은 `GET /v2/products` 다시 내려오지 않으므로, 자기 시스템에 저장이 끝난 뒤에 호출하세요. **표시 범위는 기관 그룹으로 잠깁니다.** 다른 기관의 물품 코드를 섞어 보내면 건은 표시되지 않고 `acknowledged` 요청 수보다 작게 돌아옵니다. **필수 스코프:** `products:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2179
- * @summary 물품 수신확인
2180
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2181
- * @param {AcknowledgeProductsRequestDto} acknowledgeProductsRequestDto
2182
- * @param {*} [options] Override http request option.
2183
- * @throws {RequiredError}
2184
- */
2185
- acknowledgeProductReceipt(idempotencyKey, acknowledgeProductsRequestDto, options) {
2186
- return localVarFp.acknowledgeProductReceipt(idempotencyKey, acknowledgeProductsRequestDto, options).then((request) => request(axios, basePath));
2187
- },
2188
- /**
2189
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 → 409. 타 발주처 공고 → 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidId}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
1338
+ * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
2190
1339
  * @summary 공고 취소
2191
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1340
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2192
1341
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2193
1342
  * @param {CancelBidRequestDto} cancelBidRequestDto
2194
1343
  * @param {*} [options] Override http request option.
2195
1344
  * @throws {RequiredError}
2196
1345
  */
2197
- cancelBid(bidId, idempotencyKey, cancelBidRequestDto, options) {
2198
- return localVarFp.cancelBid(bidId, idempotencyKey, cancelBidRequestDto, options).then((request) => request(axios, basePath));
1346
+ cancelBid(bidRef, idempotencyKey, cancelBidRequestDto, options) {
1347
+ return localVarFp.cancelBid(bidRef, idempotencyKey, cancelBidRequestDto, options).then((request) => request(axios, basePath));
2199
1348
  },
2200
1349
  /**
2201
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **V5 대응:** `acceptanceCompleteSend` — BidApi.xml `acceptanceComplete` 액션의 V6 후속. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 응답은 204가 아닌 200입니다 — 멱등성 인터셉터가 구체 바디를 캐시하고 SDK 가 타입드 응답을 필요로 하기 때문. **V5-compat 안내:** 거래명세서·검수보고서에 찍힐 구매사 사업자정보·담당자·작성일자 override(11종)는 modern v2 표면에서 제거됐습니다. 필요 시 V5 충실 카운터파트 `POST /v1/bids/{bidId}/acceptance`(`CompleteAcceptanceV1RequestDto`)를 사용하세요. **낙찰자 식별:** `winnerMemberId`(공급사 memberId). 내부 joinSeq 해소는 backend 가 처리합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1350
+ * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **V5 대응:** `acceptanceCompleteSend` — BidApi.xml `acceptanceComplete` 액션의 V6 후속. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 응답은 204가 아닌 200입니다 — 멱등성 인터셉터가 구체 바디를 캐시하고 SDK 가 타입드 응답을 필요로 하기 때문. **V5-compat 안내:** 거래명세서·검수보고서에 찍힐 구매사 사업자정보·담당자·작성일자 override(11종)는 modern v2 표면에서 제거됐습니다. 필요 시 V5 충실 카운터파트 `POST /v1/bids/{bidRef}/acceptance`(`CompleteAcceptanceV1RequestDto`)를 사용하세요. **낙찰자 식별:** `winnerMemberId`(공급사 memberId). 내부 joinSeq 해소는 backend 가 처리합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2202
1351
  * @summary 검수완료 전송
2203
- * @param {string} bidId 공고 ID(&#x3D; backend bidId &#x3D; 등록 응답의 bidNo).
1352
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2204
1353
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2205
1354
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
2206
1355
  * @param {*} [options] Override http request option.
2207
1356
  * @throws {RequiredError}
2208
1357
  */
2209
- completeAcceptance(bidId, idempotencyKey, completeAcceptanceRequestDto, options) {
2210
- return localVarFp.completeAcceptance(bidId, idempotencyKey, completeAcceptanceRequestDto, options).then((request) => request(axios, basePath));
1358
+ completeAcceptance(bidRef, idempotencyKey, completeAcceptanceRequestDto, options) {
1359
+ return localVarFp.completeAcceptance(bidRef, idempotencyKey, completeAcceptanceRequestDto, options).then((request) => request(axios, basePath));
2211
1360
  },
2212
1361
  /**
2213
1362
  * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2214
1363
  * @summary 정산 마감(송장 강제완료)
2215
- * @param {string} bidId
1364
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2216
1365
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2217
1366
  * @param {*} [options] Override http request option.
2218
1367
  * @throws {RequiredError}
2219
1368
  */
2220
- completeInvoice(bidId, idempotencyKey, options) {
2221
- return localVarFp.completeInvoice(bidId, idempotencyKey, options).then((request) => request(axios, basePath));
2222
- },
2223
- /**
2224
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
2225
- * @summary 결제창 발행
2226
- * @param {string} idempotencyKey 재시도 안전을 위한 멱등 키.
2227
- * @param {CreateCardPaymentRequestDto} createCardPaymentRequestDto
2228
- * @param {*} [options] Override http request option.
2229
- * @throws {RequiredError}
2230
- */
2231
- createCardPayment(idempotencyKey, createCardPaymentRequestDto, options) {
2232
- return localVarFp.createCardPayment(idempotencyKey, createCardPaymentRequestDto, options).then((request) => request(axios, basePath));
1369
+ completeInvoice(bidRef, idempotencyKey, options) {
1370
+ return localVarFp.completeInvoice(bidRef, idempotencyKey, options).then((request) => request(axios, basePath));
2233
1371
  },
2234
1372
  /**
2235
1373
  * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인(APPROVED)되어 바로 결제 가능합니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. 거기서 카드를 골라 결제합니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/card-payment-requests/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — 같은 기능을 v2 응답 규약으로 제공하는 `POST /v2/card-payments` 와 `GET /v2/suppliers/{memberId}/card-payable` 를 신규 연동에 권합니다. 이 경로도 계속 동작하며 중단 일정은 없습니다.
@@ -2244,7 +1382,7 @@ export const PartnerV2ApiFactory = function (configuration, basePath, axios) {
2244
1382
  return localVarFp.createCardPaymentRequest(idempotencyKey, createCardPaymentRequestDto, options).then((request) => request(axios, basePath));
2245
1383
  },
2246
1384
  /**
2247
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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/{bidId}/contract-documents` 가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1385
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
2248
1386
  * @summary 계약서류 생성
2249
1387
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2250
1388
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
@@ -2254,30 +1392,6 @@ export const PartnerV2ApiFactory = function (configuration, basePath, axios) {
2254
1392
  createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options) {
2255
1393
  return localVarFp.createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(axios, basePath));
2256
1394
  },
2257
- /**
2258
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 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` 헤더 필수. ### 서명 검증 (필수) 발송 요청마다 헤더 `X-CMarket-Signature` 가 실립니다. ``` X-CMarket-Signature: t=<unix초>,v1=<hex> ``` `v1` 은 `HMAC-SHA256(secret, \"${t}.${요청 본문 원문}\")` 의 소문자 hex 입니다. 1. 헤더를 `t` 와 `v1` 로 나눕니다. 2. `\"${t}.${본문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. 등록 시 받은 시크릿으로 HMAC-SHA256 을 계산해 `v1` 과 비교합니다. 비교는 **상수 시간** 비교 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `t` 가 현재 시각으로부터 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). ### 중복 제거 `X-CMarket-Event-Id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. ### 응답과 재시도 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2259
- * @summary 웹훅 구독 등록
2260
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2261
- * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
2262
- * @param {*} [options] Override http request option.
2263
- * @throws {RequiredError}
2264
- */
2265
- createWebhookEndpoint(idempotencyKey, createWebhookEndpointRequestDto, options) {
2266
- return localVarFp.createWebhookEndpoint(idempotencyKey, createWebhookEndpointRequestDto, options).then((request) => request(axios, basePath));
2267
- },
2268
- /**
2269
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH … {\"status\":\"DISABLED\"}` 를 쓰세요 — 시크릿과 이벤트 구성이 남아 그대로 되살릴 수 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 가 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` — 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2270
- * @summary 웹훅 구독 삭제
2271
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2272
- * @param {string} ifMatch
2273
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
2274
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2275
- * @param {*} [options] Override http request option.
2276
- * @throws {RequiredError}
2277
- */
2278
- deleteWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, options) {
2279
- return localVarFp.deleteWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, options).then((request) => request(axios, basePath));
2280
- },
2281
1395
  /**
2282
1396
  * 무인증 — `fileKey` 자체가 capability 다(V5 `/download/{fileKey}` 와 같은 보안 모델). 파트너 응답의 `fileUrl`/`fullUrl` 이 이 URL 을 가리킨다. 요청 시점에 서명하므로 URL 을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}` 가 파일 메타와 `downloadUrl` 을 v2 응답 규약으로 돌려줍니다. 이 안정 URL 은 파트너 응답의 `fileUrl`/`fullUrl` 이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
2283
1397
  * @summary 파일 다운로드 — 안정 URL(302)
@@ -2289,45 +1403,35 @@ export const PartnerV2ApiFactory = function (configuration, basePath, axios) {
2289
1403
  return localVarFp.downloadFile(fileKey, options).then((request) => request(axios, basePath));
2290
1404
  },
2291
1405
  /**
2292
- * 공고의 현재 상태와 라이프사이클 하위 상태(계약서류 생성·정산·세금계산서) 조회합니다. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감·세금계산서 발행 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 낙찰 결과 조회(`GET /v2/bids/{bidId}/results`)의 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2293
- * @summary 공고 단건(라이프사이클) 조회
2294
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
2295
- * @param {*} [options] Override http request option.
2296
- * @throws {RequiredError}
2297
- */
2298
- getBid(bidId, options) {
2299
- return localVarFp.getBid(bidId, options).then((request) => request(axios, basePath));
2300
- },
2301
- /**
2302
- * 공고의 응찰 참여 업체·순위·낙찰 여부를 조회한다. scope bids:read.
2303
- * @summary 공고 결과 조회
2304
- * @param {string} bidId
1406
+ * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류:** `contractDocuments[].generationState` 는 **관측 전용**입니다. `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태이며 API 로 되살릴 수 없습니다 — 운영에 문의하세요. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1407
+ * @summary 공고 상세 조회
1408
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2305
1409
  * @param {*} [options] Override http request option.
2306
1410
  * @throws {RequiredError}
2307
1411
  */
2308
- getBidResults(bidId, options) {
2309
- return localVarFp.getBidResults(bidId, options).then((request) => request(axios, basePath));
1412
+ getBid(bidRef, options) {
1413
+ return localVarFp.getBid(bidRef, options).then((request) => request(axios, basePath));
2310
1414
  },
2311
1415
  /**
2312
1416
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 가시성 마스킹과는 직교한 정산 데이터이며 읽기 전용입니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2313
1417
  * @summary 정산 정보 조회
2314
- * @param {string} bidId
1418
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2315
1419
  * @param {*} [options] Override http request option.
2316
1420
  * @throws {RequiredError}
2317
1421
  */
2318
- getBidSettlement(bidId, options) {
2319
- return localVarFp.getBidSettlement(bidId, options).then((request) => request(axios, basePath));
1422
+ getBidSettlement(bidRef, options) {
1423
+ return localVarFp.getBidSettlement(bidRef, options).then((request) => request(axios, basePath));
2320
1424
  },
2321
1425
  /**
2322
1426
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2323
1427
  * @summary 거래명세서 조회
2324
- * @param {string} bidId
1428
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2325
1429
  * @param {number} [paperCode]
2326
1430
  * @param {*} [options] Override http request option.
2327
1431
  * @throws {RequiredError}
2328
1432
  */
2329
- getBidStatement(bidId, paperCode, options) {
2330
- return localVarFp.getBidStatement(bidId, paperCode, options).then((request) => request(axios, basePath));
1433
+ getBidStatement(bidRef, paperCode, options) {
1434
+ return localVarFp.getBidStatement(bidRef, paperCode, options).then((request) => request(axios, basePath));
2331
1435
  },
2332
1436
  /**
2333
1437
  * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **구 경로:** 버전 없는 `GET /files/{fileKey}` 는 만료 없는 안정 주소이고 파트너 응답의 `fileUrl`/`fullUrl` 이 그 값을 가리킵니다. 인증도 스코프도 없는 옛 표면이라 신규 연동은 이 엔드포인트를 쓰세요. 구 경로는 당분간 유지됩니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
@@ -2360,26 +1464,6 @@ export const PartnerV2ApiFactory = function (configuration, basePath, axios) {
2360
1464
  getSupplierCardPayable(memberId, options) {
2361
1465
  return localVarFp.getSupplierCardPayable(memberId, options).then((request) => request(axios, basePath));
2362
1466
  },
2363
- /**
2364
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
2365
- * @summary 공급사 카드결제 가능 여부
2366
- * @param {string} memberId 계약업체 회원 ID
2367
- * @param {*} [options] Override http request option.
2368
- * @throws {RequiredError}
2369
- */
2370
- getSupplierCardPayableV2(memberId, options) {
2371
- return localVarFp.getSupplierCardPayableV2(memberId, options).then((request) => request(axios, basePath));
2372
- },
2373
- /**
2374
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
2375
- * @summary 웹훅 구독 단건 조회
2376
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2377
- * @param {*} [options] Override http request option.
2378
- * @throws {RequiredError}
2379
- */
2380
- getWebhookEndpoint(endpointId, options) {
2381
- return localVarFp.getWebhookEndpoint(endpointId, options).then((request) => request(axios, basePath));
2382
- },
2383
1467
  /**
2384
1468
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
2385
1469
  * @summary Partner API 헬스체크
@@ -2390,7 +1474,7 @@ export const PartnerV2ApiFactory = function (configuration, basePath, axios) {
2390
1474
  return localVarFp.healthControllerCheck(options).then((request) => request(axios, basePath));
2391
1475
  },
2392
1476
  /**
2393
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 때 `304` 를 본문 없이 받습니다 — 마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 — 요청한 건수와 받은 건수가 다를 수 있으니 `bidId` 로 대조하세요. **목록이 길어 URL 부담되면** `POST /v2/bid-results/query` 쓰세요. 응답은 같습니다.
1477
+ * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 때 `304` 를 본문 없이 받습니다 — 마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 — 요청한 건수와 받은 건수가 다를 수 있으니 `bidId` 로 대조하세요. **단건 조회:** 공고 하나만 때도 `bidIds` 에 하나만 넣거나 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요. 종전의 `GET /v2/bids/{bidRef}/result` 는 상세 응답의 부분집합이라 폐지됐습니다.
2394
1478
  * @summary 공고 결과 배치 조회
2395
1479
  * @param {string} bidIds 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidIds&#x60; 를 반복해 전달합니다. 최대 100건.
2396
1480
  * @param {*} [options] Override http request option.
@@ -2414,7 +1498,7 @@ export const PartnerV2ApiFactory = function (configuration, basePath, axios) {
2414
1498
  return localVarFp.listBids(limit, cursor, bidIds, status, include, options).then((request) => request(axios, basePath));
2415
1499
  },
2416
1500
  /**
2417
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market 이 데이터를 채워 PDF 로 만들어 주는 서류입니다. 생성 API 의 `paperCodes` 에 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidId}/contract-documents` 가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1501
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
2418
1502
  * @summary 거래에 필요한 계약서류 목록 조회
2419
1503
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
2420
1504
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -2424,85 +1508,32 @@ export const PartnerV2ApiFactory = function (configuration, basePath, axios) {
2424
1508
  listExternalContractDocuments(buyerId, bidType, options) {
2425
1509
  return localVarFp.listExternalContractDocuments(buyerId, bidType, options).then((request) => request(axios, basePath));
2426
1510
  },
2427
- /**
2428
- * 기관에 공유된 물품 중 **아직 전송되지 않은 것**을 조회합니다. **증분 피드입니다.** 가져간 물품을 `POST /v2/products/receipts` 로 수신확인하면 다음 조회 결과에서 빠집니다. 수신확인을 하지 않으면 같은 물품이 계속 내려옵니다. **권장 흐름:** 조회 → 자기 시스템에 저장 → 저장에 성공한 물품 코드만 수신확인. 저장 전에 수신확인하면 그 물품은 다시 받을 수 없습니다. **조회 범위:** 요청 키가 대행하는 기관 그룹입니다. 기관 그룹이 설정되지 않은 키는 403 입니다. **필수 스코프:** `products:read`
2429
- * @summary 물품 카탈로그 조회
2430
- * @param {*} [options] Override http request option.
2431
- * @throws {RequiredError}
2432
- */
2433
- listProducts(options) {
2434
- return localVarFp.listProducts(options).then((request) => request(axios, basePath));
2435
- },
2436
- /**
2437
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 로 걸러 다시 처리하면 됩니다. - \"이벤트가 안 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 가 같고 `attempt` 만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 를 다음 요청의 `cursor` 로 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
2438
- * @summary 웹훅 전송 이력 조회
2439
- * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
2440
- * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
2441
- * @param {number} [limit] 페이지 크기(1~200, 기본 50).
2442
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
2443
- * @param {*} [options] Override http request option.
2444
- * @throws {RequiredError}
2445
- */
2446
- listWebhookDeliveries(endpointId, status, limit, cursor, options) {
2447
- return localVarFp.listWebhookDeliveries(endpointId, status, limit, cursor, options).then((request) => request(axios, basePath));
2448
- },
2449
- /**
2450
- * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 발송 요청마다 헤더 `X-CMarket-Signature` 가 실립니다. ``` X-CMarket-Signature: t=<unix초>,v1=<hex> ``` `v1` 은 `HMAC-SHA256(secret, \"${t}.${요청 본문 원문}\")` 의 소문자 hex 입니다. 1. 헤더를 `t` 와 `v1` 로 나눕니다. 2. `\"${t}.${본문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. 등록 시 받은 시크릿으로 HMAC-SHA256 을 계산해 `v1` 과 비교합니다. 비교는 **상수 시간** 비교 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `t` 가 현재 시각으로부터 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). ### 중복 제거 `X-CMarket-Event-Id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. ### 응답과 재시도 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2451
- * @summary 웹훅 구독 목록 조회
2452
- * @param {*} [options] Override http request option.
2453
- * @throws {RequiredError}
2454
- */
2455
- listWebhookEndpoints(options) {
2456
- return localVarFp.listWebhookEndpoints(options).then((request) => request(axios, basePath));
2457
- },
2458
1511
  /**
2459
1512
  * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 후 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
2460
1513
  * @summary 유찰 처리
2461
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1514
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2462
1515
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2463
1516
  * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
2464
1517
  * @param {*} [options] Override http request option.
2465
1518
  * @throws {RequiredError}
2466
1519
  */
2467
- markBidFailed(bidId, idempotencyKey, markBidFailedRequestDto, options) {
2468
- return localVarFp.markBidFailed(bidId, idempotencyKey, markBidFailedRequestDto, options).then((request) => request(axios, basePath));
2469
- },
2470
- /**
2471
- * 초안(DRAFT) 상태로 등록된 공고를 진행중(ONGOING)으로 게시합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 연간/지명계약 등으로 초안 상태로 등록된 공고를 명시적으로 게시할 때. 등록 응답의 `status` 로 게시 필요 여부를 판별합니다. **전제조건:** 초안(DRAFT) 상태이고 마감(bidEndAt)이 미래여야 합니다. **거부:** 초안이 아니거나 마감이 지난 공고 → 409. 마감이 지났으면 먼저 마감일을 연장해야 합니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403). **멱등성:** `Idempotency-Key` 헤더 필수.
2472
- * @summary 공고 게시(초안 → 진행중)
2473
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
2474
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2475
- * @param {*} [options] Override http request option.
2476
- * @throws {RequiredError}
2477
- */
2478
- publishBid(bidId, idempotencyKey, options) {
2479
- return localVarFp.publishBid(bidId, idempotencyKey, options).then((request) => request(axios, basePath));
2480
- },
2481
- /**
2482
- * 공고의 자동생성 계약서류(발주서·공고결과·표준계약서 등)를 생성/재생성합니다. **V6 대응:** `RegenerateAllContractPdfsCommand` — 웹 어드민의 \"계약 서류 일괄 재생성\"과 동일 경로. **호출 시점:** 낙찰(계약 시작) 후 계약서류가 필요하거나, 생성에 실패한 서류를 다시 만들 때. **부수효과:** - 생성 실패(DEAD_LETTER) 상태의 자동생성 PDF 가 재생성 큐에 등록됩니다(비동기). - 승낙사항(ACCEPTANCE) 계열은 운영자 승인 워크플로가 필요해 이 경로에서 제외됩니다. **응답:** 즉시 파일이 아니라 큐 등록 결과(`enqueuedCount`/`skippedCount`)를 반환합니다. 잠시 후 자동 생성됩니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2483
- * @summary 계약서류 생성(재생성)
2484
- * @param {string} bidId 공고번호(buy_idx, 예 CM…) 또는 외부 구매번호(bid_puchase_no).
2485
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2486
- * @param {*} [options] Override http request option.
2487
- * @throws {RequiredError}
2488
- */
2489
- regenerateContractDocuments(bidId, idempotencyKey, options) {
2490
- return localVarFp.regenerateContractDocuments(bidId, idempotencyKey, options).then((request) => request(axios, basePath));
1520
+ markBidFailed(bidRef, idempotencyKey, markBidFailedRequestDto, options) {
1521
+ return localVarFp.markBidFailed(bidRef, idempotencyKey, markBidFailedRequestDto, options).then((request) => request(axios, basePath));
2491
1522
  },
2492
1523
  /**
2493
- * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `AWARDED` 를 반환합니다. **호출 시점:** 입찰 마감 후 낙찰자가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 낙찰자(공급사)의 응찰 건이 낙찰 처리됩니다. - 이후 **공고의 조회 상태(status)는 계약진행(CONTRACT_IN_PROGRESS)** 으로 진행합니다. `AWARDED` 라는 공고 status 는 존재하지 않으므로, 낙찰 여부는 `GET /v2/bids/{bidId}/results` 의 `participants[].isWinner` 또는 `GET /v2/bids/{bidId}` 의 status(=계약진행)로 관측하세요(`status === \'AWARDED\'` 폴링 금지). - 협상 방식(NEGOTIATION/NEGOTIATION_AUTO) 공고는 이 엔드포인트 전에 `POST /v2/bids/{bidId}/negotiation-scores`(협상 점수평가)로 평가를 완료해야 합니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 를 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 시 24시간 내 캐시 응답 반환.
1524
+ * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
2494
1525
  * @summary 낙찰 결과 전송
2495
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1526
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2496
1527
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2497
1528
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
2498
1529
  * @param {*} [options] Override http request option.
2499
1530
  * @throws {RequiredError}
2500
1531
  */
2501
- registerAward(bidId, idempotencyKey, registerAwardRequestDto, options) {
2502
- return localVarFp.registerAward(bidId, idempotencyKey, registerAwardRequestDto, options).then((request) => request(axios, basePath));
1532
+ registerAward(bidRef, idempotencyKey, registerAwardRequestDto, options) {
1533
+ return localVarFp.registerAward(bidRef, idempotencyKey, registerAwardRequestDto, options).then((request) => request(axios, basePath));
2503
1534
  },
2504
1535
  /**
2505
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수.
1536
+ * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 이 요청 본문에 직접 싣지 마세요 — 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 를 받고, 그 32자 키를 이 요청의 `attachments` 배열에 넣습니다.
2506
1537
  * @summary 공고 등록
2507
1538
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
2508
1539
  * @param {CreateBidRequestDto} createBidRequestDto
@@ -2526,64 +1557,28 @@ export const PartnerV2ApiFactory = function (configuration, basePath, axios) {
2526
1557
  /**
2527
1558
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2528
1559
  * @summary 낙찰 되돌리기
2529
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1560
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2530
1561
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2531
1562
  * @param {RevertAwardRequestDto} revertAwardRequestDto
2532
1563
  * @param {*} [options] Override http request option.
2533
1564
  * @throws {RequiredError}
2534
1565
  */
2535
- revertAward(bidId, idempotencyKey, revertAwardRequestDto, options) {
2536
- return localVarFp.revertAward(bidId, idempotencyKey, revertAwardRequestDto, options).then((request) => request(axios, basePath));
2537
- },
2538
- /**
2539
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 이 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 수 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 새 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 를 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
2540
- * @summary 웹훅 서명 시크릿 재발급
2541
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2542
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2543
- * @param {*} [options] Override http request option.
2544
- * @throws {RequiredError}
2545
- */
2546
- rotateWebhookSecret(endpointId, idempotencyKey, options) {
2547
- return localVarFp.rotateWebhookSecret(endpointId, idempotencyKey, options).then((request) => request(axios, basePath));
2548
- },
2549
- /**
2550
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 그 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` 에 `delivered: false` 로 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 은 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
2551
- * @summary 웹훅 연결 확인 발송
2552
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2553
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2554
- * @param {*} [options] Override http request option.
2555
- * @throws {RequiredError}
2556
- */
2557
- sendWebhookTestEvent(endpointId, idempotencyKey, options) {
2558
- return localVarFp.sendWebhookTestEvent(endpointId, idempotencyKey, options).then((request) => request(axios, basePath));
1566
+ revertAward(bidRef, idempotencyKey, revertAwardRequestDto, options) {
1567
+ return localVarFp.revertAward(bidRef, idempotencyKey, revertAwardRequestDto, options).then((request) => request(axios, basePath));
2559
1568
  },
2560
1569
  /**
2561
1570
  * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEdit=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
2562
1571
  * @summary 공고 수정
2563
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1572
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2564
1573
  * @param {string} ifMatch
2565
- * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidId}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1574
+ * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
2566
1575
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
2567
1576
  * @param {UpdateBidRequestDto} updateBidRequestDto
2568
1577
  * @param {*} [options] Override http request option.
2569
1578
  * @throws {RequiredError}
2570
1579
  */
2571
- updateBid(bidId, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options) {
2572
- return localVarFp.updateBid(bidId, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options).then((request) => request(axios, basePath));
2573
- },
2574
- /**
2575
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 는 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 가 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 이 헤더가 없으면 두 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` — 헤더를 빼먹었습니다. 조회 후 `ETag` 를 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** — 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2576
- * @summary 웹훅 구독 수정
2577
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2578
- * @param {string} ifMatch
2579
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
2580
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2581
- * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
2582
- * @param {*} [options] Override http request option.
2583
- * @throws {RequiredError}
2584
- */
2585
- updateWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, updateWebhookEndpointRequestDto, options) {
2586
- return localVarFp.updateWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, updateWebhookEndpointRequestDto, options).then((request) => request(axios, basePath));
1580
+ updateBid(bidRef, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options) {
1581
+ return localVarFp.updateBid(bidRef, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options).then((request) => request(axios, basePath));
2587
1582
  },
2588
1583
  /**
2589
1584
  * 스코프 `files:write` + `Idempotency-Key` 헤더 필수. base64 또는 url 중 정확히 하나를 제출한다.
@@ -2602,61 +1597,39 @@ export const PartnerV2ApiFactory = function (configuration, basePath, axios) {
2602
1597
  */
2603
1598
  export class PartnerV2Api extends BaseAPI {
2604
1599
  /**
2605
- * 저장을 마친 물품을 전송완료로 표시해 다음 조회에서 제외합니다. **되돌릴 수 없습니다.** 표시한 물품은 `GET /v2/products` 다시 내려오지 않으므로, 자기 시스템에 저장이 끝난 뒤에 호출하세요. **표시 범위는 기관 그룹으로 잠깁니다.** 다른 기관의 물품 코드를 섞어 보내면 건은 표시되지 않고 `acknowledged` 요청 수보다 작게 돌아옵니다. **필수 스코프:** `products:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2606
- * @summary 물품 수신확인
2607
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2608
- * @param {AcknowledgeProductsRequestDto} acknowledgeProductsRequestDto
2609
- * @param {*} [options] Override http request option.
2610
- * @throws {RequiredError}
2611
- */
2612
- acknowledgeProductReceipt(idempotencyKey, acknowledgeProductsRequestDto, options) {
2613
- return PartnerV2ApiFp(this.configuration).acknowledgeProductReceipt(idempotencyKey, acknowledgeProductsRequestDto, options).then((request) => request(this.axios, this.basePath));
2614
- }
2615
- /**
2616
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 → 409. 타 발주처 공고 → 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidId}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
1600
+ * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
2617
1601
  * @summary 공고 취소
2618
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1602
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2619
1603
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2620
1604
  * @param {CancelBidRequestDto} cancelBidRequestDto
2621
1605
  * @param {*} [options] Override http request option.
2622
1606
  * @throws {RequiredError}
2623
1607
  */
2624
- cancelBid(bidId, idempotencyKey, cancelBidRequestDto, options) {
2625
- return PartnerV2ApiFp(this.configuration).cancelBid(bidId, idempotencyKey, cancelBidRequestDto, options).then((request) => request(this.axios, this.basePath));
1608
+ cancelBid(bidRef, idempotencyKey, cancelBidRequestDto, options) {
1609
+ return PartnerV2ApiFp(this.configuration).cancelBid(bidRef, idempotencyKey, cancelBidRequestDto, options).then((request) => request(this.axios, this.basePath));
2626
1610
  }
2627
1611
  /**
2628
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **V5 대응:** `acceptanceCompleteSend` — BidApi.xml `acceptanceComplete` 액션의 V6 후속. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 응답은 204가 아닌 200입니다 — 멱등성 인터셉터가 구체 바디를 캐시하고 SDK 가 타입드 응답을 필요로 하기 때문. **V5-compat 안내:** 거래명세서·검수보고서에 찍힐 구매사 사업자정보·담당자·작성일자 override(11종)는 modern v2 표면에서 제거됐습니다. 필요 시 V5 충실 카운터파트 `POST /v1/bids/{bidId}/acceptance`(`CompleteAcceptanceV1RequestDto`)를 사용하세요. **낙찰자 식별:** `winnerMemberId`(공급사 memberId). 내부 joinSeq 해소는 backend 가 처리합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1612
+ * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **V5 대응:** `acceptanceCompleteSend` — BidApi.xml `acceptanceComplete` 액션의 V6 후속. **호출 시점:** 낙찰자(공급사)가 납품을 완료하고 구매자가 검수를 확인한 시점. 공고 상태가 낙찰(AWARDED) 상태여야 합니다. **부수효과:** - 검수완료 상태가 기록됩니다. - 응답은 204가 아닌 200입니다 — 멱등성 인터셉터가 구체 바디를 캐시하고 SDK 가 타입드 응답을 필요로 하기 때문. **V5-compat 안내:** 거래명세서·검수보고서에 찍힐 구매사 사업자정보·담당자·작성일자 override(11종)는 modern v2 표면에서 제거됐습니다. 필요 시 V5 충실 카운터파트 `POST /v1/bids/{bidRef}/acceptance`(`CompleteAcceptanceV1RequestDto`)를 사용하세요. **낙찰자 식별:** `winnerMemberId`(공급사 memberId). 내부 joinSeq 해소는 backend 가 처리합니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2629
1613
  * @summary 검수완료 전송
2630
- * @param {string} bidId 공고 ID(&#x3D; backend bidId &#x3D; 등록 응답의 bidNo).
1614
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2631
1615
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2632
1616
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
2633
1617
  * @param {*} [options] Override http request option.
2634
1618
  * @throws {RequiredError}
2635
1619
  */
2636
- completeAcceptance(bidId, idempotencyKey, completeAcceptanceRequestDto, options) {
2637
- return PartnerV2ApiFp(this.configuration).completeAcceptance(bidId, idempotencyKey, completeAcceptanceRequestDto, options).then((request) => request(this.axios, this.basePath));
1620
+ completeAcceptance(bidRef, idempotencyKey, completeAcceptanceRequestDto, options) {
1621
+ return PartnerV2ApiFp(this.configuration).completeAcceptance(bidRef, idempotencyKey, completeAcceptanceRequestDto, options).then((request) => request(this.axios, this.basePath));
2638
1622
  }
2639
1623
  /**
2640
1624
  * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2641
1625
  * @summary 정산 마감(송장 강제완료)
2642
- * @param {string} bidId
1626
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2643
1627
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2644
1628
  * @param {*} [options] Override http request option.
2645
1629
  * @throws {RequiredError}
2646
1630
  */
2647
- completeInvoice(bidId, idempotencyKey, options) {
2648
- return PartnerV2ApiFp(this.configuration).completeInvoice(bidId, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
2649
- }
2650
- /**
2651
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
2652
- * @summary 결제창 발행
2653
- * @param {string} idempotencyKey 재시도 안전을 위한 멱등 키.
2654
- * @param {CreateCardPaymentRequestDto} createCardPaymentRequestDto
2655
- * @param {*} [options] Override http request option.
2656
- * @throws {RequiredError}
2657
- */
2658
- createCardPayment(idempotencyKey, createCardPaymentRequestDto, options) {
2659
- return PartnerV2ApiFp(this.configuration).createCardPayment(idempotencyKey, createCardPaymentRequestDto, options).then((request) => request(this.axios, this.basePath));
1631
+ completeInvoice(bidRef, idempotencyKey, options) {
1632
+ return PartnerV2ApiFp(this.configuration).completeInvoice(bidRef, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
2660
1633
  }
2661
1634
  /**
2662
1635
  * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인(APPROVED)되어 바로 결제 가능합니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. 거기서 카드를 골라 결제합니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/card-payment-requests/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요. --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — 같은 기능을 v2 응답 규약으로 제공하는 `POST /v2/card-payments` 와 `GET /v2/suppliers/{memberId}/card-payable` 를 신규 연동에 권합니다. 이 경로도 계속 동작하며 중단 일정은 없습니다.
@@ -2671,7 +1644,7 @@ export class PartnerV2Api extends BaseAPI {
2671
1644
  return PartnerV2ApiFp(this.configuration).createCardPaymentRequest(idempotencyKey, createCardPaymentRequestDto, options).then((request) => request(this.axios, this.basePath));
2672
1645
  }
2673
1646
  /**
2674
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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/{bidId}/contract-documents` 가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1647
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
2675
1648
  * @summary 계약서류 생성
2676
1649
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2677
1650
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
@@ -2681,30 +1654,6 @@ export class PartnerV2Api extends BaseAPI {
2681
1654
  createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options) {
2682
1655
  return PartnerV2ApiFp(this.configuration).createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(this.axios, this.basePath));
2683
1656
  }
2684
- /**
2685
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 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` 헤더 필수. ### 서명 검증 (필수) 발송 요청마다 헤더 `X-CMarket-Signature` 가 실립니다. ``` X-CMarket-Signature: t=<unix초>,v1=<hex> ``` `v1` 은 `HMAC-SHA256(secret, \"${t}.${요청 본문 원문}\")` 의 소문자 hex 입니다. 1. 헤더를 `t` 와 `v1` 로 나눕니다. 2. `\"${t}.${본문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. 등록 시 받은 시크릿으로 HMAC-SHA256 을 계산해 `v1` 과 비교합니다. 비교는 **상수 시간** 비교 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `t` 가 현재 시각으로부터 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). ### 중복 제거 `X-CMarket-Event-Id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. ### 응답과 재시도 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2686
- * @summary 웹훅 구독 등록
2687
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2688
- * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
2689
- * @param {*} [options] Override http request option.
2690
- * @throws {RequiredError}
2691
- */
2692
- createWebhookEndpoint(idempotencyKey, createWebhookEndpointRequestDto, options) {
2693
- return PartnerV2ApiFp(this.configuration).createWebhookEndpoint(idempotencyKey, createWebhookEndpointRequestDto, options).then((request) => request(this.axios, this.basePath));
2694
- }
2695
- /**
2696
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH … {\"status\":\"DISABLED\"}` 를 쓰세요 — 시크릿과 이벤트 구성이 남아 그대로 되살릴 수 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 가 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` — 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2697
- * @summary 웹훅 구독 삭제
2698
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2699
- * @param {string} ifMatch
2700
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
2701
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2702
- * @param {*} [options] Override http request option.
2703
- * @throws {RequiredError}
2704
- */
2705
- deleteWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, options) {
2706
- return PartnerV2ApiFp(this.configuration).deleteWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
2707
- }
2708
1657
  /**
2709
1658
  * 무인증 — `fileKey` 자체가 capability 다(V5 `/download/{fileKey}` 와 같은 보안 모델). 파트너 응답의 `fileUrl`/`fullUrl` 이 이 URL 을 가리킨다. 요청 시점에 서명하므로 URL 을 저장해 두어도 만료되지 않는다. 응답은 실제 저장소 URL 로의 302 리다이렉트이며 리다이렉트 타깃은 1시간 뒤 만료되므로 302 자체를 캐시하지 말 것(`Cache-Control: no-store`). --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 이미 있습니다 — `GET /v2/files/{fileKey}` 가 파일 메타와 `downloadUrl` 을 v2 응답 규약으로 돌려줍니다. 이 안정 URL 은 파트너 응답의 `fileUrl`/`fullUrl` 이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
2710
1659
  * @summary 파일 다운로드 — 안정 URL(302)
@@ -2716,45 +1665,35 @@ export class PartnerV2Api extends BaseAPI {
2716
1665
  return PartnerV2ApiFp(this.configuration).downloadFile(fileKey, options).then((request) => request(this.axios, this.basePath));
2717
1666
  }
2718
1667
  /**
2719
- * 공고의 현재 상태와 라이프사이클 하위 상태(계약서류 생성·정산·세금계산서) 조회합니다. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감·세금계산서 발행 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 낙찰 결과 조회(`GET /v2/bids/{bidId}/results`)의 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2720
- * @summary 공고 단건(라이프사이클) 조회
2721
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
2722
- * @param {*} [options] Override http request option.
2723
- * @throws {RequiredError}
2724
- */
2725
- getBid(bidId, options) {
2726
- return PartnerV2ApiFp(this.configuration).getBid(bidId, options).then((request) => request(this.axios, this.basePath));
2727
- }
2728
- /**
2729
- * 공고의 응찰 참여 업체·순위·낙찰 여부를 조회한다. scope bids:read.
2730
- * @summary 공고 결과 조회
2731
- * @param {string} bidId
1668
+ * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류:** `contractDocuments[].generationState` 는 **관측 전용**입니다. `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태이며 API 로 되살릴 수 없습니다 — 운영에 문의하세요. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1669
+ * @summary 공고 상세 조회
1670
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2732
1671
  * @param {*} [options] Override http request option.
2733
1672
  * @throws {RequiredError}
2734
1673
  */
2735
- getBidResults(bidId, options) {
2736
- return PartnerV2ApiFp(this.configuration).getBidResults(bidId, options).then((request) => request(this.axios, this.basePath));
1674
+ getBid(bidRef, options) {
1675
+ return PartnerV2ApiFp(this.configuration).getBid(bidRef, options).then((request) => request(this.axios, this.basePath));
2737
1676
  }
2738
1677
  /**
2739
1678
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 가시성 마스킹과는 직교한 정산 데이터이며 읽기 전용입니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2740
1679
  * @summary 정산 정보 조회
2741
- * @param {string} bidId
1680
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2742
1681
  * @param {*} [options] Override http request option.
2743
1682
  * @throws {RequiredError}
2744
1683
  */
2745
- getBidSettlement(bidId, options) {
2746
- return PartnerV2ApiFp(this.configuration).getBidSettlement(bidId, options).then((request) => request(this.axios, this.basePath));
1684
+ getBidSettlement(bidRef, options) {
1685
+ return PartnerV2ApiFp(this.configuration).getBidSettlement(bidRef, options).then((request) => request(this.axios, this.basePath));
2747
1686
  }
2748
1687
  /**
2749
1688
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2750
1689
  * @summary 거래명세서 조회
2751
- * @param {string} bidId
1690
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2752
1691
  * @param {number} [paperCode]
2753
1692
  * @param {*} [options] Override http request option.
2754
1693
  * @throws {RequiredError}
2755
1694
  */
2756
- getBidStatement(bidId, paperCode, options) {
2757
- return PartnerV2ApiFp(this.configuration).getBidStatement(bidId, paperCode, options).then((request) => request(this.axios, this.basePath));
1695
+ getBidStatement(bidRef, paperCode, options) {
1696
+ return PartnerV2ApiFp(this.configuration).getBidStatement(bidRef, paperCode, options).then((request) => request(this.axios, this.basePath));
2758
1697
  }
2759
1698
  /**
2760
1699
  * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **구 경로:** 버전 없는 `GET /files/{fileKey}` 는 만료 없는 안정 주소이고 파트너 응답의 `fileUrl`/`fullUrl` 이 그 값을 가리킵니다. 인증도 스코프도 없는 옛 표면이라 신규 연동은 이 엔드포인트를 쓰세요. 구 경로는 당분간 유지됩니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
@@ -2787,26 +1726,6 @@ export class PartnerV2Api extends BaseAPI {
2787
1726
  getSupplierCardPayable(memberId, options) {
2788
1727
  return PartnerV2ApiFp(this.configuration).getSupplierCardPayable(memberId, options).then((request) => request(this.axios, this.basePath));
2789
1728
  }
2790
- /**
2791
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
2792
- * @summary 공급사 카드결제 가능 여부
2793
- * @param {string} memberId 계약업체 회원 ID
2794
- * @param {*} [options] Override http request option.
2795
- * @throws {RequiredError}
2796
- */
2797
- getSupplierCardPayableV2(memberId, options) {
2798
- return PartnerV2ApiFp(this.configuration).getSupplierCardPayableV2(memberId, options).then((request) => request(this.axios, this.basePath));
2799
- }
2800
- /**
2801
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
2802
- * @summary 웹훅 구독 단건 조회
2803
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2804
- * @param {*} [options] Override http request option.
2805
- * @throws {RequiredError}
2806
- */
2807
- getWebhookEndpoint(endpointId, options) {
2808
- return PartnerV2ApiFp(this.configuration).getWebhookEndpoint(endpointId, options).then((request) => request(this.axios, this.basePath));
2809
- }
2810
1729
  /**
2811
1730
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
2812
1731
  * @summary Partner API 헬스체크
@@ -2817,7 +1736,7 @@ export class PartnerV2Api extends BaseAPI {
2817
1736
  return PartnerV2ApiFp(this.configuration).healthControllerCheck(options).then((request) => request(this.axios, this.basePath));
2818
1737
  }
2819
1738
  /**
2820
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 때 `304` 를 본문 없이 받습니다 — 마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 — 요청한 건수와 받은 건수가 다를 수 있으니 `bidId` 로 대조하세요. **목록이 길어 URL 부담되면** `POST /v2/bid-results/query` 쓰세요. 응답은 같습니다.
1739
+ * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 때 `304` 를 본문 없이 받습니다 — 마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 — 요청한 건수와 받은 건수가 다를 수 있으니 `bidId` 로 대조하세요. **단건 조회:** 공고 하나만 때도 `bidIds` 에 하나만 넣거나 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요. 종전의 `GET /v2/bids/{bidRef}/result` 는 상세 응답의 부분집합이라 폐지됐습니다.
2821
1740
  * @summary 공고 결과 배치 조회
2822
1741
  * @param {string} bidIds 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidIds&#x60; 를 반복해 전달합니다. 최대 100건.
2823
1742
  * @param {*} [options] Override http request option.
@@ -2841,7 +1760,7 @@ export class PartnerV2Api extends BaseAPI {
2841
1760
  return PartnerV2ApiFp(this.configuration).listBids(limit, cursor, bidIds, status, include, options).then((request) => request(this.axios, this.basePath));
2842
1761
  }
2843
1762
  /**
2844
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `isDefault=true` — 운영자가 기본값(★)으로 켜 둔 서류입니다. 선택 화면에서 **미리 체크된 상태로** 보여주세요. 목록이 이 값으로 걸러져 있지는 않습니다. - `autoGenerated=true` — c-market 이 데이터를 채워 PDF 로 만들어 주는 서류입니다. 생성 API 의 `paperCodes` 에 넣을 수 있습니다. - `autoGenerated=false` — 이 API 로는 만들 수 없는 서류입니다(거래명세서처럼 세금계산서 발행 같은 별도 시점이 필요한 서류). 목록에서 감추지 말고 사용자가 직접 첨부하도록 안내하세요. **조회 가능한 회원 범위:** 이 API 키에 설정된 대행 범위(소속 그룹 전원 또는 지정 회원 목록) 안의 회원만 조회할 수 있습니다. 범위 밖이면 403 입니다. 대행 범위는 키 설정이며 스코프와는 별개 축입니다. **필수 스코프:** `contracts:read` --- **응답 형태가 동결된 표면입니다.** 이미 연동 중인 시스템이 있어 응답 필드를 추가하거나 이름을 바꾸지 않습니다. 다른 `/v2` 엔드포인트와 달리 `{data,meta}` 봉투를 씌우지 않으므로 응답 본문이 곧 위 스키마입니다. 지금 연동하셔도 계속 동작합니다 — 다만 이 경로에 새 기능이 추가되지는 않습니다. **대체 계획:** 공고 기반 거래의 계약서류는 `GET /v2/bids/{bidId}/contract-documents` 가 v2 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1763
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
2845
1764
  * @summary 거래에 필요한 계약서류 목록 조회
2846
1765
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
2847
1766
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -2851,85 +1770,32 @@ export class PartnerV2Api extends BaseAPI {
2851
1770
  listExternalContractDocuments(buyerId, bidType, options) {
2852
1771
  return PartnerV2ApiFp(this.configuration).listExternalContractDocuments(buyerId, bidType, options).then((request) => request(this.axios, this.basePath));
2853
1772
  }
2854
- /**
2855
- * 기관에 공유된 물품 중 **아직 전송되지 않은 것**을 조회합니다. **증분 피드입니다.** 가져간 물품을 `POST /v2/products/receipts` 로 수신확인하면 다음 조회 결과에서 빠집니다. 수신확인을 하지 않으면 같은 물품이 계속 내려옵니다. **권장 흐름:** 조회 → 자기 시스템에 저장 → 저장에 성공한 물품 코드만 수신확인. 저장 전에 수신확인하면 그 물품은 다시 받을 수 없습니다. **조회 범위:** 요청 키가 대행하는 기관 그룹입니다. 기관 그룹이 설정되지 않은 키는 403 입니다. **필수 스코프:** `products:read`
2856
- * @summary 물품 카탈로그 조회
2857
- * @param {*} [options] Override http request option.
2858
- * @throws {RequiredError}
2859
- */
2860
- listProducts(options) {
2861
- return PartnerV2ApiFp(this.configuration).listProducts(options).then((request) => request(this.axios, this.basePath));
2862
- }
2863
- /**
2864
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 로 걸러 다시 처리하면 됩니다. - \"이벤트가 안 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 가 같고 `attempt` 만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 를 다음 요청의 `cursor` 로 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
2865
- * @summary 웹훅 전송 이력 조회
2866
- * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
2867
- * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
2868
- * @param {number} [limit] 페이지 크기(1~200, 기본 50).
2869
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
2870
- * @param {*} [options] Override http request option.
2871
- * @throws {RequiredError}
2872
- */
2873
- listWebhookDeliveries(endpointId, status, limit, cursor, options) {
2874
- return PartnerV2ApiFp(this.configuration).listWebhookDeliveries(endpointId, status, limit, cursor, options).then((request) => request(this.axios, this.basePath));
2875
- }
2876
- /**
2877
- * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 발송 요청마다 헤더 `X-CMarket-Signature` 가 실립니다. ``` X-CMarket-Signature: t=<unix초>,v1=<hex> ``` `v1` 은 `HMAC-SHA256(secret, \"${t}.${요청 본문 원문}\")` 의 소문자 hex 입니다. 1. 헤더를 `t` 와 `v1` 로 나눕니다. 2. `\"${t}.${본문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. 등록 시 받은 시크릿으로 HMAC-SHA256 을 계산해 `v1` 과 비교합니다. 비교는 **상수 시간** 비교 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `t` 가 현재 시각으로부터 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). ### 중복 제거 `X-CMarket-Event-Id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. ### 응답과 재시도 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2878
- * @summary 웹훅 구독 목록 조회
2879
- * @param {*} [options] Override http request option.
2880
- * @throws {RequiredError}
2881
- */
2882
- listWebhookEndpoints(options) {
2883
- return PartnerV2ApiFp(this.configuration).listWebhookEndpoints(options).then((request) => request(this.axios, this.basePath));
2884
- }
2885
1773
  /**
2886
1774
  * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 후 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
2887
1775
  * @summary 유찰 처리
2888
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1776
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2889
1777
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2890
1778
  * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
2891
1779
  * @param {*} [options] Override http request option.
2892
1780
  * @throws {RequiredError}
2893
1781
  */
2894
- markBidFailed(bidId, idempotencyKey, markBidFailedRequestDto, options) {
2895
- return PartnerV2ApiFp(this.configuration).markBidFailed(bidId, idempotencyKey, markBidFailedRequestDto, options).then((request) => request(this.axios, this.basePath));
2896
- }
2897
- /**
2898
- * 초안(DRAFT) 상태로 등록된 공고를 진행중(ONGOING)으로 게시합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 연간/지명계약 등으로 초안 상태로 등록된 공고를 명시적으로 게시할 때. 등록 응답의 `status` 로 게시 필요 여부를 판별합니다. **전제조건:** 초안(DRAFT) 상태이고 마감(bidEndAt)이 미래여야 합니다. **거부:** 초안이 아니거나 마감이 지난 공고 → 409. 마감이 지났으면 먼저 마감일을 연장해야 합니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403). **멱등성:** `Idempotency-Key` 헤더 필수.
2899
- * @summary 공고 게시(초안 → 진행중)
2900
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
2901
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2902
- * @param {*} [options] Override http request option.
2903
- * @throws {RequiredError}
2904
- */
2905
- publishBid(bidId, idempotencyKey, options) {
2906
- return PartnerV2ApiFp(this.configuration).publishBid(bidId, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
2907
- }
2908
- /**
2909
- * 공고의 자동생성 계약서류(발주서·공고결과·표준계약서 등)를 생성/재생성합니다. **V6 대응:** `RegenerateAllContractPdfsCommand` — 웹 어드민의 \"계약 서류 일괄 재생성\"과 동일 경로. **호출 시점:** 낙찰(계약 시작) 후 계약서류가 필요하거나, 생성에 실패한 서류를 다시 만들 때. **부수효과:** - 생성 실패(DEAD_LETTER) 상태의 자동생성 PDF 가 재생성 큐에 등록됩니다(비동기). - 승낙사항(ACCEPTANCE) 계열은 운영자 승인 워크플로가 필요해 이 경로에서 제외됩니다. **응답:** 즉시 파일이 아니라 큐 등록 결과(`enqueuedCount`/`skippedCount`)를 반환합니다. 잠시 후 자동 생성됩니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2910
- * @summary 계약서류 생성(재생성)
2911
- * @param {string} bidId 공고번호(buy_idx, 예 CM…) 또는 외부 구매번호(bid_puchase_no).
2912
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2913
- * @param {*} [options] Override http request option.
2914
- * @throws {RequiredError}
2915
- */
2916
- regenerateContractDocuments(bidId, idempotencyKey, options) {
2917
- return PartnerV2ApiFp(this.configuration).regenerateContractDocuments(bidId, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
1782
+ markBidFailed(bidRef, idempotencyKey, markBidFailedRequestDto, options) {
1783
+ return PartnerV2ApiFp(this.configuration).markBidFailed(bidRef, idempotencyKey, markBidFailedRequestDto, options).then((request) => request(this.axios, this.basePath));
2918
1784
  }
2919
1785
  /**
2920
- * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `AWARDED` 를 반환합니다. **호출 시점:** 입찰 마감 후 낙찰자가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 낙찰자(공급사)의 응찰 건이 낙찰 처리됩니다. - 이후 **공고의 조회 상태(status)는 계약진행(CONTRACT_IN_PROGRESS)** 으로 진행합니다. `AWARDED` 라는 공고 status 는 존재하지 않으므로, 낙찰 여부는 `GET /v2/bids/{bidId}/results` 의 `participants[].isWinner` 또는 `GET /v2/bids/{bidId}` 의 status(=계약진행)로 관측하세요(`status === \'AWARDED\'` 폴링 금지). - 협상 방식(NEGOTIATION/NEGOTIATION_AUTO) 공고는 이 엔드포인트 전에 `POST /v2/bids/{bidId}/negotiation-scores`(협상 점수평가)로 평가를 완료해야 합니다. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(요청 body 에 buyerId 를 넣지 않습니다). **필수 스코프:** `awards:write` **멱등성:** `Idempotency-Key` 헤더 필수. 동일 키 + 동일 body 재전송 시 24시간 내 캐시 응답 반환.
1786
+ * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
2921
1787
  * @summary 낙찰 결과 전송
2922
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1788
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2923
1789
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2924
1790
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
2925
1791
  * @param {*} [options] Override http request option.
2926
1792
  * @throws {RequiredError}
2927
1793
  */
2928
- registerAward(bidId, idempotencyKey, registerAwardRequestDto, options) {
2929
- return PartnerV2ApiFp(this.configuration).registerAward(bidId, idempotencyKey, registerAwardRequestDto, options).then((request) => request(this.axios, this.basePath));
1794
+ registerAward(bidRef, idempotencyKey, registerAwardRequestDto, options) {
1795
+ return PartnerV2ApiFp(this.configuration).registerAward(bidRef, idempotencyKey, registerAwardRequestDto, options).then((request) => request(this.axios, this.basePath));
2930
1796
  }
2931
1797
  /**
2932
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수.
1798
+ * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 이 요청 본문에 직접 싣지 마세요 — 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 를 받고, 그 32자 키를 이 요청의 `attachments` 배열에 넣습니다.
2933
1799
  * @summary 공고 등록
2934
1800
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
2935
1801
  * @param {CreateBidRequestDto} createBidRequestDto
@@ -2953,64 +1819,28 @@ export class PartnerV2Api extends BaseAPI {
2953
1819
  /**
2954
1820
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2955
1821
  * @summary 낙찰 되돌리기
2956
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1822
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2957
1823
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2958
1824
  * @param {RevertAwardRequestDto} revertAwardRequestDto
2959
1825
  * @param {*} [options] Override http request option.
2960
1826
  * @throws {RequiredError}
2961
1827
  */
2962
- revertAward(bidId, idempotencyKey, revertAwardRequestDto, options) {
2963
- return PartnerV2ApiFp(this.configuration).revertAward(bidId, idempotencyKey, revertAwardRequestDto, options).then((request) => request(this.axios, this.basePath));
2964
- }
2965
- /**
2966
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 이 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 수 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 새 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 를 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
2967
- * @summary 웹훅 서명 시크릿 재발급
2968
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2969
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2970
- * @param {*} [options] Override http request option.
2971
- * @throws {RequiredError}
2972
- */
2973
- rotateWebhookSecret(endpointId, idempotencyKey, options) {
2974
- return PartnerV2ApiFp(this.configuration).rotateWebhookSecret(endpointId, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
2975
- }
2976
- /**
2977
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 그 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` 에 `delivered: false` 로 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 은 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
2978
- * @summary 웹훅 연결 확인 발송
2979
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2980
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2981
- * @param {*} [options] Override http request option.
2982
- * @throws {RequiredError}
2983
- */
2984
- sendWebhookTestEvent(endpointId, idempotencyKey, options) {
2985
- return PartnerV2ApiFp(this.configuration).sendWebhookTestEvent(endpointId, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
1828
+ revertAward(bidRef, idempotencyKey, revertAwardRequestDto, options) {
1829
+ return PartnerV2ApiFp(this.configuration).revertAward(bidRef, idempotencyKey, revertAwardRequestDto, options).then((request) => request(this.axios, this.basePath));
2986
1830
  }
2987
1831
  /**
2988
1832
  * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEdit=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
2989
1833
  * @summary 공고 수정
2990
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1834
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2991
1835
  * @param {string} ifMatch
2992
- * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidId}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1836
+ * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
2993
1837
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
2994
1838
  * @param {UpdateBidRequestDto} updateBidRequestDto
2995
1839
  * @param {*} [options] Override http request option.
2996
1840
  * @throws {RequiredError}
2997
1841
  */
2998
- updateBid(bidId, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options) {
2999
- return PartnerV2ApiFp(this.configuration).updateBid(bidId, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options).then((request) => request(this.axios, this.basePath));
3000
- }
3001
- /**
3002
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 는 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 가 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 이 헤더가 없으면 두 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` — 헤더를 빼먹었습니다. 조회 후 `ETag` 를 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** — 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
3003
- * @summary 웹훅 구독 수정
3004
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
3005
- * @param {string} ifMatch
3006
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
3007
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
3008
- * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
3009
- * @param {*} [options] Override http request option.
3010
- * @throws {RequiredError}
3011
- */
3012
- updateWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, updateWebhookEndpointRequestDto, options) {
3013
- return PartnerV2ApiFp(this.configuration).updateWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, updateWebhookEndpointRequestDto, options).then((request) => request(this.axios, this.basePath));
1842
+ updateBid(bidRef, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options) {
1843
+ return PartnerV2ApiFp(this.configuration).updateBid(bidRef, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options).then((request) => request(this.axios, this.basePath));
3014
1844
  }
3015
1845
  /**
3016
1846
  * 스코프 `files:write` + `Idempotency-Key` 헤더 필수. base64 또는 url 중 정확히 하나를 제출한다.