@cmarket/partner-sdk 38.2.0 → 38.4.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 (817) hide show
  1. package/README.md +13 -4
  2. package/api/embed-api.ts +1 -1
  3. package/api/oauth-api.ts +1 -1
  4. package/api/partner-api-api.ts +159 -82
  5. package/api/products-api.ts +15 -8
  6. package/api/webhooks-api.ts +690 -0
  7. package/api/well-known-api.ts +1 -1
  8. package/api.ts +1 -1
  9. package/base.ts +1 -1
  10. package/common.ts +1 -1
  11. package/configuration.ts +1 -1
  12. package/dist/api/embed-api.d.ts +1 -1
  13. package/dist/api/embed-api.js +1 -1
  14. package/dist/api/oauth-api.d.ts +1 -1
  15. package/dist/api/oauth-api.js +1 -1
  16. package/dist/api/partner-api-api.d.ts +93 -49
  17. package/dist/api/partner-api-api.js +159 -82
  18. package/dist/api/products-api.d.ts +9 -5
  19. package/dist/api/products-api.js +15 -8
  20. package/dist/api/webhooks-api.d.ts +328 -0
  21. package/dist/api/webhooks-api.js +675 -0
  22. package/dist/api/well-known-api.d.ts +1 -1
  23. package/dist/api/well-known-api.js +1 -1
  24. package/dist/api.d.ts +1 -1
  25. package/dist/api.js +1 -1
  26. package/dist/base.d.ts +1 -1
  27. package/dist/base.js +1 -1
  28. package/dist/common.d.ts +1 -1
  29. package/dist/common.js +1 -1
  30. package/dist/configuration.d.ts +1 -1
  31. package/dist/configuration.js +1 -1
  32. package/dist/esm/api/embed-api.d.ts +1 -1
  33. package/dist/esm/api/embed-api.js +1 -1
  34. package/dist/esm/api/oauth-api.d.ts +1 -1
  35. package/dist/esm/api/oauth-api.js +1 -1
  36. package/dist/esm/api/partner-api-api.d.ts +93 -49
  37. package/dist/esm/api/partner-api-api.js +159 -82
  38. package/dist/esm/api/products-api.d.ts +9 -5
  39. package/dist/esm/api/products-api.js +15 -8
  40. package/dist/esm/api/webhooks-api.d.ts +328 -0
  41. package/dist/esm/api/webhooks-api.js +668 -0
  42. package/dist/esm/api/well-known-api.d.ts +1 -1
  43. package/dist/esm/api/well-known-api.js +1 -1
  44. package/dist/esm/api.d.ts +1 -1
  45. package/dist/esm/api.js +1 -1
  46. package/dist/esm/base.d.ts +1 -1
  47. package/dist/esm/base.js +1 -1
  48. package/dist/esm/common.d.ts +1 -1
  49. package/dist/esm/common.js +1 -1
  50. package/dist/esm/configuration.d.ts +1 -1
  51. package/dist/esm/configuration.js +1 -1
  52. package/dist/esm/index.d.ts +1 -1
  53. package/dist/esm/index.js +1 -1
  54. package/dist/esm/models/acceptance-result-response-dto.d.ts +1 -1
  55. package/dist/esm/models/acceptance-result-response-dto.js +1 -1
  56. package/dist/esm/models/acknowledge-product-receipt200-response.d.ts +1 -1
  57. package/dist/esm/models/acknowledge-product-receipt200-response.js +1 -1
  58. package/dist/esm/models/acknowledge-products-request-dto.d.ts +1 -1
  59. package/dist/esm/models/acknowledge-products-request-dto.js +1 -1
  60. package/dist/esm/models/api-catalog-dto.d.ts +1 -1
  61. package/dist/esm/models/api-catalog-dto.js +1 -1
  62. package/dist/esm/models/api-catalog-entry-dto.d.ts +1 -1
  63. package/dist/esm/models/api-catalog-entry-dto.js +1 -1
  64. package/dist/esm/models/api-catalog-link-dto.d.ts +1 -1
  65. package/dist/esm/models/api-catalog-link-dto.js +1 -1
  66. package/dist/esm/models/authorization-server-metadata-dto.d.ts +1 -1
  67. package/dist/esm/models/authorization-server-metadata-dto.js +1 -1
  68. package/dist/esm/models/award-method-public.d.ts +1 -1
  69. package/dist/esm/models/award-method-public.js +1 -1
  70. package/dist/esm/models/award-registered-v2-response-dto.d.ts +1 -1
  71. package/dist/esm/models/award-registered-v2-response-dto.js +1 -1
  72. package/dist/esm/models/award-reverted-v2-response-dto.d.ts +1 -1
  73. package/dist/esm/models/award-reverted-v2-response-dto.js +1 -1
  74. package/dist/esm/models/bid-acceptance-dto.d.ts +1 -1
  75. package/dist/esm/models/bid-acceptance-dto.js +1 -1
  76. package/dist/esm/models/bid-attachment-input-dto.d.ts +1 -1
  77. package/dist/esm/models/bid-attachment-input-dto.js +1 -1
  78. package/dist/esm/models/bid-bond-dto.d.ts +1 -1
  79. package/dist/esm/models/bid-bond-dto.js +1 -1
  80. package/dist/esm/models/bid-cancelled-response-dto.d.ts +1 -1
  81. package/dist/esm/models/bid-cancelled-response-dto.js +1 -1
  82. package/dist/esm/models/bid-contact-dto.d.ts +1 -1
  83. package/dist/esm/models/bid-contact-dto.js +1 -1
  84. package/dist/esm/models/bid-contacts-dto.d.ts +1 -1
  85. package/dist/esm/models/bid-contacts-dto.js +1 -1
  86. package/dist/esm/models/bid-contract-document-dto.d.ts +1 -1
  87. package/dist/esm/models/bid-contract-document-dto.js +1 -1
  88. package/dist/esm/models/bid-delivery-terms-dto.d.ts +1 -1
  89. package/dist/esm/models/bid-delivery-terms-dto.js +1 -1
  90. package/dist/esm/models/bid-detail-response-dto.d.ts +1 -1
  91. package/dist/esm/models/bid-detail-response-dto.js +1 -1
  92. package/dist/esm/models/bid-document-dto.d.ts +1 -1
  93. package/dist/esm/models/bid-document-dto.js +1 -1
  94. package/dist/esm/models/bid-failed-v2-response-dto.d.ts +1 -1
  95. package/dist/esm/models/bid-failed-v2-response-dto.js +1 -1
  96. package/dist/esm/models/bid-item-dto.d.ts +1 -1
  97. package/dist/esm/models/bid-item-dto.js +1 -1
  98. package/dist/esm/models/bid-lifecycle-dto.d.ts +1 -1
  99. package/dist/esm/models/bid-lifecycle-dto.js +1 -1
  100. package/dist/esm/models/bid-manager-dto.d.ts +1 -1
  101. package/dist/esm/models/bid-manager-dto.js +1 -1
  102. package/dist/esm/models/bid-payment-terms-dto.d.ts +1 -1
  103. package/dist/esm/models/bid-payment-terms-dto.js +1 -1
  104. package/dist/esm/models/bid-product-dto.d.ts +1 -1
  105. package/dist/esm/models/bid-product-dto.js +1 -1
  106. package/dist/esm/models/bid-public-status.d.ts +1 -1
  107. package/dist/esm/models/bid-public-status.js +1 -1
  108. package/dist/esm/models/bid-registered-response-dto.d.ts +1 -1
  109. package/dist/esm/models/bid-registered-response-dto.js +1 -1
  110. package/dist/esm/models/bid-result-participant-attachment-dto.d.ts +1 -1
  111. package/dist/esm/models/bid-result-participant-attachment-dto.js +1 -1
  112. package/dist/esm/models/bid-result-participant-dto.d.ts +1 -1
  113. package/dist/esm/models/bid-result-participant-dto.js +1 -1
  114. package/dist/esm/models/bid-results-response-dto.d.ts +1 -1
  115. package/dist/esm/models/bid-results-response-dto.js +1 -1
  116. package/dist/esm/models/bid-settlement-line-item-dto.d.ts +1 -1
  117. package/dist/esm/models/bid-settlement-line-item-dto.js +1 -1
  118. package/dist/esm/models/bid-settlement-participant-dto.d.ts +1 -1
  119. package/dist/esm/models/bid-settlement-participant-dto.js +1 -1
  120. package/dist/esm/models/bid-settlement-response-dto.d.ts +1 -1
  121. package/dist/esm/models/bid-settlement-response-dto.js +1 -1
  122. package/dist/esm/models/bid-statement-response-dto.d.ts +1 -1
  123. package/dist/esm/models/bid-statement-response-dto.js +1 -1
  124. package/dist/esm/models/bid-summary-dto.d.ts +1 -1
  125. package/dist/esm/models/bid-summary-dto.js +1 -1
  126. package/dist/esm/models/bid-type-public.d.ts +1 -1
  127. package/dist/esm/models/bid-type-public.js +1 -1
  128. package/dist/esm/models/bid-updated-response-dto.d.ts +1 -1
  129. package/dist/esm/models/bid-updated-response-dto.js +1 -1
  130. package/dist/esm/models/cancel-bid-request-dto.d.ts +1 -1
  131. package/dist/esm/models/cancel-bid-request-dto.js +1 -1
  132. package/dist/esm/models/cancel-bid200-response.d.ts +1 -1
  133. package/dist/esm/models/cancel-bid200-response.js +1 -1
  134. package/dist/esm/models/card-payment-request-response-dto.d.ts +1 -1
  135. package/dist/esm/models/card-payment-request-response-dto.js +1 -1
  136. package/dist/esm/models/complete-acceptance-request-dto.d.ts +1 -1
  137. package/dist/esm/models/complete-acceptance-request-dto.js +1 -1
  138. package/dist/esm/models/complete-acceptance200-response.d.ts +1 -1
  139. package/dist/esm/models/complete-acceptance200-response.js +1 -1
  140. package/dist/esm/models/complete-invoice200-response.d.ts +1 -1
  141. package/dist/esm/models/complete-invoice200-response.js +1 -1
  142. package/dist/esm/models/complete-upload-request-dto.d.ts +1 -1
  143. package/dist/esm/models/complete-upload-request-dto.js +1 -1
  144. package/dist/esm/models/contract-restriction-confirm-input-dto.d.ts +1 -1
  145. package/dist/esm/models/contract-restriction-confirm-input-dto.js +1 -1
  146. package/dist/esm/models/create-bid-request-dto.d.ts +1 -1
  147. package/dist/esm/models/create-bid-request-dto.js +1 -1
  148. package/dist/esm/models/create-card-payment-dto.d.ts +1 -1
  149. package/dist/esm/models/create-card-payment-dto.js +1 -1
  150. package/dist/esm/models/create-card-payment-request-dto.d.ts +1 -1
  151. package/dist/esm/models/create-card-payment-request-dto.js +1 -1
  152. package/dist/esm/models/create-card-payment200-response.d.ts +1 -1
  153. package/dist/esm/models/create-card-payment200-response.js +1 -1
  154. package/dist/esm/models/create-embed-launch201-response.d.ts +1 -1
  155. package/dist/esm/models/create-embed-launch201-response.js +1 -1
  156. package/dist/esm/models/create-external-contract-documents-request-dto.d.ts +1 -1
  157. package/dist/esm/models/create-external-contract-documents-request-dto.js +1 -1
  158. package/dist/esm/models/create-external-contract-documents-response-dto.d.ts +1 -1
  159. package/dist/esm/models/create-external-contract-documents-response-dto.js +1 -1
  160. package/dist/esm/models/create-file-upload-url201-response.d.ts +1 -1
  161. package/dist/esm/models/create-file-upload-url201-response.js +1 -1
  162. package/dist/esm/models/create-upload-url-request-dto.d.ts +1 -1
  163. package/dist/esm/models/create-upload-url-request-dto.js +1 -1
  164. package/dist/esm/models/create-webhook-endpoint-request-dto.d.ts +1 -1
  165. package/dist/esm/models/create-webhook-endpoint-request-dto.js +1 -1
  166. package/dist/esm/models/create-webhook-endpoint201-response.d.ts +1 -1
  167. package/dist/esm/models/create-webhook-endpoint201-response.js +1 -1
  168. package/dist/esm/models/delivery-date-type-public.d.ts +1 -1
  169. package/dist/esm/models/delivery-date-type-public.js +1 -1
  170. package/dist/esm/models/delivery-method-public.d.ts +1 -1
  171. package/dist/esm/models/delivery-method-public.js +1 -1
  172. package/dist/esm/models/embed-launch-request-dto.d.ts +1 -1
  173. package/dist/esm/models/embed-launch-request-dto.js +1 -1
  174. package/dist/esm/models/embed-launch-response-dto.d.ts +1 -1
  175. package/dist/esm/models/embed-launch-response-dto.js +1 -1
  176. package/dist/esm/models/excellent-procurement-public.d.ts +1 -1
  177. package/dist/esm/models/excellent-procurement-public.js +1 -1
  178. package/dist/esm/models/external-contract-document-item-dto.d.ts +1 -1
  179. package/dist/esm/models/external-contract-document-item-dto.js +1 -1
  180. package/dist/esm/models/external-contract-documents-response-dto.d.ts +1 -1
  181. package/dist/esm/models/external-contract-documents-response-dto.js +1 -1
  182. package/dist/esm/models/external-contract-item-dto.d.ts +1 -1
  183. package/dist/esm/models/external-contract-item-dto.js +1 -1
  184. package/dist/esm/models/external-contract-snapshot-dto.d.ts +1 -1
  185. package/dist/esm/models/external-contract-snapshot-dto.js +1 -1
  186. package/dist/esm/models/external-document-inputs-dto.d.ts +1 -1
  187. package/dist/esm/models/external-document-inputs-dto.js +1 -1
  188. package/dist/esm/models/file-meta-response-dto.d.ts +1 -1
  189. package/dist/esm/models/file-meta-response-dto.js +1 -1
  190. package/dist/esm/models/file-uploaded-response-dto.d.ts +1 -1
  191. package/dist/esm/models/file-uploaded-response-dto.js +1 -1
  192. package/dist/esm/models/generated-external-contract-document-dto.d.ts +1 -1
  193. package/dist/esm/models/generated-external-contract-document-dto.js +1 -1
  194. package/dist/esm/models/get-bid-settlement200-response.d.ts +1 -1
  195. package/dist/esm/models/get-bid-settlement200-response.js +1 -1
  196. package/dist/esm/models/get-bid-statement200-response.d.ts +1 -1
  197. package/dist/esm/models/get-bid-statement200-response.js +1 -1
  198. package/dist/esm/models/get-bid200-response.d.ts +1 -1
  199. package/dist/esm/models/get-bid200-response.js +1 -1
  200. package/dist/esm/models/get-file-meta200-response.d.ts +1 -1
  201. package/dist/esm/models/get-file-meta200-response.js +1 -1
  202. package/dist/esm/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
  203. package/dist/esm/models/get-supplier-card-payable-v2200-response.js +1 -1
  204. package/dist/esm/models/get-webhook-endpoint200-response.d.ts +1 -1
  205. package/dist/esm/models/get-webhook-endpoint200-response.js +1 -1
  206. package/dist/esm/models/green-product-public.d.ts +1 -1
  207. package/dist/esm/models/green-product-public.js +1 -1
  208. package/dist/esm/models/health-controller-check200-response.d.ts +1 -1
  209. package/dist/esm/models/health-controller-check200-response.js +1 -1
  210. package/dist/esm/models/health-response-dto.d.ts +1 -1
  211. package/dist/esm/models/health-response-dto.js +1 -1
  212. package/dist/esm/models/hierarchical-region-dto.d.ts +1 -1
  213. package/dist/esm/models/hierarchical-region-dto.js +1 -1
  214. package/dist/esm/models/index.d.ts +9 -0
  215. package/dist/esm/models/index.js +9 -0
  216. package/dist/esm/models/introspect-request-dto.d.ts +1 -1
  217. package/dist/esm/models/introspect-request-dto.js +1 -1
  218. package/dist/esm/models/introspection-response-dto.d.ts +1 -1
  219. package/dist/esm/models/introspection-response-dto.js +1 -1
  220. package/dist/esm/models/invalid-param-dto.d.ts +1 -1
  221. package/dist/esm/models/invalid-param-dto.js +1 -1
  222. package/dist/esm/models/invoice-completed-response-dto.d.ts +1 -1
  223. package/dist/esm/models/invoice-completed-response-dto.js +1 -1
  224. package/dist/esm/models/invoice-split-response-dto.d.ts +1 -1
  225. package/dist/esm/models/invoice-split-response-dto.js +1 -1
  226. package/dist/esm/models/legal-mandatory-public.d.ts +1 -1
  227. package/dist/esm/models/legal-mandatory-public.js +1 -1
  228. package/dist/esm/models/list-bid-results200-response.d.ts +1 -1
  229. package/dist/esm/models/list-bid-results200-response.js +1 -1
  230. package/dist/esm/models/list-bids200-response-meta.d.ts +1 -1
  231. package/dist/esm/models/list-bids200-response-meta.js +1 -1
  232. package/dist/esm/models/list-bids200-response.d.ts +1 -1
  233. package/dist/esm/models/list-bids200-response.js +1 -1
  234. package/dist/esm/models/list-products200-response.d.ts +1 -1
  235. package/dist/esm/models/list-products200-response.js +1 -1
  236. package/dist/esm/models/list-webhook-deliveries-response-dto.d.ts +1 -1
  237. package/dist/esm/models/list-webhook-deliveries-response-dto.js +1 -1
  238. package/dist/esm/models/list-webhook-deliveries200-response.d.ts +1 -1
  239. package/dist/esm/models/list-webhook-deliveries200-response.js +1 -1
  240. package/dist/esm/models/list-webhook-endpoints200-response.d.ts +1 -1
  241. package/dist/esm/models/list-webhook-endpoints200-response.js +1 -1
  242. package/dist/esm/models/mark-bid-failed-request-dto.d.ts +1 -1
  243. package/dist/esm/models/mark-bid-failed-request-dto.js +1 -1
  244. package/dist/esm/models/mark-bid-failed201-response.d.ts +1 -1
  245. package/dist/esm/models/mark-bid-failed201-response.js +1 -1
  246. package/dist/esm/models/negotiation-score-dto.d.ts +1 -1
  247. package/dist/esm/models/negotiation-score-dto.js +1 -1
  248. package/dist/esm/models/negotiation-scored-v2-response-dto.d.ts +1 -1
  249. package/dist/esm/models/negotiation-scored-v2-response-dto.js +1 -1
  250. package/dist/esm/models/oauth-error-response-dto.d.ts +1 -1
  251. package/dist/esm/models/oauth-error-response-dto.js +1 -1
  252. package/dist/esm/models/on-bid-award-reverted-request.d.ts +16 -0
  253. package/dist/esm/models/on-bid-award-reverted-request.js +14 -0
  254. package/dist/esm/models/on-bid-awarded-request.d.ts +16 -0
  255. package/dist/esm/models/on-bid-awarded-request.js +14 -0
  256. package/dist/esm/models/on-bid-canceled-request.d.ts +16 -0
  257. package/dist/esm/models/on-bid-canceled-request.js +14 -0
  258. package/dist/esm/models/on-bid-closed-request.d.ts +16 -0
  259. package/dist/esm/models/on-bid-closed-request.js +14 -0
  260. package/dist/esm/models/on-bid-failed-request.d.ts +16 -0
  261. package/dist/esm/models/on-bid-failed-request.js +14 -0
  262. package/dist/esm/models/on-ping-request.d.ts +16 -0
  263. package/dist/esm/models/on-ping-request.js +14 -0
  264. package/dist/esm/models/partner-webhook-delivery-status.d.ts +1 -1
  265. package/dist/esm/models/partner-webhook-delivery-status.js +1 -1
  266. package/dist/esm/models/partner-webhook-endpoint-status.d.ts +1 -1
  267. package/dist/esm/models/partner-webhook-endpoint-status.js +1 -1
  268. package/dist/esm/models/partner-webhook-event-type.d.ts +1 -1
  269. package/dist/esm/models/partner-webhook-event-type.js +1 -1
  270. package/dist/esm/models/payment-method-public.d.ts +1 -1
  271. package/dist/esm/models/payment-method-public.js +1 -1
  272. package/dist/esm/models/preconditions-dto.d.ts +1 -1
  273. package/dist/esm/models/preconditions-dto.js +1 -1
  274. package/dist/esm/models/problem-details-dto.d.ts +1 -1
  275. package/dist/esm/models/problem-details-dto.js +1 -1
  276. package/dist/esm/models/product-receipt-response-dto.d.ts +1 -1
  277. package/dist/esm/models/product-receipt-response-dto.js +1 -1
  278. package/dist/esm/models/product-response-dto.d.ts +1 -1
  279. package/dist/esm/models/product-response-dto.js +1 -1
  280. package/dist/esm/models/protected-resource-metadata-dto.d.ts +1 -1
  281. package/dist/esm/models/protected-resource-metadata-dto.js +1 -1
  282. package/dist/esm/models/register-award-request-dto.d.ts +1 -1
  283. package/dist/esm/models/register-award-request-dto.js +1 -1
  284. package/dist/esm/models/register-award201-response.d.ts +1 -1
  285. package/dist/esm/models/register-award201-response.js +1 -1
  286. package/dist/esm/models/register-bid201-response.d.ts +1 -1
  287. package/dist/esm/models/register-bid201-response.js +1 -1
  288. package/dist/esm/models/register-semo-contract-request-dto.d.ts +1 -1
  289. package/dist/esm/models/register-semo-contract-request-dto.js +1 -1
  290. package/dist/esm/models/request-invoice-split-request-dto.d.ts +1 -1
  291. package/dist/esm/models/request-invoice-split-request-dto.js +1 -1
  292. package/dist/esm/models/request-invoice-split200-response.d.ts +1 -1
  293. package/dist/esm/models/request-invoice-split200-response.js +1 -1
  294. package/dist/esm/models/retiree-roster-input-dto.d.ts +1 -1
  295. package/dist/esm/models/retiree-roster-input-dto.js +1 -1
  296. package/dist/esm/models/retiree-roster-row-dto.d.ts +1 -1
  297. package/dist/esm/models/retiree-roster-row-dto.js +1 -1
  298. package/dist/esm/models/revert-award-request-dto.d.ts +1 -1
  299. package/dist/esm/models/revert-award-request-dto.js +1 -1
  300. package/dist/esm/models/revert-award200-response.d.ts +1 -1
  301. package/dist/esm/models/revert-award200-response.js +1 -1
  302. package/dist/esm/models/revoke-request-dto.d.ts +1 -1
  303. package/dist/esm/models/revoke-request-dto.js +1 -1
  304. package/dist/esm/models/semo-contract-registered-response-dto.d.ts +1 -1
  305. package/dist/esm/models/semo-contract-registered-response-dto.js +1 -1
  306. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
  307. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
  308. package/dist/esm/models/send-webhook-test-event200-response.d.ts +1 -1
  309. package/dist/esm/models/send-webhook-test-event200-response.js +1 -1
  310. package/dist/esm/models/statement-document-dto.d.ts +1 -1
  311. package/dist/esm/models/statement-document-dto.js +1 -1
  312. package/dist/esm/models/statement-product-dto.d.ts +1 -1
  313. package/dist/esm/models/statement-product-dto.js +1 -1
  314. package/dist/esm/models/submit-negotiation-scores-request-dto.d.ts +1 -1
  315. package/dist/esm/models/submit-negotiation-scores-request-dto.js +1 -1
  316. package/dist/esm/models/submit-negotiation-scores201-response.d.ts +1 -1
  317. package/dist/esm/models/submit-negotiation-scores201-response.js +1 -1
  318. package/dist/esm/models/supplier-card-payable-response-dto.d.ts +1 -1
  319. package/dist/esm/models/supplier-card-payable-response-dto.js +1 -1
  320. package/dist/esm/models/supplier-tax-type.d.ts +1 -1
  321. package/dist/esm/models/supplier-tax-type.js +1 -1
  322. package/dist/esm/models/token-request-dto.d.ts +1 -1
  323. package/dist/esm/models/token-request-dto.js +1 -1
  324. package/dist/esm/models/token-response-dto.d.ts +1 -1
  325. package/dist/esm/models/token-response-dto.js +1 -1
  326. package/dist/esm/models/update-bid-request-dto.d.ts +1 -1
  327. package/dist/esm/models/update-bid-request-dto.js +1 -1
  328. package/dist/esm/models/update-bid200-response.d.ts +1 -1
  329. package/dist/esm/models/update-bid200-response.js +1 -1
  330. package/dist/esm/models/update-webhook-endpoint-request-dto.d.ts +1 -1
  331. package/dist/esm/models/update-webhook-endpoint-request-dto.js +1 -1
  332. package/dist/esm/models/upload-file-request-dto.d.ts +1 -1
  333. package/dist/esm/models/upload-file-request-dto.js +1 -1
  334. package/dist/esm/models/upload-file201-response.d.ts +1 -1
  335. package/dist/esm/models/upload-file201-response.js +1 -1
  336. package/dist/esm/models/upload-url-created-response-dto.d.ts +1 -1
  337. package/dist/esm/models/upload-url-created-response-dto.js +1 -1
  338. package/dist/esm/models/webhook-bid-event-data.d.ts +33 -0
  339. package/dist/esm/models/webhook-bid-event-data.js +14 -0
  340. package/dist/esm/models/webhook-delivery-dto.d.ts +1 -1
  341. package/dist/esm/models/webhook-delivery-dto.js +1 -1
  342. package/dist/esm/models/webhook-endpoint-dto.d.ts +1 -1
  343. package/dist/esm/models/webhook-endpoint-dto.js +1 -1
  344. package/dist/esm/models/webhook-endpoint-with-secret-dto.d.ts +1 -1
  345. package/dist/esm/models/webhook-endpoint-with-secret-dto.js +1 -1
  346. package/dist/esm/models/webhook-event-envelope.d.ts +34 -0
  347. package/dist/esm/models/webhook-event-envelope.js +14 -0
  348. package/dist/esm/models/webhook-ping-event-data.d.ts +20 -0
  349. package/dist/esm/models/webhook-ping-event-data.js +14 -0
  350. package/dist/esm/models/webhook-test-result-dto.d.ts +1 -1
  351. package/dist/esm/models/webhook-test-result-dto.js +1 -1
  352. package/dist/index.d.ts +1 -1
  353. package/dist/index.js +1 -1
  354. package/dist/models/acceptance-result-response-dto.d.ts +1 -1
  355. package/dist/models/acceptance-result-response-dto.js +1 -1
  356. package/dist/models/acknowledge-product-receipt200-response.d.ts +1 -1
  357. package/dist/models/acknowledge-product-receipt200-response.js +1 -1
  358. package/dist/models/acknowledge-products-request-dto.d.ts +1 -1
  359. package/dist/models/acknowledge-products-request-dto.js +1 -1
  360. package/dist/models/api-catalog-dto.d.ts +1 -1
  361. package/dist/models/api-catalog-dto.js +1 -1
  362. package/dist/models/api-catalog-entry-dto.d.ts +1 -1
  363. package/dist/models/api-catalog-entry-dto.js +1 -1
  364. package/dist/models/api-catalog-link-dto.d.ts +1 -1
  365. package/dist/models/api-catalog-link-dto.js +1 -1
  366. package/dist/models/authorization-server-metadata-dto.d.ts +1 -1
  367. package/dist/models/authorization-server-metadata-dto.js +1 -1
  368. package/dist/models/award-method-public.d.ts +1 -1
  369. package/dist/models/award-method-public.js +1 -1
  370. package/dist/models/award-registered-v2-response-dto.d.ts +1 -1
  371. package/dist/models/award-registered-v2-response-dto.js +1 -1
  372. package/dist/models/award-reverted-v2-response-dto.d.ts +1 -1
  373. package/dist/models/award-reverted-v2-response-dto.js +1 -1
  374. package/dist/models/bid-acceptance-dto.d.ts +1 -1
  375. package/dist/models/bid-acceptance-dto.js +1 -1
  376. package/dist/models/bid-attachment-input-dto.d.ts +1 -1
  377. package/dist/models/bid-attachment-input-dto.js +1 -1
  378. package/dist/models/bid-bond-dto.d.ts +1 -1
  379. package/dist/models/bid-bond-dto.js +1 -1
  380. package/dist/models/bid-cancelled-response-dto.d.ts +1 -1
  381. package/dist/models/bid-cancelled-response-dto.js +1 -1
  382. package/dist/models/bid-contact-dto.d.ts +1 -1
  383. package/dist/models/bid-contact-dto.js +1 -1
  384. package/dist/models/bid-contacts-dto.d.ts +1 -1
  385. package/dist/models/bid-contacts-dto.js +1 -1
  386. package/dist/models/bid-contract-document-dto.d.ts +1 -1
  387. package/dist/models/bid-contract-document-dto.js +1 -1
  388. package/dist/models/bid-delivery-terms-dto.d.ts +1 -1
  389. package/dist/models/bid-delivery-terms-dto.js +1 -1
  390. package/dist/models/bid-detail-response-dto.d.ts +1 -1
  391. package/dist/models/bid-detail-response-dto.js +1 -1
  392. package/dist/models/bid-document-dto.d.ts +1 -1
  393. package/dist/models/bid-document-dto.js +1 -1
  394. package/dist/models/bid-failed-v2-response-dto.d.ts +1 -1
  395. package/dist/models/bid-failed-v2-response-dto.js +1 -1
  396. package/dist/models/bid-item-dto.d.ts +1 -1
  397. package/dist/models/bid-item-dto.js +1 -1
  398. package/dist/models/bid-lifecycle-dto.d.ts +1 -1
  399. package/dist/models/bid-lifecycle-dto.js +1 -1
  400. package/dist/models/bid-manager-dto.d.ts +1 -1
  401. package/dist/models/bid-manager-dto.js +1 -1
  402. package/dist/models/bid-payment-terms-dto.d.ts +1 -1
  403. package/dist/models/bid-payment-terms-dto.js +1 -1
  404. package/dist/models/bid-product-dto.d.ts +1 -1
  405. package/dist/models/bid-product-dto.js +1 -1
  406. package/dist/models/bid-public-status.d.ts +1 -1
  407. package/dist/models/bid-public-status.js +1 -1
  408. package/dist/models/bid-registered-response-dto.d.ts +1 -1
  409. package/dist/models/bid-registered-response-dto.js +1 -1
  410. package/dist/models/bid-result-participant-attachment-dto.d.ts +1 -1
  411. package/dist/models/bid-result-participant-attachment-dto.js +1 -1
  412. package/dist/models/bid-result-participant-dto.d.ts +1 -1
  413. package/dist/models/bid-result-participant-dto.js +1 -1
  414. package/dist/models/bid-results-response-dto.d.ts +1 -1
  415. package/dist/models/bid-results-response-dto.js +1 -1
  416. package/dist/models/bid-settlement-line-item-dto.d.ts +1 -1
  417. package/dist/models/bid-settlement-line-item-dto.js +1 -1
  418. package/dist/models/bid-settlement-participant-dto.d.ts +1 -1
  419. package/dist/models/bid-settlement-participant-dto.js +1 -1
  420. package/dist/models/bid-settlement-response-dto.d.ts +1 -1
  421. package/dist/models/bid-settlement-response-dto.js +1 -1
  422. package/dist/models/bid-statement-response-dto.d.ts +1 -1
  423. package/dist/models/bid-statement-response-dto.js +1 -1
  424. package/dist/models/bid-summary-dto.d.ts +1 -1
  425. package/dist/models/bid-summary-dto.js +1 -1
  426. package/dist/models/bid-type-public.d.ts +1 -1
  427. package/dist/models/bid-type-public.js +1 -1
  428. package/dist/models/bid-updated-response-dto.d.ts +1 -1
  429. package/dist/models/bid-updated-response-dto.js +1 -1
  430. package/dist/models/cancel-bid-request-dto.d.ts +1 -1
  431. package/dist/models/cancel-bid-request-dto.js +1 -1
  432. package/dist/models/cancel-bid200-response.d.ts +1 -1
  433. package/dist/models/cancel-bid200-response.js +1 -1
  434. package/dist/models/card-payment-request-response-dto.d.ts +1 -1
  435. package/dist/models/card-payment-request-response-dto.js +1 -1
  436. package/dist/models/complete-acceptance-request-dto.d.ts +1 -1
  437. package/dist/models/complete-acceptance-request-dto.js +1 -1
  438. package/dist/models/complete-acceptance200-response.d.ts +1 -1
  439. package/dist/models/complete-acceptance200-response.js +1 -1
  440. package/dist/models/complete-invoice200-response.d.ts +1 -1
  441. package/dist/models/complete-invoice200-response.js +1 -1
  442. package/dist/models/complete-upload-request-dto.d.ts +1 -1
  443. package/dist/models/complete-upload-request-dto.js +1 -1
  444. package/dist/models/contract-restriction-confirm-input-dto.d.ts +1 -1
  445. package/dist/models/contract-restriction-confirm-input-dto.js +1 -1
  446. package/dist/models/create-bid-request-dto.d.ts +1 -1
  447. package/dist/models/create-bid-request-dto.js +1 -1
  448. package/dist/models/create-card-payment-dto.d.ts +1 -1
  449. package/dist/models/create-card-payment-dto.js +1 -1
  450. package/dist/models/create-card-payment-request-dto.d.ts +1 -1
  451. package/dist/models/create-card-payment-request-dto.js +1 -1
  452. package/dist/models/create-card-payment200-response.d.ts +1 -1
  453. package/dist/models/create-card-payment200-response.js +1 -1
  454. package/dist/models/create-embed-launch201-response.d.ts +1 -1
  455. package/dist/models/create-embed-launch201-response.js +1 -1
  456. package/dist/models/create-external-contract-documents-request-dto.d.ts +1 -1
  457. package/dist/models/create-external-contract-documents-request-dto.js +1 -1
  458. package/dist/models/create-external-contract-documents-response-dto.d.ts +1 -1
  459. package/dist/models/create-external-contract-documents-response-dto.js +1 -1
  460. package/dist/models/create-file-upload-url201-response.d.ts +1 -1
  461. package/dist/models/create-file-upload-url201-response.js +1 -1
  462. package/dist/models/create-upload-url-request-dto.d.ts +1 -1
  463. package/dist/models/create-upload-url-request-dto.js +1 -1
  464. package/dist/models/create-webhook-endpoint-request-dto.d.ts +1 -1
  465. package/dist/models/create-webhook-endpoint-request-dto.js +1 -1
  466. package/dist/models/create-webhook-endpoint201-response.d.ts +1 -1
  467. package/dist/models/create-webhook-endpoint201-response.js +1 -1
  468. package/dist/models/delivery-date-type-public.d.ts +1 -1
  469. package/dist/models/delivery-date-type-public.js +1 -1
  470. package/dist/models/delivery-method-public.d.ts +1 -1
  471. package/dist/models/delivery-method-public.js +1 -1
  472. package/dist/models/embed-launch-request-dto.d.ts +1 -1
  473. package/dist/models/embed-launch-request-dto.js +1 -1
  474. package/dist/models/embed-launch-response-dto.d.ts +1 -1
  475. package/dist/models/embed-launch-response-dto.js +1 -1
  476. package/dist/models/excellent-procurement-public.d.ts +1 -1
  477. package/dist/models/excellent-procurement-public.js +1 -1
  478. package/dist/models/external-contract-document-item-dto.d.ts +1 -1
  479. package/dist/models/external-contract-document-item-dto.js +1 -1
  480. package/dist/models/external-contract-documents-response-dto.d.ts +1 -1
  481. package/dist/models/external-contract-documents-response-dto.js +1 -1
  482. package/dist/models/external-contract-item-dto.d.ts +1 -1
  483. package/dist/models/external-contract-item-dto.js +1 -1
  484. package/dist/models/external-contract-snapshot-dto.d.ts +1 -1
  485. package/dist/models/external-contract-snapshot-dto.js +1 -1
  486. package/dist/models/external-document-inputs-dto.d.ts +1 -1
  487. package/dist/models/external-document-inputs-dto.js +1 -1
  488. package/dist/models/file-meta-response-dto.d.ts +1 -1
  489. package/dist/models/file-meta-response-dto.js +1 -1
  490. package/dist/models/file-uploaded-response-dto.d.ts +1 -1
  491. package/dist/models/file-uploaded-response-dto.js +1 -1
  492. package/dist/models/generated-external-contract-document-dto.d.ts +1 -1
  493. package/dist/models/generated-external-contract-document-dto.js +1 -1
  494. package/dist/models/get-bid-settlement200-response.d.ts +1 -1
  495. package/dist/models/get-bid-settlement200-response.js +1 -1
  496. package/dist/models/get-bid-statement200-response.d.ts +1 -1
  497. package/dist/models/get-bid-statement200-response.js +1 -1
  498. package/dist/models/get-bid200-response.d.ts +1 -1
  499. package/dist/models/get-bid200-response.js +1 -1
  500. package/dist/models/get-file-meta200-response.d.ts +1 -1
  501. package/dist/models/get-file-meta200-response.js +1 -1
  502. package/dist/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
  503. package/dist/models/get-supplier-card-payable-v2200-response.js +1 -1
  504. package/dist/models/get-webhook-endpoint200-response.d.ts +1 -1
  505. package/dist/models/get-webhook-endpoint200-response.js +1 -1
  506. package/dist/models/green-product-public.d.ts +1 -1
  507. package/dist/models/green-product-public.js +1 -1
  508. package/dist/models/health-controller-check200-response.d.ts +1 -1
  509. package/dist/models/health-controller-check200-response.js +1 -1
  510. package/dist/models/health-response-dto.d.ts +1 -1
  511. package/dist/models/health-response-dto.js +1 -1
  512. package/dist/models/hierarchical-region-dto.d.ts +1 -1
  513. package/dist/models/hierarchical-region-dto.js +1 -1
  514. package/dist/models/index.d.ts +9 -0
  515. package/dist/models/index.js +9 -0
  516. package/dist/models/introspect-request-dto.d.ts +1 -1
  517. package/dist/models/introspect-request-dto.js +1 -1
  518. package/dist/models/introspection-response-dto.d.ts +1 -1
  519. package/dist/models/introspection-response-dto.js +1 -1
  520. package/dist/models/invalid-param-dto.d.ts +1 -1
  521. package/dist/models/invalid-param-dto.js +1 -1
  522. package/dist/models/invoice-completed-response-dto.d.ts +1 -1
  523. package/dist/models/invoice-completed-response-dto.js +1 -1
  524. package/dist/models/invoice-split-response-dto.d.ts +1 -1
  525. package/dist/models/invoice-split-response-dto.js +1 -1
  526. package/dist/models/legal-mandatory-public.d.ts +1 -1
  527. package/dist/models/legal-mandatory-public.js +1 -1
  528. package/dist/models/list-bid-results200-response.d.ts +1 -1
  529. package/dist/models/list-bid-results200-response.js +1 -1
  530. package/dist/models/list-bids200-response-meta.d.ts +1 -1
  531. package/dist/models/list-bids200-response-meta.js +1 -1
  532. package/dist/models/list-bids200-response.d.ts +1 -1
  533. package/dist/models/list-bids200-response.js +1 -1
  534. package/dist/models/list-products200-response.d.ts +1 -1
  535. package/dist/models/list-products200-response.js +1 -1
  536. package/dist/models/list-webhook-deliveries-response-dto.d.ts +1 -1
  537. package/dist/models/list-webhook-deliveries-response-dto.js +1 -1
  538. package/dist/models/list-webhook-deliveries200-response.d.ts +1 -1
  539. package/dist/models/list-webhook-deliveries200-response.js +1 -1
  540. package/dist/models/list-webhook-endpoints200-response.d.ts +1 -1
  541. package/dist/models/list-webhook-endpoints200-response.js +1 -1
  542. package/dist/models/mark-bid-failed-request-dto.d.ts +1 -1
  543. package/dist/models/mark-bid-failed-request-dto.js +1 -1
  544. package/dist/models/mark-bid-failed201-response.d.ts +1 -1
  545. package/dist/models/mark-bid-failed201-response.js +1 -1
  546. package/dist/models/negotiation-score-dto.d.ts +1 -1
  547. package/dist/models/negotiation-score-dto.js +1 -1
  548. package/dist/models/negotiation-scored-v2-response-dto.d.ts +1 -1
  549. package/dist/models/negotiation-scored-v2-response-dto.js +1 -1
  550. package/dist/models/oauth-error-response-dto.d.ts +1 -1
  551. package/dist/models/oauth-error-response-dto.js +1 -1
  552. package/dist/models/on-bid-award-reverted-request.d.ts +16 -0
  553. package/dist/models/on-bid-award-reverted-request.js +15 -0
  554. package/dist/models/on-bid-awarded-request.d.ts +16 -0
  555. package/dist/models/on-bid-awarded-request.js +15 -0
  556. package/dist/models/on-bid-canceled-request.d.ts +16 -0
  557. package/dist/models/on-bid-canceled-request.js +15 -0
  558. package/dist/models/on-bid-closed-request.d.ts +16 -0
  559. package/dist/models/on-bid-closed-request.js +15 -0
  560. package/dist/models/on-bid-failed-request.d.ts +16 -0
  561. package/dist/models/on-bid-failed-request.js +15 -0
  562. package/dist/models/on-ping-request.d.ts +16 -0
  563. package/dist/models/on-ping-request.js +15 -0
  564. package/dist/models/partner-webhook-delivery-status.d.ts +1 -1
  565. package/dist/models/partner-webhook-delivery-status.js +1 -1
  566. package/dist/models/partner-webhook-endpoint-status.d.ts +1 -1
  567. package/dist/models/partner-webhook-endpoint-status.js +1 -1
  568. package/dist/models/partner-webhook-event-type.d.ts +1 -1
  569. package/dist/models/partner-webhook-event-type.js +1 -1
  570. package/dist/models/payment-method-public.d.ts +1 -1
  571. package/dist/models/payment-method-public.js +1 -1
  572. package/dist/models/preconditions-dto.d.ts +1 -1
  573. package/dist/models/preconditions-dto.js +1 -1
  574. package/dist/models/problem-details-dto.d.ts +1 -1
  575. package/dist/models/problem-details-dto.js +1 -1
  576. package/dist/models/product-receipt-response-dto.d.ts +1 -1
  577. package/dist/models/product-receipt-response-dto.js +1 -1
  578. package/dist/models/product-response-dto.d.ts +1 -1
  579. package/dist/models/product-response-dto.js +1 -1
  580. package/dist/models/protected-resource-metadata-dto.d.ts +1 -1
  581. package/dist/models/protected-resource-metadata-dto.js +1 -1
  582. package/dist/models/register-award-request-dto.d.ts +1 -1
  583. package/dist/models/register-award-request-dto.js +1 -1
  584. package/dist/models/register-award201-response.d.ts +1 -1
  585. package/dist/models/register-award201-response.js +1 -1
  586. package/dist/models/register-bid201-response.d.ts +1 -1
  587. package/dist/models/register-bid201-response.js +1 -1
  588. package/dist/models/register-semo-contract-request-dto.d.ts +1 -1
  589. package/dist/models/register-semo-contract-request-dto.js +1 -1
  590. package/dist/models/request-invoice-split-request-dto.d.ts +1 -1
  591. package/dist/models/request-invoice-split-request-dto.js +1 -1
  592. package/dist/models/request-invoice-split200-response.d.ts +1 -1
  593. package/dist/models/request-invoice-split200-response.js +1 -1
  594. package/dist/models/retiree-roster-input-dto.d.ts +1 -1
  595. package/dist/models/retiree-roster-input-dto.js +1 -1
  596. package/dist/models/retiree-roster-row-dto.d.ts +1 -1
  597. package/dist/models/retiree-roster-row-dto.js +1 -1
  598. package/dist/models/revert-award-request-dto.d.ts +1 -1
  599. package/dist/models/revert-award-request-dto.js +1 -1
  600. package/dist/models/revert-award200-response.d.ts +1 -1
  601. package/dist/models/revert-award200-response.js +1 -1
  602. package/dist/models/revoke-request-dto.d.ts +1 -1
  603. package/dist/models/revoke-request-dto.js +1 -1
  604. package/dist/models/semo-contract-registered-response-dto.d.ts +1 -1
  605. package/dist/models/semo-contract-registered-response-dto.js +1 -1
  606. package/dist/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
  607. package/dist/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
  608. package/dist/models/send-webhook-test-event200-response.d.ts +1 -1
  609. package/dist/models/send-webhook-test-event200-response.js +1 -1
  610. package/dist/models/statement-document-dto.d.ts +1 -1
  611. package/dist/models/statement-document-dto.js +1 -1
  612. package/dist/models/statement-product-dto.d.ts +1 -1
  613. package/dist/models/statement-product-dto.js +1 -1
  614. package/dist/models/submit-negotiation-scores-request-dto.d.ts +1 -1
  615. package/dist/models/submit-negotiation-scores-request-dto.js +1 -1
  616. package/dist/models/submit-negotiation-scores201-response.d.ts +1 -1
  617. package/dist/models/submit-negotiation-scores201-response.js +1 -1
  618. package/dist/models/supplier-card-payable-response-dto.d.ts +1 -1
  619. package/dist/models/supplier-card-payable-response-dto.js +1 -1
  620. package/dist/models/supplier-tax-type.d.ts +1 -1
  621. package/dist/models/supplier-tax-type.js +1 -1
  622. package/dist/models/token-request-dto.d.ts +1 -1
  623. package/dist/models/token-request-dto.js +1 -1
  624. package/dist/models/token-response-dto.d.ts +1 -1
  625. package/dist/models/token-response-dto.js +1 -1
  626. package/dist/models/update-bid-request-dto.d.ts +1 -1
  627. package/dist/models/update-bid-request-dto.js +1 -1
  628. package/dist/models/update-bid200-response.d.ts +1 -1
  629. package/dist/models/update-bid200-response.js +1 -1
  630. package/dist/models/update-webhook-endpoint-request-dto.d.ts +1 -1
  631. package/dist/models/update-webhook-endpoint-request-dto.js +1 -1
  632. package/dist/models/upload-file-request-dto.d.ts +1 -1
  633. package/dist/models/upload-file-request-dto.js +1 -1
  634. package/dist/models/upload-file201-response.d.ts +1 -1
  635. package/dist/models/upload-file201-response.js +1 -1
  636. package/dist/models/upload-url-created-response-dto.d.ts +1 -1
  637. package/dist/models/upload-url-created-response-dto.js +1 -1
  638. package/dist/models/webhook-bid-event-data.d.ts +33 -0
  639. package/dist/models/webhook-bid-event-data.js +15 -0
  640. package/dist/models/webhook-delivery-dto.d.ts +1 -1
  641. package/dist/models/webhook-delivery-dto.js +1 -1
  642. package/dist/models/webhook-endpoint-dto.d.ts +1 -1
  643. package/dist/models/webhook-endpoint-dto.js +1 -1
  644. package/dist/models/webhook-endpoint-with-secret-dto.d.ts +1 -1
  645. package/dist/models/webhook-endpoint-with-secret-dto.js +1 -1
  646. package/dist/models/webhook-event-envelope.d.ts +34 -0
  647. package/dist/models/webhook-event-envelope.js +15 -0
  648. package/dist/models/webhook-ping-event-data.d.ts +20 -0
  649. package/dist/models/webhook-ping-event-data.js +15 -0
  650. package/dist/models/webhook-test-result-dto.d.ts +1 -1
  651. package/dist/models/webhook-test-result-dto.js +1 -1
  652. package/docs/EmbedApi.md +1 -1
  653. package/docs/OauthApi.md +2 -2
  654. package/docs/OnBidAwardRevertedRequest.md +26 -0
  655. package/docs/OnBidAwardedRequest.md +26 -0
  656. package/docs/OnBidCanceledRequest.md +26 -0
  657. package/docs/OnBidClosedRequest.md +26 -0
  658. package/docs/OnBidFailedRequest.md +26 -0
  659. package/docs/OnPingRequest.md +26 -0
  660. package/docs/PartnerApiApi.md +80 -28
  661. package/docs/ProductsApi.md +5 -1
  662. package/docs/WebhookBidEventData.md +27 -0
  663. package/docs/WebhookEventEnvelope.md +27 -0
  664. package/docs/WebhookPingEventData.md +21 -0
  665. package/docs/WebhooksApi.md +403 -0
  666. package/docs/WellKnownApi.md +3 -3
  667. package/index.ts +1 -1
  668. package/models/acceptance-result-response-dto.ts +1 -1
  669. package/models/acknowledge-product-receipt200-response.ts +1 -1
  670. package/models/acknowledge-products-request-dto.ts +1 -1
  671. package/models/api-catalog-dto.ts +1 -1
  672. package/models/api-catalog-entry-dto.ts +1 -1
  673. package/models/api-catalog-link-dto.ts +1 -1
  674. package/models/authorization-server-metadata-dto.ts +1 -1
  675. package/models/award-method-public.ts +1 -1
  676. package/models/award-registered-v2-response-dto.ts +1 -1
  677. package/models/award-reverted-v2-response-dto.ts +1 -1
  678. package/models/bid-acceptance-dto.ts +1 -1
  679. package/models/bid-attachment-input-dto.ts +1 -1
  680. package/models/bid-bond-dto.ts +1 -1
  681. package/models/bid-cancelled-response-dto.ts +1 -1
  682. package/models/bid-contact-dto.ts +1 -1
  683. package/models/bid-contacts-dto.ts +1 -1
  684. package/models/bid-contract-document-dto.ts +1 -1
  685. package/models/bid-delivery-terms-dto.ts +1 -1
  686. package/models/bid-detail-response-dto.ts +1 -1
  687. package/models/bid-document-dto.ts +1 -1
  688. package/models/bid-failed-v2-response-dto.ts +1 -1
  689. package/models/bid-item-dto.ts +1 -1
  690. package/models/bid-lifecycle-dto.ts +1 -1
  691. package/models/bid-manager-dto.ts +1 -1
  692. package/models/bid-payment-terms-dto.ts +1 -1
  693. package/models/bid-product-dto.ts +1 -1
  694. package/models/bid-public-status.ts +1 -1
  695. package/models/bid-registered-response-dto.ts +1 -1
  696. package/models/bid-result-participant-attachment-dto.ts +1 -1
  697. package/models/bid-result-participant-dto.ts +1 -1
  698. package/models/bid-results-response-dto.ts +1 -1
  699. package/models/bid-settlement-line-item-dto.ts +1 -1
  700. package/models/bid-settlement-participant-dto.ts +1 -1
  701. package/models/bid-settlement-response-dto.ts +1 -1
  702. package/models/bid-statement-response-dto.ts +1 -1
  703. package/models/bid-summary-dto.ts +1 -1
  704. package/models/bid-type-public.ts +1 -1
  705. package/models/bid-updated-response-dto.ts +1 -1
  706. package/models/cancel-bid-request-dto.ts +1 -1
  707. package/models/cancel-bid200-response.ts +1 -1
  708. package/models/card-payment-request-response-dto.ts +1 -1
  709. package/models/complete-acceptance-request-dto.ts +1 -1
  710. package/models/complete-acceptance200-response.ts +1 -1
  711. package/models/complete-invoice200-response.ts +1 -1
  712. package/models/complete-upload-request-dto.ts +1 -1
  713. package/models/contract-restriction-confirm-input-dto.ts +1 -1
  714. package/models/create-bid-request-dto.ts +1 -1
  715. package/models/create-card-payment-dto.ts +1 -1
  716. package/models/create-card-payment-request-dto.ts +1 -1
  717. package/models/create-card-payment200-response.ts +1 -1
  718. package/models/create-embed-launch201-response.ts +1 -1
  719. package/models/create-external-contract-documents-request-dto.ts +1 -1
  720. package/models/create-external-contract-documents-response-dto.ts +1 -1
  721. package/models/create-file-upload-url201-response.ts +1 -1
  722. package/models/create-upload-url-request-dto.ts +1 -1
  723. package/models/create-webhook-endpoint-request-dto.ts +1 -1
  724. package/models/create-webhook-endpoint201-response.ts +1 -1
  725. package/models/delivery-date-type-public.ts +1 -1
  726. package/models/delivery-method-public.ts +1 -1
  727. package/models/embed-launch-request-dto.ts +1 -1
  728. package/models/embed-launch-response-dto.ts +1 -1
  729. package/models/excellent-procurement-public.ts +1 -1
  730. package/models/external-contract-document-item-dto.ts +1 -1
  731. package/models/external-contract-documents-response-dto.ts +1 -1
  732. package/models/external-contract-item-dto.ts +1 -1
  733. package/models/external-contract-snapshot-dto.ts +1 -1
  734. package/models/external-document-inputs-dto.ts +1 -1
  735. package/models/file-meta-response-dto.ts +1 -1
  736. package/models/file-uploaded-response-dto.ts +1 -1
  737. package/models/generated-external-contract-document-dto.ts +1 -1
  738. package/models/get-bid-settlement200-response.ts +1 -1
  739. package/models/get-bid-statement200-response.ts +1 -1
  740. package/models/get-bid200-response.ts +1 -1
  741. package/models/get-file-meta200-response.ts +1 -1
  742. package/models/get-supplier-card-payable-v2200-response.ts +1 -1
  743. package/models/get-webhook-endpoint200-response.ts +1 -1
  744. package/models/green-product-public.ts +1 -1
  745. package/models/health-controller-check200-response.ts +1 -1
  746. package/models/health-response-dto.ts +1 -1
  747. package/models/hierarchical-region-dto.ts +1 -1
  748. package/models/index.ts +9 -0
  749. package/models/introspect-request-dto.ts +1 -1
  750. package/models/introspection-response-dto.ts +1 -1
  751. package/models/invalid-param-dto.ts +1 -1
  752. package/models/invoice-completed-response-dto.ts +1 -1
  753. package/models/invoice-split-response-dto.ts +1 -1
  754. package/models/legal-mandatory-public.ts +1 -1
  755. package/models/list-bid-results200-response.ts +1 -1
  756. package/models/list-bids200-response-meta.ts +1 -1
  757. package/models/list-bids200-response.ts +1 -1
  758. package/models/list-products200-response.ts +1 -1
  759. package/models/list-webhook-deliveries-response-dto.ts +1 -1
  760. package/models/list-webhook-deliveries200-response.ts +1 -1
  761. package/models/list-webhook-endpoints200-response.ts +1 -1
  762. package/models/mark-bid-failed-request-dto.ts +1 -1
  763. package/models/mark-bid-failed201-response.ts +1 -1
  764. package/models/negotiation-score-dto.ts +1 -1
  765. package/models/negotiation-scored-v2-response-dto.ts +1 -1
  766. package/models/oauth-error-response-dto.ts +1 -1
  767. package/models/on-bid-award-reverted-request.ts +28 -0
  768. package/models/on-bid-awarded-request.ts +28 -0
  769. package/models/on-bid-canceled-request.ts +28 -0
  770. package/models/on-bid-closed-request.ts +28 -0
  771. package/models/on-bid-failed-request.ts +28 -0
  772. package/models/on-ping-request.ts +28 -0
  773. package/models/partner-webhook-delivery-status.ts +1 -1
  774. package/models/partner-webhook-endpoint-status.ts +1 -1
  775. package/models/partner-webhook-event-type.ts +1 -1
  776. package/models/payment-method-public.ts +1 -1
  777. package/models/preconditions-dto.ts +1 -1
  778. package/models/problem-details-dto.ts +1 -1
  779. package/models/product-receipt-response-dto.ts +1 -1
  780. package/models/product-response-dto.ts +1 -1
  781. package/models/protected-resource-metadata-dto.ts +1 -1
  782. package/models/register-award-request-dto.ts +1 -1
  783. package/models/register-award201-response.ts +1 -1
  784. package/models/register-bid201-response.ts +1 -1
  785. package/models/register-semo-contract-request-dto.ts +1 -1
  786. package/models/request-invoice-split-request-dto.ts +1 -1
  787. package/models/request-invoice-split200-response.ts +1 -1
  788. package/models/retiree-roster-input-dto.ts +1 -1
  789. package/models/retiree-roster-row-dto.ts +1 -1
  790. package/models/revert-award-request-dto.ts +1 -1
  791. package/models/revert-award200-response.ts +1 -1
  792. package/models/revoke-request-dto.ts +1 -1
  793. package/models/semo-contract-registered-response-dto.ts +1 -1
  794. package/models/semo-contract-taxinvoice-status-response-dto.ts +1 -1
  795. package/models/send-webhook-test-event200-response.ts +1 -1
  796. package/models/statement-document-dto.ts +1 -1
  797. package/models/statement-product-dto.ts +1 -1
  798. package/models/submit-negotiation-scores-request-dto.ts +1 -1
  799. package/models/submit-negotiation-scores201-response.ts +1 -1
  800. package/models/supplier-card-payable-response-dto.ts +1 -1
  801. package/models/supplier-tax-type.ts +1 -1
  802. package/models/token-request-dto.ts +1 -1
  803. package/models/token-response-dto.ts +1 -1
  804. package/models/update-bid-request-dto.ts +1 -1
  805. package/models/update-bid200-response.ts +1 -1
  806. package/models/update-webhook-endpoint-request-dto.ts +1 -1
  807. package/models/upload-file-request-dto.ts +1 -1
  808. package/models/upload-file201-response.ts +1 -1
  809. package/models/upload-url-created-response-dto.ts +1 -1
  810. package/models/webhook-bid-event-data.ts +43 -0
  811. package/models/webhook-delivery-dto.ts +1 -1
  812. package/models/webhook-endpoint-dto.ts +1 -1
  813. package/models/webhook-endpoint-with-secret-dto.ts +1 -1
  814. package/models/webhook-event-envelope.ts +38 -0
  815. package/models/webhook-ping-event-data.ts +26 -0
  816. package/models/webhook-test-result-dto.ts +1 -1
  817. package/package.json +1 -1
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403 입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. **목록은 `data` 가 배열이고 `meta` 가 항상 함께 실립니다** — `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 리소스 응답에는 `meta` 가 나가지 않습니다. 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON 이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json 이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2` 의 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified` 를 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json` 입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId` 와 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId` 를 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type` 은 `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1 이 허용하는 대로 이 URI 는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body 를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id` 가 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug 은 **HTTP status 로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
6
6
  *
7
- * The version of the OpenAPI document: 38.2.0
7
+ * The version of the OpenAPI document: 38.4.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).
@@ -584,10 +584,11 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
584
584
  * 공고의 모든 정보를 한 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류는 이 응답에 실립니다.** `contractDocuments[]` 가 서류별 `paperCode`·`paperName`· `fileKey`·`downloadUrl`·`uploadedAt`·`winnerSequence` 를 담습니다 — 계약서류만 따로 받는 엔드포인트는 두지 않습니다. `generationState` 는 **관측 전용**이며 `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태라 API 로 되살릴 수 없습니다(운영에 문의하세요). **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
585
585
  * @summary 공고 상세 조회
586
586
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
587
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
587
588
  * @param {*} [options] Override http request option.
588
589
  * @throws {RequiredError}
589
590
  */
590
- getBid: async (bidRef: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
591
+ getBid: async (bidRef: string, ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
591
592
  // verify required parameter 'bidRef' is not null or undefined
592
593
  assertParamExists('getBid', 'bidRef', bidRef)
593
594
  const localVarPath = `/v2/bids/{bidRef}`
@@ -609,6 +610,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
609
610
 
610
611
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
611
612
 
613
+ if (ifNoneMatch != null) {
614
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
615
+ }
612
616
  setSearchParams(localVarUrlObj, localVarQueryParameter);
613
617
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
614
618
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -622,10 +626,11 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
622
626
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 다른 조회에서 일부 참가자 정보가 가려지는 경우와 무관하게, 이 정산 정보는 읽기 전용으로 항상 그대로 제공됩니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
623
627
  * @summary 정산 정보 조회
624
628
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
629
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
625
630
  * @param {*} [options] Override http request option.
626
631
  * @throws {RequiredError}
627
632
  */
628
- getBidSettlement: async (bidRef: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
633
+ getBidSettlement: async (bidRef: string, ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
629
634
  // verify required parameter 'bidRef' is not null or undefined
630
635
  assertParamExists('getBidSettlement', 'bidRef', bidRef)
631
636
  const localVarPath = `/v2/bids/{bidRef}/settlement`
@@ -647,6 +652,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
647
652
 
648
653
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
649
654
 
655
+ if (ifNoneMatch != null) {
656
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
657
+ }
650
658
  setSearchParams(localVarUrlObj, localVarQueryParameter);
651
659
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
652
660
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -660,11 +668,12 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
660
668
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
661
669
  * @summary 거래명세서 조회
662
670
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
663
- * @param {number} [paperCode]
671
+ * @param {number} [paperCode] 거래명세서 서식 코드. 생략하면 해당 공고에 적용된 기본 서식으로 조회합니다. 기관에 서식이 여러 벌인 경우에만 지정하세요.
672
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
664
673
  * @param {*} [options] Override http request option.
665
674
  * @throws {RequiredError}
666
675
  */
667
- getBidStatement: async (bidRef: string, paperCode?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
676
+ getBidStatement: async (bidRef: string, paperCode?: number, ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
668
677
  // verify required parameter 'bidRef' is not null or undefined
669
678
  assertParamExists('getBidStatement', 'bidRef', bidRef)
670
679
  const localVarPath = `/v2/bids/{bidRef}/statement`
@@ -690,6 +699,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
690
699
 
691
700
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
692
701
 
702
+ if (ifNoneMatch != null) {
703
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
704
+ }
693
705
  setSearchParams(localVarUrlObj, localVarQueryParameter);
694
706
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
695
707
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -703,10 +715,11 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
703
715
  * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey` 만 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
704
716
  * @summary 파일 정보 조회
705
717
  * @param {string} fileKey 파일 키 — 업로드 응답의 fileKey(영문 대소문자·숫자 32자).
718
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
706
719
  * @param {*} [options] Override http request option.
707
720
  * @throws {RequiredError}
708
721
  */
709
- getFileMeta: async (fileKey: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
722
+ getFileMeta: async (fileKey: string, ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
710
723
  // verify required parameter 'fileKey' is not null or undefined
711
724
  assertParamExists('getFileMeta', 'fileKey', fileKey)
712
725
  const localVarPath = `/v2/files/{fileKey}`
@@ -728,6 +741,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
728
741
 
729
742
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
730
743
 
744
+ if (ifNoneMatch != null) {
745
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
746
+ }
731
747
  setSearchParams(localVarUrlObj, localVarQueryParameter);
732
748
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
733
749
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -779,10 +795,11 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
779
795
  * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
780
796
  * @summary 공급사 카드결제 가능 여부
781
797
  * @param {string} memberId 계약업체 회원 ID
798
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
782
799
  * @param {*} [options] Override http request option.
783
800
  * @throws {RequiredError}
784
801
  */
785
- getSupplierCardPayableV2: async (memberId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
802
+ getSupplierCardPayableV2: async (memberId: string, ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
786
803
  // verify required parameter 'memberId' is not null or undefined
787
804
  assertParamExists('getSupplierCardPayableV2', 'memberId', memberId)
788
805
  const localVarPath = `/v2/suppliers/{memberId}/card-payable`
@@ -804,6 +821,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
804
821
 
805
822
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
806
823
 
824
+ if (ifNoneMatch != null) {
825
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
826
+ }
807
827
  setSearchParams(localVarUrlObj, localVarQueryParameter);
808
828
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
809
829
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -817,10 +837,11 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
817
837
  * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
818
838
  * @summary 웹훅 구독 단건 조회
819
839
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
840
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
820
841
  * @param {*} [options] Override http request option.
821
842
  * @throws {RequiredError}
822
843
  */
823
- getWebhookEndpoint: async (endpointId: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
844
+ getWebhookEndpoint: async (endpointId: string, ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
824
845
  // verify required parameter 'endpointId' is not null or undefined
825
846
  assertParamExists('getWebhookEndpoint', 'endpointId', endpointId)
826
847
  const localVarPath = `/v2/webhook-endpoints/{endpointId}`
@@ -842,6 +863,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
842
863
 
843
864
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
844
865
 
866
+ if (ifNoneMatch != null) {
867
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
868
+ }
845
869
  setSearchParams(localVarUrlObj, localVarQueryParameter);
846
870
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
847
871
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -854,10 +878,11 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
854
878
  /**
855
879
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
856
880
  * @summary Partner API 헬스체크
881
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
857
882
  * @param {*} [options] Override http request option.
858
883
  * @throws {RequiredError}
859
884
  */
860
- healthControllerCheck: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
885
+ healthControllerCheck: async (ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
861
886
  const localVarPath = `/health`;
862
887
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
863
888
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
@@ -872,6 +897,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
872
897
 
873
898
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
874
899
 
900
+ if (ifNoneMatch != null) {
901
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
902
+ }
875
903
  setSearchParams(localVarUrlObj, localVarQueryParameter);
876
904
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
877
905
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -885,10 +913,11 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
885
913
  * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고를 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에 실린 `ETag` 를 다음 요청의 `If-None-Match` 로 되보내면, 결과가 그대로일 때 `304` 를 본문 없이 받습니다. **식별자 전달:** `?bidRefs=A,B,C`(쉼표) 또는 `?bidRefs=A&bidRefs=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다. 요청한 건수와 받은 건수가 다를 수 있으므로, 보낸 값이 공고번호였다면 `bidId` 로, 구매번호였다면 `purchaseNo` 로 대조하세요. **공고 하나만 볼 때도** `bidRefs` 에 하나만 넣으면 됩니다. 응찰 결과 외에 납품 조건·품목·계약서류까지 필요하면 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요.
886
914
  * @summary 공고 결과 조회
887
915
  * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60; 를 반복해 전달합니다. 최대 100건입니다.
916
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
888
917
  * @param {*} [options] Override http request option.
889
918
  * @throws {RequiredError}
890
919
  */
891
- listBidResults: async (bidRefs: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
920
+ listBidResults: async (bidRefs: string, ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
892
921
  // verify required parameter 'bidRefs' is not null or undefined
893
922
  assertParamExists('listBidResults', 'bidRefs', bidRefs)
894
923
  const localVarPath = `/v2/bid-results`;
@@ -913,6 +942,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
913
942
 
914
943
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
915
944
 
945
+ if (ifNoneMatch != null) {
946
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
947
+ }
916
948
  setSearchParams(localVarUrlObj, localVarQueryParameter);
917
949
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
918
950
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -930,10 +962,11 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
930
962
  * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
931
963
  * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회합니다.
932
964
  * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
965
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
933
966
  * @param {*} [options] Override http request option.
934
967
  * @throws {RequiredError}
935
968
  */
936
- listBids: async (limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
969
+ listBids: async (limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
937
970
  const localVarPath = `/v2/bids`;
938
971
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
939
972
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
@@ -972,6 +1005,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
972
1005
 
973
1006
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
974
1007
 
1008
+ if (ifNoneMatch != null) {
1009
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
1010
+ }
975
1011
  setSearchParams(localVarUrlObj, localVarQueryParameter);
976
1012
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
977
1013
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -1036,10 +1072,11 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
1036
1072
  * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
1037
1073
  * @param {number} [limit] 페이지 크기(1~200, 기본 50).
1038
1074
  * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
1075
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1039
1076
  * @param {*} [options] Override http request option.
1040
1077
  * @throws {RequiredError}
1041
1078
  */
1042
- listWebhookDeliveries: async (endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1079
+ listWebhookDeliveries: async (endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1043
1080
  const localVarPath = `/v2/webhook-deliveries`;
1044
1081
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1045
1082
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
@@ -1074,6 +1111,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
1074
1111
 
1075
1112
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1076
1113
 
1114
+ if (ifNoneMatch != null) {
1115
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
1116
+ }
1077
1117
  setSearchParams(localVarUrlObj, localVarQueryParameter);
1078
1118
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1079
1119
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -1086,10 +1126,11 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
1086
1126
  /**
1087
1127
  * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 — 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 을 계산해 **base64** 로 인코딩하고, `webhook-signature` 의 `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 는 공백으로 구분된 **여러 서명**을 실을 수 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 과 같은 값)도 실립니다 — 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 — 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 로 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` 에 `{\"status\":\"ACTIVE\"}` 로 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 은 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
1088
1128
  * @summary 웹훅 구독 목록 조회
1129
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1089
1130
  * @param {*} [options] Override http request option.
1090
1131
  * @throws {RequiredError}
1091
1132
  */
1092
- listWebhookEndpoints: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1133
+ listWebhookEndpoints: async (ifNoneMatch?: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1093
1134
  const localVarPath = `/v2/webhook-endpoints`;
1094
1135
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1095
1136
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
@@ -1108,6 +1149,9 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
1108
1149
 
1109
1150
  localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
1110
1151
 
1152
+ if (ifNoneMatch != null) {
1153
+ localVarHeaderParameter['If-None-Match'] = String(ifNoneMatch);
1154
+ }
1111
1155
  setSearchParams(localVarUrlObj, localVarQueryParameter);
1112
1156
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1113
1157
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -1851,11 +1895,12 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
1851
1895
  * 공고의 모든 정보를 한 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류는 이 응답에 실립니다.** `contractDocuments[]` 가 서류별 `paperCode`·`paperName`· `fileKey`·`downloadUrl`·`uploadedAt`·`winnerSequence` 를 담습니다 — 계약서류만 따로 받는 엔드포인트는 두지 않습니다. `generationState` 는 **관측 전용**이며 `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태라 API 로 되살릴 수 없습니다(운영에 문의하세요). **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
1852
1896
  * @summary 공고 상세 조회
1853
1897
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1898
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1854
1899
  * @param {*} [options] Override http request option.
1855
1900
  * @throws {RequiredError}
1856
1901
  */
1857
- async getBid(bidRef: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBid200Response>> {
1858
- const localVarAxiosArgs = await localVarAxiosParamCreator.getBid(bidRef, options);
1902
+ async getBid(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBid200Response>> {
1903
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getBid(bidRef, ifNoneMatch, options);
1859
1904
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1860
1905
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.getBid']?.[localVarOperationServerIndex]?.url;
1861
1906
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1864,11 +1909,12 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
1864
1909
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 다른 조회에서 일부 참가자 정보가 가려지는 경우와 무관하게, 이 정산 정보는 읽기 전용으로 항상 그대로 제공됩니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
1865
1910
  * @summary 정산 정보 조회
1866
1911
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1912
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1867
1913
  * @param {*} [options] Override http request option.
1868
1914
  * @throws {RequiredError}
1869
1915
  */
1870
- async getBidSettlement(bidRef: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidSettlement200Response>> {
1871
- const localVarAxiosArgs = await localVarAxiosParamCreator.getBidSettlement(bidRef, options);
1916
+ async getBidSettlement(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidSettlement200Response>> {
1917
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getBidSettlement(bidRef, ifNoneMatch, options);
1872
1918
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1873
1919
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.getBidSettlement']?.[localVarOperationServerIndex]?.url;
1874
1920
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1877,12 +1923,13 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
1877
1923
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
1878
1924
  * @summary 거래명세서 조회
1879
1925
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
1880
- * @param {number} [paperCode]
1926
+ * @param {number} [paperCode] 거래명세서 서식 코드. 생략하면 해당 공고에 적용된 기본 서식으로 조회합니다. 기관에 서식이 여러 벌인 경우에만 지정하세요.
1927
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1881
1928
  * @param {*} [options] Override http request option.
1882
1929
  * @throws {RequiredError}
1883
1930
  */
1884
- async getBidStatement(bidRef: string, paperCode?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidStatement200Response>> {
1885
- const localVarAxiosArgs = await localVarAxiosParamCreator.getBidStatement(bidRef, paperCode, options);
1931
+ async getBidStatement(bidRef: string, paperCode?: number, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetBidStatement200Response>> {
1932
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getBidStatement(bidRef, paperCode, ifNoneMatch, options);
1886
1933
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1887
1934
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.getBidStatement']?.[localVarOperationServerIndex]?.url;
1888
1935
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1891,11 +1938,12 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
1891
1938
  * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey` 만 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
1892
1939
  * @summary 파일 정보 조회
1893
1940
  * @param {string} fileKey 파일 키 — 업로드 응답의 fileKey(영문 대소문자·숫자 32자).
1941
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1894
1942
  * @param {*} [options] Override http request option.
1895
1943
  * @throws {RequiredError}
1896
1944
  */
1897
- async getFileMeta(fileKey: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetFileMeta200Response>> {
1898
- const localVarAxiosArgs = await localVarAxiosParamCreator.getFileMeta(fileKey, options);
1945
+ async getFileMeta(fileKey: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetFileMeta200Response>> {
1946
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getFileMeta(fileKey, ifNoneMatch, options);
1899
1947
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1900
1948
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.getFileMeta']?.[localVarOperationServerIndex]?.url;
1901
1949
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1917,11 +1965,12 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
1917
1965
  * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
1918
1966
  * @summary 공급사 카드결제 가능 여부
1919
1967
  * @param {string} memberId 계약업체 회원 ID
1968
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1920
1969
  * @param {*} [options] Override http request option.
1921
1970
  * @throws {RequiredError}
1922
1971
  */
1923
- async getSupplierCardPayableV2(memberId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetSupplierCardPayableV2200Response>> {
1924
- const localVarAxiosArgs = await localVarAxiosParamCreator.getSupplierCardPayableV2(memberId, options);
1972
+ async getSupplierCardPayableV2(memberId: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetSupplierCardPayableV2200Response>> {
1973
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getSupplierCardPayableV2(memberId, ifNoneMatch, options);
1925
1974
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1926
1975
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.getSupplierCardPayableV2']?.[localVarOperationServerIndex]?.url;
1927
1976
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1930,11 +1979,12 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
1930
1979
  * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
1931
1980
  * @summary 웹훅 구독 단건 조회
1932
1981
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
1982
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1933
1983
  * @param {*} [options] Override http request option.
1934
1984
  * @throws {RequiredError}
1935
1985
  */
1936
- async getWebhookEndpoint(endpointId: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetWebhookEndpoint200Response>> {
1937
- const localVarAxiosArgs = await localVarAxiosParamCreator.getWebhookEndpoint(endpointId, options);
1986
+ async getWebhookEndpoint(endpointId: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GetWebhookEndpoint200Response>> {
1987
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getWebhookEndpoint(endpointId, ifNoneMatch, options);
1938
1988
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1939
1989
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.getWebhookEndpoint']?.[localVarOperationServerIndex]?.url;
1940
1990
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1942,11 +1992,12 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
1942
1992
  /**
1943
1993
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
1944
1994
  * @summary Partner API 헬스체크
1995
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1945
1996
  * @param {*} [options] Override http request option.
1946
1997
  * @throws {RequiredError}
1947
1998
  */
1948
- async healthControllerCheck(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<HealthControllerCheck200Response>> {
1949
- const localVarAxiosArgs = await localVarAxiosParamCreator.healthControllerCheck(options);
1999
+ async healthControllerCheck(ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<HealthControllerCheck200Response>> {
2000
+ const localVarAxiosArgs = await localVarAxiosParamCreator.healthControllerCheck(ifNoneMatch, options);
1950
2001
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1951
2002
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.healthControllerCheck']?.[localVarOperationServerIndex]?.url;
1952
2003
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1955,11 +2006,12 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
1955
2006
  * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고를 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에 실린 `ETag` 를 다음 요청의 `If-None-Match` 로 되보내면, 결과가 그대로일 때 `304` 를 본문 없이 받습니다. **식별자 전달:** `?bidRefs=A,B,C`(쉼표) 또는 `?bidRefs=A&bidRefs=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다. 요청한 건수와 받은 건수가 다를 수 있으므로, 보낸 값이 공고번호였다면 `bidId` 로, 구매번호였다면 `purchaseNo` 로 대조하세요. **공고 하나만 볼 때도** `bidRefs` 에 하나만 넣으면 됩니다. 응찰 결과 외에 납품 조건·품목·계약서류까지 필요하면 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요.
1956
2007
  * @summary 공고 결과 조회
1957
2008
  * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60; 를 반복해 전달합니다. 최대 100건입니다.
2009
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1958
2010
  * @param {*} [options] Override http request option.
1959
2011
  * @throws {RequiredError}
1960
2012
  */
1961
- async listBidResults(bidRefs: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListBidResults200Response>> {
1962
- const localVarAxiosArgs = await localVarAxiosParamCreator.listBidResults(bidRefs, options);
2013
+ async listBidResults(bidRefs: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListBidResults200Response>> {
2014
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listBidResults(bidRefs, ifNoneMatch, options);
1963
2015
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1964
2016
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.listBidResults']?.[localVarOperationServerIndex]?.url;
1965
2017
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -1972,11 +2024,12 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
1972
2024
  * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
1973
2025
  * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회합니다.
1974
2026
  * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
2027
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
1975
2028
  * @param {*} [options] Override http request option.
1976
2029
  * @throws {RequiredError}
1977
2030
  */
1978
- async listBids(limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListBids200Response>> {
1979
- const localVarAxiosArgs = await localVarAxiosParamCreator.listBids(limit, cursor, bidRefs, status, include, options);
2031
+ async listBids(limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListBids200Response>> {
2032
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listBids(limit, cursor, bidRefs, status, include, ifNoneMatch, options);
1980
2033
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1981
2034
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.listBids']?.[localVarOperationServerIndex]?.url;
1982
2035
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -2002,11 +2055,12 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
2002
2055
  * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
2003
2056
  * @param {number} [limit] 페이지 크기(1~200, 기본 50).
2004
2057
  * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
2058
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2005
2059
  * @param {*} [options] Override http request option.
2006
2060
  * @throws {RequiredError}
2007
2061
  */
2008
- async listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListWebhookDeliveries200Response>> {
2009
- const localVarAxiosArgs = await localVarAxiosParamCreator.listWebhookDeliveries(endpointId, status, limit, cursor, options);
2062
+ async listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListWebhookDeliveries200Response>> {
2063
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listWebhookDeliveries(endpointId, status, limit, cursor, ifNoneMatch, options);
2010
2064
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2011
2065
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.listWebhookDeliveries']?.[localVarOperationServerIndex]?.url;
2012
2066
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -2014,11 +2068,12 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
2014
2068
  /**
2015
2069
  * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 — 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 을 계산해 **base64** 로 인코딩하고, `webhook-signature` 의 `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 는 공백으로 구분된 **여러 서명**을 실을 수 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 과 같은 값)도 실립니다 — 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 — 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 로 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` 에 `{\"status\":\"ACTIVE\"}` 로 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 은 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2016
2070
  * @summary 웹훅 구독 목록 조회
2071
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2017
2072
  * @param {*} [options] Override http request option.
2018
2073
  * @throws {RequiredError}
2019
2074
  */
2020
- async listWebhookEndpoints(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListWebhookEndpoints200Response>> {
2021
- const localVarAxiosArgs = await localVarAxiosParamCreator.listWebhookEndpoints(options);
2075
+ async listWebhookEndpoints(ifNoneMatch?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListWebhookEndpoints200Response>> {
2076
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listWebhookEndpoints(ifNoneMatch, options);
2022
2077
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
2023
2078
  const localVarOperationServerBasePath = operationServerMap['PartnerApiApi.listWebhookEndpoints']?.[localVarOperationServerIndex]?.url;
2024
2079
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
@@ -2326,42 +2381,46 @@ export const PartnerApiApiFactory = function (configuration?: Configuration, bas
2326
2381
  * 공고의 모든 정보를 한 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류는 이 응답에 실립니다.** `contractDocuments[]` 가 서류별 `paperCode`·`paperName`· `fileKey`·`downloadUrl`·`uploadedAt`·`winnerSequence` 를 담습니다 — 계약서류만 따로 받는 엔드포인트는 두지 않습니다. `generationState` 는 **관측 전용**이며 `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태라 API 로 되살릴 수 없습니다(운영에 문의하세요). **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2327
2382
  * @summary 공고 상세 조회
2328
2383
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2384
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2329
2385
  * @param {*} [options] Override http request option.
2330
2386
  * @throws {RequiredError}
2331
2387
  */
2332
- getBid(bidRef: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBid200Response> {
2333
- return localVarFp.getBid(bidRef, options).then((request) => request(axios, basePath));
2388
+ getBid(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBid200Response> {
2389
+ return localVarFp.getBid(bidRef, ifNoneMatch, options).then((request) => request(axios, basePath));
2334
2390
  },
2335
2391
  /**
2336
2392
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 다른 조회에서 일부 참가자 정보가 가려지는 경우와 무관하게, 이 정산 정보는 읽기 전용으로 항상 그대로 제공됩니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2337
2393
  * @summary 정산 정보 조회
2338
2394
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2395
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2339
2396
  * @param {*} [options] Override http request option.
2340
2397
  * @throws {RequiredError}
2341
2398
  */
2342
- getBidSettlement(bidRef: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBidSettlement200Response> {
2343
- return localVarFp.getBidSettlement(bidRef, options).then((request) => request(axios, basePath));
2399
+ getBidSettlement(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBidSettlement200Response> {
2400
+ return localVarFp.getBidSettlement(bidRef, ifNoneMatch, options).then((request) => request(axios, basePath));
2344
2401
  },
2345
2402
  /**
2346
2403
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2347
2404
  * @summary 거래명세서 조회
2348
2405
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2349
- * @param {number} [paperCode]
2406
+ * @param {number} [paperCode] 거래명세서 서식 코드. 생략하면 해당 공고에 적용된 기본 서식으로 조회합니다. 기관에 서식이 여러 벌인 경우에만 지정하세요.
2407
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2350
2408
  * @param {*} [options] Override http request option.
2351
2409
  * @throws {RequiredError}
2352
2410
  */
2353
- getBidStatement(bidRef: string, paperCode?: number, options?: RawAxiosRequestConfig): AxiosPromise<GetBidStatement200Response> {
2354
- return localVarFp.getBidStatement(bidRef, paperCode, options).then((request) => request(axios, basePath));
2411
+ getBidStatement(bidRef: string, paperCode?: number, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<GetBidStatement200Response> {
2412
+ return localVarFp.getBidStatement(bidRef, paperCode, ifNoneMatch, options).then((request) => request(axios, basePath));
2355
2413
  },
2356
2414
  /**
2357
2415
  * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey` 만 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
2358
2416
  * @summary 파일 정보 조회
2359
2417
  * @param {string} fileKey 파일 키 — 업로드 응답의 fileKey(영문 대소문자·숫자 32자).
2418
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2360
2419
  * @param {*} [options] Override http request option.
2361
2420
  * @throws {RequiredError}
2362
2421
  */
2363
- getFileMeta(fileKey: string, options?: RawAxiosRequestConfig): AxiosPromise<GetFileMeta200Response> {
2364
- return localVarFp.getFileMeta(fileKey, options).then((request) => request(axios, basePath));
2422
+ getFileMeta(fileKey: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<GetFileMeta200Response> {
2423
+ return localVarFp.getFileMeta(fileKey, ifNoneMatch, options).then((request) => request(axios, basePath));
2365
2424
  },
2366
2425
  /**
2367
2426
  * 등록한 계약의 계산서 발행 상태를 확인합니다. **언제 쓰나:** 씨마켓이 보내는 발행완료 통지를 놓쳤을 때의 **복구 경로**입니다. 평상시에는 통지를 받아 처리하고, 상태가 어긋난 것 같을 때 이 API 로 되읽으세요. **필수 스코프:** `contracts:read`
@@ -2377,40 +2436,44 @@ export const PartnerApiApiFactory = function (configuration?: Configuration, bas
2377
2436
  * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
2378
2437
  * @summary 공급사 카드결제 가능 여부
2379
2438
  * @param {string} memberId 계약업체 회원 ID
2439
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2380
2440
  * @param {*} [options] Override http request option.
2381
2441
  * @throws {RequiredError}
2382
2442
  */
2383
- getSupplierCardPayableV2(memberId: string, options?: RawAxiosRequestConfig): AxiosPromise<GetSupplierCardPayableV2200Response> {
2384
- return localVarFp.getSupplierCardPayableV2(memberId, options).then((request) => request(axios, basePath));
2443
+ getSupplierCardPayableV2(memberId: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<GetSupplierCardPayableV2200Response> {
2444
+ return localVarFp.getSupplierCardPayableV2(memberId, ifNoneMatch, options).then((request) => request(axios, basePath));
2385
2445
  },
2386
2446
  /**
2387
2447
  * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
2388
2448
  * @summary 웹훅 구독 단건 조회
2389
2449
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2450
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2390
2451
  * @param {*} [options] Override http request option.
2391
2452
  * @throws {RequiredError}
2392
2453
  */
2393
- getWebhookEndpoint(endpointId: string, options?: RawAxiosRequestConfig): AxiosPromise<GetWebhookEndpoint200Response> {
2394
- return localVarFp.getWebhookEndpoint(endpointId, options).then((request) => request(axios, basePath));
2454
+ getWebhookEndpoint(endpointId: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<GetWebhookEndpoint200Response> {
2455
+ return localVarFp.getWebhookEndpoint(endpointId, ifNoneMatch, options).then((request) => request(axios, basePath));
2395
2456
  },
2396
2457
  /**
2397
2458
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
2398
2459
  * @summary Partner API 헬스체크
2460
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2399
2461
  * @param {*} [options] Override http request option.
2400
2462
  * @throws {RequiredError}
2401
2463
  */
2402
- healthControllerCheck(options?: RawAxiosRequestConfig): AxiosPromise<HealthControllerCheck200Response> {
2403
- return localVarFp.healthControllerCheck(options).then((request) => request(axios, basePath));
2464
+ healthControllerCheck(ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<HealthControllerCheck200Response> {
2465
+ return localVarFp.healthControllerCheck(ifNoneMatch, options).then((request) => request(axios, basePath));
2404
2466
  },
2405
2467
  /**
2406
2468
  * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고를 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에 실린 `ETag` 를 다음 요청의 `If-None-Match` 로 되보내면, 결과가 그대로일 때 `304` 를 본문 없이 받습니다. **식별자 전달:** `?bidRefs=A,B,C`(쉼표) 또는 `?bidRefs=A&bidRefs=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다. 요청한 건수와 받은 건수가 다를 수 있으므로, 보낸 값이 공고번호였다면 `bidId` 로, 구매번호였다면 `purchaseNo` 로 대조하세요. **공고 하나만 볼 때도** `bidRefs` 에 하나만 넣으면 됩니다. 응찰 결과 외에 납품 조건·품목·계약서류까지 필요하면 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요.
2407
2469
  * @summary 공고 결과 조회
2408
2470
  * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60; 를 반복해 전달합니다. 최대 100건입니다.
2471
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2409
2472
  * @param {*} [options] Override http request option.
2410
2473
  * @throws {RequiredError}
2411
2474
  */
2412
- listBidResults(bidRefs: string, options?: RawAxiosRequestConfig): AxiosPromise<ListBidResults200Response> {
2413
- return localVarFp.listBidResults(bidRefs, options).then((request) => request(axios, basePath));
2475
+ listBidResults(bidRefs: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<ListBidResults200Response> {
2476
+ return localVarFp.listBidResults(bidRefs, ifNoneMatch, options).then((request) => request(axios, basePath));
2414
2477
  },
2415
2478
  /**
2416
2479
  * 발주처(API 키 바인딩)의 공고를 게시일 최신순으로 조회합니다. 스코프 `bids:read`. **발주처:** API 키에 바인딩된 발주처로 자동 스코프됩니다(쿼리에 buyerId 를 넣지 않습니다). **페이지네이션(cursor):** `limit`(1~100, 기본 100) + `cursor`(불투명 토큰). 응답 `meta.nextCursor` 를 다음 요청 `cursor` 로 전달하면 다음 페이지를 받습니다. `meta.hasMore` 가 `false`(= `nextCursor` 가 `null`)이면 마지막 페이지입니다. 목록 자체는 `data` 에 배열로 실립니다. **상태·낙찰방법:** 공개값(의미 문자열)으로 반환됩니다. 낙찰 여부는 상태가 아니라 낙찰 결과 조회의 `participants[].isWinner` 로 관측합니다(AWARDED 상태는 없습니다).
@@ -2420,11 +2483,12 @@ export const PartnerApiApiFactory = function (configuration?: Configuration, bas
2420
2483
  * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
2421
2484
  * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회합니다.
2422
2485
  * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
2486
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2423
2487
  * @param {*} [options] Override http request option.
2424
2488
  * @throws {RequiredError}
2425
2489
  */
2426
- listBids(limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, options?: RawAxiosRequestConfig): AxiosPromise<ListBids200Response> {
2427
- return localVarFp.listBids(limit, cursor, bidRefs, status, include, options).then((request) => request(axios, basePath));
2490
+ listBids(limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<ListBids200Response> {
2491
+ return localVarFp.listBids(limit, cursor, bidRefs, status, include, ifNoneMatch, options).then((request) => request(axios, basePath));
2428
2492
  },
2429
2493
  /**
2430
2494
  * 발주기관 회원과 거래유형으로 **그 거래에 필요한 계약서류 목록**을 조회합니다. **용도:** 공고(입찰)를 거치지 않는 거래 — 예: 채팅 기반 견적 — 에서 계약 전에 \"어떤 서류가 필요한가\"를 보여줄 때. **판정 기준:** 발주기관이 속한 그룹에 배정된 계약서류 중 그 거래유형에 적용되는 것 전부입니다. 운영자가 어드민에서 배정을 바꾸면 별도 배포 없이 즉시 반영됩니다. **응답 해석:** - `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 응답 규약으로 제공합니다. 공고 없는 거래(이 엔드포인트)의 신 표면은 아직 없습니다 — 만들 때 이 설명에 새 경로와 이관 기간을 함께 적습니다.
@@ -2444,20 +2508,22 @@ export const PartnerApiApiFactory = function (configuration?: Configuration, bas
2444
2508
  * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
2445
2509
  * @param {number} [limit] 페이지 크기(1~200, 기본 50).
2446
2510
  * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
2511
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2447
2512
  * @param {*} [options] Override http request option.
2448
2513
  * @throws {RequiredError}
2449
2514
  */
2450
- listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, options?: RawAxiosRequestConfig): AxiosPromise<ListWebhookDeliveries200Response> {
2451
- return localVarFp.listWebhookDeliveries(endpointId, status, limit, cursor, options).then((request) => request(axios, basePath));
2515
+ listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<ListWebhookDeliveries200Response> {
2516
+ return localVarFp.listWebhookDeliveries(endpointId, status, limit, cursor, ifNoneMatch, options).then((request) => request(axios, basePath));
2452
2517
  },
2453
2518
  /**
2454
2519
  * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 — 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 을 계산해 **base64** 로 인코딩하고, `webhook-signature` 의 `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 는 공백으로 구분된 **여러 서명**을 실을 수 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 과 같은 값)도 실립니다 — 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 — 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 로 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` 에 `{\"status\":\"ACTIVE\"}` 로 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 은 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2455
2520
  * @summary 웹훅 구독 목록 조회
2521
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2456
2522
  * @param {*} [options] Override http request option.
2457
2523
  * @throws {RequiredError}
2458
2524
  */
2459
- listWebhookEndpoints(options?: RawAxiosRequestConfig): AxiosPromise<ListWebhookEndpoints200Response> {
2460
- return localVarFp.listWebhookEndpoints(options).then((request) => request(axios, basePath));
2525
+ listWebhookEndpoints(ifNoneMatch?: string, options?: RawAxiosRequestConfig): AxiosPromise<ListWebhookEndpoints200Response> {
2526
+ return localVarFp.listWebhookEndpoints(ifNoneMatch, options).then((request) => request(axios, basePath));
2461
2527
  },
2462
2528
  /**
2463
2529
  * 공고를 유찰 상태로 전환합니다. **호출 시점:** 입찰 마감 후 유찰 사유가 확정되었을 때. 공고가 입찰완료(마감) 상태에서 호출합니다. **부수효과:** - 공고 상태가 유찰(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` 헤더 필수.
@@ -2734,45 +2800,49 @@ export class PartnerApiApi extends BaseAPI {
2734
2800
  * 공고의 모든 정보를 한 번에 조회합니다 — 기본 정보·납품/대금 조건·담당자·품목, 응찰 참여자(투찰가·순위·낙찰 여부), 계약서류, 검수 진행 상태, 라이프사이클 하위 상태. 스코프 `bids:read`. ERP 는 이 엔드포인트를 폴링해 async 처리(정산 마감 등)의 성사를 관측합니다. **낙찰 여부:** 이 응답의 `status` 가 아니라 `participants[].isWinner` 로 관측합니다. AWARDED 라는 공고 상태는 존재하지 않으며(낙찰 직후 공고는 CONTRACT_IN_PROGRESS 로 전이) `status === \'AWARDED\'` 를 기다리면 영원히 도달하지 않습니다. **여러 건을 한 번에:** 공고마다 이 조회를 반복하지 말고 `GET /v2/bid-results` 배치 조회를 쓰세요. **계약서류는 이 응답에 실립니다.** `contractDocuments[]` 가 서류별 `paperCode`·`paperName`· `fileKey`·`downloadUrl`·`uploadedAt`·`winnerSequence` 를 담습니다 — 계약서류만 따로 받는 엔드포인트는 두지 않습니다. `generationState` 는 **관측 전용**이며 `DEAD_LETTER` 가 보이면 자동 재시도가 소진된 상태라 API 로 되살릴 수 없습니다(운영에 문의하세요). **소유권:** 요청 파트너 키가 소유한 발주처 공고여야 합니다(타 발주처 공고 → 403).
2735
2801
  * @summary 공고 상세 조회
2736
2802
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2803
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2737
2804
  * @param {*} [options] Override http request option.
2738
2805
  * @throws {RequiredError}
2739
2806
  */
2740
- public getBid(bidRef: string, options?: RawAxiosRequestConfig) {
2741
- return PartnerApiApiFp(this.configuration).getBid(bidRef, options).then((request) => request(this.axios, this.basePath));
2807
+ public getBid(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2808
+ return PartnerApiApiFp(this.configuration).getBid(bidRef, ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2742
2809
  }
2743
2810
 
2744
2811
  /**
2745
2812
  * 낙찰 공급사의 사업자·계좌·공급가액/부가세·응찰 품목내역을 조회합니다. 대금 지급에 필요한 정보입니다. 다른 조회에서 일부 참가자 정보가 가려지는 경우와 무관하게, 이 정산 정보는 읽기 전용으로 항상 그대로 제공됩니다. **필수 스코프:** `invoices:read` — 종전에는 `bids:read` 를 요구했습니다. 대금·계좌가 실리는 응답이라 공고 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2746
2813
  * @summary 정산 정보 조회
2747
2814
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2815
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2748
2816
  * @param {*} [options] Override http request option.
2749
2817
  * @throws {RequiredError}
2750
2818
  */
2751
- public getBidSettlement(bidRef: string, options?: RawAxiosRequestConfig) {
2752
- return PartnerApiApiFp(this.configuration).getBidSettlement(bidRef, options).then((request) => request(this.axios, this.basePath));
2819
+ public getBidSettlement(bidRef: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2820
+ return PartnerApiApiFp(this.configuration).getBidSettlement(bidRef, ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2753
2821
  }
2754
2822
 
2755
2823
  /**
2756
2824
  * 낙찰 계약의 거래명세서(문서 헤더와 품목 라인)를 조회합니다. **필수 스코프:** `invoices:read` — 종전에는 `contracts:read` 를 요구했습니다. 금액이 실리는 정산 계열 문서라 계약서류 조회 권한과 분리했습니다. 이 엔드포인트를 쓰시던 키에는 `invoices:read` 를 추가로 부여받으셔야 합니다.
2757
2825
  * @summary 거래명세서 조회
2758
2826
  * @param {string} bidRef 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다.
2759
- * @param {number} [paperCode]
2827
+ * @param {number} [paperCode] 거래명세서 서식 코드. 생략하면 해당 공고에 적용된 기본 서식으로 조회합니다. 기관에 서식이 여러 벌인 경우에만 지정하세요.
2828
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2760
2829
  * @param {*} [options] Override http request option.
2761
2830
  * @throws {RequiredError}
2762
2831
  */
2763
- public getBidStatement(bidRef: string, paperCode?: number, options?: RawAxiosRequestConfig) {
2764
- return PartnerApiApiFp(this.configuration).getBidStatement(bidRef, paperCode, options).then((request) => request(this.axios, this.basePath));
2832
+ public getBidStatement(bidRef: string, paperCode?: number, ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2833
+ return PartnerApiApiFp(this.configuration).getBidStatement(bidRef, paperCode, ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2765
2834
  }
2766
2835
 
2767
2836
  /**
2768
2837
  * 파일명·크기·업로드 시각과 내려받기 주소를 함께 조회합니다. **내려받기:** 응답의 `downloadUrl` 로 파일을 받으세요. 요청 시점에 서명하므로 유효기간이 있습니다 — 저장해 두고 재사용하지 마시고 필요할 때 이 조회를 다시 호출하세요. **대부분은 이 조회가 필요 없습니다.** 공고·결과 응답의 첨부 항목에 파일명과 내려받기 주소 (`fileUrl`/`fullUrl`, 만료 없는 안정 주소)가 이미 실려 있습니다. 이 엔드포인트는 그 주소를 들고 있지 않고 `fileKey` 만 아는 경우(예: 업로드 직후 크기 확인)를 위한 것입니다. **MIME 타입은 싣지 않습니다.** 저장소가 그 값을 신뢰할 수 있게 보관하지 않아서, 지어내면 그것으로 분기한 쪽이 조용히 틀립니다. 확장자는 `fileName` 에 그대로 들어 있습니다. **형식이 틀린 키는 404 가 아니라 400 입니다.** fileKey 는 **영문 대소문자·숫자 32자**이고, 그 형태가 아닌 값은 애초에 키가 될 수 없으므로 그렇게 답합니다. 형식은 맞지만 없는 키는 404 입니다. 키를 16진수(hex)로 가정해 클라이언트에서 걸러내지 마세요 — 업로드된 파일의 키에는 hex 가 아닌 문자가 들어갑니다. **필수 스코프:** `files:read`
2769
2838
  * @summary 파일 정보 조회
2770
2839
  * @param {string} fileKey 파일 키 — 업로드 응답의 fileKey(영문 대소문자·숫자 32자).
2840
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2771
2841
  * @param {*} [options] Override http request option.
2772
2842
  * @throws {RequiredError}
2773
2843
  */
2774
- public getFileMeta(fileKey: string, options?: RawAxiosRequestConfig) {
2775
- return PartnerApiApiFp(this.configuration).getFileMeta(fileKey, options).then((request) => request(this.axios, this.basePath));
2844
+ public getFileMeta(fileKey: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2845
+ return PartnerApiApiFp(this.configuration).getFileMeta(fileKey, ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2776
2846
  }
2777
2847
 
2778
2848
  /**
@@ -2790,43 +2860,47 @@ export class PartnerApiApi extends BaseAPI {
2790
2860
  * 계약업체가 카드결제로 대금을 받을 수 있는 상태인지 확인합니다(씨마켓 회원 + 카드결제 가맹). **결제수단을 사용자에게 보여주기 전에** 호출하세요. 불가한 업체로 결제창을 만들면 만들어지기는 하지만 결제가 막혀, 사용자가 막다른 길에 갇힙니다. **응답은 가부와 사유뿐입니다.** 업체의 상호·사업자번호 같은 식별정보는 싣지 않습니다. **필수 스코프:** `payments:read` — 구 경로(`/v2/card-payment-requests/suppliers/{id}/card-payable`)는 조회인데도 `payments:write` 를 요구했습니다. 그쪽은 동결 표면이라 그대로 둡니다.
2791
2861
  * @summary 공급사 카드결제 가능 여부
2792
2862
  * @param {string} memberId 계약업체 회원 ID
2863
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2793
2864
  * @param {*} [options] Override http request option.
2794
2865
  * @throws {RequiredError}
2795
2866
  */
2796
- public getSupplierCardPayableV2(memberId: string, options?: RawAxiosRequestConfig) {
2797
- return PartnerApiApiFp(this.configuration).getSupplierCardPayableV2(memberId, options).then((request) => request(this.axios, this.basePath));
2867
+ public getSupplierCardPayableV2(memberId: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2868
+ return PartnerApiApiFp(this.configuration).getSupplierCardPayableV2(memberId, ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2798
2869
  }
2799
2870
 
2800
2871
  /**
2801
2872
  * 구독 1건의 현재 상태를 조회합니다. 서명 시크릿은 실리지 않습니다. **수정·삭제 전에 먼저 호출하세요.** 응답 헤더 `ETag` 를 `If-Match` 에 그대로 실어야 `PATCH`/`DELETE` 가 통과합니다. **`404`:** 없는 구독이거나 다른 파트너 키의 구독입니다 — `endpointId` 를 확인하세요. **필수 스코프:** `webhooks:read`
2802
2873
  * @summary 웹훅 구독 단건 조회
2803
2874
  * @param {string} endpointId 구독 식별자(등록 응답의 &#x60;endpointId&#x60;).
2875
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2804
2876
  * @param {*} [options] Override http request option.
2805
2877
  * @throws {RequiredError}
2806
2878
  */
2807
- public getWebhookEndpoint(endpointId: string, options?: RawAxiosRequestConfig) {
2808
- return PartnerApiApiFp(this.configuration).getWebhookEndpoint(endpointId, options).then((request) => request(this.axios, this.basePath));
2879
+ public getWebhookEndpoint(endpointId: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2880
+ return PartnerApiApiFp(this.configuration).getWebhookEndpoint(endpointId, ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2809
2881
  }
2810
2882
 
2811
2883
  /**
2812
2884
  * ERP 연동 직전 회선·인증 endpoint 동작 확인용.
2813
2885
  * @summary Partner API 헬스체크
2886
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2814
2887
  * @param {*} [options] Override http request option.
2815
2888
  * @throws {RequiredError}
2816
2889
  */
2817
- public healthControllerCheck(options?: RawAxiosRequestConfig) {
2818
- return PartnerApiApiFp(this.configuration).healthControllerCheck(options).then((request) => request(this.axios, this.basePath));
2890
+ public healthControllerCheck(ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2891
+ return PartnerApiApiFp(this.configuration).healthControllerCheck(ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2819
2892
  }
2820
2893
 
2821
2894
  /**
2822
2895
  * 여러 공고의 응찰 결과를 한 번에 조회합니다. 스코프 `bids:read`. **이 엔드포인트를 폴링에 쓰세요.** 공고를 하나씩 조회하는 대신 최대 100건을 한 왕복으로 받습니다. 응답에 실린 `ETag` 를 다음 요청의 `If-None-Match` 로 되보내면, 결과가 그대로일 때 `304` 를 본문 없이 받습니다. **식별자 전달:** `?bidRefs=A,B,C`(쉼표) 또는 `?bidRefs=A&bidRefs=B`(반복) 둘 다 됩니다. **없는 공고는 응답에서 빠집니다.** 존재하지 않거나 대행 범위 밖인 식별자는 오류가 아니라 누락으로 처리됩니다. 요청한 건수와 받은 건수가 다를 수 있으므로, 보낸 값이 공고번호였다면 `bidId` 로, 구매번호였다면 `purchaseNo` 로 대조하세요. **공고 하나만 볼 때도** `bidRefs` 에 하나만 넣으면 됩니다. 응찰 결과 외에 납품 조건·품목·계약서류까지 필요하면 `GET /v2/bids/{bidRef}` 상세 조회를 쓰세요.
2823
2896
  * @summary 공고 결과 조회
2824
2897
  * @param {string} bidRefs 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. 쉼표로 구분하거나 &#x60;bidRefs&#x60; 를 반복해 전달합니다. 최대 100건입니다.
2898
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2825
2899
  * @param {*} [options] Override http request option.
2826
2900
  * @throws {RequiredError}
2827
2901
  */
2828
- public listBidResults(bidRefs: string, options?: RawAxiosRequestConfig) {
2829
- return PartnerApiApiFp(this.configuration).listBidResults(bidRefs, options).then((request) => request(this.axios, this.basePath));
2902
+ public listBidResults(bidRefs: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2903
+ return PartnerApiApiFp(this.configuration).listBidResults(bidRefs, ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2830
2904
  }
2831
2905
 
2832
2906
  /**
@@ -2837,11 +2911,12 @@ export class PartnerApiApi extends BaseAPI {
2837
2911
  * @param {Array<string>} [bidRefs] 조회할 공고 식별자 목록. 발주기관 자체 구매번호(권장) 또는 c-market 공고번호. 구매번호는 키에 바인딩된 발주처 범위에서 최신 라운드 공고로 해소됩니다. 두 형식을 섞어 보내도 됩니다. CSV 로 전달하며 최대 100건. 지정 시 그 공고만 조회합니다.
2838
2912
  * @param {Array<BidPublicStatus>} [status] 공고 상태 필터(공개값) CSV. 지정 시 그중 하나라도 일치하는 공고만 조회합니다.
2839
2913
  * @param {Array<ListBidsIncludeEnum>} [include] 행별 확장 부착 CSV. &#x60;results&#x60;&#x3D;응찰 참여자, &#x60;products&#x60;&#x3D;공고 등록 품목, &#x60;contacts&#x60;&#x3D;발주 담당자 성명·연락처·이메일. 미지정이면 부착하지 않는다(응답이 가볍고 조회 비용도 들지 않는다).
2914
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2840
2915
  * @param {*} [options] Override http request option.
2841
2916
  * @throws {RequiredError}
2842
2917
  */
2843
- public listBids(limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, options?: RawAxiosRequestConfig) {
2844
- return PartnerApiApiFp(this.configuration).listBids(limit, cursor, bidRefs, status, include, options).then((request) => request(this.axios, this.basePath));
2918
+ public listBids(limit?: number, cursor?: string, bidRefs?: Array<string>, status?: Array<BidPublicStatus>, include?: Array<ListBidsIncludeEnum>, ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2919
+ return PartnerApiApiFp(this.configuration).listBids(limit, cursor, bidRefs, status, include, ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2845
2920
  }
2846
2921
 
2847
2922
  /**
@@ -2863,21 +2938,23 @@ export class PartnerApiApi extends BaseAPI {
2863
2938
  * @param {PartnerWebhookDeliveryStatus} [status] 전송 상태 필터. 미지정이면 전부.
2864
2939
  * @param {number} [limit] 페이지 크기(1~200, 기본 50).
2865
2940
  * @param {string} [cursor] 다음 페이지 커서(불투명 토큰). 직전 응답의 &#x60;nextCursor&#x60; 를 그대로 전달합니다. 미지정 시 첫 페이지.
2941
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2866
2942
  * @param {*} [options] Override http request option.
2867
2943
  * @throws {RequiredError}
2868
2944
  */
2869
- public listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, options?: RawAxiosRequestConfig) {
2870
- return PartnerApiApiFp(this.configuration).listWebhookDeliveries(endpointId, status, limit, cursor, options).then((request) => request(this.axios, this.basePath));
2945
+ public listWebhookDeliveries(endpointId?: string, status?: PartnerWebhookDeliveryStatus, limit?: number, cursor?: string, ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2946
+ return PartnerApiApiFp(this.configuration).listWebhookDeliveries(endpointId, status, limit, cursor, ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2871
2947
  }
2872
2948
 
2873
2949
  /**
2874
2950
  * 이 API 키가 등록한 웹훅 구독을 모두 조회합니다. **호출 시점:** 연동 상태를 점검할 때, 또는 발송이 멈춘 이유(`status`·`consecutiveFailures`)를 확인할 때. 서명 시크릿은 여기에 실리지 않습니다. **필수 스코프:** `webhooks:read` ### 서명 검증 (필수) 서명은 **[Standard Webhooks](https://www.standardwebhooks.com)** 규약을 그대로 따릅니다. 직접 구현하지 말고 각 언어의 `standardwebhooks` 라이브러리에 등록 시 받은 시크릿 (`whsec_…`)을 그대로 넘기세요 — 그것이 이 형식을 쓰는 이유입니다. ```java // Java Webhook webhook = new Webhook(secret); // secret = \"whsec_…\" webhook.verify(rawBody, headers); // 실패하면 예외 ``` ```ts // Node / TypeScript import { Webhook } from \'standardwebhooks\'; new Webhook(secret).verify(rawBody, headers); ``` 라이브러리를 쓸 수 없다면 발송 요청에 실리는 헤더는 셋입니다. ``` webhook-id: evt_01J8Z7Q3K9 webhook-timestamp: 1774915200 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= ``` 1. 시크릿에서 `whsec_` 접두어를 떼고 **base64 디코드**합니다 — 그 바이트가 HMAC 키입니다 (시크릿 문자열 자체가 아닙니다). 2. `\"${webhook-id}.${webhook-timestamp}.${본문 원문}\"` 을 만듭니다. **본문은 파싱 전 원문 바이트**여야 합니다 — JSON 을 다시 직렬화하면 공백·키 순서가 달라져 서명이 맞지 않습니다. 3. HMAC-SHA256 을 계산해 **base64** 로 인코딩하고, `webhook-signature` 의 `v1,` 뒤 값과 비교합니다. 비교는 **상수 시간** 함수를 쓰세요(Node `crypto.timingSafeEqual`, Java `MessageDigest.isEqual`). 4. `webhook-timestamp` 가 현재 시각에서 **5분** 이상 지났으면 거절하세요(재전송 공격 방어). `webhook-signature` 는 공백으로 구분된 **여러 서명**을 실을 수 있는 형식입니다(키 회전용). 지금은 항상 하나지만, 검증기는 목록으로 읽고 **하나라도 맞으면 통과**하도록 짜세요. ### 중복 제거 `webhook-id` 헤더가 이벤트 식별자입니다. **재시도에도 같은 값이 옵니다** — 이미 처리한 값이면 무시하세요. 같은 이벤트를 두 번 받는 것은 정상 동작이며, 중복 제거는 수신측 책임입니다. 편의를 위해 `webhook-event-type` 헤더에 이벤트 타입(본문 `type` 과 같은 값)도 실립니다 — 본문을 파싱하기 전에 관심 없는 타입을 버릴 수 있습니다. 표준에는 없는 확장이라 검증 라이브러리는 이 헤더를 무시합니다. ### 응답과 재시도 2xx 를 돌려주면 성공입니다. 그 외(또는 무응답)는 실패로 보고 최대 7회 재시도합니다 — 간격은 10초 → 1분 → 5분 → 30분 → 2시간 → 6시간 → 24시간 입니다. 처리 시간이 길면 먼저 2xx 를 돌려주고 비동기로 처리하세요. 연속 실패가 20회에 닿으면 구독이 자동으로 `DISABLED` 로 내려가고 발송이 멈춥니다. 수신측을 고친 뒤 `PATCH /v2/webhook-endpoints/{endpointId}` 에 `{\"status\":\"ACTIVE\"}` 로 되살리세요. ### 구독 가능한 이벤트 `bid.closed` · `bid.awarded` · `bid.failed` · `bid.canceled` · `bid.award_reverted` `ping` 은 연결 확인 전용이라 구독할 수 없습니다 — 테스트 발송 경로에서만 나갑니다. ### 놓친 이벤트 확인 `GET /v2/webhook-deliveries` 가 발송 시도 이력(본문·응답 상태·다음 재시도 시각)을 돌려줍니다. 수신측 장애 구간을 메울 때 이 엔드포인트를 폴링 대체 경로로 쓰세요.
2875
2951
  * @summary 웹훅 구독 목록 조회
2952
+ * @param {string} [ifNoneMatch] 직전 응답의 &#x60;ETag&#x60; 값. 내용이 그대로면 본문 없이 &#x60;304&#x60; 로 끝납니다 — 폴링에서 전송량과 파싱 비용이 사라집니다.
2876
2953
  * @param {*} [options] Override http request option.
2877
2954
  * @throws {RequiredError}
2878
2955
  */
2879
- public listWebhookEndpoints(options?: RawAxiosRequestConfig) {
2880
- return PartnerApiApiFp(this.configuration).listWebhookEndpoints(options).then((request) => request(this.axios, this.basePath));
2956
+ public listWebhookEndpoints(ifNoneMatch?: string, options?: RawAxiosRequestConfig) {
2957
+ return PartnerApiApiFp(this.configuration).listWebhookEndpoints(ifNoneMatch, options).then((request) => request(this.axios, this.basePath));
2881
2958
  }
2882
2959
 
2883
2960
  /**