@cmarket/partner-sdk 37.2.0 → 37.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (675) hide show
  1. package/README.md +7 -7
  2. package/api/embed-api.ts +1 -1
  3. package/api/oauth-api.ts +1 -1
  4. package/api/partner-api-api.ts +21 -21
  5. package/api/products-api.ts +1 -1
  6. package/api/well-known-api.ts +1 -1
  7. package/api.ts +1 -1
  8. package/base.ts +1 -1
  9. package/common.ts +1 -1
  10. package/configuration.ts +1 -1
  11. package/dist/api/embed-api.d.ts +1 -1
  12. package/dist/api/embed-api.js +1 -1
  13. package/dist/api/oauth-api.d.ts +1 -1
  14. package/dist/api/oauth-api.js +1 -1
  15. package/dist/api/partner-api-api.d.ts +21 -21
  16. package/dist/api/partner-api-api.js +21 -21
  17. package/dist/api/products-api.d.ts +1 -1
  18. package/dist/api/products-api.js +1 -1
  19. package/dist/api/well-known-api.d.ts +1 -1
  20. package/dist/api/well-known-api.js +1 -1
  21. package/dist/api.d.ts +1 -1
  22. package/dist/api.js +1 -1
  23. package/dist/base.d.ts +1 -1
  24. package/dist/base.js +1 -1
  25. package/dist/common.d.ts +1 -1
  26. package/dist/common.js +1 -1
  27. package/dist/configuration.d.ts +1 -1
  28. package/dist/configuration.js +1 -1
  29. package/dist/esm/api/embed-api.d.ts +1 -1
  30. package/dist/esm/api/embed-api.js +1 -1
  31. package/dist/esm/api/oauth-api.d.ts +1 -1
  32. package/dist/esm/api/oauth-api.js +1 -1
  33. package/dist/esm/api/partner-api-api.d.ts +21 -21
  34. package/dist/esm/api/partner-api-api.js +21 -21
  35. package/dist/esm/api/products-api.d.ts +1 -1
  36. package/dist/esm/api/products-api.js +1 -1
  37. package/dist/esm/api/well-known-api.d.ts +1 -1
  38. package/dist/esm/api/well-known-api.js +1 -1
  39. package/dist/esm/api.d.ts +1 -1
  40. package/dist/esm/api.js +1 -1
  41. package/dist/esm/base.d.ts +1 -1
  42. package/dist/esm/base.js +1 -1
  43. package/dist/esm/common.d.ts +1 -1
  44. package/dist/esm/common.js +1 -1
  45. package/dist/esm/configuration.d.ts +1 -1
  46. package/dist/esm/configuration.js +1 -1
  47. package/dist/esm/index.d.ts +1 -1
  48. package/dist/esm/index.js +1 -1
  49. package/dist/esm/models/acceptance-result-response-dto.d.ts +1 -1
  50. package/dist/esm/models/acceptance-result-response-dto.js +1 -1
  51. package/dist/esm/models/acknowledge-product-receipt200-response.d.ts +1 -1
  52. package/dist/esm/models/acknowledge-product-receipt200-response.js +1 -1
  53. package/dist/esm/models/acknowledge-products-request-dto.d.ts +1 -1
  54. package/dist/esm/models/acknowledge-products-request-dto.js +1 -1
  55. package/dist/esm/models/api-catalog-dto.d.ts +1 -1
  56. package/dist/esm/models/api-catalog-dto.js +1 -1
  57. package/dist/esm/models/api-catalog-entry-dto.d.ts +1 -1
  58. package/dist/esm/models/api-catalog-entry-dto.js +1 -1
  59. package/dist/esm/models/api-catalog-link-dto.d.ts +1 -1
  60. package/dist/esm/models/api-catalog-link-dto.js +1 -1
  61. package/dist/esm/models/authorization-server-metadata-dto.d.ts +1 -1
  62. package/dist/esm/models/authorization-server-metadata-dto.js +1 -1
  63. package/dist/esm/models/award-method-public.d.ts +1 -1
  64. package/dist/esm/models/award-method-public.js +1 -1
  65. package/dist/esm/models/award-registered-v2-response-dto.d.ts +1 -1
  66. package/dist/esm/models/award-registered-v2-response-dto.js +1 -1
  67. package/dist/esm/models/award-reverted-v2-response-dto.d.ts +1 -1
  68. package/dist/esm/models/award-reverted-v2-response-dto.js +1 -1
  69. package/dist/esm/models/bid-acceptance-dto.d.ts +1 -1
  70. package/dist/esm/models/bid-acceptance-dto.js +1 -1
  71. package/dist/esm/models/bid-attachment-input-dto.d.ts +1 -1
  72. package/dist/esm/models/bid-attachment-input-dto.js +1 -1
  73. package/dist/esm/models/bid-bond-dto.d.ts +1 -1
  74. package/dist/esm/models/bid-bond-dto.js +1 -1
  75. package/dist/esm/models/bid-cancelled-response-dto.d.ts +1 -1
  76. package/dist/esm/models/bid-cancelled-response-dto.js +1 -1
  77. package/dist/esm/models/bid-contact-dto.d.ts +1 -1
  78. package/dist/esm/models/bid-contact-dto.js +1 -1
  79. package/dist/esm/models/bid-contacts-dto.d.ts +1 -1
  80. package/dist/esm/models/bid-contacts-dto.js +1 -1
  81. package/dist/esm/models/bid-contract-document-dto.d.ts +1 -1
  82. package/dist/esm/models/bid-contract-document-dto.js +1 -1
  83. package/dist/esm/models/bid-delivery-terms-dto.d.ts +1 -1
  84. package/dist/esm/models/bid-delivery-terms-dto.js +1 -1
  85. package/dist/esm/models/bid-detail-response-dto.d.ts +1 -1
  86. package/dist/esm/models/bid-detail-response-dto.js +1 -1
  87. package/dist/esm/models/bid-document-dto.d.ts +1 -1
  88. package/dist/esm/models/bid-document-dto.js +1 -1
  89. package/dist/esm/models/bid-failed-v2-response-dto.d.ts +1 -1
  90. package/dist/esm/models/bid-failed-v2-response-dto.js +1 -1
  91. package/dist/esm/models/bid-item-dto.d.ts +1 -1
  92. package/dist/esm/models/bid-item-dto.js +1 -1
  93. package/dist/esm/models/bid-lifecycle-dto.d.ts +1 -1
  94. package/dist/esm/models/bid-lifecycle-dto.js +1 -1
  95. package/dist/esm/models/bid-manager-dto.d.ts +1 -1
  96. package/dist/esm/models/bid-manager-dto.js +1 -1
  97. package/dist/esm/models/bid-payment-terms-dto.d.ts +1 -1
  98. package/dist/esm/models/bid-payment-terms-dto.js +1 -1
  99. package/dist/esm/models/bid-product-dto.d.ts +1 -1
  100. package/dist/esm/models/bid-product-dto.js +1 -1
  101. package/dist/esm/models/bid-public-status.d.ts +1 -1
  102. package/dist/esm/models/bid-public-status.js +1 -1
  103. package/dist/esm/models/bid-registered-response-dto.d.ts +1 -1
  104. package/dist/esm/models/bid-registered-response-dto.js +1 -1
  105. package/dist/esm/models/bid-result-participant-attachment-dto.d.ts +1 -1
  106. package/dist/esm/models/bid-result-participant-attachment-dto.js +1 -1
  107. package/dist/esm/models/bid-result-participant-dto.d.ts +1 -1
  108. package/dist/esm/models/bid-result-participant-dto.js +1 -1
  109. package/dist/esm/models/bid-results-response-dto.d.ts +1 -1
  110. package/dist/esm/models/bid-results-response-dto.js +1 -1
  111. package/dist/esm/models/bid-settlement-line-item-dto.d.ts +1 -1
  112. package/dist/esm/models/bid-settlement-line-item-dto.js +1 -1
  113. package/dist/esm/models/bid-settlement-participant-dto.d.ts +1 -1
  114. package/dist/esm/models/bid-settlement-participant-dto.js +1 -1
  115. package/dist/esm/models/bid-settlement-response-dto.d.ts +1 -1
  116. package/dist/esm/models/bid-settlement-response-dto.js +1 -1
  117. package/dist/esm/models/bid-statement-response-dto.d.ts +1 -1
  118. package/dist/esm/models/bid-statement-response-dto.js +1 -1
  119. package/dist/esm/models/bid-summary-dto.d.ts +1 -1
  120. package/dist/esm/models/bid-summary-dto.js +1 -1
  121. package/dist/esm/models/bid-type-public.d.ts +1 -1
  122. package/dist/esm/models/bid-type-public.js +1 -1
  123. package/dist/esm/models/bid-updated-response-dto.d.ts +1 -1
  124. package/dist/esm/models/bid-updated-response-dto.js +1 -1
  125. package/dist/esm/models/cancel-bid-request-dto.d.ts +1 -1
  126. package/dist/esm/models/cancel-bid-request-dto.js +1 -1
  127. package/dist/esm/models/cancel-bid200-response.d.ts +1 -1
  128. package/dist/esm/models/cancel-bid200-response.js +1 -1
  129. package/dist/esm/models/card-payment-request-response-dto.d.ts +1 -1
  130. package/dist/esm/models/card-payment-request-response-dto.js +1 -1
  131. package/dist/esm/models/complete-acceptance-request-dto.d.ts +1 -1
  132. package/dist/esm/models/complete-acceptance-request-dto.js +1 -1
  133. package/dist/esm/models/complete-acceptance200-response.d.ts +1 -1
  134. package/dist/esm/models/complete-acceptance200-response.js +1 -1
  135. package/dist/esm/models/complete-invoice200-response.d.ts +1 -1
  136. package/dist/esm/models/complete-invoice200-response.js +1 -1
  137. package/dist/esm/models/complete-upload-request-dto.d.ts +1 -1
  138. package/dist/esm/models/complete-upload-request-dto.js +1 -1
  139. package/dist/esm/models/contract-restriction-confirm-input-dto.d.ts +1 -1
  140. package/dist/esm/models/contract-restriction-confirm-input-dto.js +1 -1
  141. package/dist/esm/models/create-bid-request-dto.d.ts +1 -1
  142. package/dist/esm/models/create-bid-request-dto.js +1 -1
  143. package/dist/esm/models/create-card-payment-dto.d.ts +1 -1
  144. package/dist/esm/models/create-card-payment-dto.js +1 -1
  145. package/dist/esm/models/create-card-payment-request-dto.d.ts +1 -1
  146. package/dist/esm/models/create-card-payment-request-dto.js +1 -1
  147. package/dist/esm/models/create-card-payment200-response.d.ts +1 -1
  148. package/dist/esm/models/create-card-payment200-response.js +1 -1
  149. package/dist/esm/models/create-embed-launch201-response.d.ts +1 -1
  150. package/dist/esm/models/create-embed-launch201-response.js +1 -1
  151. package/dist/esm/models/create-external-contract-documents-request-dto.d.ts +1 -1
  152. package/dist/esm/models/create-external-contract-documents-request-dto.js +1 -1
  153. package/dist/esm/models/create-external-contract-documents-response-dto.d.ts +1 -1
  154. package/dist/esm/models/create-external-contract-documents-response-dto.js +1 -1
  155. package/dist/esm/models/create-file-upload-url201-response.d.ts +1 -1
  156. package/dist/esm/models/create-file-upload-url201-response.js +1 -1
  157. package/dist/esm/models/create-upload-url-request-dto.d.ts +1 -1
  158. package/dist/esm/models/create-upload-url-request-dto.js +1 -1
  159. package/dist/esm/models/delivery-date-type-public.d.ts +1 -1
  160. package/dist/esm/models/delivery-date-type-public.js +1 -1
  161. package/dist/esm/models/delivery-method-public.d.ts +1 -1
  162. package/dist/esm/models/delivery-method-public.js +1 -1
  163. package/dist/esm/models/embed-launch-request-dto.d.ts +1 -1
  164. package/dist/esm/models/embed-launch-request-dto.js +1 -1
  165. package/dist/esm/models/embed-launch-response-dto.d.ts +1 -1
  166. package/dist/esm/models/embed-launch-response-dto.js +1 -1
  167. package/dist/esm/models/excellent-procurement-public.d.ts +1 -1
  168. package/dist/esm/models/excellent-procurement-public.js +1 -1
  169. package/dist/esm/models/external-contract-document-item-dto.d.ts +1 -1
  170. package/dist/esm/models/external-contract-document-item-dto.js +1 -1
  171. package/dist/esm/models/external-contract-documents-response-dto.d.ts +1 -1
  172. package/dist/esm/models/external-contract-documents-response-dto.js +1 -1
  173. package/dist/esm/models/external-contract-item-dto.d.ts +1 -1
  174. package/dist/esm/models/external-contract-item-dto.js +1 -1
  175. package/dist/esm/models/external-contract-snapshot-dto.d.ts +1 -1
  176. package/dist/esm/models/external-contract-snapshot-dto.js +1 -1
  177. package/dist/esm/models/external-document-inputs-dto.d.ts +1 -1
  178. package/dist/esm/models/external-document-inputs-dto.js +1 -1
  179. package/dist/esm/models/file-meta-response-dto.d.ts +1 -1
  180. package/dist/esm/models/file-meta-response-dto.js +1 -1
  181. package/dist/esm/models/file-uploaded-response-dto.d.ts +1 -1
  182. package/dist/esm/models/file-uploaded-response-dto.js +1 -1
  183. package/dist/esm/models/generated-external-contract-document-dto.d.ts +1 -1
  184. package/dist/esm/models/generated-external-contract-document-dto.js +1 -1
  185. package/dist/esm/models/get-bid-settlement200-response.d.ts +1 -1
  186. package/dist/esm/models/get-bid-settlement200-response.js +1 -1
  187. package/dist/esm/models/get-bid-statement200-response.d.ts +1 -1
  188. package/dist/esm/models/get-bid-statement200-response.js +1 -1
  189. package/dist/esm/models/get-bid200-response.d.ts +1 -1
  190. package/dist/esm/models/get-bid200-response.js +1 -1
  191. package/dist/esm/models/get-file-meta200-response.d.ts +1 -1
  192. package/dist/esm/models/get-file-meta200-response.js +1 -1
  193. package/dist/esm/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
  194. package/dist/esm/models/get-supplier-card-payable-v2200-response.js +1 -1
  195. package/dist/esm/models/green-product-public.d.ts +1 -1
  196. package/dist/esm/models/green-product-public.js +1 -1
  197. package/dist/esm/models/health-controller-check200-response.d.ts +1 -1
  198. package/dist/esm/models/health-controller-check200-response.js +1 -1
  199. package/dist/esm/models/health-response-dto.d.ts +1 -1
  200. package/dist/esm/models/health-response-dto.js +1 -1
  201. package/dist/esm/models/hierarchical-region-dto.d.ts +1 -1
  202. package/dist/esm/models/hierarchical-region-dto.js +1 -1
  203. package/dist/esm/models/introspect-request-dto.d.ts +1 -1
  204. package/dist/esm/models/introspect-request-dto.js +1 -1
  205. package/dist/esm/models/introspection-response-dto.d.ts +1 -1
  206. package/dist/esm/models/introspection-response-dto.js +1 -1
  207. package/dist/esm/models/invalid-param-dto.d.ts +1 -1
  208. package/dist/esm/models/invalid-param-dto.js +1 -1
  209. package/dist/esm/models/invoice-completed-response-dto.d.ts +1 -1
  210. package/dist/esm/models/invoice-completed-response-dto.js +1 -1
  211. package/dist/esm/models/invoice-split-response-dto.d.ts +1 -1
  212. package/dist/esm/models/invoice-split-response-dto.js +1 -1
  213. package/dist/esm/models/legal-mandatory-public.d.ts +1 -1
  214. package/dist/esm/models/legal-mandatory-public.js +1 -1
  215. package/dist/esm/models/list-bid-results200-response.d.ts +1 -1
  216. package/dist/esm/models/list-bid-results200-response.js +1 -1
  217. package/dist/esm/models/list-bids-response-dto.d.ts +1 -1
  218. package/dist/esm/models/list-bids-response-dto.js +1 -1
  219. package/dist/esm/models/list-bids200-response.d.ts +1 -1
  220. package/dist/esm/models/list-bids200-response.js +1 -1
  221. package/dist/esm/models/list-products200-response.d.ts +1 -1
  222. package/dist/esm/models/list-products200-response.js +1 -1
  223. package/dist/esm/models/mark-bid-failed-request-dto.d.ts +1 -1
  224. package/dist/esm/models/mark-bid-failed-request-dto.js +1 -1
  225. package/dist/esm/models/mark-bid-failed201-response.d.ts +1 -1
  226. package/dist/esm/models/mark-bid-failed201-response.js +1 -1
  227. package/dist/esm/models/negotiation-score-dto.d.ts +1 -1
  228. package/dist/esm/models/negotiation-score-dto.js +1 -1
  229. package/dist/esm/models/negotiation-scored-v2-response-dto.d.ts +1 -1
  230. package/dist/esm/models/negotiation-scored-v2-response-dto.js +1 -1
  231. package/dist/esm/models/oauth-error-response-dto.d.ts +1 -1
  232. package/dist/esm/models/oauth-error-response-dto.js +1 -1
  233. package/dist/esm/models/payment-method-public.d.ts +1 -1
  234. package/dist/esm/models/payment-method-public.js +1 -1
  235. package/dist/esm/models/preconditions-dto.d.ts +1 -1
  236. package/dist/esm/models/preconditions-dto.js +1 -1
  237. package/dist/esm/models/problem-details-dto.d.ts +1 -1
  238. package/dist/esm/models/problem-details-dto.js +1 -1
  239. package/dist/esm/models/product-receipt-response-dto.d.ts +1 -1
  240. package/dist/esm/models/product-receipt-response-dto.js +1 -1
  241. package/dist/esm/models/product-response-dto.d.ts +1 -1
  242. package/dist/esm/models/product-response-dto.js +1 -1
  243. package/dist/esm/models/protected-resource-metadata-dto.d.ts +1 -1
  244. package/dist/esm/models/protected-resource-metadata-dto.js +1 -1
  245. package/dist/esm/models/register-award-request-dto.d.ts +1 -1
  246. package/dist/esm/models/register-award-request-dto.js +1 -1
  247. package/dist/esm/models/register-award201-response.d.ts +1 -1
  248. package/dist/esm/models/register-award201-response.js +1 -1
  249. package/dist/esm/models/register-bid201-response.d.ts +1 -1
  250. package/dist/esm/models/register-bid201-response.js +1 -1
  251. package/dist/esm/models/register-semo-contract-request-dto.d.ts +1 -1
  252. package/dist/esm/models/register-semo-contract-request-dto.js +1 -1
  253. package/dist/esm/models/request-invoice-split-request-dto.d.ts +1 -1
  254. package/dist/esm/models/request-invoice-split-request-dto.js +1 -1
  255. package/dist/esm/models/request-invoice-split200-response.d.ts +1 -1
  256. package/dist/esm/models/request-invoice-split200-response.js +1 -1
  257. package/dist/esm/models/retiree-roster-input-dto.d.ts +1 -1
  258. package/dist/esm/models/retiree-roster-input-dto.js +1 -1
  259. package/dist/esm/models/retiree-roster-row-dto.d.ts +1 -1
  260. package/dist/esm/models/retiree-roster-row-dto.js +1 -1
  261. package/dist/esm/models/revert-award-request-dto.d.ts +1 -1
  262. package/dist/esm/models/revert-award-request-dto.js +1 -1
  263. package/dist/esm/models/revert-award200-response.d.ts +1 -1
  264. package/dist/esm/models/revert-award200-response.js +1 -1
  265. package/dist/esm/models/revoke-request-dto.d.ts +1 -1
  266. package/dist/esm/models/revoke-request-dto.js +1 -1
  267. package/dist/esm/models/semo-contract-registered-response-dto.d.ts +1 -1
  268. package/dist/esm/models/semo-contract-registered-response-dto.js +1 -1
  269. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
  270. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
  271. package/dist/esm/models/statement-document-dto.d.ts +1 -1
  272. package/dist/esm/models/statement-document-dto.js +1 -1
  273. package/dist/esm/models/statement-product-dto.d.ts +1 -1
  274. package/dist/esm/models/statement-product-dto.js +1 -1
  275. package/dist/esm/models/submit-negotiation-scores-request-dto.d.ts +1 -1
  276. package/dist/esm/models/submit-negotiation-scores-request-dto.js +1 -1
  277. package/dist/esm/models/submit-negotiation-scores201-response.d.ts +1 -1
  278. package/dist/esm/models/submit-negotiation-scores201-response.js +1 -1
  279. package/dist/esm/models/supplier-card-payable-response-dto.d.ts +1 -1
  280. package/dist/esm/models/supplier-card-payable-response-dto.js +1 -1
  281. package/dist/esm/models/supplier-tax-type.d.ts +1 -1
  282. package/dist/esm/models/supplier-tax-type.js +1 -1
  283. package/dist/esm/models/token-request-dto.d.ts +1 -1
  284. package/dist/esm/models/token-request-dto.js +1 -1
  285. package/dist/esm/models/token-response-dto.d.ts +1 -1
  286. package/dist/esm/models/token-response-dto.js +1 -1
  287. package/dist/esm/models/update-bid-request-dto.d.ts +1 -1
  288. package/dist/esm/models/update-bid-request-dto.js +1 -1
  289. package/dist/esm/models/update-bid200-response.d.ts +1 -1
  290. package/dist/esm/models/update-bid200-response.js +1 -1
  291. package/dist/esm/models/upload-file-request-dto.d.ts +1 -1
  292. package/dist/esm/models/upload-file-request-dto.js +1 -1
  293. package/dist/esm/models/upload-file201-response.d.ts +1 -1
  294. package/dist/esm/models/upload-file201-response.js +1 -1
  295. package/dist/esm/models/upload-url-created-response-dto.d.ts +1 -1
  296. package/dist/esm/models/upload-url-created-response-dto.js +1 -1
  297. package/dist/index.d.ts +1 -1
  298. package/dist/index.js +1 -1
  299. package/dist/models/acceptance-result-response-dto.d.ts +1 -1
  300. package/dist/models/acceptance-result-response-dto.js +1 -1
  301. package/dist/models/acknowledge-product-receipt200-response.d.ts +1 -1
  302. package/dist/models/acknowledge-product-receipt200-response.js +1 -1
  303. package/dist/models/acknowledge-products-request-dto.d.ts +1 -1
  304. package/dist/models/acknowledge-products-request-dto.js +1 -1
  305. package/dist/models/api-catalog-dto.d.ts +1 -1
  306. package/dist/models/api-catalog-dto.js +1 -1
  307. package/dist/models/api-catalog-entry-dto.d.ts +1 -1
  308. package/dist/models/api-catalog-entry-dto.js +1 -1
  309. package/dist/models/api-catalog-link-dto.d.ts +1 -1
  310. package/dist/models/api-catalog-link-dto.js +1 -1
  311. package/dist/models/authorization-server-metadata-dto.d.ts +1 -1
  312. package/dist/models/authorization-server-metadata-dto.js +1 -1
  313. package/dist/models/award-method-public.d.ts +1 -1
  314. package/dist/models/award-method-public.js +1 -1
  315. package/dist/models/award-registered-v2-response-dto.d.ts +1 -1
  316. package/dist/models/award-registered-v2-response-dto.js +1 -1
  317. package/dist/models/award-reverted-v2-response-dto.d.ts +1 -1
  318. package/dist/models/award-reverted-v2-response-dto.js +1 -1
  319. package/dist/models/bid-acceptance-dto.d.ts +1 -1
  320. package/dist/models/bid-acceptance-dto.js +1 -1
  321. package/dist/models/bid-attachment-input-dto.d.ts +1 -1
  322. package/dist/models/bid-attachment-input-dto.js +1 -1
  323. package/dist/models/bid-bond-dto.d.ts +1 -1
  324. package/dist/models/bid-bond-dto.js +1 -1
  325. package/dist/models/bid-cancelled-response-dto.d.ts +1 -1
  326. package/dist/models/bid-cancelled-response-dto.js +1 -1
  327. package/dist/models/bid-contact-dto.d.ts +1 -1
  328. package/dist/models/bid-contact-dto.js +1 -1
  329. package/dist/models/bid-contacts-dto.d.ts +1 -1
  330. package/dist/models/bid-contacts-dto.js +1 -1
  331. package/dist/models/bid-contract-document-dto.d.ts +1 -1
  332. package/dist/models/bid-contract-document-dto.js +1 -1
  333. package/dist/models/bid-delivery-terms-dto.d.ts +1 -1
  334. package/dist/models/bid-delivery-terms-dto.js +1 -1
  335. package/dist/models/bid-detail-response-dto.d.ts +1 -1
  336. package/dist/models/bid-detail-response-dto.js +1 -1
  337. package/dist/models/bid-document-dto.d.ts +1 -1
  338. package/dist/models/bid-document-dto.js +1 -1
  339. package/dist/models/bid-failed-v2-response-dto.d.ts +1 -1
  340. package/dist/models/bid-failed-v2-response-dto.js +1 -1
  341. package/dist/models/bid-item-dto.d.ts +1 -1
  342. package/dist/models/bid-item-dto.js +1 -1
  343. package/dist/models/bid-lifecycle-dto.d.ts +1 -1
  344. package/dist/models/bid-lifecycle-dto.js +1 -1
  345. package/dist/models/bid-manager-dto.d.ts +1 -1
  346. package/dist/models/bid-manager-dto.js +1 -1
  347. package/dist/models/bid-payment-terms-dto.d.ts +1 -1
  348. package/dist/models/bid-payment-terms-dto.js +1 -1
  349. package/dist/models/bid-product-dto.d.ts +1 -1
  350. package/dist/models/bid-product-dto.js +1 -1
  351. package/dist/models/bid-public-status.d.ts +1 -1
  352. package/dist/models/bid-public-status.js +1 -1
  353. package/dist/models/bid-registered-response-dto.d.ts +1 -1
  354. package/dist/models/bid-registered-response-dto.js +1 -1
  355. package/dist/models/bid-result-participant-attachment-dto.d.ts +1 -1
  356. package/dist/models/bid-result-participant-attachment-dto.js +1 -1
  357. package/dist/models/bid-result-participant-dto.d.ts +1 -1
  358. package/dist/models/bid-result-participant-dto.js +1 -1
  359. package/dist/models/bid-results-response-dto.d.ts +1 -1
  360. package/dist/models/bid-results-response-dto.js +1 -1
  361. package/dist/models/bid-settlement-line-item-dto.d.ts +1 -1
  362. package/dist/models/bid-settlement-line-item-dto.js +1 -1
  363. package/dist/models/bid-settlement-participant-dto.d.ts +1 -1
  364. package/dist/models/bid-settlement-participant-dto.js +1 -1
  365. package/dist/models/bid-settlement-response-dto.d.ts +1 -1
  366. package/dist/models/bid-settlement-response-dto.js +1 -1
  367. package/dist/models/bid-statement-response-dto.d.ts +1 -1
  368. package/dist/models/bid-statement-response-dto.js +1 -1
  369. package/dist/models/bid-summary-dto.d.ts +1 -1
  370. package/dist/models/bid-summary-dto.js +1 -1
  371. package/dist/models/bid-type-public.d.ts +1 -1
  372. package/dist/models/bid-type-public.js +1 -1
  373. package/dist/models/bid-updated-response-dto.d.ts +1 -1
  374. package/dist/models/bid-updated-response-dto.js +1 -1
  375. package/dist/models/cancel-bid-request-dto.d.ts +1 -1
  376. package/dist/models/cancel-bid-request-dto.js +1 -1
  377. package/dist/models/cancel-bid200-response.d.ts +1 -1
  378. package/dist/models/cancel-bid200-response.js +1 -1
  379. package/dist/models/card-payment-request-response-dto.d.ts +1 -1
  380. package/dist/models/card-payment-request-response-dto.js +1 -1
  381. package/dist/models/complete-acceptance-request-dto.d.ts +1 -1
  382. package/dist/models/complete-acceptance-request-dto.js +1 -1
  383. package/dist/models/complete-acceptance200-response.d.ts +1 -1
  384. package/dist/models/complete-acceptance200-response.js +1 -1
  385. package/dist/models/complete-invoice200-response.d.ts +1 -1
  386. package/dist/models/complete-invoice200-response.js +1 -1
  387. package/dist/models/complete-upload-request-dto.d.ts +1 -1
  388. package/dist/models/complete-upload-request-dto.js +1 -1
  389. package/dist/models/contract-restriction-confirm-input-dto.d.ts +1 -1
  390. package/dist/models/contract-restriction-confirm-input-dto.js +1 -1
  391. package/dist/models/create-bid-request-dto.d.ts +1 -1
  392. package/dist/models/create-bid-request-dto.js +1 -1
  393. package/dist/models/create-card-payment-dto.d.ts +1 -1
  394. package/dist/models/create-card-payment-dto.js +1 -1
  395. package/dist/models/create-card-payment-request-dto.d.ts +1 -1
  396. package/dist/models/create-card-payment-request-dto.js +1 -1
  397. package/dist/models/create-card-payment200-response.d.ts +1 -1
  398. package/dist/models/create-card-payment200-response.js +1 -1
  399. package/dist/models/create-embed-launch201-response.d.ts +1 -1
  400. package/dist/models/create-embed-launch201-response.js +1 -1
  401. package/dist/models/create-external-contract-documents-request-dto.d.ts +1 -1
  402. package/dist/models/create-external-contract-documents-request-dto.js +1 -1
  403. package/dist/models/create-external-contract-documents-response-dto.d.ts +1 -1
  404. package/dist/models/create-external-contract-documents-response-dto.js +1 -1
  405. package/dist/models/create-file-upload-url201-response.d.ts +1 -1
  406. package/dist/models/create-file-upload-url201-response.js +1 -1
  407. package/dist/models/create-upload-url-request-dto.d.ts +1 -1
  408. package/dist/models/create-upload-url-request-dto.js +1 -1
  409. package/dist/models/delivery-date-type-public.d.ts +1 -1
  410. package/dist/models/delivery-date-type-public.js +1 -1
  411. package/dist/models/delivery-method-public.d.ts +1 -1
  412. package/dist/models/delivery-method-public.js +1 -1
  413. package/dist/models/embed-launch-request-dto.d.ts +1 -1
  414. package/dist/models/embed-launch-request-dto.js +1 -1
  415. package/dist/models/embed-launch-response-dto.d.ts +1 -1
  416. package/dist/models/embed-launch-response-dto.js +1 -1
  417. package/dist/models/excellent-procurement-public.d.ts +1 -1
  418. package/dist/models/excellent-procurement-public.js +1 -1
  419. package/dist/models/external-contract-document-item-dto.d.ts +1 -1
  420. package/dist/models/external-contract-document-item-dto.js +1 -1
  421. package/dist/models/external-contract-documents-response-dto.d.ts +1 -1
  422. package/dist/models/external-contract-documents-response-dto.js +1 -1
  423. package/dist/models/external-contract-item-dto.d.ts +1 -1
  424. package/dist/models/external-contract-item-dto.js +1 -1
  425. package/dist/models/external-contract-snapshot-dto.d.ts +1 -1
  426. package/dist/models/external-contract-snapshot-dto.js +1 -1
  427. package/dist/models/external-document-inputs-dto.d.ts +1 -1
  428. package/dist/models/external-document-inputs-dto.js +1 -1
  429. package/dist/models/file-meta-response-dto.d.ts +1 -1
  430. package/dist/models/file-meta-response-dto.js +1 -1
  431. package/dist/models/file-uploaded-response-dto.d.ts +1 -1
  432. package/dist/models/file-uploaded-response-dto.js +1 -1
  433. package/dist/models/generated-external-contract-document-dto.d.ts +1 -1
  434. package/dist/models/generated-external-contract-document-dto.js +1 -1
  435. package/dist/models/get-bid-settlement200-response.d.ts +1 -1
  436. package/dist/models/get-bid-settlement200-response.js +1 -1
  437. package/dist/models/get-bid-statement200-response.d.ts +1 -1
  438. package/dist/models/get-bid-statement200-response.js +1 -1
  439. package/dist/models/get-bid200-response.d.ts +1 -1
  440. package/dist/models/get-bid200-response.js +1 -1
  441. package/dist/models/get-file-meta200-response.d.ts +1 -1
  442. package/dist/models/get-file-meta200-response.js +1 -1
  443. package/dist/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
  444. package/dist/models/get-supplier-card-payable-v2200-response.js +1 -1
  445. package/dist/models/green-product-public.d.ts +1 -1
  446. package/dist/models/green-product-public.js +1 -1
  447. package/dist/models/health-controller-check200-response.d.ts +1 -1
  448. package/dist/models/health-controller-check200-response.js +1 -1
  449. package/dist/models/health-response-dto.d.ts +1 -1
  450. package/dist/models/health-response-dto.js +1 -1
  451. package/dist/models/hierarchical-region-dto.d.ts +1 -1
  452. package/dist/models/hierarchical-region-dto.js +1 -1
  453. package/dist/models/introspect-request-dto.d.ts +1 -1
  454. package/dist/models/introspect-request-dto.js +1 -1
  455. package/dist/models/introspection-response-dto.d.ts +1 -1
  456. package/dist/models/introspection-response-dto.js +1 -1
  457. package/dist/models/invalid-param-dto.d.ts +1 -1
  458. package/dist/models/invalid-param-dto.js +1 -1
  459. package/dist/models/invoice-completed-response-dto.d.ts +1 -1
  460. package/dist/models/invoice-completed-response-dto.js +1 -1
  461. package/dist/models/invoice-split-response-dto.d.ts +1 -1
  462. package/dist/models/invoice-split-response-dto.js +1 -1
  463. package/dist/models/legal-mandatory-public.d.ts +1 -1
  464. package/dist/models/legal-mandatory-public.js +1 -1
  465. package/dist/models/list-bid-results200-response.d.ts +1 -1
  466. package/dist/models/list-bid-results200-response.js +1 -1
  467. package/dist/models/list-bids-response-dto.d.ts +1 -1
  468. package/dist/models/list-bids-response-dto.js +1 -1
  469. package/dist/models/list-bids200-response.d.ts +1 -1
  470. package/dist/models/list-bids200-response.js +1 -1
  471. package/dist/models/list-products200-response.d.ts +1 -1
  472. package/dist/models/list-products200-response.js +1 -1
  473. package/dist/models/mark-bid-failed-request-dto.d.ts +1 -1
  474. package/dist/models/mark-bid-failed-request-dto.js +1 -1
  475. package/dist/models/mark-bid-failed201-response.d.ts +1 -1
  476. package/dist/models/mark-bid-failed201-response.js +1 -1
  477. package/dist/models/negotiation-score-dto.d.ts +1 -1
  478. package/dist/models/negotiation-score-dto.js +1 -1
  479. package/dist/models/negotiation-scored-v2-response-dto.d.ts +1 -1
  480. package/dist/models/negotiation-scored-v2-response-dto.js +1 -1
  481. package/dist/models/oauth-error-response-dto.d.ts +1 -1
  482. package/dist/models/oauth-error-response-dto.js +1 -1
  483. package/dist/models/payment-method-public.d.ts +1 -1
  484. package/dist/models/payment-method-public.js +1 -1
  485. package/dist/models/preconditions-dto.d.ts +1 -1
  486. package/dist/models/preconditions-dto.js +1 -1
  487. package/dist/models/problem-details-dto.d.ts +1 -1
  488. package/dist/models/problem-details-dto.js +1 -1
  489. package/dist/models/product-receipt-response-dto.d.ts +1 -1
  490. package/dist/models/product-receipt-response-dto.js +1 -1
  491. package/dist/models/product-response-dto.d.ts +1 -1
  492. package/dist/models/product-response-dto.js +1 -1
  493. package/dist/models/protected-resource-metadata-dto.d.ts +1 -1
  494. package/dist/models/protected-resource-metadata-dto.js +1 -1
  495. package/dist/models/register-award-request-dto.d.ts +1 -1
  496. package/dist/models/register-award-request-dto.js +1 -1
  497. package/dist/models/register-award201-response.d.ts +1 -1
  498. package/dist/models/register-award201-response.js +1 -1
  499. package/dist/models/register-bid201-response.d.ts +1 -1
  500. package/dist/models/register-bid201-response.js +1 -1
  501. package/dist/models/register-semo-contract-request-dto.d.ts +1 -1
  502. package/dist/models/register-semo-contract-request-dto.js +1 -1
  503. package/dist/models/request-invoice-split-request-dto.d.ts +1 -1
  504. package/dist/models/request-invoice-split-request-dto.js +1 -1
  505. package/dist/models/request-invoice-split200-response.d.ts +1 -1
  506. package/dist/models/request-invoice-split200-response.js +1 -1
  507. package/dist/models/retiree-roster-input-dto.d.ts +1 -1
  508. package/dist/models/retiree-roster-input-dto.js +1 -1
  509. package/dist/models/retiree-roster-row-dto.d.ts +1 -1
  510. package/dist/models/retiree-roster-row-dto.js +1 -1
  511. package/dist/models/revert-award-request-dto.d.ts +1 -1
  512. package/dist/models/revert-award-request-dto.js +1 -1
  513. package/dist/models/revert-award200-response.d.ts +1 -1
  514. package/dist/models/revert-award200-response.js +1 -1
  515. package/dist/models/revoke-request-dto.d.ts +1 -1
  516. package/dist/models/revoke-request-dto.js +1 -1
  517. package/dist/models/semo-contract-registered-response-dto.d.ts +1 -1
  518. package/dist/models/semo-contract-registered-response-dto.js +1 -1
  519. package/dist/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
  520. package/dist/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
  521. package/dist/models/statement-document-dto.d.ts +1 -1
  522. package/dist/models/statement-document-dto.js +1 -1
  523. package/dist/models/statement-product-dto.d.ts +1 -1
  524. package/dist/models/statement-product-dto.js +1 -1
  525. package/dist/models/submit-negotiation-scores-request-dto.d.ts +1 -1
  526. package/dist/models/submit-negotiation-scores-request-dto.js +1 -1
  527. package/dist/models/submit-negotiation-scores201-response.d.ts +1 -1
  528. package/dist/models/submit-negotiation-scores201-response.js +1 -1
  529. package/dist/models/supplier-card-payable-response-dto.d.ts +1 -1
  530. package/dist/models/supplier-card-payable-response-dto.js +1 -1
  531. package/dist/models/supplier-tax-type.d.ts +1 -1
  532. package/dist/models/supplier-tax-type.js +1 -1
  533. package/dist/models/token-request-dto.d.ts +1 -1
  534. package/dist/models/token-request-dto.js +1 -1
  535. package/dist/models/token-response-dto.d.ts +1 -1
  536. package/dist/models/token-response-dto.js +1 -1
  537. package/dist/models/update-bid-request-dto.d.ts +1 -1
  538. package/dist/models/update-bid-request-dto.js +1 -1
  539. package/dist/models/update-bid200-response.d.ts +1 -1
  540. package/dist/models/update-bid200-response.js +1 -1
  541. package/dist/models/upload-file-request-dto.d.ts +1 -1
  542. package/dist/models/upload-file-request-dto.js +1 -1
  543. package/dist/models/upload-file201-response.d.ts +1 -1
  544. package/dist/models/upload-file201-response.js +1 -1
  545. package/dist/models/upload-url-created-response-dto.d.ts +1 -1
  546. package/dist/models/upload-url-created-response-dto.js +1 -1
  547. package/docs/EmbedApi.md +3 -3
  548. package/docs/PartnerApiApi.md +63 -55
  549. package/docs/ProductsApi.md +5 -4
  550. package/index.ts +1 -1
  551. package/models/acceptance-result-response-dto.ts +1 -1
  552. package/models/acknowledge-product-receipt200-response.ts +1 -1
  553. package/models/acknowledge-products-request-dto.ts +1 -1
  554. package/models/api-catalog-dto.ts +1 -1
  555. package/models/api-catalog-entry-dto.ts +1 -1
  556. package/models/api-catalog-link-dto.ts +1 -1
  557. package/models/authorization-server-metadata-dto.ts +1 -1
  558. package/models/award-method-public.ts +1 -1
  559. package/models/award-registered-v2-response-dto.ts +1 -1
  560. package/models/award-reverted-v2-response-dto.ts +1 -1
  561. package/models/bid-acceptance-dto.ts +1 -1
  562. package/models/bid-attachment-input-dto.ts +1 -1
  563. package/models/bid-bond-dto.ts +1 -1
  564. package/models/bid-cancelled-response-dto.ts +1 -1
  565. package/models/bid-contact-dto.ts +1 -1
  566. package/models/bid-contacts-dto.ts +1 -1
  567. package/models/bid-contract-document-dto.ts +1 -1
  568. package/models/bid-delivery-terms-dto.ts +1 -1
  569. package/models/bid-detail-response-dto.ts +1 -1
  570. package/models/bid-document-dto.ts +1 -1
  571. package/models/bid-failed-v2-response-dto.ts +1 -1
  572. package/models/bid-item-dto.ts +1 -1
  573. package/models/bid-lifecycle-dto.ts +1 -1
  574. package/models/bid-manager-dto.ts +1 -1
  575. package/models/bid-payment-terms-dto.ts +1 -1
  576. package/models/bid-product-dto.ts +1 -1
  577. package/models/bid-public-status.ts +1 -1
  578. package/models/bid-registered-response-dto.ts +1 -1
  579. package/models/bid-result-participant-attachment-dto.ts +1 -1
  580. package/models/bid-result-participant-dto.ts +1 -1
  581. package/models/bid-results-response-dto.ts +1 -1
  582. package/models/bid-settlement-line-item-dto.ts +1 -1
  583. package/models/bid-settlement-participant-dto.ts +1 -1
  584. package/models/bid-settlement-response-dto.ts +1 -1
  585. package/models/bid-statement-response-dto.ts +1 -1
  586. package/models/bid-summary-dto.ts +1 -1
  587. package/models/bid-type-public.ts +1 -1
  588. package/models/bid-updated-response-dto.ts +1 -1
  589. package/models/cancel-bid-request-dto.ts +1 -1
  590. package/models/cancel-bid200-response.ts +1 -1
  591. package/models/card-payment-request-response-dto.ts +1 -1
  592. package/models/complete-acceptance-request-dto.ts +1 -1
  593. package/models/complete-acceptance200-response.ts +1 -1
  594. package/models/complete-invoice200-response.ts +1 -1
  595. package/models/complete-upload-request-dto.ts +1 -1
  596. package/models/contract-restriction-confirm-input-dto.ts +1 -1
  597. package/models/create-bid-request-dto.ts +1 -1
  598. package/models/create-card-payment-dto.ts +1 -1
  599. package/models/create-card-payment-request-dto.ts +1 -1
  600. package/models/create-card-payment200-response.ts +1 -1
  601. package/models/create-embed-launch201-response.ts +1 -1
  602. package/models/create-external-contract-documents-request-dto.ts +1 -1
  603. package/models/create-external-contract-documents-response-dto.ts +1 -1
  604. package/models/create-file-upload-url201-response.ts +1 -1
  605. package/models/create-upload-url-request-dto.ts +1 -1
  606. package/models/delivery-date-type-public.ts +1 -1
  607. package/models/delivery-method-public.ts +1 -1
  608. package/models/embed-launch-request-dto.ts +1 -1
  609. package/models/embed-launch-response-dto.ts +1 -1
  610. package/models/excellent-procurement-public.ts +1 -1
  611. package/models/external-contract-document-item-dto.ts +1 -1
  612. package/models/external-contract-documents-response-dto.ts +1 -1
  613. package/models/external-contract-item-dto.ts +1 -1
  614. package/models/external-contract-snapshot-dto.ts +1 -1
  615. package/models/external-document-inputs-dto.ts +1 -1
  616. package/models/file-meta-response-dto.ts +1 -1
  617. package/models/file-uploaded-response-dto.ts +1 -1
  618. package/models/generated-external-contract-document-dto.ts +1 -1
  619. package/models/get-bid-settlement200-response.ts +1 -1
  620. package/models/get-bid-statement200-response.ts +1 -1
  621. package/models/get-bid200-response.ts +1 -1
  622. package/models/get-file-meta200-response.ts +1 -1
  623. package/models/get-supplier-card-payable-v2200-response.ts +1 -1
  624. package/models/green-product-public.ts +1 -1
  625. package/models/health-controller-check200-response.ts +1 -1
  626. package/models/health-response-dto.ts +1 -1
  627. package/models/hierarchical-region-dto.ts +1 -1
  628. package/models/introspect-request-dto.ts +1 -1
  629. package/models/introspection-response-dto.ts +1 -1
  630. package/models/invalid-param-dto.ts +1 -1
  631. package/models/invoice-completed-response-dto.ts +1 -1
  632. package/models/invoice-split-response-dto.ts +1 -1
  633. package/models/legal-mandatory-public.ts +1 -1
  634. package/models/list-bid-results200-response.ts +1 -1
  635. package/models/list-bids-response-dto.ts +1 -1
  636. package/models/list-bids200-response.ts +1 -1
  637. package/models/list-products200-response.ts +1 -1
  638. package/models/mark-bid-failed-request-dto.ts +1 -1
  639. package/models/mark-bid-failed201-response.ts +1 -1
  640. package/models/negotiation-score-dto.ts +1 -1
  641. package/models/negotiation-scored-v2-response-dto.ts +1 -1
  642. package/models/oauth-error-response-dto.ts +1 -1
  643. package/models/payment-method-public.ts +1 -1
  644. package/models/preconditions-dto.ts +1 -1
  645. package/models/problem-details-dto.ts +1 -1
  646. package/models/product-receipt-response-dto.ts +1 -1
  647. package/models/product-response-dto.ts +1 -1
  648. package/models/protected-resource-metadata-dto.ts +1 -1
  649. package/models/register-award-request-dto.ts +1 -1
  650. package/models/register-award201-response.ts +1 -1
  651. package/models/register-bid201-response.ts +1 -1
  652. package/models/register-semo-contract-request-dto.ts +1 -1
  653. package/models/request-invoice-split-request-dto.ts +1 -1
  654. package/models/request-invoice-split200-response.ts +1 -1
  655. package/models/retiree-roster-input-dto.ts +1 -1
  656. package/models/retiree-roster-row-dto.ts +1 -1
  657. package/models/revert-award-request-dto.ts +1 -1
  658. package/models/revert-award200-response.ts +1 -1
  659. package/models/revoke-request-dto.ts +1 -1
  660. package/models/semo-contract-registered-response-dto.ts +1 -1
  661. package/models/semo-contract-taxinvoice-status-response-dto.ts +1 -1
  662. package/models/statement-document-dto.ts +1 -1
  663. package/models/statement-product-dto.ts +1 -1
  664. package/models/submit-negotiation-scores-request-dto.ts +1 -1
  665. package/models/submit-negotiation-scores201-response.ts +1 -1
  666. package/models/supplier-card-payable-response-dto.ts +1 -1
  667. package/models/supplier-tax-type.ts +1 -1
  668. package/models/token-request-dto.ts +1 -1
  669. package/models/token-response-dto.ts +1 -1
  670. package/models/update-bid-request-dto.ts +1 -1
  671. package/models/update-bid200-response.ts +1 -1
  672. package/models/upload-file-request-dto.ts +1 -1
  673. package/models/upload-file201-response.ts +1 -1
  674. package/models/upload-url-created-response-dto.ts +1 -1
  675. 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\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `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: 37.2.0
7
+ * The version of the OpenAPI document: 37.3.1
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).
@@ -121,7 +121,7 @@ export const PartnerApiApiAxiosParamCreator = function (configuration) {
121
121
  }),
122
122
  /**
123
123
  * `uploadUrl` 로의 `PUT` 이 끝난 뒤 호출합니다. 올라온 파일을 실측해 등록하고, 그 시점부터 `fileKey` 를 공고 첨부로 쓸 수 있습니다. **확정 전 `fileKey` 는 첨부로 쓸 수 없습니다** — 공고 등록이 400 으로 거절됩니다. **신고한 크기가 아니라 실제 파일을 봅니다.** 발급 요청의 `fileSize` 와 다르면 실제 크기가 기록되고, 정책 상한을 넘으면 여기서 거절됩니다. **같은 `fileKey` 로 여러 번 호출해도 안전합니다**(멱등). **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
124
- * @summary 첨부파일 업로드 확정
124
+ * @summary 대용량 업로드 2/2 — 업로드 확정
125
125
  * @param {string} fileKey 발급 응답의 fileKey(영문 대소문자·숫자 32자).
126
126
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
127
127
  * @param {CompleteUploadRequestDto} completeUploadRequestDto
@@ -283,8 +283,8 @@ export const PartnerApiApiAxiosParamCreator = function (configuration) {
283
283
  };
284
284
  }),
285
285
  /**
286
- * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 을 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` 와 `uploadUrl` 을 받습니다. 2. `uploadUrl` 에 파일 본문을 `PUT` 합니다 — 응답의 `contentType` 을 `Content-Type` 헤더에 그대로 실으세요. 이 요청은 c-market 을 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 로 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 이 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 이 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 작은 첨부는 `POST /v2/files` 한 번이 간단합니다. 다만 경로는 본문이 c-market 통과하므로 base64 팽창(4/3)까지 얹혀 원본 23MB 부근이 천장입니다.경로는 바이트가 지나가지 않아 **100MB** 까지 올라갑니다. **`uploadUrl` 은 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 초 뒤 만료됩니다 — 저장해 두고 재사용하지 마시고, 만료됐다면 이 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
287
- * @summary 첨부파일 업로드 주소 발급 (대용량·권장)
286
+ * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 을 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` 와 `uploadUrl` 을 받습니다. 2. `uploadUrl` 에 파일 본문을 `PUT` 합니다 — 응답의 `contentType` 을 `Content-Type` 헤더에 그대로 실으세요. 이 요청은 c-market 을 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 로 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 이 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 이 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 기본은 `POST /v2/files` 한 번입니다 `base64` 23MB, `url` 30MB 까지 번으로 끝납니다. 위(**100MB** 까지)만2단계 경로를 쓰세요. 바이트가 c-market 을 지나지 않아 서버 경유 천장을 받지 않습니다. **`uploadUrl` 은 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 초 뒤 만료됩니다 — 저장해 두고 재사용하지 마시고, 만료됐다면 이 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
287
+ * @summary 대용량 업로드 1/2 — 업로드 주소 발급
288
288
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
289
289
  * @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
290
290
  * @param {*} [options] Override http request option.
@@ -1055,8 +1055,8 @@ export const PartnerApiApiAxiosParamCreator = function (configuration) {
1055
1055
  };
1056
1056
  }),
1057
1057
  /**
1058
- * 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **크기 상한이 다른 경로가 하나 있습니다.**경로는 본문이 c-market 을 통과하므로 base64 팽창(4/3)까지 얹혀 **원본 23MB 부근**이 천장입니다(`url` 제출하면 c-market 이 대신 내려받으므로 제약은 없습니다). 파일은 `POST /v2/files/upload-url` 로 서명 URL받아 스토리지에 직접 올리세요 **100MB** 까지 됩니다. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` 의 `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 를 그대로 넣으면 이 호출 없이 한 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1059
- * @summary 공고 첨부파일 업로드 (한 번에)
1058
+ * **첨부 업로드의 기본 경로입니다. 23MB 이하면 이 호출 하나로 끝납니다.** 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **23MB 를 넘으면 경로를 바꿔야 합니다.** 상한이 셋으로 갈립니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 호출 + `base64` | **23MB** (본문이 c-market 을 통과하며 base64 팽창 4/3 이 얹힘) | 1 | | 이 호출 + `url` | **30MB** (c-market 이 대신 내려받아 팽창은 없지만 서버 경유 천장은 그대로) | 1 | | `POST /v2/files/upload-url` 로 시작하는 2단계 | **100MB** (바이트가 c-market 지나지 않음) | 2 + 스토리지 PUT | c-market 이 내려받을 수 있는 https 주소에 파일을 올려 둘 수 있다면 `url` 이 30MB 까지를 1콜로 덮습니다. 그 이상이거나 주소를 열 수 없으면 2단계 경로를 쓰세요. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` 의 `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 를 그대로 넣으면 이 호출 없이 한 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1059
+ * @summary 공고 첨부파일 업로드 (기본)
1060
1060
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1061
1061
  * @param {UploadFileRequestDto} uploadFileRequestDto
1062
1062
  * @param {*} [options] Override http request option.
@@ -1140,7 +1140,7 @@ export const PartnerApiApiFp = function (configuration) {
1140
1140
  },
1141
1141
  /**
1142
1142
  * `uploadUrl` 로의 `PUT` 이 끝난 뒤 호출합니다. 올라온 파일을 실측해 등록하고, 그 시점부터 `fileKey` 를 공고 첨부로 쓸 수 있습니다. **확정 전 `fileKey` 는 첨부로 쓸 수 없습니다** — 공고 등록이 400 으로 거절됩니다. **신고한 크기가 아니라 실제 파일을 봅니다.** 발급 요청의 `fileSize` 와 다르면 실제 크기가 기록되고, 정책 상한을 넘으면 여기서 거절됩니다. **같은 `fileKey` 로 여러 번 호출해도 안전합니다**(멱등). **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1143
- * @summary 첨부파일 업로드 확정
1143
+ * @summary 대용량 업로드 2/2 — 업로드 확정
1144
1144
  * @param {string} fileKey 발급 응답의 fileKey(영문 대소문자·숫자 32자).
1145
1145
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1146
1146
  * @param {CompleteUploadRequestDto} completeUploadRequestDto
@@ -1208,8 +1208,8 @@ export const PartnerApiApiFp = function (configuration) {
1208
1208
  });
1209
1209
  },
1210
1210
  /**
1211
- * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 을 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` 와 `uploadUrl` 을 받습니다. 2. `uploadUrl` 에 파일 본문을 `PUT` 합니다 — 응답의 `contentType` 을 `Content-Type` 헤더에 그대로 실으세요. 이 요청은 c-market 을 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 로 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 이 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 이 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 작은 첨부는 `POST /v2/files` 한 번이 간단합니다. 다만 경로는 본문이 c-market 통과하므로 base64 팽창(4/3)까지 얹혀 원본 23MB 부근이 천장입니다.경로는 바이트가 지나가지 않아 **100MB** 까지 올라갑니다. **`uploadUrl` 은 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 초 뒤 만료됩니다 — 저장해 두고 재사용하지 마시고, 만료됐다면 이 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1212
- * @summary 첨부파일 업로드 주소 발급 (대용량·권장)
1211
+ * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 을 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` 와 `uploadUrl` 을 받습니다. 2. `uploadUrl` 에 파일 본문을 `PUT` 합니다 — 응답의 `contentType` 을 `Content-Type` 헤더에 그대로 실으세요. 이 요청은 c-market 을 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 로 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 이 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 이 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 기본은 `POST /v2/files` 한 번입니다 `base64` 23MB, `url` 30MB 까지 번으로 끝납니다. 위(**100MB** 까지)만2단계 경로를 쓰세요. 바이트가 c-market 을 지나지 않아 서버 경유 천장을 받지 않습니다. **`uploadUrl` 은 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 초 뒤 만료됩니다 — 저장해 두고 재사용하지 마시고, 만료됐다면 이 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1212
+ * @summary 대용량 업로드 1/2 — 업로드 주소 발급
1213
1213
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1214
1214
  * @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
1215
1215
  * @param {*} [options] Override http request option.
@@ -1549,8 +1549,8 @@ export const PartnerApiApiFp = function (configuration) {
1549
1549
  });
1550
1550
  },
1551
1551
  /**
1552
- * 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **크기 상한이 다른 경로가 하나 있습니다.**경로는 본문이 c-market 을 통과하므로 base64 팽창(4/3)까지 얹혀 **원본 23MB 부근**이 천장입니다(`url` 제출하면 c-market 이 대신 내려받으므로 제약은 없습니다). 파일은 `POST /v2/files/upload-url` 로 서명 URL받아 스토리지에 직접 올리세요 **100MB** 까지 됩니다. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` 의 `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 를 그대로 넣으면 이 호출 없이 한 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1553
- * @summary 공고 첨부파일 업로드 (한 번에)
1552
+ * **첨부 업로드의 기본 경로입니다. 23MB 이하면 이 호출 하나로 끝납니다.** 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **23MB 를 넘으면 경로를 바꿔야 합니다.** 상한이 셋으로 갈립니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 호출 + `base64` | **23MB** (본문이 c-market 을 통과하며 base64 팽창 4/3 이 얹힘) | 1 | | 이 호출 + `url` | **30MB** (c-market 이 대신 내려받아 팽창은 없지만 서버 경유 천장은 그대로) | 1 | | `POST /v2/files/upload-url` 로 시작하는 2단계 | **100MB** (바이트가 c-market 지나지 않음) | 2 + 스토리지 PUT | c-market 이 내려받을 수 있는 https 주소에 파일을 올려 둘 수 있다면 `url` 이 30MB 까지를 1콜로 덮습니다. 그 이상이거나 주소를 열 수 없으면 2단계 경로를 쓰세요. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` 의 `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 를 그대로 넣으면 이 호출 없이 한 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1553
+ * @summary 공고 첨부파일 업로드 (기본)
1554
1554
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1555
1555
  * @param {UploadFileRequestDto} uploadFileRequestDto
1556
1556
  * @param {*} [options] Override http request option.
@@ -1599,7 +1599,7 @@ export const PartnerApiApiFactory = function (configuration, basePath, axios) {
1599
1599
  },
1600
1600
  /**
1601
1601
  * `uploadUrl` 로의 `PUT` 이 끝난 뒤 호출합니다. 올라온 파일을 실측해 등록하고, 그 시점부터 `fileKey` 를 공고 첨부로 쓸 수 있습니다. **확정 전 `fileKey` 는 첨부로 쓸 수 없습니다** — 공고 등록이 400 으로 거절됩니다. **신고한 크기가 아니라 실제 파일을 봅니다.** 발급 요청의 `fileSize` 와 다르면 실제 크기가 기록되고, 정책 상한을 넘으면 여기서 거절됩니다. **같은 `fileKey` 로 여러 번 호출해도 안전합니다**(멱등). **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1602
- * @summary 첨부파일 업로드 확정
1602
+ * @summary 대용량 업로드 2/2 — 업로드 확정
1603
1603
  * @param {string} fileKey 발급 응답의 fileKey(영문 대소문자·숫자 32자).
1604
1604
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1605
1605
  * @param {CompleteUploadRequestDto} completeUploadRequestDto
@@ -1643,8 +1643,8 @@ export const PartnerApiApiFactory = function (configuration, basePath, axios) {
1643
1643
  return localVarFp.createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(axios, basePath));
1644
1644
  },
1645
1645
  /**
1646
- * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 을 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` 와 `uploadUrl` 을 받습니다. 2. `uploadUrl` 에 파일 본문을 `PUT` 합니다 — 응답의 `contentType` 을 `Content-Type` 헤더에 그대로 실으세요. 이 요청은 c-market 을 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 로 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 이 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 이 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 작은 첨부는 `POST /v2/files` 한 번이 간단합니다. 다만 경로는 본문이 c-market 통과하므로 base64 팽창(4/3)까지 얹혀 원본 23MB 부근이 천장입니다.경로는 바이트가 지나가지 않아 **100MB** 까지 올라갑니다. **`uploadUrl` 은 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 초 뒤 만료됩니다 — 저장해 두고 재사용하지 마시고, 만료됐다면 이 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1647
- * @summary 첨부파일 업로드 주소 발급 (대용량·권장)
1646
+ * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 을 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` 와 `uploadUrl` 을 받습니다. 2. `uploadUrl` 에 파일 본문을 `PUT` 합니다 — 응답의 `contentType` 을 `Content-Type` 헤더에 그대로 실으세요. 이 요청은 c-market 을 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 로 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 이 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 이 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 기본은 `POST /v2/files` 한 번입니다 `base64` 23MB, `url` 30MB 까지 번으로 끝납니다. 위(**100MB** 까지)만2단계 경로를 쓰세요. 바이트가 c-market 을 지나지 않아 서버 경유 천장을 받지 않습니다. **`uploadUrl` 은 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 초 뒤 만료됩니다 — 저장해 두고 재사용하지 마시고, 만료됐다면 이 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1647
+ * @summary 대용량 업로드 1/2 — 업로드 주소 발급
1648
1648
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1649
1649
  * @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
1650
1650
  * @param {*} [options] Override http request option.
@@ -1864,8 +1864,8 @@ export const PartnerApiApiFactory = function (configuration, basePath, axios) {
1864
1864
  return localVarFp.updateBid(bidRef, ifMatch, idempotencyKey, updateBidRequestDto, options).then((request) => request(axios, basePath));
1865
1865
  },
1866
1866
  /**
1867
- * 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **크기 상한이 다른 경로가 하나 있습니다.**경로는 본문이 c-market 을 통과하므로 base64 팽창(4/3)까지 얹혀 **원본 23MB 부근**이 천장입니다(`url` 제출하면 c-market 이 대신 내려받으므로 제약은 없습니다). 파일은 `POST /v2/files/upload-url` 로 서명 URL받아 스토리지에 직접 올리세요 **100MB** 까지 됩니다. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` 의 `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 를 그대로 넣으면 이 호출 없이 한 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1868
- * @summary 공고 첨부파일 업로드 (한 번에)
1867
+ * **첨부 업로드의 기본 경로입니다. 23MB 이하면 이 호출 하나로 끝납니다.** 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **23MB 를 넘으면 경로를 바꿔야 합니다.** 상한이 셋으로 갈립니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 호출 + `base64` | **23MB** (본문이 c-market 을 통과하며 base64 팽창 4/3 이 얹힘) | 1 | | 이 호출 + `url` | **30MB** (c-market 이 대신 내려받아 팽창은 없지만 서버 경유 천장은 그대로) | 1 | | `POST /v2/files/upload-url` 로 시작하는 2단계 | **100MB** (바이트가 c-market 지나지 않음) | 2 + 스토리지 PUT | c-market 이 내려받을 수 있는 https 주소에 파일을 올려 둘 수 있다면 `url` 이 30MB 까지를 1콜로 덮습니다. 그 이상이거나 주소를 열 수 없으면 2단계 경로를 쓰세요. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` 의 `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 를 그대로 넣으면 이 호출 없이 한 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1868
+ * @summary 공고 첨부파일 업로드 (기본)
1869
1869
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1870
1870
  * @param {UploadFileRequestDto} uploadFileRequestDto
1871
1871
  * @param {*} [options] Override http request option.
@@ -1906,7 +1906,7 @@ export class PartnerApiApi extends BaseAPI {
1906
1906
  }
1907
1907
  /**
1908
1908
  * `uploadUrl` 로의 `PUT` 이 끝난 뒤 호출합니다. 올라온 파일을 실측해 등록하고, 그 시점부터 `fileKey` 를 공고 첨부로 쓸 수 있습니다. **확정 전 `fileKey` 는 첨부로 쓸 수 없습니다** — 공고 등록이 400 으로 거절됩니다. **신고한 크기가 아니라 실제 파일을 봅니다.** 발급 요청의 `fileSize` 와 다르면 실제 크기가 기록되고, 정책 상한을 넘으면 여기서 거절됩니다. **같은 `fileKey` 로 여러 번 호출해도 안전합니다**(멱등). **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1909
- * @summary 첨부파일 업로드 확정
1909
+ * @summary 대용량 업로드 2/2 — 업로드 확정
1910
1910
  * @param {string} fileKey 발급 응답의 fileKey(영문 대소문자·숫자 32자).
1911
1911
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1912
1912
  * @param {CompleteUploadRequestDto} completeUploadRequestDto
@@ -1950,8 +1950,8 @@ export class PartnerApiApi extends BaseAPI {
1950
1950
  return PartnerApiApiFp(this.configuration).createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(this.axios, this.basePath));
1951
1951
  }
1952
1952
  /**
1953
- * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 을 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` 와 `uploadUrl` 을 받습니다. 2. `uploadUrl` 에 파일 본문을 `PUT` 합니다 — 응답의 `contentType` 을 `Content-Type` 헤더에 그대로 실으세요. 이 요청은 c-market 을 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 로 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 이 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 이 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 작은 첨부는 `POST /v2/files` 한 번이 간단합니다. 다만 경로는 본문이 c-market 통과하므로 base64 팽창(4/3)까지 얹혀 원본 23MB 부근이 천장입니다.경로는 바이트가 지나가지 않아 **100MB** 까지 올라갑니다. **`uploadUrl` 은 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 초 뒤 만료됩니다 — 저장해 두고 재사용하지 마시고, 만료됐다면 이 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1954
- * @summary 첨부파일 업로드 주소 발급 (대용량·권장)
1953
+ * 파일 본문을 스토리지로 **직접** 올리기 위한 1회용 서명 URL 을 발급합니다. 3단계로 씁니다. 1. 이 호출로 `fileKey` 와 `uploadUrl` 을 받습니다. 2. `uploadUrl` 에 파일 본문을 `PUT` 합니다 — 응답의 `contentType` 을 `Content-Type` 헤더에 그대로 실으세요. 이 요청은 c-market 을 거치지 않습니다. 3. `POST /v2/files/{fileKey}/complete` 로 확정합니다. **2단계는 이 명세에 오퍼레이션으로 나오지 않습니다** — 요청이 c-market 이 아니라 스토리지로 가기 때문입니다. 형태는 이게 전부입니다. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file 시방서.pdf ``` ```ts import { readFile } from \'node:fs/promises\'; // 본문은 **파일 바이트 그대로**입니다 — JSON 도 multipart 도 아닙니다. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'시방서.pdf\'), }); ``` **`Authorization` 헤더를 붙이지 마세요.** 자격증명이 `uploadUrl` 안에 서명으로 들어 있어 별도 인증이 필요 없습니다. 같은 이유로 이 주소는 **주소 자체가 자격증명**이므로 로그에 남기지 마세요. **2단계의 실패 응답은 problem+json 이 아닙니다.** 스토리지가 직접 답하므로 본문 형식이 다릅니다 — c-market 에러 파서에 넣지 마세요. 만료(`400`)·중복 업로드(`409`)라면 1단계부터 다시 하세요. **`POST /v2/files` 와 언제 갈리나:** 기본은 `POST /v2/files` 한 번입니다 `base64` 23MB, `url` 30MB 까지 번으로 끝납니다. 위(**100MB** 까지)만2단계 경로를 쓰세요. 바이트가 c-market 을 지나지 않아 서버 경유 천장을 받지 않습니다. **`uploadUrl` 은 1회용입니다.** 덮어쓰기가 막혀 있고 `expiresIn` 초 뒤 만료됩니다 — 저장해 두고 재사용하지 마시고, 만료됐다면 이 호출부터 다시 하세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
1954
+ * @summary 대용량 업로드 1/2 — 업로드 주소 발급
1955
1955
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
1956
1956
  * @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
1957
1957
  * @param {*} [options] Override http request option.
@@ -2171,8 +2171,8 @@ export class PartnerApiApi extends BaseAPI {
2171
2171
  return PartnerApiApiFp(this.configuration).updateBid(bidRef, ifMatch, idempotencyKey, updateBidRequestDto, options).then((request) => request(this.axios, this.basePath));
2172
2172
  }
2173
2173
  /**
2174
- * 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **크기 상한이 다른 경로가 하나 있습니다.**경로는 본문이 c-market 을 통과하므로 base64 팽창(4/3)까지 얹혀 **원본 23MB 부근**이 천장입니다(`url` 제출하면 c-market 이 대신 내려받으므로 제약은 없습니다). 파일은 `POST /v2/files/upload-url` 로 서명 URL받아 스토리지에 직접 올리세요 **100MB** 까지 됩니다. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` 의 `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 를 그대로 넣으면 이 호출 없이 한 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2175
- * @summary 공고 첨부파일 업로드 (한 번에)
2174
+ * **첨부 업로드의 기본 경로입니다. 23MB 이하면 이 호출 하나로 끝납니다.** 파일 본문을 `base64` 또는 `url` 중 정확히 하나로 제출하면 `fileKey` 를 돌려줍니다. 이 값을 공고 등록·수정의 첨부 필드에 실으세요. **23MB 를 넘으면 경로를 바꿔야 합니다.** 상한이 셋으로 갈립니다. | 제출 방식 | 상한 | 호출 수 | | --- | --- | --- | | 호출 + `base64` | **23MB** (본문이 c-market 을 통과하며 base64 팽창 4/3 이 얹힘) | 1 | | 이 호출 + `url` | **30MB** (c-market 이 대신 내려받아 팽창은 없지만 서버 경유 천장은 그대로) | 1 | | `POST /v2/files/upload-url` 로 시작하는 2단계 | **100MB** (바이트가 c-market 지나지 않음) | 2 + 스토리지 PUT | c-market 이 내려받을 수 있는 https 주소에 파일을 올려 둘 수 있다면 `url` 이 30MB 까지를 1콜로 덮습니다. 그 이상이거나 주소를 열 수 없으면 2단계 경로를 쓰세요. **공고 등록에 파일을 함께 실을 수도 있습니다.** `POST /v2/bids` 의 `attachments` 원소에 `{ fileName, url }`·`{ fileName, base64 }` 를 그대로 넣으면 이 호출 없이 한 번에 끝납니다. 여러 공고에 같은 파일을 재사용하거나 큰 파일을 다룰 때만 `fileKey` 를 먼저 만드세요. **필수 스코프:** `files:write` **멱등성:** `Idempotency-Key` 헤더 필수.
2175
+ * @summary 공고 첨부파일 업로드 (기본)
2176
2176
  * @param {string} idempotencyKey 멱등성 키(1~255자, &#x60;[A-Za-z0-9_-]&#x60;). **재시도할 때 처음과 같은 키를 다시 보내야** 중복 생성이 막힙니다 — 타임아웃·네트워크 오류로 다시 부르면서 새 키를 만들면 별개 요청으로 처리됩니다. 그래서 키는 UUID v4 를 만들어 **연동 시스템 원장에 저장**하거나, 요청 내용에서 결정적으로 파생(예: &#x60;bid-create-{구매번호}&#x60;)해 재시도가 같은 값을 재현하도록 하세요. 같은 키 + 같은 body 는 24시간 동안 캐시된 응답을 그대로 돌려줍니다.
2177
2177
  * @param {UploadFileRequestDto} uploadFileRequestDto
2178
2178
  * @param {*} [options] Override http request option.
@@ -2,7 +2,7 @@
2
2
  * CMARKET V6 Partner API
3
3
  * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403 입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `meta` 키는 아예 나가지 않습니다(빈 객체를 싣지 않습니다). 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON 이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json 이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2` 의 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified` 를 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json` 입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId` 와 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId` 를 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type` 은 `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1 이 허용하는 대로 이 URI 는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body 를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id` 가 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug 은 **HTTP status 로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
4
4
  *
5
- * The version of the OpenAPI document: 37.2.0
5
+ * The version of the OpenAPI document: 37.3.1
6
6
  * Contact: semo.io.kr@gmail.com
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -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\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `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: 37.2.0
7
+ * The version of the OpenAPI document: 37.3.1
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).
@@ -2,7 +2,7 @@
2
2
  * CMARKET V6 Partner API
3
3
  * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403 입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `meta` 키는 아예 나가지 않습니다(빈 객체를 싣지 않습니다). 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON 이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json 이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2` 의 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified` 를 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json` 입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId` 와 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId` 를 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type` 은 `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1 이 허용하는 대로 이 URI 는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body 를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id` 가 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug 은 **HTTP status 로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
4
4
  *
5
- * The version of the OpenAPI document: 37.2.0
5
+ * The version of the OpenAPI document: 37.3.1
6
6
  * Contact: semo.io.kr@gmail.com
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -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\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `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: 37.2.0
7
+ * The version of the OpenAPI document: 37.3.1
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).
package/dist/esm/api.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * CMARKET V6 Partner API
3
3
  * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403 입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `meta` 키는 아예 나가지 않습니다(빈 객체를 싣지 않습니다). 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON 이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json 이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2` 의 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified` 를 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json` 입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId` 와 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId` 를 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type` 은 `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1 이 허용하는 대로 이 URI 는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body 를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id` 가 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug 은 **HTTP status 로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
4
4
  *
5
- * The version of the OpenAPI document: 37.2.0
5
+ * The version of the OpenAPI document: 37.3.1
6
6
  * Contact: semo.io.kr@gmail.com
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
package/dist/esm/api.js CHANGED
@@ -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\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `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: 37.2.0
7
+ * The version of the OpenAPI document: 37.3.1
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).
@@ -2,7 +2,7 @@
2
2
  * CMARKET V6 Partner API
3
3
  * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403 입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `meta` 키는 아예 나가지 않습니다(빈 객체를 싣지 않습니다). 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON 이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json 이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2` 의 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified` 를 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json` 입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId` 와 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId` 를 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type` 은 `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1 이 허용하는 대로 이 URI 는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body 를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id` 가 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug 은 **HTTP status 로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
4
4
  *
5
- * The version of the OpenAPI document: 37.2.0
5
+ * The version of the OpenAPI document: 37.3.1
6
6
  * Contact: semo.io.kr@gmail.com
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
package/dist/esm/base.js CHANGED
@@ -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\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `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: 37.2.0
7
+ * The version of the OpenAPI document: 37.3.1
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).
@@ -2,7 +2,7 @@
2
2
  * CMARKET V6 Partner API
3
3
  * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403 입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `meta` 키는 아예 나가지 않습니다(빈 객체를 싣지 않습니다). 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON 이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json 이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2` 의 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified` 를 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json` 입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId` 와 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId` 를 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type` 은 `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1 이 허용하는 대로 이 URI 는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body 를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id` 가 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug 은 **HTTP status 로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
4
4
  *
5
- * The version of the OpenAPI document: 37.2.0
5
+ * The version of the OpenAPI document: 37.3.1
6
6
  * Contact: semo.io.kr@gmail.com
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -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\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `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: 37.2.0
7
+ * The version of the OpenAPI document: 37.3.1
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).
@@ -2,7 +2,7 @@
2
2
  * CMARKET V6 Partner API
3
3
  * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403 입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `meta` 키는 아예 나가지 않습니다(빈 객체를 싣지 않습니다). 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON 이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json 이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2` 의 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified` 를 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json` 입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId` 와 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId` 를 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type` 은 `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1 이 허용하는 대로 이 URI 는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body 를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id` 가 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug 은 **HTTP status 로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
4
4
  *
5
- * The version of the OpenAPI document: 37.2.0
5
+ * The version of the OpenAPI document: 37.3.1
6
6
  * Contact: semo.io.kr@gmail.com
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -3,7 +3,7 @@
3
3
  * CMARKET V6 Partner API
4
4
  * 외부 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\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `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` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
5
5
  *
6
- * The version of the OpenAPI document: 37.2.0
6
+ * The version of the OpenAPI document: 37.3.1
7
7
  * Contact: semo.io.kr@gmail.com
8
8
  *
9
9
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -2,7 +2,7 @@
2
2
  * CMARKET V6 Partner API
3
3
  * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403 입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `meta` 키는 아예 나가지 않습니다(빈 객체를 싣지 않습니다). 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON 이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json 이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2` 의 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified` 를 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json` 입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId` 와 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId` 를 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type` 은 `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1 이 허용하는 대로 이 URI 는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body 를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id` 가 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug 은 **HTTP status 로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
4
4
  *
5
- * The version of the OpenAPI document: 37.2.0
5
+ * The version of the OpenAPI document: 37.3.1
6
6
  * Contact: semo.io.kr@gmail.com
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
package/dist/esm/index.js CHANGED
@@ -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\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `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: 37.2.0
7
+ * The version of the OpenAPI document: 37.3.1
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).
@@ -2,7 +2,7 @@
2
2
  * CMARKET V6 Partner API
3
3
  * 외부 ERP 연동용 RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` 플로우). `/oauth/token` 에서 토큰을 발급받아 `Authorization: Bearer <token>` 헤더로 실으세요. ## 권한 — 두 개의 독립된 축 `403` 을 만났다면 둘 중 어느 축에 걸린 것인지 먼저 구분하세요. - **스코프** = *무엇을 할 수 있나*. 토큰에 부여된 `bids:read`·`contracts:write` 등입니다. 미보유 시 `…/insufficient-scope`. - **대행 범위** = *누구의 데이터를 다룰 수 있나*. API 키 설정이며 스코프로 표현되지 않습니다. 범위 밖이면 스코프와 무관하게 403 입니다. 대행 범위는 키마다 둘 중 하나로 설정됩니다 — **소속 그룹 전원**(기관 키. 사업처·부서 계정이 새로 생겨도 자동 포함) 또는 **지정 발주처 목록**(계약으로 합의된 목록). 범위를 넓혀야 하면 스코프가 아니라 키 설정 변경을 요청하세요. ## 성공 응답 봉투 `/v2` 의 모든 2xx 본문은 `{ \"data\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `meta` 키는 아예 나가지 않습니다(빈 객체를 싣지 않습니다). 봉투를 쓰지 않는 표면은 둘입니다. `/oauth/_*` 와 `/.well-known/_*` 는 각각 RFC 6749·RFC 8414·RFC 9728 이 최상위 필드를 규정하고, 파일 내용 응답은 본문이 JSON 이 아닙니다. 에러 응답에는 봉투를 씌우지 않습니다 — 아래 problem+json 이 단독으로 책임집니다. ## 조건부 요청 (ETag) `/v2` 의 모든 `GET` 응답에 weak `ETag`(`W/\"…\"`)가 실립니다. 받은 값을 다음 요청의 `If-None-Match` 헤더로 되보내면, 내용이 그대로일 때 `304 Not Modified` 를 본문 없이 받습니다. 결과가 나기를 기다리며 같은 자원을 반복 조회하는 연동이라면 이 헤더 하나로 전송량이 사라집니다. ## 에러 (RFC 9457 problem+json) 모든 에러 응답은 `application/problem+json` 입니다. **HTTP status + `type` URI** 로 분기하세요. - `retryable`(boolean): 자동 재시도 안전 여부. `true`(429·5xx transient)면 backoff 후 재시도하고, `false`면 요청을 고쳐야 합니다. - `traceId`: 요청 추적 id. `X-Correlation-Id` 응답 헤더와 같은 값입니다 — 문의할 때 이 값을 첨부하세요. - `correlationId`: `traceId` 와 같은 값의 옛 이름. 기존 연동 호환으로 함께 실립니다. 새 연동은 `traceId` 를 읽으세요. - `invalid-params`: 검증 실패(400 `…/validation-failed`) 시 위반 필드 경로 목록(RFC 9457 확장, 값 없음). `type` 은 `https://problems.cmarket.io/partner/<slug>` 형태의 **안정 식별자**입니다. RFC 9457 §3.1.1 이 허용하는 대로 이 URI 는 **역참조(dereference)되지 않습니다** — 브라우저로 열지 말고 문자열 비교로만 쓰세요. slug 목록과 의미는 각 엔드포인트의 응답 설명에 status 별로 적혀 있습니다. ### 멱등성 위반: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` — 같은 키의 **원 요청이 아직 처리 중**입니다. 잠시 뒤 같은 키로 다시 부르면 그 결과를 받습니다. - `422` `…/idempotency-key-reused` — 같은 키를 **다른 body** 로 보냈습니다. 재시도해도 영원히 같은 실패이니 새 키를 쓰거나 body 를 되돌리세요. ## Rate Limit 전역 **60 요청/분 per `client_id`**, 토큰 발급(`/oauth/token`)은 **5 요청/분** 입니다. 초과 시 `429`(`type: …/too-many-requests`). 쿼터는 두 가지 표기로 함께 나갑니다 — 신규 연동은 표준 필드를 쓰세요. - **표준**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (정책) · `RateLimit: \"default\";r=59;t=42` (잔량 r, 리셋까지 t 초) - **레거시**(관용): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. 기존 연동 호환을 위해 유지합니다. `429` 에서는 `Retry-After`(초)가 우선합니다. 대량 동기화(품목 단위 반복 등록 등)는 `Retry-After` 만큼 backoff 후 재시도하세요. ## 추적 요청에 `X-Correlation-Id` 헤더를 실으면 그대로 echo 되고, 없으면 서버가 발급합니다. 모든 응답(성공/에러)에 `X-Correlation-Id` 가 실립니다. ## 전방호환 — 모르는 필드와 값에서 깨지지 않게 다음 셋은 breaking 변경으로 보지 않으며 minor 릴리스에서 예고 없이 일어납니다. 이 전제로 구현하세요. - **선택 필드 추가**: 모르는 필드는 무시하세요. 엄격 파서(unknown key 거부)를 쓰지 마세요. - **enum 값 추가**: 상태·낙찰방법 등에 새 값이 생깁니다. 모르는 값을 만나면 예외를 던지지 말고 원문 문자열을 보존하세요. - **problem `type` slug 추가**: 모르는 slug 은 **HTTP status 로 폴백**해 분기하세요. ## 버전 수명(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` 헤더로 통지합니다. 이 헤더를 모니터링하세요.
4
4
  *
5
- * The version of the OpenAPI document: 37.2.0
5
+ * The version of the OpenAPI document: 37.3.1
6
6
  * Contact: semo.io.kr@gmail.com
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -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\": … }` 입니다. 단일 리소스든 목록이든 같습니다. 목록처럼 부가 정보가 있는 응답은 `meta` 가 함께 실립니다 — 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. 부가 정보가 없으면 `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: 37.2.0
7
+ * The version of the OpenAPI document: 37.3.1
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).