@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).
@@ -22,10 +22,6 @@ import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObj
22
22
  // @ts-ignore
23
23
  import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base';
24
24
  // @ts-ignore
25
- import type { AcknowledgeProductReceipt200Response } from '../models';
26
- // @ts-ignore
27
- import type { AcknowledgeProductsRequestDto } from '../models';
28
- // @ts-ignore
29
25
  import type { BidPublicStatus } from '../models';
30
26
  // @ts-ignore
31
27
  import type { CancelBid200Response } from '../models';
@@ -42,58 +38,34 @@ import type { CompleteInvoice200Response } from '../models';
42
38
  // @ts-ignore
43
39
  import type { CreateBidRequestDto } from '../models';
44
40
  // @ts-ignore
45
- import type { CreateCardPayment200Response } from '../models';
46
- // @ts-ignore
47
41
  import type { CreateCardPaymentRequestDto } from '../models';
48
42
  // @ts-ignore
49
43
  import type { CreateExternalContractDocumentsRequestDto } from '../models';
50
44
  // @ts-ignore
51
45
  import type { CreateExternalContractDocumentsResponseDto } from '../models';
52
46
  // @ts-ignore
53
- import type { CreateWebhookEndpoint201Response } from '../models';
54
- // @ts-ignore
55
- import type { CreateWebhookEndpointRequestDto } from '../models';
56
- // @ts-ignore
57
47
  import type { ExternalContractDocumentsResponseDto } from '../models';
58
48
  // @ts-ignore
59
49
  import type { GetBid200Response } from '../models';
60
50
  // @ts-ignore
61
- import type { GetBidResults200Response } from '../models';
62
- // @ts-ignore
63
51
  import type { GetBidSettlement200Response } from '../models';
64
52
  // @ts-ignore
65
53
  import type { GetBidStatement200Response } from '../models';
66
54
  // @ts-ignore
67
55
  import type { GetFileMeta200Response } from '../models';
68
56
  // @ts-ignore
69
- import type { GetSupplierCardPayableV2200Response } from '../models';
70
- // @ts-ignore
71
- import type { GetWebhookEndpoint200Response } from '../models';
72
- // @ts-ignore
73
57
  import type { HealthControllerCheck200Response } from '../models';
74
58
  // @ts-ignore
75
59
  import type { ListBidResults200Response } from '../models';
76
60
  // @ts-ignore
77
61
  import type { ListBids200Response } from '../models';
78
62
  // @ts-ignore
79
- import type { ListProducts200Response } from '../models';
80
- // @ts-ignore
81
- import type { ListWebhookDeliveries200Response } from '../models';
82
- // @ts-ignore
83
- import type { ListWebhookEndpoints200Response } from '../models';
84
- // @ts-ignore
85
63
  import type { MarkBidFailed201Response } from '../models';
86
64
  // @ts-ignore
87
65
  import type { MarkBidFailedRequestDto } from '../models';
88
66
  // @ts-ignore
89
- import type { PartnerWebhookDeliveryStatus } from '../models';
90
- // @ts-ignore
91
67
  import type { ProblemDetailsDto } from '../models';
92
68
  // @ts-ignore
93
- import type { PublishBid200Response } from '../models';
94
- // @ts-ignore
95
- import type { RegenerateContractDocuments201Response } from '../models';
96
- // @ts-ignore
97
69
  import type { RegisterAward201Response } from '../models';
98
70
  // @ts-ignore
99
71
  import type { RegisterAwardRequestDto } from '../models';
@@ -110,16 +82,12 @@ import type { SemoContractRegisteredResponseDto } from '../models';
110
82
  // @ts-ignore
111
83
  import type { SemoContractTaxinvoiceStatusResponseDto } from '../models';
112
84
  // @ts-ignore
113
- import type { SendWebhookTestEvent200Response } from '../models';
114
- // @ts-ignore
115
85
  import type { SupplierCardPayableResponseDto } from '../models';
116
86
  // @ts-ignore
117
87
  import type { UpdateBid200Response } from '../models';
118
88
  // @ts-ignore
119
89
  import type { UpdateBidRequestDto } from '../models';
120
90
  // @ts-ignore
121
- import type { UpdateWebhookEndpointRequestDto } from '../models';
122
- // @ts-ignore
123
91
  import type { UploadFile201Response } from '../models';
124
92
  // @ts-ignore
125
93
  import type { UploadFileRequestDto } from '../models';
@@ -129,68 +97,23 @@ import type { UploadFileRequestDto } from '../models';
129
97
  export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configuration) {
130
98
  return {
131
99
  /**
132
- * 저장을 마친 물품을 전송완료로 표시해 다음 조회에서 제외합니다. **되돌릴 수 없습니다.** 표시한 물품은 `GET /v2/products` 다시 내려오지 않으므로, 자기 시스템에 저장이 끝난 뒤에 호출하세요. **표시 범위는 기관 그룹으로 잠깁니다.** 다른 기관의 물품 코드를 섞어 보내면 건은 표시되지 않고 `acknowledged` 요청 수보다 작게 돌아옵니다. **필수 스코프:** `products:write` **멱등성:** `Idempotency-Key` 헤더 필수.
133
- * @summary 물품 수신확인
134
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
135
- * @param {AcknowledgeProductsRequestDto} acknowledgeProductsRequestDto
136
- * @param {*} [options] Override http request option.
137
- * @throws {RequiredError}
138
- */
139
- acknowledgeProductReceipt: async (idempotencyKey: string, acknowledgeProductsRequestDto: AcknowledgeProductsRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
140
- // verify required parameter 'idempotencyKey' is not null or undefined
141
- assertParamExists('acknowledgeProductReceipt', 'idempotencyKey', idempotencyKey)
142
- // verify required parameter 'acknowledgeProductsRequestDto' is not null or undefined
143
- assertParamExists('acknowledgeProductReceipt', 'acknowledgeProductsRequestDto', acknowledgeProductsRequestDto)
144
- const localVarPath = `/v2/products/receipts`;
145
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
146
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
147
- let baseOptions;
148
- if (configuration) {
149
- baseOptions = configuration.baseOptions;
150
- }
151
-
152
- const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
153
- const localVarHeaderParameter = {} as any;
154
- const localVarQueryParameter = {} as any;
155
-
156
- // authentication partner-oauth2 required
157
- // oauth required
158
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["products:write"], configuration)
159
-
160
- localVarHeaderParameter['Content-Type'] = 'application/json';
161
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
162
-
163
- if (idempotencyKey != null) {
164
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
165
- }
166
- setSearchParams(localVarUrlObj, localVarQueryParameter);
167
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
168
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
169
- localVarRequestOptions.data = serializeDataIfNeeded(acknowledgeProductsRequestDto, localVarRequestOptions, configuration)
170
-
171
- return {
172
- url: toPathString(localVarUrlObj),
173
- options: localVarRequestOptions,
174
- };
175
- },
176
- /**
177
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 → 409. 타 발주처 공고 → 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidId}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
100
+ * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
178
101
  * @summary 공고 취소
179
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
102
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
180
103
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
181
104
  * @param {CancelBidRequestDto} cancelBidRequestDto
182
105
  * @param {*} [options] Override http request option.
183
106
  * @throws {RequiredError}
184
107
  */
185
- cancelBid: async (bidId: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
186
- // verify required parameter 'bidId' is not null or undefined
187
- assertParamExists('cancelBid', 'bidId', bidId)
108
+ cancelBid: async (bidRef: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
109
+ // verify required parameter 'bidRef' is not null or undefined
110
+ assertParamExists('cancelBid', 'bidRef', bidRef)
188
111
  // verify required parameter 'idempotencyKey' is not null or undefined
189
112
  assertParamExists('cancelBid', 'idempotencyKey', idempotencyKey)
190
113
  // verify required parameter 'cancelBidRequestDto' is not null or undefined
191
114
  assertParamExists('cancelBid', 'cancelBidRequestDto', cancelBidRequestDto)
192
- const localVarPath = `/v2/bids/{bidId}/cancel`
193
- .replace('{bidId}', encodeURIComponent(String(bidId)));
115
+ const localVarPath = `/v2/bids/{bidRef}/cancel`
116
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
194
117
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
195
118
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
196
119
  let baseOptions;
@@ -223,23 +146,23 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
223
146
  };
224
147
  },
225
148
  /**
226
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **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` 헤더 필수.
149
+ * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **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` 헤더 필수.
227
150
  * @summary 검수완료 전송
228
- * @param {string} bidId 공고 ID(&#x3D; backend bidId &#x3D; 등록 응답의 bidNo).
151
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
229
152
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
230
153
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
231
154
  * @param {*} [options] Override http request option.
232
155
  * @throws {RequiredError}
233
156
  */
234
- completeAcceptance: async (bidId: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
235
- // verify required parameter 'bidId' is not null or undefined
236
- assertParamExists('completeAcceptance', 'bidId', bidId)
157
+ completeAcceptance: async (bidRef: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
158
+ // verify required parameter 'bidRef' is not null or undefined
159
+ assertParamExists('completeAcceptance', 'bidRef', bidRef)
237
160
  // verify required parameter 'idempotencyKey' is not null or undefined
238
161
  assertParamExists('completeAcceptance', 'idempotencyKey', idempotencyKey)
239
162
  // verify required parameter 'completeAcceptanceRequestDto' is not null or undefined
240
163
  assertParamExists('completeAcceptance', 'completeAcceptanceRequestDto', completeAcceptanceRequestDto)
241
- const localVarPath = `/v2/bids/{bidId}/acceptance`
242
- .replace('{bidId}', encodeURIComponent(String(bidId)));
164
+ const localVarPath = `/v2/bids/{bidRef}/acceptance`
165
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
243
166
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
244
167
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
245
168
  let baseOptions;
@@ -274,18 +197,18 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
274
197
  /**
275
198
  * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
276
199
  * @summary 정산 마감(송장 강제완료)
277
- * @param {string} bidId
200
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
278
201
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
279
202
  * @param {*} [options] Override http request option.
280
203
  * @throws {RequiredError}
281
204
  */
282
- completeInvoice: async (bidId: string, idempotencyKey: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
283
- // verify required parameter 'bidId' is not null or undefined
284
- assertParamExists('completeInvoice', 'bidId', bidId)
205
+ completeInvoice: async (bidRef: string, idempotencyKey: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
206
+ // verify required parameter 'bidRef' is not null or undefined
207
+ assertParamExists('completeInvoice', 'bidRef', bidRef)
285
208
  // verify required parameter 'idempotencyKey' is not null or undefined
286
209
  assertParamExists('completeInvoice', 'idempotencyKey', idempotencyKey)
287
- const localVarPath = `/v2/bids/{bidId}/settlement/complete`
288
- .replace('{bidId}', encodeURIComponent(String(bidId)));
210
+ const localVarPath = `/v2/bids/{bidRef}/settlement/complete`
211
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
289
212
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
290
213
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
291
214
  let baseOptions;
@@ -315,51 +238,6 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
315
238
  options: localVarRequestOptions,
316
239
  };
317
240
  },
318
- /**
319
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
320
- * @summary 결제창 발행
321
- * @param {string} idempotencyKey 재시도 안전을 위한 멱등 키.
322
- * @param {CreateCardPaymentRequestDto} createCardPaymentRequestDto
323
- * @param {*} [options] Override http request option.
324
- * @throws {RequiredError}
325
- */
326
- createCardPayment: async (idempotencyKey: string, createCardPaymentRequestDto: CreateCardPaymentRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
327
- // verify required parameter 'idempotencyKey' is not null or undefined
328
- assertParamExists('createCardPayment', 'idempotencyKey', idempotencyKey)
329
- // verify required parameter 'createCardPaymentRequestDto' is not null or undefined
330
- assertParamExists('createCardPayment', 'createCardPaymentRequestDto', createCardPaymentRequestDto)
331
- const localVarPath = `/v2/card-payments`;
332
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
333
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
334
- let baseOptions;
335
- if (configuration) {
336
- baseOptions = configuration.baseOptions;
337
- }
338
-
339
- const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
340
- const localVarHeaderParameter = {} as any;
341
- const localVarQueryParameter = {} as any;
342
-
343
- // authentication partner-oauth2 required
344
- // oauth required
345
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["payments:write"], configuration)
346
-
347
- localVarHeaderParameter['Content-Type'] = 'application/json';
348
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
349
-
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 = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
356
- localVarRequestOptions.data = serializeDataIfNeeded(createCardPaymentRequestDto, localVarRequestOptions, configuration)
357
-
358
- return {
359
- url: toPathString(localVarUrlObj),
360
- options: localVarRequestOptions,
361
- };
362
- },
363
241
  /**
364
242
  * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 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` 를 신규 연동에 권합니다. 이 경로도 계속 동작하며 중단 일정은 없습니다.
365
243
  * @summary 결제창 발행 (구 경로)
@@ -407,7 +285,7 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
407
285
  };
408
286
  },
409
287
  /**
410
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
288
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
411
289
  * @summary 계약서류 생성
412
290
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
413
291
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
@@ -451,107 +329,6 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
451
329
  options: localVarRequestOptions,
452
330
  };
453
331
  },
454
- /**
455
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
456
- * @summary 웹훅 구독 등록
457
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
458
- * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
459
- * @param {*} [options] Override http request option.
460
- * @throws {RequiredError}
461
- */
462
- createWebhookEndpoint: async (idempotencyKey: string, createWebhookEndpointRequestDto: CreateWebhookEndpointRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
463
- // verify required parameter 'idempotencyKey' is not null or undefined
464
- assertParamExists('createWebhookEndpoint', 'idempotencyKey', idempotencyKey)
465
- // verify required parameter 'createWebhookEndpointRequestDto' is not null or undefined
466
- assertParamExists('createWebhookEndpoint', 'createWebhookEndpointRequestDto', createWebhookEndpointRequestDto)
467
- const localVarPath = `/v2/webhook-endpoints`;
468
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
469
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
470
- let baseOptions;
471
- if (configuration) {
472
- baseOptions = configuration.baseOptions;
473
- }
474
-
475
- const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
476
- const localVarHeaderParameter = {} as any;
477
- const localVarQueryParameter = {} as any;
478
-
479
- // authentication partner-oauth2 required
480
- // oauth required
481
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:write"], configuration)
482
-
483
- localVarHeaderParameter['Content-Type'] = 'application/json';
484
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
485
-
486
- if (idempotencyKey != null) {
487
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
488
- }
489
- setSearchParams(localVarUrlObj, localVarQueryParameter);
490
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
491
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
492
- localVarRequestOptions.data = serializeDataIfNeeded(createWebhookEndpointRequestDto, localVarRequestOptions, configuration)
493
-
494
- return {
495
- url: toPathString(localVarUrlObj),
496
- options: localVarRequestOptions,
497
- };
498
- },
499
- /**
500
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH … {\"status\":\"DISABLED\"}` 를 쓰세요 — 시크릿과 이벤트 구성이 남아 그대로 되살릴 수 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 가 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` — 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
501
- * @summary 웹훅 구독 삭제
502
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
503
- * @param {string} ifMatch
504
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
505
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
506
- * @param {*} [options] Override http request option.
507
- * @throws {RequiredError}
508
- */
509
- deleteWebhookEndpoint: async (endpointId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
510
- // verify required parameter 'endpointId' is not null or undefined
511
- assertParamExists('deleteWebhookEndpoint', 'endpointId', endpointId)
512
- // verify required parameter 'ifMatch' is not null or undefined
513
- assertParamExists('deleteWebhookEndpoint', 'ifMatch', ifMatch)
514
- // verify required parameter 'ifMatch2' is not null or undefined
515
- assertParamExists('deleteWebhookEndpoint', 'ifMatch2', ifMatch2)
516
- // verify required parameter 'idempotencyKey' is not null or undefined
517
- assertParamExists('deleteWebhookEndpoint', 'idempotencyKey', idempotencyKey)
518
- const localVarPath = `/v2/webhook-endpoints/{endpointId}`
519
- .replace('{endpointId}', encodeURIComponent(String(endpointId)));
520
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
521
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
522
- let baseOptions;
523
- if (configuration) {
524
- baseOptions = configuration.baseOptions;
525
- }
526
-
527
- const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
528
- const localVarHeaderParameter = {} as any;
529
- const localVarQueryParameter = {} as any;
530
-
531
- // authentication partner-oauth2 required
532
- // oauth required
533
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:write"], configuration)
534
-
535
- localVarHeaderParameter['Accept'] = 'application/problem+json';
536
-
537
- if (ifMatch != null) {
538
- localVarHeaderParameter['if-match'] = String(ifMatch);
539
- }
540
- if (ifMatch2 != null) {
541
- localVarHeaderParameter['If-Match'] = String(ifMatch2);
542
- }
543
- if (idempotencyKey != null) {
544
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
545
- }
546
- setSearchParams(localVarUrlObj, localVarQueryParameter);
547
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
548
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
549
-
550
- return {
551
- url: toPathString(localVarUrlObj),
552
- options: localVarRequestOptions,
553
- };
554
- },
555
332
  /**
556
333
  * 무인증 — `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` 이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
557
334
  * @summary 파일 다운로드 — 안정 URL(302)
@@ -586,55 +363,17 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
586
363
  };
587
364
  },
588
365
  /**
589
- * 공고의 현재 상태와 라이프사이클 하위 상태(계약서류 생성·정산·세금계산서) 조회합니다. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감·세금계산서 발행 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 낙찰 결과 조회(`GET /v2/bids/{bidId}/results`)의 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
590
- * @summary 공고 단건(라이프사이클) 조회
591
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
592
- * @param {*} [options] Override http request option.
593
- * @throws {RequiredError}
594
- */
595
- getBid: async (bidId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
596
- // verify required parameter 'bidId' is not null or undefined
597
- assertParamExists('getBid', 'bidId', bidId)
598
- const localVarPath = `/v2/bids/{bidId}`
599
- .replace('{bidId}', encodeURIComponent(String(bidId)));
600
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
601
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
602
- let baseOptions;
603
- if (configuration) {
604
- baseOptions = configuration.baseOptions;
605
- }
606
-
607
- const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
608
- const localVarHeaderParameter = {} as any;
609
- const localVarQueryParameter = {} as any;
610
-
611
- // authentication partner-oauth2 required
612
- // oauth required
613
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["bids:read"], configuration)
614
-
615
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
616
-
617
- setSearchParams(localVarUrlObj, localVarQueryParameter);
618
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
619
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
620
-
621
- return {
622
- url: toPathString(localVarUrlObj),
623
- options: localVarRequestOptions,
624
- };
625
- },
626
- /**
627
- * 공고의 응찰 참여 업체·순위·낙찰 여부를 조회한다. scope bids:read.
628
- * @summary 공고 결과 조회
629
- * @param {string} bidId
366
+ * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류:** `contractDocuments[].generationState` 는 **관측 전용**입니다. `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태이며 API 로 되살릴 수 없습니다 — 운영에 문의하세요. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
367
+ * @summary 공고 상세 조회
368
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
630
369
  * @param {*} [options] Override http request option.
631
370
  * @throws {RequiredError}
632
371
  */
633
- getBidResults: async (bidId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
634
- // verify required parameter 'bidId' is not null or undefined
635
- assertParamExists('getBidResults', 'bidId', bidId)
636
- const localVarPath = `/v2/bids/{bidId}/result`
637
- .replace('{bidId}', encodeURIComponent(String(bidId)));
372
+ getBid: async (bidRef: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
373
+ // verify required parameter 'bidRef' is not null or undefined
374
+ assertParamExists('getBid', 'bidRef', bidRef)
375
+ const localVarPath = `/v2/bids/{bidRef}`
376
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
638
377
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
639
378
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
640
379
  let baseOptions;
@@ -664,15 +403,15 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
664
403
  /**
665
404
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 가시성 마스킹과는 직교한 정산 데이터이며 읽기 전용입니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
666
405
  * @summary 정산 정보 조회
667
- * @param {string} bidId
406
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
668
407
  * @param {*} [options] Override http request option.
669
408
  * @throws {RequiredError}
670
409
  */
671
- getBidSettlement: async (bidId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
672
- // verify required parameter 'bidId' is not null or undefined
673
- assertParamExists('getBidSettlement', 'bidId', bidId)
674
- const localVarPath = `/v2/bids/{bidId}/settlement`
675
- .replace('{bidId}', encodeURIComponent(String(bidId)));
410
+ getBidSettlement: async (bidRef: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
411
+ // verify required parameter 'bidRef' is not null or undefined
412
+ assertParamExists('getBidSettlement', 'bidRef', bidRef)
413
+ const localVarPath = `/v2/bids/{bidRef}/settlement`
414
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
676
415
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
677
416
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
678
417
  let baseOptions;
@@ -702,16 +441,16 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
702
441
  /**
703
442
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
704
443
  * @summary 거래명세서 조회
705
- * @param {string} bidId
444
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
706
445
  * @param {number} [paperCode]
707
446
  * @param {*} [options] Override http request option.
708
447
  * @throws {RequiredError}
709
448
  */
710
- getBidStatement: async (bidId: string, paperCode?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
711
- // verify required parameter 'bidId' is not null or undefined
712
- assertParamExists('getBidStatement', 'bidId', bidId)
713
- const localVarPath = `/v2/bids/{bidId}/statement`
714
- .replace('{bidId}', encodeURIComponent(String(bidId)));
449
+ getBidStatement: async (bidRef: string, paperCode?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
450
+ // verify required parameter 'bidRef' is not null or undefined
451
+ assertParamExists('getBidStatement', 'bidRef', bidRef)
452
+ const localVarPath = `/v2/bids/{bidRef}/statement`
453
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
715
454
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
716
455
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
717
456
  let baseOptions;
@@ -858,17 +597,13 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
858
597
  };
859
598
  },
860
599
  /**
861
- * 계약업체가 카드결제로 대금을 받을 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
862
- * @summary 공급사 카드결제 가능 여부
863
- * @param {string} memberId 계약업체 회원 ID
600
+ * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
601
+ * @summary Partner API 헬스체크
864
602
  * @param {*} [options] Override http request option.
865
603
  * @throws {RequiredError}
866
604
  */
867
- getSupplierCardPayableV2: async (memberId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
868
- // verify required parameter 'memberId' is not null or undefined
869
- assertParamExists('getSupplierCardPayableV2', 'memberId', memberId)
870
- const localVarPath = `/v2/suppliers/{memberId}/card-payable`
871
- .replace('{memberId}', encodeURIComponent(String(memberId)));
605
+ healthControllerCheck: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
606
+ const localVarPath = `/health`;
872
607
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
873
608
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
874
609
  let baseOptions;
@@ -880,10 +615,6 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
880
615
  const localVarHeaderParameter = {} as any;
881
616
  const localVarQueryParameter = {} as any;
882
617
 
883
- // authentication partner-oauth2 required
884
- // oauth required
885
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["payments:read"], configuration)
886
-
887
618
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
888
619
 
889
620
  setSearchParams(localVarUrlObj, localVarQueryParameter);
@@ -896,17 +627,16 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
896
627
  };
897
628
  },
898
629
  /**
899
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` `If-Match` 그대로 실어야 `PATCH`/`DELETE` 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 확인하세요. **필수 스코프:** `webhooks:read`
900
- * @summary 웹훅 구독 단건 조회
901
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
630
+ * 여러 공고의 응찰 결과를 번에 조회합니다. 스코프 `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` 는 상세 응답의 부분집합이라 폐지됐습니다.
631
+ * @summary 공고 결과 배치 조회
632
+ * @param {string} bidIds 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidIds&#x60; 를 반복해 전달합니다. 최대 100건.
902
633
  * @param {*} [options] Override http request option.
903
634
  * @throws {RequiredError}
904
635
  */
905
- getWebhookEndpoint: async (endpointId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
906
- // verify required parameter 'endpointId' is not null or undefined
907
- assertParamExists('getWebhookEndpoint', 'endpointId', endpointId)
908
- const localVarPath = `/v2/webhook-endpoints/{endpointId}`
909
- .replace('{endpointId}', encodeURIComponent(String(endpointId)));
636
+ listBidResults: async (bidIds: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
637
+ // verify required parameter 'bidIds' is not null or undefined
638
+ assertParamExists('listBidResults', 'bidIds', bidIds)
639
+ const localVarPath = `/v2/bid-results`;
910
640
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
911
641
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
912
642
  let baseOptions;
@@ -920,7 +650,11 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
920
650
 
921
651
  // authentication partner-oauth2 required
922
652
  // oauth required
923
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:read"], configuration)
653
+ await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["bids:read"], configuration)
654
+
655
+ if (bidIds !== undefined) {
656
+ localVarQueryParameter['bidIds'] = bidIds;
657
+ }
924
658
 
925
659
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
926
660
 
@@ -934,13 +668,18 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
934
668
  };
935
669
  },
936
670
  /**
937
- * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
938
- * @summary Partner API 헬스체크
671
+ * 발주처(API 바인딩)의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(쿼리에 buyerId 를 넣지 않습니다). **페이지네이션(cursor):** `limit`(1~100, 기본 100) + `cursor`(불투명 토큰). 응답의 `nextCursor` 를 다음 요청 `cursor` 로 전달하면 다음 페이지를 받습니다. `nextCursor=null` 이면 마지막 페이지입니다. **상태·낙찰방법:** 공개값(의미 문자열)으로 반환됩니다. 낙찰 여부는 상태가 아니라 낙찰 결과 조회의 `participants[].isWinner` 로 관측합니다(AWARDED 상태는 없습니다).
672
+ * @summary 공고 목록 조회
673
+ * @param {number} [limit] 페이지 크기(1~100, 기본 100).
674
+ * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달한다. 미지정 시 첫 페이지. &#x60;nextCursor&#x3D;null&#x60; 이면 마지막 페이지다.
675
+ * @param {Array<string>} [bidIds] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
676
+ * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회한다.
677
+ * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
939
678
  * @param {*} [options] Override http request option.
940
679
  * @throws {RequiredError}
941
680
  */
942
- healthControllerCheck: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
943
- const localVarPath = `/health`;
681
+ listBids: async (limit?: number, cursor?: string, bidIds?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
682
+ const localVarPath = `/v2/bids`;
944
683
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
945
684
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
946
685
  let baseOptions;
@@ -952,6 +691,30 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
952
691
  const localVarHeaderParameter = {} as any;
953
692
  const localVarQueryParameter = {} as any;
954
693
 
694
+ // authentication partner-oauth2 required
695
+ // oauth required
696
+ await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["bids:read"], configuration)
697
+
698
+ if (limit !== undefined) {
699
+ localVarQueryParameter['limit'] = limit;
700
+ }
701
+
702
+ if (cursor !== undefined) {
703
+ localVarQueryParameter['cursor'] = cursor;
704
+ }
705
+
706
+ if (bidIds) {
707
+ localVarQueryParameter['bidIds'] = bidIds;
708
+ }
709
+
710
+ if (status) {
711
+ localVarQueryParameter['status'] = status;
712
+ }
713
+
714
+ if (include) {
715
+ localVarQueryParameter['include'] = include;
716
+ }
717
+
955
718
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
956
719
 
957
720
  setSearchParams(localVarUrlObj, localVarQueryParameter);
@@ -964,107 +727,7 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
964
727
  };
965
728
  },
966
729
  /**
967
- * 여러 공고의 응찰 결과를 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 왕복으로 받습니다. 응답에는 `ETag` 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 `304` 본문 없이 받습니다마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 요청한 건수와 받은 건수가 다를 있으니 `bidId` 대조하세요. **목록이 길어 URL부담되면** `POST /v2/bid-results/query` 쓰세요. 응답은 같습니다.
968
- * @summary 공고 결과 배치 조회
969
- * @param {string} bidIds 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidIds&#x60; 를 반복해 전달합니다. 최대 100건.
970
- * @param {*} [options] Override http request option.
971
- * @throws {RequiredError}
972
- */
973
- listBidResults: async (bidIds: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
974
- // verify required parameter 'bidIds' is not null or undefined
975
- assertParamExists('listBidResults', 'bidIds', bidIds)
976
- const localVarPath = `/v2/bid-results`;
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
-
984
- const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
985
- const localVarHeaderParameter = {} as any;
986
- const localVarQueryParameter = {} as any;
987
-
988
- // authentication partner-oauth2 required
989
- // oauth required
990
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["bids:read"], configuration)
991
-
992
- if (bidIds !== undefined) {
993
- localVarQueryParameter['bidIds'] = bidIds;
994
- }
995
-
996
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
997
-
998
- setSearchParams(localVarUrlObj, localVarQueryParameter);
999
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1000
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1001
-
1002
- return {
1003
- url: toPathString(localVarUrlObj),
1004
- options: localVarRequestOptions,
1005
- };
1006
- },
1007
- /**
1008
- * 발주처(API 키 바인딩)의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(쿼리에 buyerId 를 넣지 않습니다). **페이지네이션(cursor):** `limit`(1~100, 기본 100) + `cursor`(불투명 토큰). 응답의 `nextCursor` 를 다음 요청 `cursor` 로 전달하면 다음 페이지를 받습니다. `nextCursor=null` 이면 마지막 페이지입니다. **상태·낙찰방법:** 공개값(의미 문자열)으로 반환됩니다. 낙찰 여부는 상태가 아니라 낙찰 결과 조회의 `participants[].isWinner` 로 관측합니다(AWARDED 상태는 없습니다).
1009
- * @summary 공고 목록 조회
1010
- * @param {number} [limit] 페이지 크기(1~100, 기본 100).
1011
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달한다. 미지정 시 첫 페이지. &#x60;nextCursor&#x3D;null&#x60; 이면 마지막 페이지다.
1012
- * @param {Array<string>} [bidIds] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
1013
- * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회한다.
1014
- * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
1015
- * @param {*} [options] Override http request option.
1016
- * @throws {RequiredError}
1017
- */
1018
- listBids: async (limit?: number, cursor?: string, bidIds?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1019
- const localVarPath = `/v2/bids`;
1020
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1021
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1022
- let baseOptions;
1023
- if (configuration) {
1024
- baseOptions = configuration.baseOptions;
1025
- }
1026
-
1027
- const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
1028
- const localVarHeaderParameter = {} as any;
1029
- const localVarQueryParameter = {} as any;
1030
-
1031
- // authentication partner-oauth2 required
1032
- // oauth required
1033
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["bids:read"], configuration)
1034
-
1035
- if (limit !== undefined) {
1036
- localVarQueryParameter['limit'] = limit;
1037
- }
1038
-
1039
- if (cursor !== undefined) {
1040
- localVarQueryParameter['cursor'] = cursor;
1041
- }
1042
-
1043
- if (bidIds) {
1044
- localVarQueryParameter['bidIds'] = bidIds;
1045
- }
1046
-
1047
- if (status) {
1048
- localVarQueryParameter['status'] = status;
1049
- }
1050
-
1051
- if (include) {
1052
- localVarQueryParameter['include'] = include;
1053
- }
1054
-
1055
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1056
-
1057
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1058
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1059
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1060
-
1061
- return {
1062
- url: toPathString(localVarUrlObj),
1063
- options: localVarRequestOptions,
1064
- };
1065
- },
1066
- /**
1067
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
730
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 거래유형에 적용되는 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1068
731
  * @summary 거래에 필요한 계약서류 목록 조회
1069
732
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
1070
733
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -1111,146 +774,24 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
1111
774
  options: localVarRequestOptions,
1112
775
  };
1113
776
  },
1114
- /**
1115
- * 기관에 공유된 물품 중 **아직 전송되지 않은 것**을 조회합니다. **증분 피드입니다.** 가져간 물품을 `POST /v2/products/receipts` 로 수신확인하면 다음 조회 결과에서 빠집니다. 수신확인을 하지 않으면 같은 물품이 계속 내려옵니다. **권장 흐름:** 조회 → 자기 시스템에 저장 → 저장에 성공한 물품 코드만 수신확인. 저장 전에 수신확인하면 그 물품은 다시 받을 수 없습니다. **조회 범위:** 요청 키가 대행하는 기관 그룹입니다. 기관 그룹이 설정되지 않은 키는 403 입니다. **필수 스코프:** `products:read`
1116
- * @summary 물품 카탈로그 조회
1117
- * @param {*} [options] Override http request option.
1118
- * @throws {RequiredError}
1119
- */
1120
- listProducts: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1121
- const localVarPath = `/v2/products`;
1122
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1123
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1124
- let baseOptions;
1125
- if (configuration) {
1126
- baseOptions = configuration.baseOptions;
1127
- }
1128
-
1129
- const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
1130
- const localVarHeaderParameter = {} as any;
1131
- const localVarQueryParameter = {} as any;
1132
-
1133
- // authentication partner-oauth2 required
1134
- // oauth required
1135
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["products:read"], configuration)
1136
-
1137
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1138
-
1139
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1140
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1141
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1142
-
1143
- return {
1144
- url: toPathString(localVarUrlObj),
1145
- options: localVarRequestOptions,
1146
- };
1147
- },
1148
- /**
1149
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 로 걸러 다시 처리하면 됩니다. - \"이벤트가 안 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 가 같고 `attempt` 만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 를 다음 요청의 `cursor` 로 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
1150
- * @summary 웹훅 전송 이력 조회
1151
- * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
1152
- * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
1153
- * @param {number} [limit] 페이지 크기(1~200, 기본 50).
1154
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
1155
- * @param {*} [options] Override http request option.
1156
- * @throws {RequiredError}
1157
- */
1158
- listWebhookDeliveries: async (endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1159
- const localVarPath = `/v2/webhook-deliveries`;
1160
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1161
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1162
- let baseOptions;
1163
- if (configuration) {
1164
- baseOptions = configuration.baseOptions;
1165
- }
1166
-
1167
- const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
1168
- const localVarHeaderParameter = {} as any;
1169
- const localVarQueryParameter = {} as any;
1170
-
1171
- // authentication partner-oauth2 required
1172
- // oauth required
1173
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:read"], configuration)
1174
-
1175
- if (endpointId !== undefined) {
1176
- localVarQueryParameter['endpointId'] = endpointId;
1177
- }
1178
-
1179
- if (status !== undefined) {
1180
- localVarQueryParameter['status'] = status;
1181
- }
1182
-
1183
- if (limit !== undefined) {
1184
- localVarQueryParameter['limit'] = limit;
1185
- }
1186
-
1187
- if (cursor !== undefined) {
1188
- localVarQueryParameter['cursor'] = cursor;
1189
- }
1190
-
1191
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1192
-
1193
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1194
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1195
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1196
-
1197
- return {
1198
- url: toPathString(localVarUrlObj),
1199
- options: localVarRequestOptions,
1200
- };
1201
- },
1202
- /**
1203
- * 이 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
1204
- * @summary 웹훅 구독 목록 조회
1205
- * @param {*} [options] Override http request option.
1206
- * @throws {RequiredError}
1207
- */
1208
- listWebhookEndpoints: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1209
- const localVarPath = `/v2/webhook-endpoints`;
1210
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1211
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1212
- let baseOptions;
1213
- if (configuration) {
1214
- baseOptions = configuration.baseOptions;
1215
- }
1216
-
1217
- const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
1218
- const localVarHeaderParameter = {} as any;
1219
- const localVarQueryParameter = {} as any;
1220
-
1221
- // authentication partner-oauth2 required
1222
- // oauth required
1223
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:read"], configuration)
1224
-
1225
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1226
-
1227
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1228
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1229
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1230
-
1231
- return {
1232
- url: toPathString(localVarUrlObj),
1233
- options: localVarRequestOptions,
1234
- };
1235
- },
1236
777
  /**
1237
778
  * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 후 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
1238
779
  * @summary 유찰 처리
1239
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
780
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1240
781
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1241
782
  * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
1242
783
  * @param {*} [options] Override http request option.
1243
784
  * @throws {RequiredError}
1244
785
  */
1245
- markBidFailed: async (bidId: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1246
- // verify required parameter 'bidId' is not null or undefined
1247
- assertParamExists('markBidFailed', 'bidId', bidId)
786
+ markBidFailed: async (bidRef: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
787
+ // verify required parameter 'bidRef' is not null or undefined
788
+ assertParamExists('markBidFailed', 'bidRef', bidRef)
1248
789
  // verify required parameter 'idempotencyKey' is not null or undefined
1249
790
  assertParamExists('markBidFailed', 'idempotencyKey', idempotencyKey)
1250
791
  // verify required parameter 'markBidFailedRequestDto' is not null or undefined
1251
792
  assertParamExists('markBidFailed', 'markBidFailedRequestDto', markBidFailedRequestDto)
1252
- const localVarPath = `/v2/bids/{bidId}/fail`
1253
- .replace('{bidId}', encodeURIComponent(String(bidId)));
793
+ const localVarPath = `/v2/bids/{bidRef}/fail`
794
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
1254
795
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1255
796
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1256
797
  let baseOptions;
@@ -1283,111 +824,23 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
1283
824
  };
1284
825
  },
1285
826
  /**
1286
- * 초안(DRAFT) 상태로 등록된 공고를 진행중(ONGOING)으로 게시합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 연간/지명계약 등으로 초안 상태로 등록된 공고를 명시적으로 게시할 때. 등록 응답의 `status` 게시 필요 여부를 판별합니다. **전제조건:** 초안(DRAFT) 상태이고 마감(bidEndAt) 미래여야 합니다. **거부:** 초안이 아니거나 마감이 지난 공고 409. 마감이 지났으면 먼저 마감일을 연장해야 합니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다( 발주처 공고 403). **멱등성:** `Idempotency-Key` 헤더 필수.
1287
- * @summary 공고 게시(초안 → 진행중)
1288
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1289
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
1290
- * @param {*} [options] Override http request option.
1291
- * @throws {RequiredError}
1292
- */
1293
- publishBid: async (bidId: string, idempotencyKey: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1294
- // verify required parameter 'bidId' is not null or undefined
1295
- assertParamExists('publishBid', 'bidId', bidId)
1296
- // verify required parameter 'idempotencyKey' is not null or undefined
1297
- assertParamExists('publishBid', 'idempotencyKey', idempotencyKey)
1298
- const localVarPath = `/v2/bids/{bidId}/publish`
1299
- .replace('{bidId}', encodeURIComponent(String(bidId)));
1300
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1301
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1302
- let baseOptions;
1303
- if (configuration) {
1304
- baseOptions = configuration.baseOptions;
1305
- }
1306
-
1307
- const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
1308
- const localVarHeaderParameter = {} as any;
1309
- const localVarQueryParameter = {} as any;
1310
-
1311
- // authentication partner-oauth2 required
1312
- // oauth required
1313
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["bids:write"], configuration)
1314
-
1315
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1316
-
1317
- if (idempotencyKey != null) {
1318
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1319
- }
1320
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1321
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1322
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1323
-
1324
- return {
1325
- url: toPathString(localVarUrlObj),
1326
- options: localVarRequestOptions,
1327
- };
1328
- },
1329
- /**
1330
- * 공고의 자동생성 계약서류(발주서·공고결과·표준계약서 등)를 생성/재생성합니다. **V6 대응:** `RegenerateAllContractPdfsCommand` — 웹 어드민의 \"계약 서류 일괄 재생성\"과 동일 경로. **호출 시점:** 낙찰(계약 시작) 후 계약서류가 필요하거나, 생성에 실패한 서류를 다시 만들 때. **부수효과:** - 생성 실패(DEAD_LETTER) 상태의 자동생성 PDF 가 재생성 큐에 등록됩니다(비동기). - 승낙사항(ACCEPTANCE) 계열은 운영자 승인 워크플로가 필요해 이 경로에서 제외됩니다. **응답:** 즉시 파일이 아니라 큐 등록 결과(`enqueuedCount`/`skippedCount`)를 반환합니다. 잠시 후 자동 생성됩니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1331
- * @summary 계약서류 생성(재생성)
1332
- * @param {string} bidId 공고번호(buy_idx, 예 CM…) 또는 외부 구매번호(bid_puchase_no).
1333
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1334
- * @param {*} [options] Override http request option.
1335
- * @throws {RequiredError}
1336
- */
1337
- regenerateContractDocuments: async (bidId: string, idempotencyKey: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1338
- // verify required parameter 'bidId' is not null or undefined
1339
- assertParamExists('regenerateContractDocuments', 'bidId', bidId)
1340
- // verify required parameter 'idempotencyKey' is not null or undefined
1341
- assertParamExists('regenerateContractDocuments', 'idempotencyKey', idempotencyKey)
1342
- const localVarPath = `/v2/bids/{bidId}/contract-documents`
1343
- .replace('{bidId}', encodeURIComponent(String(bidId)));
1344
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1345
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1346
- let baseOptions;
1347
- if (configuration) {
1348
- baseOptions = configuration.baseOptions;
1349
- }
1350
-
1351
- const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
1352
- const localVarHeaderParameter = {} as any;
1353
- const localVarQueryParameter = {} as any;
1354
-
1355
- // authentication partner-oauth2 required
1356
- // oauth required
1357
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["contracts:write"], configuration)
1358
-
1359
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1360
-
1361
- if (idempotencyKey != null) {
1362
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1363
- }
1364
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1365
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1366
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1367
-
1368
- return {
1369
- url: toPathString(localVarUrlObj),
1370
- options: localVarRequestOptions,
1371
- };
1372
- },
1373
- /**
1374
- * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
827
+ * 낙찰 결과를 등록합니다. 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
1375
828
  * @summary 낙찰 결과 전송
1376
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
829
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1377
830
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1378
831
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
1379
832
  * @param {*} [options] Override http request option.
1380
833
  * @throws {RequiredError}
1381
834
  */
1382
- registerAward: async (bidId: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1383
- // verify required parameter 'bidId' is not null or undefined
1384
- assertParamExists('registerAward', 'bidId', bidId)
835
+ registerAward: async (bidRef: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
836
+ // verify required parameter 'bidRef' is not null or undefined
837
+ assertParamExists('registerAward', 'bidRef', bidRef)
1385
838
  // verify required parameter 'idempotencyKey' is not null or undefined
1386
839
  assertParamExists('registerAward', 'idempotencyKey', idempotencyKey)
1387
840
  // verify required parameter 'registerAwardRequestDto' is not null or undefined
1388
841
  assertParamExists('registerAward', 'registerAwardRequestDto', registerAwardRequestDto)
1389
- const localVarPath = `/v2/bids/{bidId}/award`
1390
- .replace('{bidId}', encodeURIComponent(String(bidId)));
842
+ const localVarPath = `/v2/bids/{bidRef}/award`
843
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
1391
844
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1392
845
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1393
846
  let baseOptions;
@@ -1420,7 +873,7 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
1420
873
  };
1421
874
  },
1422
875
  /**
1423
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수.
876
+ * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 이 요청 본문에 직접 싣지 마세요 — 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 를 받고, 그 32자 키를 이 요청의 `attachments` 배열에 넣습니다.
1424
877
  * @summary 공고 등록
1425
878
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
1426
879
  * @param {CreateBidRequestDto} createBidRequestDto
@@ -1512,21 +965,21 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
1512
965
  /**
1513
966
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1514
967
  * @summary 낙찰 되돌리기
1515
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
968
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1516
969
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
1517
970
  * @param {RevertAwardRequestDto} revertAwardRequestDto
1518
971
  * @param {*} [options] Override http request option.
1519
972
  * @throws {RequiredError}
1520
973
  */
1521
- revertAward: async (bidId: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1522
- // verify required parameter 'bidId' is not null or undefined
1523
- assertParamExists('revertAward', 'bidId', bidId)
974
+ revertAward: async (bidRef: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
975
+ // verify required parameter 'bidRef' is not null or undefined
976
+ assertParamExists('revertAward', 'bidRef', bidRef)
1524
977
  // verify required parameter 'idempotencyKey' is not null or undefined
1525
978
  assertParamExists('revertAward', 'idempotencyKey', idempotencyKey)
1526
979
  // verify required parameter 'revertAwardRequestDto' is not null or undefined
1527
980
  assertParamExists('revertAward', 'revertAwardRequestDto', revertAwardRequestDto)
1528
- const localVarPath = `/v2/bids/{bidId}/award`
1529
- .replace('{bidId}', encodeURIComponent(String(bidId)));
981
+ const localVarPath = `/v2/bids/{bidRef}/award`
982
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
1530
983
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1531
984
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1532
985
  let baseOptions;
@@ -1558,108 +1011,20 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
1558
1011
  options: localVarRequestOptions,
1559
1012
  };
1560
1013
  },
1561
- /**
1562
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 이 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 수 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 새 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 를 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
1563
- * @summary 웹훅 서명 시크릿 재발급
1564
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1565
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1566
- * @param {*} [options] Override http request option.
1567
- * @throws {RequiredError}
1568
- */
1569
- rotateWebhookSecret: async (endpointId: string, idempotencyKey: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1570
- // verify required parameter 'endpointId' is not null or undefined
1571
- assertParamExists('rotateWebhookSecret', 'endpointId', endpointId)
1572
- // verify required parameter 'idempotencyKey' is not null or undefined
1573
- assertParamExists('rotateWebhookSecret', 'idempotencyKey', idempotencyKey)
1574
- const localVarPath = `/v2/webhook-endpoints/{endpointId}/rotate-secret`
1575
- .replace('{endpointId}', encodeURIComponent(String(endpointId)));
1576
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1577
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1578
- let baseOptions;
1579
- if (configuration) {
1580
- baseOptions = configuration.baseOptions;
1581
- }
1582
-
1583
- const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
1584
- const localVarHeaderParameter = {} as any;
1585
- const localVarQueryParameter = {} as any;
1586
-
1587
- // authentication partner-oauth2 required
1588
- // oauth required
1589
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:write"], configuration)
1590
-
1591
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1592
-
1593
- if (idempotencyKey != null) {
1594
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1595
- }
1596
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1597
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1598
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1599
-
1600
- return {
1601
- url: toPathString(localVarUrlObj),
1602
- options: localVarRequestOptions,
1603
- };
1604
- },
1605
- /**
1606
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 그 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` 에 `delivered: false` 로 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 은 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
1607
- * @summary 웹훅 연결 확인 발송
1608
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1609
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1610
- * @param {*} [options] Override http request option.
1611
- * @throws {RequiredError}
1612
- */
1613
- sendWebhookTestEvent: async (endpointId: string, idempotencyKey: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1614
- // verify required parameter 'endpointId' is not null or undefined
1615
- assertParamExists('sendWebhookTestEvent', 'endpointId', endpointId)
1616
- // verify required parameter 'idempotencyKey' is not null or undefined
1617
- assertParamExists('sendWebhookTestEvent', 'idempotencyKey', idempotencyKey)
1618
- const localVarPath = `/v2/webhook-endpoints/{endpointId}/test`
1619
- .replace('{endpointId}', encodeURIComponent(String(endpointId)));
1620
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1621
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1622
- let baseOptions;
1623
- if (configuration) {
1624
- baseOptions = configuration.baseOptions;
1625
- }
1626
-
1627
- const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
1628
- const localVarHeaderParameter = {} as any;
1629
- const localVarQueryParameter = {} as any;
1630
-
1631
- // authentication partner-oauth2 required
1632
- // oauth required
1633
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:write"], configuration)
1634
-
1635
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1636
-
1637
- if (idempotencyKey != null) {
1638
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1639
- }
1640
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1641
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1642
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1643
-
1644
- return {
1645
- url: toPathString(localVarUrlObj),
1646
- options: localVarRequestOptions,
1647
- };
1648
- },
1649
1014
  /**
1650
1015
  * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEdit=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
1651
1016
  * @summary 공고 수정
1652
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1017
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1653
1018
  * @param {string} ifMatch
1654
- * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidId}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1019
+ * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1655
1020
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
1656
1021
  * @param {UpdateBidRequestDto} updateBidRequestDto
1657
1022
  * @param {*} [options] Override http request option.
1658
1023
  * @throws {RequiredError}
1659
1024
  */
1660
- updateBid: async (bidId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1661
- // verify required parameter 'bidId' is not null or undefined
1662
- assertParamExists('updateBid', 'bidId', bidId)
1025
+ updateBid: async (bidRef: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1026
+ // verify required parameter 'bidRef' is not null or undefined
1027
+ assertParamExists('updateBid', 'bidRef', bidRef)
1663
1028
  // verify required parameter 'ifMatch' is not null or undefined
1664
1029
  assertParamExists('updateBid', 'ifMatch', ifMatch)
1665
1030
  // verify required parameter 'ifMatch2' is not null or undefined
@@ -1668,8 +1033,8 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
1668
1033
  assertParamExists('updateBid', 'idempotencyKey', idempotencyKey)
1669
1034
  // verify required parameter 'updateBidRequestDto' is not null or undefined
1670
1035
  assertParamExists('updateBid', 'updateBidRequestDto', updateBidRequestDto)
1671
- const localVarPath = `/v2/bids/{bidId}`
1672
- .replace('{bidId}', encodeURIComponent(String(bidId)));
1036
+ const localVarPath = `/v2/bids/{bidRef}`
1037
+ .replace('{bidRef}', encodeURIComponent(String(bidRef)));
1673
1038
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1674
1039
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1675
1040
  let baseOptions;
@@ -1707,67 +1072,6 @@ export const PartnerV2ApiAxiosParamCreator = function (configuration?: Configura
1707
1072
  options: localVarRequestOptions,
1708
1073
  };
1709
1074
  },
1710
- /**
1711
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 는 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 가 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 이 헤더가 없으면 두 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` — 헤더를 빼먹었습니다. 조회 후 `ETag` 를 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** — 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1712
- * @summary 웹훅 구독 수정
1713
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1714
- * @param {string} ifMatch
1715
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
1716
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1717
- * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
1718
- * @param {*} [options] Override http request option.
1719
- * @throws {RequiredError}
1720
- */
1721
- updateWebhookEndpoint: async (endpointId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateWebhookEndpointRequestDto: UpdateWebhookEndpointRequestDto, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1722
- // verify required parameter 'endpointId' is not null or undefined
1723
- assertParamExists('updateWebhookEndpoint', 'endpointId', endpointId)
1724
- // verify required parameter 'ifMatch' is not null or undefined
1725
- assertParamExists('updateWebhookEndpoint', 'ifMatch', ifMatch)
1726
- // verify required parameter 'ifMatch2' is not null or undefined
1727
- assertParamExists('updateWebhookEndpoint', 'ifMatch2', ifMatch2)
1728
- // verify required parameter 'idempotencyKey' is not null or undefined
1729
- assertParamExists('updateWebhookEndpoint', 'idempotencyKey', idempotencyKey)
1730
- // verify required parameter 'updateWebhookEndpointRequestDto' is not null or undefined
1731
- assertParamExists('updateWebhookEndpoint', 'updateWebhookEndpointRequestDto', updateWebhookEndpointRequestDto)
1732
- const localVarPath = `/v2/webhook-endpoints/{endpointId}`
1733
- .replace('{endpointId}', encodeURIComponent(String(endpointId)));
1734
- // use dummy base URL string because the URL constructor only accepts absolute URLs.
1735
- const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1736
- let baseOptions;
1737
- if (configuration) {
1738
- baseOptions = configuration.baseOptions;
1739
- }
1740
-
1741
- const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
1742
- const localVarHeaderParameter = {} as any;
1743
- const localVarQueryParameter = {} as any;
1744
-
1745
- // authentication partner-oauth2 required
1746
- // oauth required
1747
- await setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["webhooks:write"], configuration)
1748
-
1749
- localVarHeaderParameter['Content-Type'] = 'application/json';
1750
- localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1751
-
1752
- if (ifMatch != null) {
1753
- localVarHeaderParameter['if-match'] = String(ifMatch);
1754
- }
1755
- if (ifMatch2 != null) {
1756
- localVarHeaderParameter['If-Match'] = String(ifMatch2);
1757
- }
1758
- if (idempotencyKey != null) {
1759
- localVarHeaderParameter['Idempotency-Key'] = String(idempotencyKey);
1760
- }
1761
- setSearchParams(localVarUrlObj, localVarQueryParameter);
1762
- let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1763
- localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1764
- localVarRequestOptions.data = serializeDataIfNeeded(updateWebhookEndpointRequestDto, localVarRequestOptions, configuration)
1765
-
1766
- return {
1767
- url: toPathString(localVarUrlObj),
1768
- options: localVarRequestOptions,
1769
- };
1770
- },
1771
1075
  /**
1772
1076
  * 스코프 `files:write` + `Idempotency-Key` 헤더 필수. base64 또는 url 중 정확히 하나를 제출한다.
1773
1077
  * @summary 공고 첨부파일 업로드(base64 또는 url) → fileKey
@@ -1817,45 +1121,31 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
1817
1121
  const localVarAxiosParamCreator = PartnerV2ApiAxiosParamCreator(configuration)
1818
1122
  return {
1819
1123
  /**
1820
- * 저장을 마친 물품을 전송완료로 표시해 다음 조회에서 제외합니다. **되돌릴 수 없습니다.** 표시한 물품은 `GET /v2/products` 다시 내려오지 않으므로, 자기 시스템에 저장이 끝난 뒤에 호출하세요. **표시 범위는 기관 그룹으로 잠깁니다.** 다른 기관의 물품 코드를 섞어 보내면 건은 표시되지 않고 `acknowledged` 요청 수보다 작게 돌아옵니다. **필수 스코프:** `products:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1821
- * @summary 물품 수신확인
1822
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1823
- * @param {AcknowledgeProductsRequestDto} acknowledgeProductsRequestDto
1824
- * @param {*} [options] Override http request option.
1825
- * @throws {RequiredError}
1826
- */
1827
- async acknowledgeProductReceipt(idempotencyKey: string, acknowledgeProductsRequestDto: AcknowledgeProductsRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AcknowledgeProductReceipt200Response>> {
1828
- const localVarAxiosArgs = await localVarAxiosParamCreator.acknowledgeProductReceipt(idempotencyKey, acknowledgeProductsRequestDto, options);
1829
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1830
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.acknowledgeProductReceipt']?.[localVarOperationServerIndex]?.url;
1831
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1832
- },
1833
- /**
1834
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 → 409. 타 발주처 공고 → 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidId}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
1124
+ * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
1835
1125
  * @summary 공고 취소
1836
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1126
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1837
1127
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
1838
1128
  * @param {CancelBidRequestDto} cancelBidRequestDto
1839
1129
  * @param {*} [options] Override http request option.
1840
1130
  * @throws {RequiredError}
1841
1131
  */
1842
- async cancelBid(bidId: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CancelBid200Response>> {
1843
- const localVarAxiosArgs = await localVarAxiosParamCreator.cancelBid(bidId, idempotencyKey, cancelBidRequestDto, options);
1132
+ async cancelBid(bidRef: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CancelBid200Response>> {
1133
+ const localVarAxiosArgs = await localVarAxiosParamCreator.cancelBid(bidRef, idempotencyKey, cancelBidRequestDto, options);
1844
1134
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1845
1135
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.cancelBid']?.[localVarOperationServerIndex]?.url;
1846
1136
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1847
1137
  },
1848
1138
  /**
1849
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **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` 헤더 필수.
1139
+ * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **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` 헤더 필수.
1850
1140
  * @summary 검수완료 전송
1851
- * @param {string} bidId 공고 ID(&#x3D; backend bidId &#x3D; 등록 응답의 bidNo).
1141
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1852
1142
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1853
1143
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
1854
1144
  * @param {*} [options] Override http request option.
1855
1145
  * @throws {RequiredError}
1856
1146
  */
1857
- async completeAcceptance(bidId: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CompleteAcceptance200Response>> {
1858
- const localVarAxiosArgs = await localVarAxiosParamCreator.completeAcceptance(bidId, idempotencyKey, completeAcceptanceRequestDto, options);
1147
+ async completeAcceptance(bidRef: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CompleteAcceptance200Response>> {
1148
+ const localVarAxiosArgs = await localVarAxiosParamCreator.completeAcceptance(bidRef, idempotencyKey, completeAcceptanceRequestDto, options);
1859
1149
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1860
1150
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.completeAcceptance']?.[localVarOperationServerIndex]?.url;
1861
1151
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1863,31 +1153,17 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
1863
1153
  /**
1864
1154
  * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1865
1155
  * @summary 정산 마감(송장 강제완료)
1866
- * @param {string} bidId
1156
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1867
1157
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1868
1158
  * @param {*} [options] Override http request option.
1869
1159
  * @throws {RequiredError}
1870
1160
  */
1871
- async completeInvoice(bidId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CompleteInvoice200Response>> {
1872
- const localVarAxiosArgs = await localVarAxiosParamCreator.completeInvoice(bidId, idempotencyKey, options);
1161
+ async completeInvoice(bidRef: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CompleteInvoice200Response>> {
1162
+ const localVarAxiosArgs = await localVarAxiosParamCreator.completeInvoice(bidRef, idempotencyKey, options);
1873
1163
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1874
1164
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.completeInvoice']?.[localVarOperationServerIndex]?.url;
1875
1165
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1876
1166
  },
1877
- /**
1878
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
1879
- * @summary 결제창 발행
1880
- * @param {string} idempotencyKey 재시도 안전을 위한 멱등 키.
1881
- * @param {CreateCardPaymentRequestDto} createCardPaymentRequestDto
1882
- * @param {*} [options] Override http request option.
1883
- * @throws {RequiredError}
1884
- */
1885
- async createCardPayment(idempotencyKey: string, createCardPaymentRequestDto: CreateCardPaymentRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateCardPayment200Response>> {
1886
- const localVarAxiosArgs = await localVarAxiosParamCreator.createCardPayment(idempotencyKey, createCardPaymentRequestDto, options);
1887
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1888
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.createCardPayment']?.[localVarOperationServerIndex]?.url;
1889
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1890
- },
1891
1167
  /**
1892
1168
  * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 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` 를 신규 연동에 권합니다. 이 경로도 계속 동작하며 중단 일정은 없습니다.
1893
1169
  * @summary 결제창 발행 (구 경로)
@@ -1904,7 +1180,7 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
1904
1180
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1905
1181
  },
1906
1182
  /**
1907
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1183
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1908
1184
  * @summary 계약서류 생성
1909
1185
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1910
1186
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
@@ -1917,36 +1193,6 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
1917
1193
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.createExternalContractDocuments']?.[localVarOperationServerIndex]?.url;
1918
1194
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1919
1195
  },
1920
- /**
1921
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
1922
- * @summary 웹훅 구독 등록
1923
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1924
- * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
1925
- * @param {*} [options] Override http request option.
1926
- * @throws {RequiredError}
1927
- */
1928
- async createWebhookEndpoint(idempotencyKey: string, createWebhookEndpointRequestDto: CreateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateWebhookEndpoint201Response>> {
1929
- const localVarAxiosArgs = await localVarAxiosParamCreator.createWebhookEndpoint(idempotencyKey, createWebhookEndpointRequestDto, options);
1930
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1931
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.createWebhookEndpoint']?.[localVarOperationServerIndex]?.url;
1932
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1933
- },
1934
- /**
1935
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH … {\"status\":\"DISABLED\"}` 를 쓰세요 — 시크릿과 이벤트 구성이 남아 그대로 되살릴 수 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 가 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` — 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1936
- * @summary 웹훅 구독 삭제
1937
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1938
- * @param {string} ifMatch
1939
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
1940
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
1941
- * @param {*} [options] Override http request option.
1942
- * @throws {RequiredError}
1943
- */
1944
- async deleteWebhookEndpoint(endpointId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
1945
- const localVarAxiosArgs = await localVarAxiosParamCreator.deleteWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, options);
1946
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1947
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.deleteWebhookEndpoint']?.[localVarOperationServerIndex]?.url;
1948
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1949
- },
1950
1196
  /**
1951
1197
  * 무인증 — `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` 이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
1952
1198
  * @summary 파일 다운로드 — 안정 URL(302)
@@ -1961,40 +1207,27 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
1961
1207
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1962
1208
  },
1963
1209
  /**
1964
- * 공고의 현재 상태와 라이프사이클 하위 상태(계약서류 생성·정산·세금계산서) 조회합니다. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감·세금계산서 발행 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 낙찰 결과 조회(`GET /v2/bids/{bidId}/results`)의 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1965
- * @summary 공고 단건(라이프사이클) 조회
1966
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1210
+ * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류:** `contractDocuments[].generationState` 는 **관측 전용**입니다. `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태이며 API 로 되살릴 수 없습니다 — 운영에 문의하세요. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1211
+ * @summary 공고 상세 조회
1212
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1967
1213
  * @param {*} [options] Override http request option.
1968
1214
  * @throws {RequiredError}
1969
1215
  */
1970
- async getBid(bidId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBid200Response>> {
1971
- const localVarAxiosArgs = await localVarAxiosParamCreator.getBid(bidId, options);
1216
+ async getBid(bidRef: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBid200Response>> {
1217
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getBid(bidRef, options);
1972
1218
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1973
1219
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.getBid']?.[localVarOperationServerIndex]?.url;
1974
1220
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1975
1221
  },
1976
- /**
1977
- * 공고의 응찰 참여 업체·순위·낙찰 여부를 조회한다. scope bids:read.
1978
- * @summary 공고 결과 조회
1979
- * @param {string} bidId
1980
- * @param {*} [options] Override http request option.
1981
- * @throws {RequiredError}
1982
- */
1983
- async getBidResults(bidId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidResults200Response>> {
1984
- const localVarAxiosArgs = await localVarAxiosParamCreator.getBidResults(bidId, options);
1985
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1986
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.getBidResults']?.[localVarOperationServerIndex]?.url;
1987
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1988
- },
1989
1222
  /**
1990
1223
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 가시성 마스킹과는 직교한 정산 데이터이며 읽기 전용입니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
1991
1224
  * @summary 정산 정보 조회
1992
- * @param {string} bidId
1225
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1993
1226
  * @param {*} [options] Override http request option.
1994
1227
  * @throws {RequiredError}
1995
1228
  */
1996
- async getBidSettlement(bidId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidSettlement200Response>> {
1997
- const localVarAxiosArgs = await localVarAxiosParamCreator.getBidSettlement(bidId, options);
1229
+ async getBidSettlement(bidRef: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidSettlement200Response>> {
1230
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getBidSettlement(bidRef, options);
1998
1231
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1999
1232
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.getBidSettlement']?.[localVarOperationServerIndex]?.url;
2000
1233
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -2002,13 +1235,13 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
2002
1235
  /**
2003
1236
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2004
1237
  * @summary 거래명세서 조회
2005
- * @param {string} bidId
1238
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2006
1239
  * @param {number} [paperCode]
2007
1240
  * @param {*} [options] Override http request option.
2008
1241
  * @throws {RequiredError}
2009
1242
  */
2010
- async getBidStatement(bidId: string, paperCode?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidStatement200Response>> {
2011
- const localVarAxiosArgs = await localVarAxiosParamCreator.getBidStatement(bidId, paperCode, options);
1243
+ async getBidStatement(bidRef: string, paperCode?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidStatement200Response>> {
1244
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getBidStatement(bidRef, paperCode, options);
2012
1245
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2013
1246
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.getBidStatement']?.[localVarOperationServerIndex]?.url;
2014
1247
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -2047,36 +1280,10 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
2047
1280
  * @deprecated
2048
1281
  * @throws {RequiredError}
2049
1282
  */
2050
- async getSupplierCardPayable(memberId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SupplierCardPayableResponseDto>> {
2051
- const localVarAxiosArgs = await localVarAxiosParamCreator.getSupplierCardPayable(memberId, options);
2052
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2053
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.getSupplierCardPayable']?.[localVarOperationServerIndex]?.url;
2054
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2055
- },
2056
- /**
2057
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
2058
- * @summary 공급사 카드결제 가능 여부
2059
- * @param {string} memberId 계약업체 회원 ID
2060
- * @param {*} [options] Override http request option.
2061
- * @throws {RequiredError}
2062
- */
2063
- async getSupplierCardPayableV2(memberId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetSupplierCardPayableV2200Response>> {
2064
- const localVarAxiosArgs = await localVarAxiosParamCreator.getSupplierCardPayableV2(memberId, options);
2065
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2066
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.getSupplierCardPayableV2']?.[localVarOperationServerIndex]?.url;
2067
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2068
- },
2069
- /**
2070
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
2071
- * @summary 웹훅 구독 단건 조회
2072
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2073
- * @param {*} [options] Override http request option.
2074
- * @throws {RequiredError}
2075
- */
2076
- async getWebhookEndpoint(endpointId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetWebhookEndpoint200Response>> {
2077
- const localVarAxiosArgs = await localVarAxiosParamCreator.getWebhookEndpoint(endpointId, options);
1283
+ async getSupplierCardPayable(memberId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SupplierCardPayableResponseDto>> {
1284
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getSupplierCardPayable(memberId, options);
2078
1285
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2079
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.getWebhookEndpoint']?.[localVarOperationServerIndex]?.url;
1286
+ const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.getSupplierCardPayable']?.[localVarOperationServerIndex]?.url;
2080
1287
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2081
1288
  },
2082
1289
  /**
@@ -2092,7 +1299,7 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
2092
1299
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2093
1300
  },
2094
1301
  /**
2095
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 때 `304` 를 본문 없이 받습니다 — 마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 — 요청한 건수와 받은 건수가 다를 수 있으니 `bidId` 로 대조하세요. **목록이 길어 URL 부담되면** `POST /v2/bid-results/query` 쓰세요. 응답은 같습니다.
1302
+ * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `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` 는 상세 응답의 부분집합이라 폐지됐습니다.
2096
1303
  * @summary 공고 결과 배치 조회
2097
1304
  * @param {string} bidIds 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidIds&#x60; 를 반복해 전달합니다. 최대 100건.
2098
1305
  * @param {*} [options] Override http request option.
@@ -2122,7 +1329,7 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
2122
1329
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2123
1330
  },
2124
1331
  /**
2125
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1332
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
2126
1333
  * @summary 거래에 필요한 계약서류 목록 조회
2127
1334
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
2128
1335
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -2135,106 +1342,38 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
2135
1342
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.listExternalContractDocuments']?.[localVarOperationServerIndex]?.url;
2136
1343
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2137
1344
  },
2138
- /**
2139
- * 기관에 공유된 물품 중 **아직 전송되지 않은 것**을 조회합니다. **증분 피드입니다.** 가져간 물품을 `POST /v2/products/receipts` 로 수신확인하면 다음 조회 결과에서 빠집니다. 수신확인을 하지 않으면 같은 물품이 계속 내려옵니다. **권장 흐름:** 조회 → 자기 시스템에 저장 → 저장에 성공한 물품 코드만 수신확인. 저장 전에 수신확인하면 그 물품은 다시 받을 수 없습니다. **조회 범위:** 요청 키가 대행하는 기관 그룹입니다. 기관 그룹이 설정되지 않은 키는 403 입니다. **필수 스코프:** `products:read`
2140
- * @summary 물품 카탈로그 조회
2141
- * @param {*} [options] Override http request option.
2142
- * @throws {RequiredError}
2143
- */
2144
- async listProducts(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListProducts200Response>> {
2145
- const localVarAxiosArgs = await localVarAxiosParamCreator.listProducts(options);
2146
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2147
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.listProducts']?.[localVarOperationServerIndex]?.url;
2148
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2149
- },
2150
- /**
2151
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 로 걸러 다시 처리하면 됩니다. - \"이벤트가 안 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 가 같고 `attempt` 만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 를 다음 요청의 `cursor` 로 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
2152
- * @summary 웹훅 전송 이력 조회
2153
- * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
2154
- * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
2155
- * @param {number} [limit] 페이지 크기(1~200, 기본 50).
2156
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
2157
- * @param {*} [options] Override http request option.
2158
- * @throws {RequiredError}
2159
- */
2160
- async listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListWebhookDeliveries200Response>> {
2161
- const localVarAxiosArgs = await localVarAxiosParamCreator.listWebhookDeliveries(endpointId, status, limit, cursor, options);
2162
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2163
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.listWebhookDeliveries']?.[localVarOperationServerIndex]?.url;
2164
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2165
- },
2166
- /**
2167
- * 이 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2168
- * @summary 웹훅 구독 목록 조회
2169
- * @param {*} [options] Override http request option.
2170
- * @throws {RequiredError}
2171
- */
2172
- async listWebhookEndpoints(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListWebhookEndpoints200Response>> {
2173
- const localVarAxiosArgs = await localVarAxiosParamCreator.listWebhookEndpoints(options);
2174
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2175
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.listWebhookEndpoints']?.[localVarOperationServerIndex]?.url;
2176
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2177
- },
2178
1345
  /**
2179
1346
  * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 후 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
2180
1347
  * @summary 유찰 처리
2181
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1348
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2182
1349
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2183
1350
  * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
2184
1351
  * @param {*} [options] Override http request option.
2185
1352
  * @throws {RequiredError}
2186
1353
  */
2187
- async markBidFailed(bidId: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<MarkBidFailed201Response>> {
2188
- const localVarAxiosArgs = await localVarAxiosParamCreator.markBidFailed(bidId, idempotencyKey, markBidFailedRequestDto, options);
1354
+ async markBidFailed(bidRef: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<MarkBidFailed201Response>> {
1355
+ const localVarAxiosArgs = await localVarAxiosParamCreator.markBidFailed(bidRef, idempotencyKey, markBidFailedRequestDto, options);
2189
1356
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2190
1357
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.markBidFailed']?.[localVarOperationServerIndex]?.url;
2191
1358
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2192
1359
  },
2193
1360
  /**
2194
- * 초안(DRAFT) 상태로 등록된 공고를 진행중(ONGOING)으로 게시합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 연간/지명계약 등으로 초안 상태로 등록된 공고를 명시적으로 게시할 때. 등록 응답의 `status` 게시 필요 여부를 판별합니다. **전제조건:** 초안(DRAFT) 상태이고 마감(bidEndAt) 미래여야 합니다. **거부:** 초안이 아니거나 마감이 지난 공고 409. 마감이 지났으면 먼저 마감일을 연장해야 합니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다( 발주처 공고 403). **멱등성:** `Idempotency-Key` 헤더 필수.
2195
- * @summary 공고 게시(초안 → 진행중)
2196
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
2197
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2198
- * @param {*} [options] Override http request option.
2199
- * @throws {RequiredError}
2200
- */
2201
- async publishBid(bidId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PublishBid200Response>> {
2202
- const localVarAxiosArgs = await localVarAxiosParamCreator.publishBid(bidId, idempotencyKey, options);
2203
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2204
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.publishBid']?.[localVarOperationServerIndex]?.url;
2205
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2206
- },
2207
- /**
2208
- * 공고의 자동생성 계약서류(발주서·공고결과·표준계약서 등)를 생성/재생성합니다. **V6 대응:** `RegenerateAllContractPdfsCommand` — 웹 어드민의 \"계약 서류 일괄 재생성\"과 동일 경로. **호출 시점:** 낙찰(계약 시작) 후 계약서류가 필요하거나, 생성에 실패한 서류를 다시 만들 때. **부수효과:** - 생성 실패(DEAD_LETTER) 상태의 자동생성 PDF 가 재생성 큐에 등록됩니다(비동기). - 승낙사항(ACCEPTANCE) 계열은 운영자 승인 워크플로가 필요해 이 경로에서 제외됩니다. **응답:** 즉시 파일이 아니라 큐 등록 결과(`enqueuedCount`/`skippedCount`)를 반환합니다. 잠시 후 자동 생성됩니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2209
- * @summary 계약서류 생성(재생성)
2210
- * @param {string} bidId 공고번호(buy_idx, 예 CM…) 또는 외부 구매번호(bid_puchase_no).
2211
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2212
- * @param {*} [options] Override http request option.
2213
- * @throws {RequiredError}
2214
- */
2215
- async regenerateContractDocuments(bidId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RegenerateContractDocuments201Response>> {
2216
- const localVarAxiosArgs = await localVarAxiosParamCreator.regenerateContractDocuments(bidId, idempotencyKey, options);
2217
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2218
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.regenerateContractDocuments']?.[localVarOperationServerIndex]?.url;
2219
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2220
- },
2221
- /**
2222
- * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
1361
+ * 낙찰 결과를 등록합니다. 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
2223
1362
  * @summary 낙찰 결과 전송
2224
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1363
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2225
1364
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2226
1365
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
2227
1366
  * @param {*} [options] Override http request option.
2228
1367
  * @throws {RequiredError}
2229
1368
  */
2230
- async registerAward(bidId: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RegisterAward201Response>> {
2231
- const localVarAxiosArgs = await localVarAxiosParamCreator.registerAward(bidId, idempotencyKey, registerAwardRequestDto, options);
1369
+ async registerAward(bidRef: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RegisterAward201Response>> {
1370
+ const localVarAxiosArgs = await localVarAxiosParamCreator.registerAward(bidRef, idempotencyKey, registerAwardRequestDto, options);
2232
1371
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2233
1372
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.registerAward']?.[localVarOperationServerIndex]?.url;
2234
1373
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2235
1374
  },
2236
1375
  /**
2237
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수.
1376
+ * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 이 요청 본문에 직접 싣지 마세요 — 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 를 받고, 그 32자 키를 이 요청의 `attachments` 배열에 넣습니다.
2238
1377
  * @summary 공고 등록
2239
1378
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
2240
1379
  * @param {CreateBidRequestDto} createBidRequestDto
@@ -2264,80 +1403,35 @@ export const PartnerV2ApiFp = function(configuration?: Configuration) {
2264
1403
  /**
2265
1404
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2266
1405
  * @summary 낙찰 되돌리기
2267
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1406
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2268
1407
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2269
1408
  * @param {RevertAwardRequestDto} revertAwardRequestDto
2270
1409
  * @param {*} [options] Override http request option.
2271
1410
  * @throws {RequiredError}
2272
1411
  */
2273
- async revertAward(bidId: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RevertAward200Response>> {
2274
- const localVarAxiosArgs = await localVarAxiosParamCreator.revertAward(bidId, idempotencyKey, revertAwardRequestDto, options);
1412
+ async revertAward(bidRef: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RevertAward200Response>> {
1413
+ const localVarAxiosArgs = await localVarAxiosParamCreator.revertAward(bidRef, idempotencyKey, revertAwardRequestDto, options);
2275
1414
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2276
1415
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.revertAward']?.[localVarOperationServerIndex]?.url;
2277
1416
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2278
1417
  },
2279
- /**
2280
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 이 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 수 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 새 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 를 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
2281
- * @summary 웹훅 서명 시크릿 재발급
2282
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2283
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2284
- * @param {*} [options] Override http request option.
2285
- * @throws {RequiredError}
2286
- */
2287
- async rotateWebhookSecret(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateWebhookEndpoint201Response>> {
2288
- const localVarAxiosArgs = await localVarAxiosParamCreator.rotateWebhookSecret(endpointId, idempotencyKey, options);
2289
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2290
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.rotateWebhookSecret']?.[localVarOperationServerIndex]?.url;
2291
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2292
- },
2293
- /**
2294
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 그 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` 에 `delivered: false` 로 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 은 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
2295
- * @summary 웹훅 연결 확인 발송
2296
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2297
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2298
- * @param {*} [options] Override http request option.
2299
- * @throws {RequiredError}
2300
- */
2301
- async sendWebhookTestEvent(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<SendWebhookTestEvent200Response>> {
2302
- const localVarAxiosArgs = await localVarAxiosParamCreator.sendWebhookTestEvent(endpointId, idempotencyKey, options);
2303
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2304
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.sendWebhookTestEvent']?.[localVarOperationServerIndex]?.url;
2305
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2306
- },
2307
1418
  /**
2308
1419
  * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEdit=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
2309
1420
  * @summary 공고 수정
2310
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1421
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2311
1422
  * @param {string} ifMatch
2312
- * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidId}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1423
+ * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
2313
1424
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
2314
1425
  * @param {UpdateBidRequestDto} updateBidRequestDto
2315
1426
  * @param {*} [options] Override http request option.
2316
1427
  * @throws {RequiredError}
2317
1428
  */
2318
- async updateBid(bidId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UpdateBid200Response>> {
2319
- const localVarAxiosArgs = await localVarAxiosParamCreator.updateBid(bidId, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options);
1429
+ async updateBid(bidRef: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UpdateBid200Response>> {
1430
+ const localVarAxiosArgs = await localVarAxiosParamCreator.updateBid(bidRef, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options);
2320
1431
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2321
1432
  const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.updateBid']?.[localVarOperationServerIndex]?.url;
2322
1433
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2323
1434
  },
2324
- /**
2325
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 는 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 가 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 이 헤더가 없으면 두 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` — 헤더를 빼먹었습니다. 조회 후 `ETag` 를 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** — 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2326
- * @summary 웹훅 구독 수정
2327
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2328
- * @param {string} ifMatch
2329
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
2330
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2331
- * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
2332
- * @param {*} [options] Override http request option.
2333
- * @throws {RequiredError}
2334
- */
2335
- async updateWebhookEndpoint(endpointId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateWebhookEndpointRequestDto: UpdateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetWebhookEndpoint200Response>> {
2336
- const localVarAxiosArgs = await localVarAxiosParamCreator.updateWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, updateWebhookEndpointRequestDto, options);
2337
- const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2338
- const localVarOperationServerBasePath = operationServerMap['PartnerV2Api.updateWebhookEndpoint']?.[localVarOperationServerIndex]?.url;
2339
- return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
2340
- },
2341
1435
  /**
2342
1436
  * 스코프 `files:write` + `Idempotency-Key` 헤더 필수. base64 또는 url 중 정확히 하나를 제출한다.
2343
1437
  * @summary 공고 첨부파일 업로드(base64 또는 url) → fileKey
@@ -2361,61 +1455,39 @@ export const PartnerV2ApiFactory = function (configuration?: Configuration, base
2361
1455
  const localVarFp = PartnerV2ApiFp(configuration)
2362
1456
  return {
2363
1457
  /**
2364
- * 저장을 마친 물품을 전송완료로 표시해 다음 조회에서 제외합니다. **되돌릴 수 없습니다.** 표시한 물품은 `GET /v2/products` 다시 내려오지 않으므로, 자기 시스템에 저장이 끝난 뒤에 호출하세요. **표시 범위는 기관 그룹으로 잠깁니다.** 다른 기관의 물품 코드를 섞어 보내면 건은 표시되지 않고 `acknowledged` 요청 수보다 작게 돌아옵니다. **필수 스코프:** `products:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2365
- * @summary 물품 수신확인
2366
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2367
- * @param {AcknowledgeProductsRequestDto} acknowledgeProductsRequestDto
2368
- * @param {*} [options] Override http request option.
2369
- * @throws {RequiredError}
2370
- */
2371
- acknowledgeProductReceipt(idempotencyKey: string, acknowledgeProductsRequestDto: AcknowledgeProductsRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<AcknowledgeProductReceipt200Response> {
2372
- return localVarFp.acknowledgeProductReceipt(idempotencyKey, acknowledgeProductsRequestDto, options).then((request) => request(axios, basePath));
2373
- },
2374
- /**
2375
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 → 409. 타 발주처 공고 → 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidId}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
1458
+ * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
2376
1459
  * @summary 공고 취소
2377
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1460
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2378
1461
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2379
1462
  * @param {CancelBidRequestDto} cancelBidRequestDto
2380
1463
  * @param {*} [options] Override http request option.
2381
1464
  * @throws {RequiredError}
2382
1465
  */
2383
- cancelBid(bidId: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CancelBid200Response> {
2384
- return localVarFp.cancelBid(bidId, idempotencyKey, cancelBidRequestDto, options).then((request) => request(axios, basePath));
1466
+ cancelBid(bidRef: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CancelBid200Response> {
1467
+ return localVarFp.cancelBid(bidRef, idempotencyKey, cancelBidRequestDto, options).then((request) => request(axios, basePath));
2385
1468
  },
2386
1469
  /**
2387
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **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` 헤더 필수.
1470
+ * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **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` 헤더 필수.
2388
1471
  * @summary 검수완료 전송
2389
- * @param {string} bidId 공고 ID(&#x3D; backend bidId &#x3D; 등록 응답의 bidNo).
1472
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2390
1473
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2391
1474
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
2392
1475
  * @param {*} [options] Override http request option.
2393
1476
  * @throws {RequiredError}
2394
1477
  */
2395
- completeAcceptance(bidId: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CompleteAcceptance200Response> {
2396
- return localVarFp.completeAcceptance(bidId, idempotencyKey, completeAcceptanceRequestDto, options).then((request) => request(axios, basePath));
1478
+ completeAcceptance(bidRef: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CompleteAcceptance200Response> {
1479
+ return localVarFp.completeAcceptance(bidRef, idempotencyKey, completeAcceptanceRequestDto, options).then((request) => request(axios, basePath));
2397
1480
  },
2398
1481
  /**
2399
1482
  * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2400
1483
  * @summary 정산 마감(송장 강제완료)
2401
- * @param {string} bidId
1484
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2402
1485
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2403
1486
  * @param {*} [options] Override http request option.
2404
1487
  * @throws {RequiredError}
2405
1488
  */
2406
- completeInvoice(bidId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<CompleteInvoice200Response> {
2407
- return localVarFp.completeInvoice(bidId, idempotencyKey, options).then((request) => request(axios, basePath));
2408
- },
2409
- /**
2410
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
2411
- * @summary 결제창 발행
2412
- * @param {string} idempotencyKey 재시도 안전을 위한 멱등 키.
2413
- * @param {CreateCardPaymentRequestDto} createCardPaymentRequestDto
2414
- * @param {*} [options] Override http request option.
2415
- * @throws {RequiredError}
2416
- */
2417
- createCardPayment(idempotencyKey: string, createCardPaymentRequestDto: CreateCardPaymentRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CreateCardPayment200Response> {
2418
- return localVarFp.createCardPayment(idempotencyKey, createCardPaymentRequestDto, options).then((request) => request(axios, basePath));
1489
+ completeInvoice(bidRef: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<CompleteInvoice200Response> {
1490
+ return localVarFp.completeInvoice(bidRef, idempotencyKey, options).then((request) => request(axios, basePath));
2419
1491
  },
2420
1492
  /**
2421
1493
  * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 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` 를 신규 연동에 권합니다. 이 경로도 계속 동작하며 중단 일정은 없습니다.
@@ -2430,7 +1502,7 @@ export const PartnerV2ApiFactory = function (configuration?: Configuration, base
2430
1502
  return localVarFp.createCardPaymentRequest(idempotencyKey, createCardPaymentRequestDto, options).then((request) => request(axios, basePath));
2431
1503
  },
2432
1504
  /**
2433
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1505
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
2434
1506
  * @summary 계약서류 생성
2435
1507
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2436
1508
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
@@ -2440,30 +1512,6 @@ export const PartnerV2ApiFactory = function (configuration?: Configuration, base
2440
1512
  createExternalContractDocuments(idempotencyKey: string, createExternalContractDocumentsRequestDto: CreateExternalContractDocumentsRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CreateExternalContractDocumentsResponseDto> {
2441
1513
  return localVarFp.createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(axios, basePath));
2442
1514
  },
2443
- /**
2444
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2445
- * @summary 웹훅 구독 등록
2446
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2447
- * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
2448
- * @param {*} [options] Override http request option.
2449
- * @throws {RequiredError}
2450
- */
2451
- createWebhookEndpoint(idempotencyKey: string, createWebhookEndpointRequestDto: CreateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CreateWebhookEndpoint201Response> {
2452
- return localVarFp.createWebhookEndpoint(idempotencyKey, createWebhookEndpointRequestDto, options).then((request) => request(axios, basePath));
2453
- },
2454
- /**
2455
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH … {\"status\":\"DISABLED\"}` 를 쓰세요 — 시크릿과 이벤트 구성이 남아 그대로 되살릴 수 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 가 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` — 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2456
- * @summary 웹훅 구독 삭제
2457
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2458
- * @param {string} ifMatch
2459
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
2460
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2461
- * @param {*} [options] Override http request option.
2462
- * @throws {RequiredError}
2463
- */
2464
- deleteWebhookEndpoint(endpointId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<void> {
2465
- return localVarFp.deleteWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, options).then((request) => request(axios, basePath));
2466
- },
2467
1515
  /**
2468
1516
  * 무인증 — `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` 이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
2469
1517
  * @summary 파일 다운로드 — 안정 URL(302)
@@ -2475,45 +1523,35 @@ export const PartnerV2ApiFactory = function (configuration?: Configuration, base
2475
1523
  return localVarFp.downloadFile(fileKey, options).then((request) => request(axios, basePath));
2476
1524
  },
2477
1525
  /**
2478
- * 공고의 현재 상태와 라이프사이클 하위 상태(계약서류 생성·정산·세금계산서) 조회합니다. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감·세금계산서 발행 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 낙찰 결과 조회(`GET /v2/bids/{bidId}/results`)의 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2479
- * @summary 공고 단건(라이프사이클) 조회
2480
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
2481
- * @param {*} [options] Override http request option.
2482
- * @throws {RequiredError}
2483
- */
2484
- getBid(bidId: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBid200Response> {
2485
- return localVarFp.getBid(bidId, options).then((request) => request(axios, basePath));
2486
- },
2487
- /**
2488
- * 공고의 응찰 참여 업체·순위·낙찰 여부를 조회한다. scope bids:read.
2489
- * @summary 공고 결과 조회
2490
- * @param {string} bidId
1526
+ * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류:** `contractDocuments[].generationState` 는 **관측 전용**입니다. `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태이며 API 로 되살릴 수 없습니다 — 운영에 문의하세요. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1527
+ * @summary 공고 상세 조회
1528
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2491
1529
  * @param {*} [options] Override http request option.
2492
1530
  * @throws {RequiredError}
2493
1531
  */
2494
- getBidResults(bidId: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBidResults200Response> {
2495
- return localVarFp.getBidResults(bidId, options).then((request) => request(axios, basePath));
1532
+ getBid(bidRef: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBid200Response> {
1533
+ return localVarFp.getBid(bidRef, options).then((request) => request(axios, basePath));
2496
1534
  },
2497
1535
  /**
2498
1536
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 가시성 마스킹과는 직교한 정산 데이터이며 읽기 전용입니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2499
1537
  * @summary 정산 정보 조회
2500
- * @param {string} bidId
1538
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2501
1539
  * @param {*} [options] Override http request option.
2502
1540
  * @throws {RequiredError}
2503
1541
  */
2504
- getBidSettlement(bidId: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBidSettlement200Response> {
2505
- return localVarFp.getBidSettlement(bidId, options).then((request) => request(axios, basePath));
1542
+ getBidSettlement(bidRef: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBidSettlement200Response> {
1543
+ return localVarFp.getBidSettlement(bidRef, options).then((request) => request(axios, basePath));
2506
1544
  },
2507
1545
  /**
2508
1546
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2509
1547
  * @summary 거래명세서 조회
2510
- * @param {string} bidId
1548
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2511
1549
  * @param {number} [paperCode]
2512
1550
  * @param {*} [options] Override http request option.
2513
1551
  * @throws {RequiredError}
2514
1552
  */
2515
- getBidStatement(bidId: string, paperCode?: number, options?: RawAxiosRequestConfig): AxiosPromise<GetBidStatement200Response> {
2516
- return localVarFp.getBidStatement(bidId, paperCode, options).then((request) => request(axios, basePath));
1553
+ getBidStatement(bidRef: string, paperCode?: number, options?: RawAxiosRequestConfig): AxiosPromise<GetBidStatement200Response> {
1554
+ return localVarFp.getBidStatement(bidRef, paperCode, options).then((request) => request(axios, basePath));
2517
1555
  },
2518
1556
  /**
2519
1557
  * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **구 경로:** 버전 없는 `GET /files/{fileKey}` 는 만료 없는 안정 주소이고 파트너 응답의 `fileUrl`/`fullUrl` 이 그 값을 가리킵니다. 인증도 스코프도 없는 옛 표면이라 신규 연동은 이 엔드포인트를 쓰세요. 구 경로는 당분간 유지됩니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
@@ -2546,26 +1584,6 @@ export const PartnerV2ApiFactory = function (configuration?: Configuration, base
2546
1584
  getSupplierCardPayable(memberId: string, options?: RawAxiosRequestConfig): AxiosPromise<SupplierCardPayableResponseDto> {
2547
1585
  return localVarFp.getSupplierCardPayable(memberId, options).then((request) => request(axios, basePath));
2548
1586
  },
2549
- /**
2550
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
2551
- * @summary 공급사 카드결제 가능 여부
2552
- * @param {string} memberId 계약업체 회원 ID
2553
- * @param {*} [options] Override http request option.
2554
- * @throws {RequiredError}
2555
- */
2556
- getSupplierCardPayableV2(memberId: string, options?: RawAxiosRequestConfig): AxiosPromise<GetSupplierCardPayableV2200Response> {
2557
- return localVarFp.getSupplierCardPayableV2(memberId, options).then((request) => request(axios, basePath));
2558
- },
2559
- /**
2560
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
2561
- * @summary 웹훅 구독 단건 조회
2562
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2563
- * @param {*} [options] Override http request option.
2564
- * @throws {RequiredError}
2565
- */
2566
- getWebhookEndpoint(endpointId: string, options?: RawAxiosRequestConfig): AxiosPromise<GetWebhookEndpoint200Response> {
2567
- return localVarFp.getWebhookEndpoint(endpointId, options).then((request) => request(axios, basePath));
2568
- },
2569
1587
  /**
2570
1588
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
2571
1589
  * @summary Partner API 헬스체크
@@ -2576,7 +1594,7 @@ export const PartnerV2ApiFactory = function (configuration?: Configuration, base
2576
1594
  return localVarFp.healthControllerCheck(options).then((request) => request(axios, basePath));
2577
1595
  },
2578
1596
  /**
2579
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 때 `304` 를 본문 없이 받습니다 — 마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 — 요청한 건수와 받은 건수가 다를 수 있으니 `bidId` 로 대조하세요. **목록이 길어 URL 부담되면** `POST /v2/bid-results/query` 쓰세요. 응답은 같습니다.
1597
+ * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `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` 는 상세 응답의 부분집합이라 폐지됐습니다.
2580
1598
  * @summary 공고 결과 배치 조회
2581
1599
  * @param {string} bidIds 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidIds&#x60; 를 반복해 전달합니다. 최대 100건.
2582
1600
  * @param {*} [options] Override http request option.
@@ -2600,7 +1618,7 @@ export const PartnerV2ApiFactory = function (configuration?: Configuration, base
2600
1618
  return localVarFp.listBids(limit, cursor, bidIds, status, include, options).then((request) => request(axios, basePath));
2601
1619
  },
2602
1620
  /**
2603
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1621
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
2604
1622
  * @summary 거래에 필요한 계약서류 목록 조회
2605
1623
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
2606
1624
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -2610,85 +1628,32 @@ export const PartnerV2ApiFactory = function (configuration?: Configuration, base
2610
1628
  listExternalContractDocuments(buyerId: string, bidType: ListExternalContractDocumentsBidTypeEnum, options?: RawAxiosRequestConfig): AxiosPromise<ExternalContractDocumentsResponseDto> {
2611
1629
  return localVarFp.listExternalContractDocuments(buyerId, bidType, options).then((request) => request(axios, basePath));
2612
1630
  },
2613
- /**
2614
- * 기관에 공유된 물품 중 **아직 전송되지 않은 것**을 조회합니다. **증분 피드입니다.** 가져간 물품을 `POST /v2/products/receipts` 로 수신확인하면 다음 조회 결과에서 빠집니다. 수신확인을 하지 않으면 같은 물품이 계속 내려옵니다. **권장 흐름:** 조회 → 자기 시스템에 저장 → 저장에 성공한 물품 코드만 수신확인. 저장 전에 수신확인하면 그 물품은 다시 받을 수 없습니다. **조회 범위:** 요청 키가 대행하는 기관 그룹입니다. 기관 그룹이 설정되지 않은 키는 403 입니다. **필수 스코프:** `products:read`
2615
- * @summary 물품 카탈로그 조회
2616
- * @param {*} [options] Override http request option.
2617
- * @throws {RequiredError}
2618
- */
2619
- listProducts(options?: RawAxiosRequestConfig): AxiosPromise<ListProducts200Response> {
2620
- return localVarFp.listProducts(options).then((request) => request(axios, basePath));
2621
- },
2622
- /**
2623
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 로 걸러 다시 처리하면 됩니다. - \"이벤트가 안 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 가 같고 `attempt` 만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 를 다음 요청의 `cursor` 로 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
2624
- * @summary 웹훅 전송 이력 조회
2625
- * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
2626
- * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
2627
- * @param {number} [limit] 페이지 크기(1~200, 기본 50).
2628
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
2629
- * @param {*} [options] Override http request option.
2630
- * @throws {RequiredError}
2631
- */
2632
- listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, options?: RawAxiosRequestConfig): AxiosPromise<ListWebhookDeliveries200Response> {
2633
- return localVarFp.listWebhookDeliveries(endpointId, status, limit, cursor, options).then((request) => request(axios, basePath));
2634
- },
2635
- /**
2636
- * 이 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2637
- * @summary 웹훅 구독 목록 조회
2638
- * @param {*} [options] Override http request option.
2639
- * @throws {RequiredError}
2640
- */
2641
- listWebhookEndpoints(options?: RawAxiosRequestConfig): AxiosPromise<ListWebhookEndpoints200Response> {
2642
- return localVarFp.listWebhookEndpoints(options).then((request) => request(axios, basePath));
2643
- },
2644
1631
  /**
2645
1632
  * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 후 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
2646
1633
  * @summary 유찰 처리
2647
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1634
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2648
1635
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2649
1636
  * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
2650
1637
  * @param {*} [options] Override http request option.
2651
1638
  * @throws {RequiredError}
2652
1639
  */
2653
- markBidFailed(bidId: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<MarkBidFailed201Response> {
2654
- return localVarFp.markBidFailed(bidId, idempotencyKey, markBidFailedRequestDto, options).then((request) => request(axios, basePath));
2655
- },
2656
- /**
2657
- * 초안(DRAFT) 상태로 등록된 공고를 진행중(ONGOING)으로 게시합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 연간/지명계약 등으로 초안 상태로 등록된 공고를 명시적으로 게시할 때. 등록 응답의 `status` 로 게시 필요 여부를 판별합니다. **전제조건:** 초안(DRAFT) 상태이고 마감(bidEndAt)이 미래여야 합니다. **거부:** 초안이 아니거나 마감이 지난 공고 → 409. 마감이 지났으면 먼저 마감일을 연장해야 합니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403). **멱등성:** `Idempotency-Key` 헤더 필수.
2658
- * @summary 공고 게시(초안 → 진행중)
2659
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
2660
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2661
- * @param {*} [options] Override http request option.
2662
- * @throws {RequiredError}
2663
- */
2664
- publishBid(bidId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<PublishBid200Response> {
2665
- return localVarFp.publishBid(bidId, idempotencyKey, options).then((request) => request(axios, basePath));
1640
+ markBidFailed(bidRef: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<MarkBidFailed201Response> {
1641
+ return localVarFp.markBidFailed(bidRef, idempotencyKey, markBidFailedRequestDto, options).then((request) => request(axios, basePath));
2666
1642
  },
2667
1643
  /**
2668
- * 공고의 자동생성 계약서류(발주서·공고결과·표준계약서 등)를 생성/재생성합니다. **V6 대응:** `RegenerateAllContractPdfsCommand` 어드민의 \"계약 서류 일괄 재생성\"과 동일 경로. **호출 시점:** 낙찰(계약 시작) 계약서류가 필요하거나, 생성에 실패한 서류를 다시 만들 때. **부수효과:** - 생성 실패(DEAD_LETTER) 상태의 자동생성 PDF 재생성 큐에 등록됩니다(비동기). - 승낙사항(ACCEPTANCE) 계열은 운영자 승인 워크플로가 필요해 경로에서 제외됩니다. **응답:** 즉시 파일이 아니라 등록 결과(`enqueuedCount`/`skippedCount`)를 반환합니다. 잠시 자동 생성됩니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2669
- * @summary 계약서류 생성(재생성)
2670
- * @param {string} bidId 공고번호(buy_idx, 예 CM…) 또는 외부 구매번호(bid_puchase_no).
2671
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2672
- * @param {*} [options] Override http request option.
2673
- * @throws {RequiredError}
2674
- */
2675
- regenerateContractDocuments(bidId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<RegenerateContractDocuments201Response> {
2676
- return localVarFp.regenerateContractDocuments(bidId, idempotencyKey, options).then((request) => request(axios, basePath));
2677
- },
2678
- /**
2679
- * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
1644
+ * 낙찰 결과를 등록합니다. 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
2680
1645
  * @summary 낙찰 결과 전송
2681
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1646
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2682
1647
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2683
1648
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
2684
1649
  * @param {*} [options] Override http request option.
2685
1650
  * @throws {RequiredError}
2686
1651
  */
2687
- registerAward(bidId: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<RegisterAward201Response> {
2688
- return localVarFp.registerAward(bidId, idempotencyKey, registerAwardRequestDto, options).then((request) => request(axios, basePath));
1652
+ registerAward(bidRef: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<RegisterAward201Response> {
1653
+ return localVarFp.registerAward(bidRef, idempotencyKey, registerAwardRequestDto, options).then((request) => request(axios, basePath));
2689
1654
  },
2690
1655
  /**
2691
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수.
1656
+ * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 이 요청 본문에 직접 싣지 마세요 — 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 를 받고, 그 32자 키를 이 요청의 `attachments` 배열에 넣습니다.
2692
1657
  * @summary 공고 등록
2693
1658
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
2694
1659
  * @param {CreateBidRequestDto} createBidRequestDto
@@ -2712,64 +1677,28 @@ export const PartnerV2ApiFactory = function (configuration?: Configuration, base
2712
1677
  /**
2713
1678
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2714
1679
  * @summary 낙찰 되돌리기
2715
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1680
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2716
1681
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2717
1682
  * @param {RevertAwardRequestDto} revertAwardRequestDto
2718
1683
  * @param {*} [options] Override http request option.
2719
1684
  * @throws {RequiredError}
2720
1685
  */
2721
- revertAward(bidId: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<RevertAward200Response> {
2722
- return localVarFp.revertAward(bidId, idempotencyKey, revertAwardRequestDto, options).then((request) => request(axios, basePath));
2723
- },
2724
- /**
2725
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 이 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 수 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 새 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 를 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
2726
- * @summary 웹훅 서명 시크릿 재발급
2727
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2728
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2729
- * @param {*} [options] Override http request option.
2730
- * @throws {RequiredError}
2731
- */
2732
- rotateWebhookSecret(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<CreateWebhookEndpoint201Response> {
2733
- return localVarFp.rotateWebhookSecret(endpointId, idempotencyKey, options).then((request) => request(axios, basePath));
2734
- },
2735
- /**
2736
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 그 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` 에 `delivered: false` 로 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 은 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
2737
- * @summary 웹훅 연결 확인 발송
2738
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2739
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2740
- * @param {*} [options] Override http request option.
2741
- * @throws {RequiredError}
2742
- */
2743
- sendWebhookTestEvent(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig): AxiosPromise<SendWebhookTestEvent200Response> {
2744
- return localVarFp.sendWebhookTestEvent(endpointId, idempotencyKey, options).then((request) => request(axios, basePath));
1686
+ revertAward(bidRef: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<RevertAward200Response> {
1687
+ return localVarFp.revertAward(bidRef, idempotencyKey, revertAwardRequestDto, options).then((request) => request(axios, basePath));
2745
1688
  },
2746
1689
  /**
2747
1690
  * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEdit=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
2748
1691
  * @summary 공고 수정
2749
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1692
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2750
1693
  * @param {string} ifMatch
2751
- * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidId}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1694
+ * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
2752
1695
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
2753
1696
  * @param {UpdateBidRequestDto} updateBidRequestDto
2754
1697
  * @param {*} [options] Override http request option.
2755
1698
  * @throws {RequiredError}
2756
1699
  */
2757
- updateBid(bidId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<UpdateBid200Response> {
2758
- return localVarFp.updateBid(bidId, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options).then((request) => request(axios, basePath));
2759
- },
2760
- /**
2761
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 는 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 가 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 이 헤더가 없으면 두 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` — 헤더를 빼먹었습니다. 조회 후 `ETag` 를 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** — 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2762
- * @summary 웹훅 구독 수정
2763
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2764
- * @param {string} ifMatch
2765
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
2766
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2767
- * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
2768
- * @param {*} [options] Override http request option.
2769
- * @throws {RequiredError}
2770
- */
2771
- updateWebhookEndpoint(endpointId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateWebhookEndpointRequestDto: UpdateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<GetWebhookEndpoint200Response> {
2772
- return localVarFp.updateWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, updateWebhookEndpointRequestDto, options).then((request) => request(axios, basePath));
1700
+ updateBid(bidRef: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<UpdateBid200Response> {
1701
+ return localVarFp.updateBid(bidRef, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options).then((request) => request(axios, basePath));
2773
1702
  },
2774
1703
  /**
2775
1704
  * 스코프 `files:write` + `Idempotency-Key` 헤더 필수. base64 또는 url 중 정확히 하나를 제출한다.
@@ -2789,65 +1718,41 @@ export const PartnerV2ApiFactory = function (configuration?: Configuration, base
2789
1718
  */
2790
1719
  export class PartnerV2Api extends BaseAPI {
2791
1720
  /**
2792
- * 저장을 마친 물품을 전송완료로 표시해 다음 조회에서 제외합니다. **되돌릴 수 없습니다.** 표시한 물품은 `GET /v2/products` 다시 내려오지 않으므로, 자기 시스템에 저장이 끝난 뒤에 호출하세요. **표시 범위는 기관 그룹으로 잠깁니다.** 다른 기관의 물품 코드를 섞어 보내면 건은 표시되지 않고 `acknowledged` 요청 수보다 작게 돌아옵니다. **필수 스코프:** `products:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2793
- * @summary 물품 수신확인
2794
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2795
- * @param {AcknowledgeProductsRequestDto} acknowledgeProductsRequestDto
2796
- * @param {*} [options] Override http request option.
2797
- * @throws {RequiredError}
2798
- */
2799
- public acknowledgeProductReceipt(idempotencyKey: string, acknowledgeProductsRequestDto: AcknowledgeProductsRequestDto, options?: RawAxiosRequestConfig) {
2800
- return PartnerV2ApiFp(this.configuration).acknowledgeProductReceipt(idempotencyKey, acknowledgeProductsRequestDto, options).then((request) => request(this.axios, this.basePath));
2801
- }
2802
-
2803
- /**
2804
- * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 → 409. 타 발주처 공고 → 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidId}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
1721
+ * 진행중인 공고를 취소합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **되돌릴 수 없습니다.** 취소 사유는 필수이며 공고 이력에 남습니다. **전제조건:** 진행중(ONGOING) 상태여야 합니다. **거부:** 진행중이 아니거나 이미 취소된 공고 409. 발주처 공고 403. **마감과의 차이:** 취소는 공고를 무효로 되돌리는 것이고, 유찰(`POST /v2/bids/{bidRef}/fail`)은 응찰을 받았으나 낙찰자를 정하지 못한 종료입니다.
2805
1722
  * @summary 공고 취소
2806
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1723
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2807
1724
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
2808
1725
  * @param {CancelBidRequestDto} cancelBidRequestDto
2809
1726
  * @param {*} [options] Override http request option.
2810
1727
  * @throws {RequiredError}
2811
1728
  */
2812
- public cancelBid(bidId: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options?: RawAxiosRequestConfig) {
2813
- return PartnerV2ApiFp(this.configuration).cancelBid(bidId, idempotencyKey, cancelBidRequestDto, options).then((request) => request(this.axios, this.basePath));
1729
+ public cancelBid(bidRef: string, idempotencyKey: string, cancelBidRequestDto: CancelBidRequestDto, options?: RawAxiosRequestConfig) {
1730
+ return PartnerV2ApiFp(this.configuration).cancelBid(bidRef, idempotencyKey, cancelBidRequestDto, options).then((request) => request(this.axios, this.basePath));
2814
1731
  }
2815
1732
 
2816
1733
  /**
2817
- * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **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` 헤더 필수.
1734
+ * 낙찰 공고의 검수(납품 검수)가 완료되었음을 기록합니다. **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` 헤더 필수.
2818
1735
  * @summary 검수완료 전송
2819
- * @param {string} bidId 공고 ID(&#x3D; backend bidId &#x3D; 등록 응답의 bidNo).
1736
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2820
1737
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2821
1738
  * @param {CompleteAcceptanceRequestDto} completeAcceptanceRequestDto
2822
1739
  * @param {*} [options] Override http request option.
2823
1740
  * @throws {RequiredError}
2824
1741
  */
2825
- public completeAcceptance(bidId: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options?: RawAxiosRequestConfig) {
2826
- return PartnerV2ApiFp(this.configuration).completeAcceptance(bidId, idempotencyKey, completeAcceptanceRequestDto, options).then((request) => request(this.axios, this.basePath));
1742
+ public completeAcceptance(bidRef: string, idempotencyKey: string, completeAcceptanceRequestDto: CompleteAcceptanceRequestDto, options?: RawAxiosRequestConfig) {
1743
+ return PartnerV2ApiFp(this.configuration).completeAcceptance(bidRef, idempotencyKey, completeAcceptanceRequestDto, options).then((request) => request(this.axios, this.basePath));
2827
1744
  }
2828
1745
 
2829
1746
  /**
2830
1747
  * 공급사로부터 계산서를 수령한 뒤, 계약을 완료처리 상태로 강제 전환합니다. **호출 시점:** 낙찰·계약 완료 후 공급사 계산서를 오프라인으로 수령했을 때. **부수효과:** - 결제완료·계산서 발급 상태가 기록되고 발급일자가 현재 시각으로 설정됩니다. **소유권:** 공고는 요청 파트너 키가 소유한 발주처 명의여야 합니다(타 발주처 공고 → 403). **이미 완료:** 이미 완료처리된 공고 재호출 → 409. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2831
1748
  * @summary 정산 마감(송장 강제완료)
2832
- * @param {string} bidId
1749
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2833
1750
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2834
1751
  * @param {*} [options] Override http request option.
2835
1752
  * @throws {RequiredError}
2836
1753
  */
2837
- public completeInvoice(bidId: string, idempotencyKey: string, options?: RawAxiosRequestConfig) {
2838
- return PartnerV2ApiFp(this.configuration).completeInvoice(bidId, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
2839
- }
2840
-
2841
- /**
2842
- * 발주기관이 특정 업체에게 카드로 지불하는 거래(결제창) 1건을 만듭니다. **대금 흐름:** 카드 승인이 **그 업체의 가맹점**으로 나가므로 대금은 씨마켓을 거치지 않고 업체로 직행합니다. **발행 직후 상태:** 자동 승인되어 바로 결제할 수 있습니다. **사용자 동선:** 응답의 `payUrl` 로 발주기관을 보내면 그 결제창 한 건만 걸러진 화면이 열립니다. **사전 조건:** 계약업체가 씨마켓 회원이고 카드결제에 가입(가맹)돼 있어야 합니다 — `GET /v2/suppliers/{memberId}/card-payable` 로 미리 확인하세요. 미가입 업체로 발행하면 400 입니다. **필수 스코프:** `payments:write`. 어느 발주기관을 대신할 수 있는지는 스코프가 아니라 API 키의 대행 범위 설정이 정합니다. **멱등성:** `externalRef`(파트너 측 거래 식별자)가 도메인 멱등키입니다. 같은 값으로 재요청하면 새로 만들지 않고 기존 결제창을 돌려줍니다(`reused=true`). `Idempotency-Key` 헤더도 함께 사용하세요.
2843
- * @summary 결제창 발행
2844
- * @param {string} idempotencyKey 재시도 안전을 위한 멱등 키.
2845
- * @param {CreateCardPaymentRequestDto} createCardPaymentRequestDto
2846
- * @param {*} [options] Override http request option.
2847
- * @throws {RequiredError}
2848
- */
2849
- public createCardPayment(idempotencyKey: string, createCardPaymentRequestDto: CreateCardPaymentRequestDto, options?: RawAxiosRequestConfig) {
2850
- return PartnerV2ApiFp(this.configuration).createCardPayment(idempotencyKey, createCardPaymentRequestDto, options).then((request) => request(this.axios, this.basePath));
1754
+ public completeInvoice(bidRef: string, idempotencyKey: string, options?: RawAxiosRequestConfig) {
1755
+ return PartnerV2ApiFp(this.configuration).completeInvoice(bidRef, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
2851
1756
  }
2852
1757
 
2853
1758
  /**
@@ -2864,7 +1769,7 @@ export class PartnerV2Api extends BaseAPI {
2864
1769
  }
2865
1770
 
2866
1771
  /**
2867
- * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1772
+ * 공고 없이 성사된 거래의 계약서류를 생성합니다. **호출 시점:** 계약이 체결된 직후. **요청한 `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
2868
1773
  * @summary 계약서류 생성
2869
1774
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2870
1775
  * @param {CreateExternalContractDocumentsRequestDto} createExternalContractDocumentsRequestDto
@@ -2875,32 +1780,6 @@ export class PartnerV2Api extends BaseAPI {
2875
1780
  return PartnerV2ApiFp(this.configuration).createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(this.axios, this.basePath));
2876
1781
  }
2877
1782
 
2878
- /**
2879
- * 수신 주소와 구독할 이벤트를 등록합니다. **호출 시점:** 연동 초기 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2880
- * @summary 웹훅 구독 등록
2881
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2882
- * @param {CreateWebhookEndpointRequestDto} createWebhookEndpointRequestDto
2883
- * @param {*} [options] Override http request option.
2884
- * @throws {RequiredError}
2885
- */
2886
- public createWebhookEndpoint(idempotencyKey: string, createWebhookEndpointRequestDto: CreateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig) {
2887
- return PartnerV2ApiFp(this.configuration).createWebhookEndpoint(idempotencyKey, createWebhookEndpointRequestDto, options).then((request) => request(this.axios, this.basePath));
2888
- }
2889
-
2890
- /**
2891
- * 구독을 삭제합니다. 이후 그 주소로는 아무 이벤트도 발송되지 않습니다. **호출 시점:** 연동을 종료할 때. 잠시만 멈추려면 삭제하지 말고 `PATCH … {\"status\":\"DISABLED\"}` 를 쓰세요 — 시크릿과 이벤트 구성이 남아 그대로 되살릴 수 있습니다. **되돌릴 수 없습니다.** 다시 등록하면 새 구독이고 서명 시크릿도 새 값입니다. **`If-Match` 가 필수입니다.** `GET` 으로 받은 `ETag` 를 실어 보내세요. - `428` — 헤더 누락. 조회 후 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다(누군가 수정했거나 발송기가 상태를 내렸습니다). 다시 조회해 정말 지울 대상이 맞는지 확인하고 최신 `ETag` 로 재시도하세요. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2892
- * @summary 웹훅 구독 삭제
2893
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2894
- * @param {string} ifMatch
2895
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
2896
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
2897
- * @param {*} [options] Override http request option.
2898
- * @throws {RequiredError}
2899
- */
2900
- public deleteWebhookEndpoint(endpointId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, options?: RawAxiosRequestConfig) {
2901
- return PartnerV2ApiFp(this.configuration).deleteWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
2902
- }
2903
-
2904
1783
  /**
2905
1784
  * 무인증 — `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` 이 가리키는 주소라 계속 유지되며 중단 일정은 없습니다.
2906
1785
  * @summary 파일 다운로드 — 안정 URL(302)
@@ -2913,48 +1792,37 @@ export class PartnerV2Api extends BaseAPI {
2913
1792
  }
2914
1793
 
2915
1794
  /**
2916
- * 공고의 현재 상태와 라이프사이클 하위 상태(계약서류 생성·정산·세금계산서) 조회합니다. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감·세금계산서 발행 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 낙찰 결과 조회(`GET /v2/bids/{bidId}/results`)의 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2917
- * @summary 공고 단건(라이프사이클) 조회
2918
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
2919
- * @param {*} [options] Override http request option.
2920
- * @throws {RequiredError}
2921
- */
2922
- public getBid(bidId: string, options?: RawAxiosRequestConfig) {
2923
- return PartnerV2ApiFp(this.configuration).getBid(bidId, options).then((request) => request(this.axios, this.basePath));
2924
- }
2925
-
2926
- /**
2927
- * 공고의 응찰 참여 업체·순위·낙찰 여부를 조회한다. scope bids:read.
2928
- * @summary 공고 결과 조회
2929
- * @param {string} bidId
1795
+ * 공고의 모든 정보를 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류:** `contractDocuments[].generationState` 는 **관측 전용**입니다. `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태이며 API 로 되살릴 수 없습니다 — 운영에 문의하세요. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1796
+ * @summary 공고 상세 조회
1797
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2930
1798
  * @param {*} [options] Override http request option.
2931
1799
  * @throws {RequiredError}
2932
1800
  */
2933
- public getBidResults(bidId: string, options?: RawAxiosRequestConfig) {
2934
- return PartnerV2ApiFp(this.configuration).getBidResults(bidId, options).then((request) => request(this.axios, this.basePath));
1801
+ public getBid(bidRef: string, options?: RawAxiosRequestConfig) {
1802
+ return PartnerV2ApiFp(this.configuration).getBid(bidRef, options).then((request) => request(this.axios, this.basePath));
2935
1803
  }
2936
1804
 
2937
1805
  /**
2938
1806
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 가시성 마스킹과는 직교한 정산 데이터이며 읽기 전용입니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2939
1807
  * @summary 정산 정보 조회
2940
- * @param {string} bidId
1808
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2941
1809
  * @param {*} [options] Override http request option.
2942
1810
  * @throws {RequiredError}
2943
1811
  */
2944
- public getBidSettlement(bidId: string, options?: RawAxiosRequestConfig) {
2945
- return PartnerV2ApiFp(this.configuration).getBidSettlement(bidId, options).then((request) => request(this.axios, this.basePath));
1812
+ public getBidSettlement(bidRef: string, options?: RawAxiosRequestConfig) {
1813
+ return PartnerV2ApiFp(this.configuration).getBidSettlement(bidRef, options).then((request) => request(this.axios, this.basePath));
2946
1814
  }
2947
1815
 
2948
1816
  /**
2949
1817
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2950
1818
  * @summary 거래명세서 조회
2951
- * @param {string} bidId
1819
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2952
1820
  * @param {number} [paperCode]
2953
1821
  * @param {*} [options] Override http request option.
2954
1822
  * @throws {RequiredError}
2955
1823
  */
2956
- public getBidStatement(bidId: string, paperCode?: number, options?: RawAxiosRequestConfig) {
2957
- return PartnerV2ApiFp(this.configuration).getBidStatement(bidId, paperCode, options).then((request) => request(this.axios, this.basePath));
1824
+ public getBidStatement(bidRef: string, paperCode?: number, options?: RawAxiosRequestConfig) {
1825
+ return PartnerV2ApiFp(this.configuration).getBidStatement(bidRef, paperCode, options).then((request) => request(this.axios, this.basePath));
2958
1826
  }
2959
1827
 
2960
1828
  /**
@@ -2991,28 +1859,6 @@ export class PartnerV2Api extends BaseAPI {
2991
1859
  return PartnerV2ApiFp(this.configuration).getSupplierCardPayable(memberId, options).then((request) => request(this.axios, this.basePath));
2992
1860
  }
2993
1861
 
2994
- /**
2995
- * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
2996
- * @summary 공급사 카드결제 가능 여부
2997
- * @param {string} memberId 계약업체 회원 ID
2998
- * @param {*} [options] Override http request option.
2999
- * @throws {RequiredError}
3000
- */
3001
- public getSupplierCardPayableV2(memberId: string, options?: RawAxiosRequestConfig) {
3002
- return PartnerV2ApiFp(this.configuration).getSupplierCardPayableV2(memberId, options).then((request) => request(this.axios, this.basePath));
3003
- }
3004
-
3005
- /**
3006
- * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
3007
- * @summary 웹훅 구독 단건 조회
3008
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
3009
- * @param {*} [options] Override http request option.
3010
- * @throws {RequiredError}
3011
- */
3012
- public getWebhookEndpoint(endpointId: string, options?: RawAxiosRequestConfig) {
3013
- return PartnerV2ApiFp(this.configuration).getWebhookEndpoint(endpointId, options).then((request) => request(this.axios, this.basePath));
3014
- }
3015
-
3016
1862
  /**
3017
1863
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
3018
1864
  * @summary Partner API 헬스체크
@@ -3024,7 +1870,7 @@ export class PartnerV2Api extends BaseAPI {
3024
1870
  }
3025
1871
 
3026
1872
  /**
3027
- * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에는 `ETag` 가 실리므로, 다음 요청에 `If-None-Match` 로 되보내면 결과가 그대로일 때 `304` 를 본문 없이 받습니다 — 마감을 기다리는 동안의 전송량이 사라집니다. **식별자 전달:** `?bidIds=A,B,C`(쉼표) 또는 `?bidIds=A&bidIds=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다 — 요청한 건수와 받은 건수가 다를 수 있으니 `bidId` 로 대조하세요. **목록이 길어 URL 부담되면** `POST /v2/bid-results/query` 쓰세요. 응답은 같습니다.
1873
+ * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `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` 는 상세 응답의 부분집합이라 폐지됐습니다.
3028
1874
  * @summary 공고 결과 배치 조회
3029
1875
  * @param {string} bidIds 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidIds&#x60; 를 반복해 전달합니다. 최대 100건.
3030
1876
  * @param {*} [options] Override http request option.
@@ -3050,7 +1896,7 @@ export class PartnerV2Api extends BaseAPI {
3050
1896
  }
3051
1897
 
3052
1898
  /**
3053
- * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
1899
+ * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
3054
1900
  * @summary 거래에 필요한 계약서류 목록 조회
3055
1901
  * @param {string} buyerId 발주기관 회원 ID(c-market memberId).
3056
1902
  * @param {ListExternalContractDocumentsBidTypeEnum} bidType 거래유형.
@@ -3061,92 +1907,34 @@ export class PartnerV2Api extends BaseAPI {
3061
1907
  return PartnerV2ApiFp(this.configuration).listExternalContractDocuments(buyerId, bidType, options).then((request) => request(this.axios, this.basePath));
3062
1908
  }
3063
1909
 
3064
- /**
3065
- * 기관에 공유된 물품 중 **아직 전송되지 않은 것**을 조회합니다. **증분 피드입니다.** 가져간 물품을 `POST /v2/products/receipts` 로 수신확인하면 다음 조회 결과에서 빠집니다. 수신확인을 하지 않으면 같은 물품이 계속 내려옵니다. **권장 흐름:** 조회 → 자기 시스템에 저장 → 저장에 성공한 물품 코드만 수신확인. 저장 전에 수신확인하면 그 물품은 다시 받을 수 없습니다. **조회 범위:** 요청 키가 대행하는 기관 그룹입니다. 기관 그룹이 설정되지 않은 키는 403 입니다. **필수 스코프:** `products:read`
3066
- * @summary 물품 카탈로그 조회
3067
- * @param {*} [options] Override http request option.
3068
- * @throws {RequiredError}
3069
- */
3070
- public listProducts(options?: RawAxiosRequestConfig) {
3071
- return PartnerV2ApiFp(this.configuration).listProducts(options).then((request) => request(this.axios, this.basePath));
3072
- }
3073
-
3074
- /**
3075
- * 이 API 키의 웹훅 발송 시도를 최신순으로 조회합니다. 보낸 본문·수신측 응답 상태· 다음 재시도 예정 시각이 함께 실립니다. **호출 시점:** - 수신측 장애로 놓친 이벤트를 메울 때. 이 엔드포인트가 웹훅의 **폴링 대체 경로**입니다 — `status=EXHAUSTED` 로 걸러 다시 처리하면 됩니다. - \"이벤트가 안 온다\" 를 진단할 때. 발송 시도 자체가 없는지(구독·이벤트 타입 문제), 시도했지만 실패했는지(`responseStatus`·`responseBodyExcerpt`)를 여기서 가릅니다. **같은 이벤트가 여러 행으로 보입니다.** 재시도마다 한 행이며 `eventId` 가 같고 `attempt` 만 올라갑니다. 처리 여부는 `eventId` 기준으로 판단하세요. **페이지네이션:** `nextCursor` 를 다음 요청의 `cursor` 로 전달합니다. null 이면 마지막 페이지입니다. **`400`:** `status` 가 허용 값 밖이거나 `limit` 이 범위를 벗어났습니다 — 값을 고쳐 재시도하세요. **필수 스코프:** `webhooks:read`
3076
- * @summary 웹훅 전송 이력 조회
3077
- * @param {string} [endpointId] 이 구독의 전송만 조회합니다. 미지정이면 이 키의 모든 구독을 함께 조회합니다.
3078
- * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
3079
- * @param {number} [limit] 페이지 크기(1~200, 기본 50).
3080
- * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
3081
- * @param {*} [options] Override http request option.
3082
- * @throws {RequiredError}
3083
- */
3084
- public listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, options?: RawAxiosRequestConfig) {
3085
- return PartnerV2ApiFp(this.configuration).listWebhookDeliveries(endpointId, status, limit, cursor, options).then((request) => request(this.axios, this.basePath));
3086
- }
3087
-
3088
- /**
3089
- * 이 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` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
3090
- * @summary 웹훅 구독 목록 조회
3091
- * @param {*} [options] Override http request option.
3092
- * @throws {RequiredError}
3093
- */
3094
- public listWebhookEndpoints(options?: RawAxiosRequestConfig) {
3095
- return PartnerV2ApiFp(this.configuration).listWebhookEndpoints(options).then((request) => request(this.axios, this.basePath));
3096
- }
3097
-
3098
1910
  /**
3099
1911
  * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 후 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
3100
1912
  * @summary 유찰 처리
3101
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1913
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
3102
1914
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
3103
1915
  * @param {MarkBidFailedRequestDto} markBidFailedRequestDto
3104
1916
  * @param {*} [options] Override http request option.
3105
1917
  * @throws {RequiredError}
3106
1918
  */
3107
- public markBidFailed(bidId: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options?: RawAxiosRequestConfig) {
3108
- return PartnerV2ApiFp(this.configuration).markBidFailed(bidId, idempotencyKey, markBidFailedRequestDto, options).then((request) => request(this.axios, this.basePath));
3109
- }
3110
-
3111
- /**
3112
- * 초안(DRAFT) 상태로 등록된 공고를 진행중(ONGOING)으로 게시합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 연간/지명계약 등으로 초안 상태로 등록된 공고를 명시적으로 게시할 때. 등록 응답의 `status` 로 게시 필요 여부를 판별합니다. **전제조건:** 초안(DRAFT) 상태이고 마감(bidEndAt)이 미래여야 합니다. **거부:** 초안이 아니거나 마감이 지난 공고 → 409. 마감이 지났으면 먼저 마감일을 연장해야 합니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403). **멱등성:** `Idempotency-Key` 헤더 필수.
3113
- * @summary 공고 게시(초안 → 진행중)
3114
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
3115
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
3116
- * @param {*} [options] Override http request option.
3117
- * @throws {RequiredError}
3118
- */
3119
- public publishBid(bidId: string, idempotencyKey: string, options?: RawAxiosRequestConfig) {
3120
- return PartnerV2ApiFp(this.configuration).publishBid(bidId, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
3121
- }
3122
-
3123
- /**
3124
- * 공고의 자동생성 계약서류(발주서·공고결과·표준계약서 등)를 생성/재생성합니다. **V6 대응:** `RegenerateAllContractPdfsCommand` — 웹 어드민의 \"계약 서류 일괄 재생성\"과 동일 경로. **호출 시점:** 낙찰(계약 시작) 후 계약서류가 필요하거나, 생성에 실패한 서류를 다시 만들 때. **부수효과:** - 생성 실패(DEAD_LETTER) 상태의 자동생성 PDF 가 재생성 큐에 등록됩니다(비동기). - 승낙사항(ACCEPTANCE) 계열은 운영자 승인 워크플로가 필요해 이 경로에서 제외됩니다. **응답:** 즉시 파일이 아니라 큐 등록 결과(`enqueuedCount`/`skippedCount`)를 반환합니다. 잠시 후 자동 생성됩니다. **필수 스코프:** `contracts:write` **멱등성:** `Idempotency-Key` 헤더 필수.
3125
- * @summary 계약서류 생성(재생성)
3126
- * @param {string} bidId 공고번호(buy_idx, 예 CM…) 또는 외부 구매번호(bid_puchase_no).
3127
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
3128
- * @param {*} [options] Override http request option.
3129
- * @throws {RequiredError}
3130
- */
3131
- public regenerateContractDocuments(bidId: string, idempotencyKey: string, options?: RawAxiosRequestConfig) {
3132
- return PartnerV2ApiFp(this.configuration).regenerateContractDocuments(bidId, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
1919
+ public markBidFailed(bidRef: string, idempotencyKey: string, markBidFailedRequestDto: MarkBidFailedRequestDto, options?: RawAxiosRequestConfig) {
1920
+ return PartnerV2ApiFp(this.configuration).markBidFailed(bidRef, idempotencyKey, markBidFailedRequestDto, options).then((request) => request(this.axios, this.basePath));
3133
1921
  }
3134
1922
 
3135
1923
  /**
3136
- * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
1924
+ * 낙찰 결과를 등록합니다. 이 요청의 응답은 처리 상태 `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시간 내 캐시 응답 반환.
3137
1925
  * @summary 낙찰 결과 전송
3138
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1926
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
3139
1927
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
3140
1928
  * @param {RegisterAwardRequestDto} registerAwardRequestDto
3141
1929
  * @param {*} [options] Override http request option.
3142
1930
  * @throws {RequiredError}
3143
1931
  */
3144
- public registerAward(bidId: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options?: RawAxiosRequestConfig) {
3145
- return PartnerV2ApiFp(this.configuration).registerAward(bidId, idempotencyKey, registerAwardRequestDto, options).then((request) => request(this.axios, this.basePath));
1932
+ public registerAward(bidRef: string, idempotencyKey: string, registerAwardRequestDto: RegisterAwardRequestDto, options?: RawAxiosRequestConfig) {
1933
+ return PartnerV2ApiFp(this.configuration).registerAward(bidRef, idempotencyKey, registerAwardRequestDto, options).then((request) => request(this.axios, this.basePath));
3146
1934
  }
3147
1935
 
3148
1936
  /**
3149
- * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수.
1937
+ * 입찰 정보 등록. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. **첨부는 2단계입니다.** 파일을 이 요청 본문에 직접 싣지 마세요 — 먼저 `POST /v2/files`(base64 또는 url)로 올려 `fileKey` 를 받고, 그 32자 키를 이 요청의 `attachments` 배열에 넣습니다.
3150
1938
  * @summary 공고 등록
3151
1939
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
3152
1940
  * @param {CreateBidRequestDto} createBidRequestDto
@@ -3172,68 +1960,29 @@ export class PartnerV2Api extends BaseAPI {
3172
1960
  /**
3173
1961
  * 확정된 낙찰을 되돌려 공고를 낙찰대기(PENDING_AWARD) 상태로 보냅니다. 스코프 `awards:write` + `Idempotency-Key` 헤더 필수. **호출 시점:** 낙찰자가 계약을 포기했거나 낙찰 처리 자체가 잘못됐을 때. 되돌린 뒤 같은 공고에 다시 낙찰을 등록할 수 있습니다. **되돌릴 수 없는 경우 → 409:** - 수수료 결제가 이미 완료된 공고 - 세금계산서가 이미 발행된 공고 - 수입권공매 계열 낙찰방법(다수 낙찰자 구조라 되돌리기 단위가 다릅니다) **사유는 필수입니다** — 감사 대상 행위이며 공고 이력에 남습니다. **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
3174
1962
  * @summary 낙찰 되돌리기
3175
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1963
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
3176
1964
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 재전송 시 캐시 응답 반환(24시간).
3177
1965
  * @param {RevertAwardRequestDto} revertAwardRequestDto
3178
1966
  * @param {*} [options] Override http request option.
3179
1967
  * @throws {RequiredError}
3180
1968
  */
3181
- public revertAward(bidId: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options?: RawAxiosRequestConfig) {
3182
- return PartnerV2ApiFp(this.configuration).revertAward(bidId, idempotencyKey, revertAwardRequestDto, options).then((request) => request(this.axios, this.basePath));
3183
- }
3184
-
3185
- /**
3186
- * 서명 시크릿을 새로 발급합니다. 응답의 `secretVersion` 이 1 올라갑니다. **호출 시점:** 시크릿을 분실했거나 유출이 의심될 때, 또는 주기적 교체 정책이 있을 때. **새 시크릿은 이 응답에서 한 번만 나갑니다.** 조회로 다시 받을 수 없습니다. **옛 시크릿은 즉시 무효입니다.** 유예 기간이 없으므로, 수신측이 새 값을 반영하기 전에 도착한 이벤트는 서명 검증에 실패합니다. 배포 순서를 이렇게 잡으세요 — ① 수신측이 옛 값과 새 값을 **둘 다** 받아들이도록 배포 → ② 이 엔드포인트 호출 → ③ 응답의 새 값을 반영 → ④ 옛 값 제거. 검증 실패로 non-2xx 를 돌려주면 실패로 집계되어 20회 연속 시 구독이 중지됩니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 같은 키로 재전송하면 **새로 발급하지 않고** 처음 발급한 값을 그대로 돌려줍니다(24시간) — 네트워크 오류로 응답을 놓쳤을 때 같은 키로 다시 부르세요.
3187
- * @summary 웹훅 서명 시크릿 재발급
3188
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
3189
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
3190
- * @param {*} [options] Override http request option.
3191
- * @throws {RequiredError}
3192
- */
3193
- public rotateWebhookSecret(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig) {
3194
- return PartnerV2ApiFp(this.configuration).rotateWebhookSecret(endpointId, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
3195
- }
3196
-
3197
- /**
3198
- * 등록된 주소로 `ping` 이벤트를 즉시 1회 보내고 그 결과를 돌려줍니다. **호출 시점:** 구독을 등록한 직후, 수신 주소를 바꾼 직후, 방화벽·인증서를 손본 뒤. **응답은 발송 결과이지 요청 실패가 아닙니다.** 수신측이 받지 못해도 HTTP `200` 에 `delivered: false` 로 옵니다 — `responseStatus`(수신측 상태)와 `error`(연결 거부·타임아웃· TLS 오류)를 보고 원인을 좁히세요. 이 발송에도 실제 이벤트와 **똑같은 서명 헤더**가 실리므로 검증 코드를 그대로 시험할 수 있습니다. `ping` 은 구독 목록에 넣을 수 없는 타입이니, 수신측이 모르는 `eventType` 을 만나면 버리도록 짜여 있다면 이 확인만 실패할 수 있습니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수. 다시 보내려면 **새 키**를 쓰세요 — 같은 키는 24시간 동안 직전 결과를 그대로 돌려줍니다(재발송하지 않습니다).
3199
- * @summary 웹훅 연결 확인 발송
3200
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
3201
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
3202
- * @param {*} [options] Override http request option.
3203
- * @throws {RequiredError}
3204
- */
3205
- public sendWebhookTestEvent(endpointId: string, idempotencyKey: string, options?: RawAxiosRequestConfig) {
3206
- return PartnerV2ApiFp(this.configuration).sendWebhookTestEvent(endpointId, idempotencyKey, options).then((request) => request(this.axios, this.basePath));
1969
+ public revertAward(bidRef: string, idempotencyKey: string, revertAwardRequestDto: RevertAwardRequestDto, options?: RawAxiosRequestConfig) {
1970
+ return PartnerV2ApiFp(this.configuration).revertAward(bidRef, idempotencyKey, revertAwardRequestDto, options).then((request) => request(this.axios, this.basePath));
3207
1971
  }
3208
1972
 
3209
1973
  /**
3210
1974
  * 등록된 공고의 내용을 수정합니다. 스코프 `bids:write` + `Idempotency-Key` 헤더 필수. 진행중/초안 상태의 공고만 수정할 수 있습니다. **부수효과:** - 변경 내용이 반영되고 수정이력이 기록됩니다. - `hideEdit=true` 면 변경이력을 비공개 처리하고 노출 카운터 증가를 생략합니다. **수정 제약:** - 낙찰방법(awardMethod)은 수정 불가(잠금). - 참여자가 있으면 입찰방식/면허/예산/품목 일부가 잠깁니다. - 마감/취소된 공고는 수정할 수 없습니다. 한 섹션을 수정하려면 해당 섹션의 필수 필드를 함께 보내야 합니다(부분 섹션은 거부됨).
3211
1975
  * @summary 공고 수정
3212
- * @param {string} bidId 공고 식별자(등록 응답의 bidId).
1976
+ * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
3213
1977
  * @param {string} ifMatch
3214
- * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidId}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
1978
+ * @param {string} ifMatch2 수정하려는 공고의 ETag(필수). 직전 &#x60;GET /v2/bids/{bidRef}&#x60; 응답의 &#x60;ETag&#x60; 헤더 값을 그대로 실어 보내세요. 누락하면 428, 그 사이 공고가 바뀌었으면 412 로 거절되며 아무것도 수정되지 않습니다.
3215
1979
  * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환.
3216
1980
  * @param {UpdateBidRequestDto} updateBidRequestDto
3217
1981
  * @param {*} [options] Override http request option.
3218
1982
  * @throws {RequiredError}
3219
1983
  */
3220
- public updateBid(bidId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options?: RawAxiosRequestConfig) {
3221
- return PartnerV2ApiFp(this.configuration).updateBid(bidId, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options).then((request) => request(this.axios, this.basePath));
3222
- }
3223
-
3224
- /**
3225
- * 수신 주소·구독 이벤트·상태를 수정합니다. 보낸 필드만 바뀝니다. **호출 시점:** 수신 주소가 바뀌었을 때, 구독 이벤트를 늘리거나 줄일 때, 연속 실패로 자동 중지된 구독을 고친 뒤 되살릴 때(`{\"status\":\"ACTIVE\"}`). **`eventTypes` 는 치환입니다** — 보낸 목록이 곧 새 구독 목록입니다. 하나를 더하려면 기존 목록에 더한 **전체**를 보내세요. **`If-Match` 가 필수입니다.** 먼저 `GET /v2/webhook-endpoints/{endpointId}` 로 현재 `ETag` 를 받아 그대로 실어 보내세요. 이 헤더가 없으면 두 요청이 앞서거니 뒤서거니 하며 먼저 한 수정을 조용히 덮어씁니다. - `428` — 헤더를 빼먹었습니다. 조회 후 `ETag` 를 실어 재시도하세요. - `412` — 그 사이 구독이 바뀌었습니다. 다시 조회해 최신 `ETag` 로 재시도하세요. 아무것도 수정되지 않았습니다. **시크릿은 이 경로로 바뀌지 않습니다** — 재발급은 `rotate-secret` 입니다. **필수 스코프:** `webhooks:write` **멱등성:** `Idempotency-Key` 헤더 필수.
3226
- * @summary 웹훅 구독 수정
3227
- * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
3228
- * @param {string} ifMatch
3229
- * @param {string} ifMatch2 직전 조회 응답의 &#x60;ETag&#x60; 값. 누락하면 428, 그 사이 구독이 바뀌었으면 412 로 거절되며 아무것도 변경되지 않습니다.
3230
- * @param {string} idempotencyKey 멱등성 키(1~255자, [A-Za-z0-9_-]). 동일 키 + 동일 body 재전송 시 캐시 응답 반환(24시간). UUID v4 권장.
3231
- * @param {UpdateWebhookEndpointRequestDto} updateWebhookEndpointRequestDto
3232
- * @param {*} [options] Override http request option.
3233
- * @throws {RequiredError}
3234
- */
3235
- public updateWebhookEndpoint(endpointId: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateWebhookEndpointRequestDto: UpdateWebhookEndpointRequestDto, options?: RawAxiosRequestConfig) {
3236
- return PartnerV2ApiFp(this.configuration).updateWebhookEndpoint(endpointId, ifMatch, ifMatch2, idempotencyKey, updateWebhookEndpointRequestDto, options).then((request) => request(this.axios, this.basePath));
1984
+ public updateBid(bidRef: string, ifMatch: string, ifMatch2: string, idempotencyKey: string, updateBidRequestDto: UpdateBidRequestDto, options?: RawAxiosRequestConfig) {
1985
+ return PartnerV2ApiFp(this.configuration).updateBid(bidRef, ifMatch, ifMatch2, idempotencyKey, updateBidRequestDto, options).then((request) => request(this.axios, this.basePath));
3237
1986
  }
3238
1987
 
3239
1988
  /**