@cmarket/partner-sdk 32.0.0 β†’ 33.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (939) hide show
  1. package/README.md +4 -14
  2. package/api/oauth-api.ts +1 -1
  3. package/api/partner-v1-api.ts +1 -1
  4. package/api/partner-v2-api.ts +1 -298
  5. package/api/webhooks-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/oauth-api.d.ts +1 -1
  12. package/dist/api/oauth-api.js +1 -1
  13. package/dist/api/partner-v1-api.d.ts +1 -1
  14. package/dist/api/partner-v1-api.js +1 -1
  15. package/dist/api/partner-v2-api.d.ts +1 -133
  16. package/dist/api/partner-v2-api.js +1 -278
  17. package/dist/api/webhooks-api.d.ts +1 -1
  18. package/dist/api/webhooks-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/oauth-api.d.ts +1 -1
  30. package/dist/esm/api/oauth-api.js +1 -1
  31. package/dist/esm/api/partner-v1-api.d.ts +1 -1
  32. package/dist/esm/api/partner-v1-api.js +1 -1
  33. package/dist/esm/api/partner-v2-api.d.ts +1 -133
  34. package/dist/esm/api/partner-v2-api.js +1 -278
  35. package/dist/esm/api/webhooks-api.d.ts +1 -1
  36. package/dist/esm/api/webhooks-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/acceptance-result-v1-response-dto.d.ts +1 -1
  52. package/dist/esm/models/acceptance-result-v1-response-dto.js +1 -1
  53. package/dist/esm/models/acknowledge-product-receipt200-response.d.ts +1 -1
  54. package/dist/esm/models/acknowledge-product-receipt200-response.js +1 -1
  55. package/dist/esm/models/acknowledge-products-request-dto.d.ts +1 -1
  56. package/dist/esm/models/acknowledge-products-request-dto.js +1 -1
  57. package/dist/esm/models/acknowledge-products-v1-request-dto.d.ts +1 -1
  58. package/dist/esm/models/acknowledge-products-v1-request-dto.js +1 -1
  59. package/dist/esm/models/api-catalog-dto.d.ts +1 -1
  60. package/dist/esm/models/api-catalog-dto.js +1 -1
  61. package/dist/esm/models/api-catalog-entry-dto.d.ts +1 -1
  62. package/dist/esm/models/api-catalog-entry-dto.js +1 -1
  63. package/dist/esm/models/api-catalog-link-dto.d.ts +1 -1
  64. package/dist/esm/models/api-catalog-link-dto.js +1 -1
  65. package/dist/esm/models/authorization-server-metadata-dto.d.ts +1 -1
  66. package/dist/esm/models/authorization-server-metadata-dto.js +1 -1
  67. package/dist/esm/models/award-method-public.d.ts +1 -1
  68. package/dist/esm/models/award-method-public.js +1 -1
  69. package/dist/esm/models/award-registered-response-dto.d.ts +1 -1
  70. package/dist/esm/models/award-registered-response-dto.js +1 -1
  71. package/dist/esm/models/award-registered-v2-response-dto.d.ts +1 -1
  72. package/dist/esm/models/award-registered-v2-response-dto.js +1 -1
  73. package/dist/esm/models/award-reverted-v2-response-dto.d.ts +1 -1
  74. package/dist/esm/models/award-reverted-v2-response-dto.js +1 -1
  75. package/dist/esm/models/bid-acceptance-dto.d.ts +1 -1
  76. package/dist/esm/models/bid-acceptance-dto.js +1 -1
  77. package/dist/esm/models/bid-attachment-v1-dto.d.ts +1 -1
  78. package/dist/esm/models/bid-attachment-v1-dto.js +1 -1
  79. package/dist/esm/models/bid-bond-dto.d.ts +1 -1
  80. package/dist/esm/models/bid-bond-dto.js +1 -1
  81. package/dist/esm/models/bid-bond-v1-dto.d.ts +1 -1
  82. package/dist/esm/models/bid-bond-v1-dto.js +1 -1
  83. package/dist/esm/models/bid-cancelled-response-dto.d.ts +1 -1
  84. package/dist/esm/models/bid-cancelled-response-dto.js +1 -1
  85. package/dist/esm/models/bid-contact-dto.d.ts +1 -1
  86. package/dist/esm/models/bid-contact-dto.js +1 -1
  87. package/dist/esm/models/bid-contacts-dto.d.ts +1 -1
  88. package/dist/esm/models/bid-contacts-dto.js +1 -1
  89. package/dist/esm/models/bid-contract-document-dto.d.ts +1 -1
  90. package/dist/esm/models/bid-contract-document-dto.js +1 -1
  91. package/dist/esm/models/bid-contract-documents-batch-v1-request-dto.d.ts +1 -1
  92. package/dist/esm/models/bid-contract-documents-batch-v1-request-dto.js +1 -1
  93. package/dist/esm/models/bid-contract-documents-v1-response-dto.d.ts +1 -1
  94. package/dist/esm/models/bid-contract-documents-v1-response-dto.js +1 -1
  95. package/dist/esm/models/bid-created-response-dto.d.ts +1 -1
  96. package/dist/esm/models/bid-created-response-dto.js +1 -1
  97. package/dist/esm/models/bid-delivery-terms-dto.d.ts +1 -1
  98. package/dist/esm/models/bid-delivery-terms-dto.js +1 -1
  99. package/dist/esm/models/bid-detail-response-dto.d.ts +1 -1
  100. package/dist/esm/models/bid-detail-response-dto.js +1 -1
  101. package/dist/esm/models/bid-document-dto.d.ts +1 -1
  102. package/dist/esm/models/bid-document-dto.js +1 -1
  103. package/dist/esm/models/bid-document-v1-dto.d.ts +1 -1
  104. package/dist/esm/models/bid-document-v1-dto.js +1 -1
  105. package/dist/esm/models/bid-failed-response-dto.d.ts +1 -1
  106. package/dist/esm/models/bid-failed-response-dto.js +1 -1
  107. package/dist/esm/models/bid-failed-v2-response-dto.d.ts +1 -1
  108. package/dist/esm/models/bid-failed-v2-response-dto.js +1 -1
  109. package/dist/esm/models/bid-failure-reason.d.ts +1 -1
  110. package/dist/esm/models/bid-failure-reason.js +1 -1
  111. package/dist/esm/models/bid-item-dto.d.ts +1 -1
  112. package/dist/esm/models/bid-item-dto.js +1 -1
  113. package/dist/esm/models/bid-item-v1-dto.d.ts +1 -1
  114. package/dist/esm/models/bid-item-v1-dto.js +1 -1
  115. package/dist/esm/models/bid-lifecycle-dto.d.ts +1 -1
  116. package/dist/esm/models/bid-lifecycle-dto.js +1 -1
  117. package/dist/esm/models/bid-manager-dto.d.ts +1 -1
  118. package/dist/esm/models/bid-manager-dto.js +1 -1
  119. package/dist/esm/models/bid-manager-v1-dto.d.ts +1 -1
  120. package/dist/esm/models/bid-manager-v1-dto.js +1 -1
  121. package/dist/esm/models/bid-payment-terms-dto.d.ts +1 -1
  122. package/dist/esm/models/bid-payment-terms-dto.js +1 -1
  123. package/dist/esm/models/bid-product-dto.d.ts +1 -1
  124. package/dist/esm/models/bid-product-dto.js +1 -1
  125. package/dist/esm/models/bid-public-status.d.ts +1 -1
  126. package/dist/esm/models/bid-public-status.js +1 -1
  127. package/dist/esm/models/bid-published-response-dto.d.ts +1 -1
  128. package/dist/esm/models/bid-published-response-dto.js +1 -1
  129. package/dist/esm/models/bid-registered-response-dto.d.ts +1 -1
  130. package/dist/esm/models/bid-registered-response-dto.js +1 -1
  131. package/dist/esm/models/bid-result-participant-attachment-dto.d.ts +1 -1
  132. package/dist/esm/models/bid-result-participant-attachment-dto.js +1 -1
  133. package/dist/esm/models/bid-result-participant-dto.d.ts +1 -1
  134. package/dist/esm/models/bid-result-participant-dto.js +1 -1
  135. package/dist/esm/models/bid-result-v1-attachment-dto.d.ts +1 -1
  136. package/dist/esm/models/bid-result-v1-attachment-dto.js +1 -1
  137. package/dist/esm/models/bid-result-v1-bid-product-info-dto.d.ts +1 -1
  138. package/dist/esm/models/bid-result-v1-bid-product-info-dto.js +1 -1
  139. package/dist/esm/models/bid-result-v1-participant-dto.d.ts +1 -1
  140. package/dist/esm/models/bid-result-v1-participant-dto.js +1 -1
  141. package/dist/esm/models/bid-result-v1-product-dto.d.ts +1 -1
  142. package/dist/esm/models/bid-result-v1-product-dto.js +1 -1
  143. package/dist/esm/models/bid-results-batch-v1-request-dto.d.ts +1 -1
  144. package/dist/esm/models/bid-results-batch-v1-request-dto.js +1 -1
  145. package/dist/esm/models/bid-results-response-dto.d.ts +1 -1
  146. package/dist/esm/models/bid-results-response-dto.js +1 -1
  147. package/dist/esm/models/bid-results-v1-response-dto.d.ts +1 -1
  148. package/dist/esm/models/bid-results-v1-response-dto.js +1 -1
  149. package/dist/esm/models/bid-settlement-line-item-dto.d.ts +1 -1
  150. package/dist/esm/models/bid-settlement-line-item-dto.js +1 -1
  151. package/dist/esm/models/bid-settlement-participant-dto.d.ts +1 -1
  152. package/dist/esm/models/bid-settlement-participant-dto.js +1 -1
  153. package/dist/esm/models/bid-settlement-response-dto.d.ts +1 -1
  154. package/dist/esm/models/bid-settlement-response-dto.js +1 -1
  155. package/dist/esm/models/bid-statement-response-dto.d.ts +1 -1
  156. package/dist/esm/models/bid-statement-response-dto.js +1 -1
  157. package/dist/esm/models/bid-statement-v1-response-dto.d.ts +1 -1
  158. package/dist/esm/models/bid-statement-v1-response-dto.js +1 -1
  159. package/dist/esm/models/bid-status.d.ts +1 -1
  160. package/dist/esm/models/bid-status.js +1 -1
  161. package/dist/esm/models/bid-summary-dto.d.ts +1 -1
  162. package/dist/esm/models/bid-summary-dto.js +1 -1
  163. package/dist/esm/models/bid-updated-response-dto.d.ts +1 -1
  164. package/dist/esm/models/bid-updated-response-dto.js +1 -1
  165. package/dist/esm/models/cancel-bid-request-dto.d.ts +1 -1
  166. package/dist/esm/models/cancel-bid-request-dto.js +1 -1
  167. package/dist/esm/models/cancel-bid200-response.d.ts +1 -1
  168. package/dist/esm/models/cancel-bid200-response.js +1 -1
  169. package/dist/esm/models/card-payment-request-response-dto.d.ts +1 -1
  170. package/dist/esm/models/card-payment-request-response-dto.js +1 -1
  171. package/dist/esm/models/complete-acceptance-request-dto.d.ts +1 -1
  172. package/dist/esm/models/complete-acceptance-request-dto.js +1 -1
  173. package/dist/esm/models/complete-acceptance-v1-request-dto.d.ts +1 -1
  174. package/dist/esm/models/complete-acceptance-v1-request-dto.js +1 -1
  175. package/dist/esm/models/complete-acceptance200-response.d.ts +1 -1
  176. package/dist/esm/models/complete-acceptance200-response.js +1 -1
  177. package/dist/esm/models/complete-invoice200-response.d.ts +1 -1
  178. package/dist/esm/models/complete-invoice200-response.js +1 -1
  179. package/dist/esm/models/contract-document-item-dto.d.ts +1 -1
  180. package/dist/esm/models/contract-document-item-dto.js +1 -1
  181. package/dist/esm/models/contract-documents-regenerated-response-dto.d.ts +1 -1
  182. package/dist/esm/models/contract-documents-regenerated-response-dto.js +1 -1
  183. package/dist/esm/models/contract-restriction-confirm-input-dto.d.ts +1 -1
  184. package/dist/esm/models/contract-restriction-confirm-input-dto.js +1 -1
  185. package/dist/esm/models/create-bid-request-dto.d.ts +1 -1
  186. package/dist/esm/models/create-bid-request-dto.js +1 -1
  187. package/dist/esm/models/create-bid-v1-request-dto.d.ts +1 -1
  188. package/dist/esm/models/create-bid-v1-request-dto.js +1 -1
  189. package/dist/esm/models/create-card-payment-request-dto.d.ts +1 -1
  190. package/dist/esm/models/create-card-payment-request-dto.js +1 -1
  191. package/dist/esm/models/create-card-payment200-response.d.ts +1 -1
  192. package/dist/esm/models/create-card-payment200-response.js +1 -1
  193. package/dist/esm/models/create-external-contract-documents-request-dto.d.ts +1 -1
  194. package/dist/esm/models/create-external-contract-documents-request-dto.js +1 -1
  195. package/dist/esm/models/create-external-contract-documents-response-dto.d.ts +1 -1
  196. package/dist/esm/models/create-external-contract-documents-response-dto.js +1 -1
  197. package/dist/esm/models/create-webhook-endpoint-request-dto.d.ts +1 -1
  198. package/dist/esm/models/create-webhook-endpoint-request-dto.js +1 -1
  199. package/dist/esm/models/create-webhook-endpoint201-response.d.ts +1 -1
  200. package/dist/esm/models/create-webhook-endpoint201-response.js +1 -1
  201. package/dist/esm/models/external-contract-document-item-dto.d.ts +1 -1
  202. package/dist/esm/models/external-contract-document-item-dto.js +1 -1
  203. package/dist/esm/models/external-contract-documents-response-dto.d.ts +1 -1
  204. package/dist/esm/models/external-contract-documents-response-dto.js +1 -1
  205. package/dist/esm/models/external-contract-item-dto.d.ts +1 -1
  206. package/dist/esm/models/external-contract-item-dto.js +1 -1
  207. package/dist/esm/models/external-contract-snapshot-dto.d.ts +1 -1
  208. package/dist/esm/models/external-contract-snapshot-dto.js +1 -1
  209. package/dist/esm/models/external-document-inputs-dto.d.ts +1 -1
  210. package/dist/esm/models/external-document-inputs-dto.js +1 -1
  211. package/dist/esm/models/file-meta-response-dto.d.ts +1 -1
  212. package/dist/esm/models/file-meta-response-dto.js +1 -1
  213. package/dist/esm/models/file-uploaded-response-dto.d.ts +1 -1
  214. package/dist/esm/models/file-uploaded-response-dto.js +1 -1
  215. package/dist/esm/models/file-uploaded-v1-response-dto.d.ts +1 -1
  216. package/dist/esm/models/file-uploaded-v1-response-dto.js +1 -1
  217. package/dist/esm/models/generated-external-contract-document-dto.d.ts +1 -1
  218. package/dist/esm/models/generated-external-contract-document-dto.js +1 -1
  219. package/dist/esm/models/get-bid-results200-response.d.ts +1 -1
  220. package/dist/esm/models/get-bid-results200-response.js +1 -1
  221. package/dist/esm/models/get-bid-settlement200-response.d.ts +1 -1
  222. package/dist/esm/models/get-bid-settlement200-response.js +1 -1
  223. package/dist/esm/models/get-bid-statement200-response.d.ts +1 -1
  224. package/dist/esm/models/get-bid-statement200-response.js +1 -1
  225. package/dist/esm/models/get-bid200-response.d.ts +1 -1
  226. package/dist/esm/models/get-bid200-response.js +1 -1
  227. package/dist/esm/models/get-file-meta200-response.d.ts +1 -1
  228. package/dist/esm/models/get-file-meta200-response.js +1 -1
  229. package/dist/esm/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
  230. package/dist/esm/models/get-supplier-card-payable-v2200-response.js +1 -1
  231. package/dist/esm/models/get-webhook-endpoint200-response.d.ts +1 -1
  232. package/dist/esm/models/get-webhook-endpoint200-response.js +1 -1
  233. package/dist/esm/models/health-controller-check200-response.d.ts +1 -1
  234. package/dist/esm/models/health-controller-check200-response.js +1 -1
  235. package/dist/esm/models/health-response-dto.d.ts +1 -1
  236. package/dist/esm/models/health-response-dto.js +1 -1
  237. package/dist/esm/models/hierarchical-region-dto.d.ts +1 -1
  238. package/dist/esm/models/hierarchical-region-dto.js +1 -1
  239. package/dist/esm/models/hierarchical-region-v1-dto.d.ts +1 -1
  240. package/dist/esm/models/hierarchical-region-v1-dto.js +1 -1
  241. package/dist/esm/models/index.d.ts +0 -6
  242. package/dist/esm/models/index.js +0 -6
  243. package/dist/esm/models/introspect-request-dto.d.ts +1 -1
  244. package/dist/esm/models/introspect-request-dto.js +1 -1
  245. package/dist/esm/models/introspection-response-dto.d.ts +1 -1
  246. package/dist/esm/models/introspection-response-dto.js +1 -1
  247. package/dist/esm/models/invalid-param-dto.d.ts +1 -1
  248. package/dist/esm/models/invalid-param-dto.js +1 -1
  249. package/dist/esm/models/invoice-completed-response-dto.d.ts +1 -1
  250. package/dist/esm/models/invoice-completed-response-dto.js +1 -1
  251. package/dist/esm/models/list-bid-results200-response.d.ts +1 -1
  252. package/dist/esm/models/list-bid-results200-response.js +1 -1
  253. package/dist/esm/models/list-bids-response-dto.d.ts +1 -1
  254. package/dist/esm/models/list-bids-response-dto.js +1 -1
  255. package/dist/esm/models/list-bids200-response.d.ts +1 -1
  256. package/dist/esm/models/list-bids200-response.js +1 -1
  257. package/dist/esm/models/list-products200-response.d.ts +1 -1
  258. package/dist/esm/models/list-products200-response.js +1 -1
  259. package/dist/esm/models/list-webhook-deliveries-response-dto.d.ts +1 -1
  260. package/dist/esm/models/list-webhook-deliveries-response-dto.js +1 -1
  261. package/dist/esm/models/list-webhook-deliveries200-response.d.ts +1 -1
  262. package/dist/esm/models/list-webhook-deliveries200-response.js +1 -1
  263. package/dist/esm/models/list-webhook-endpoints200-response.d.ts +1 -1
  264. package/dist/esm/models/list-webhook-endpoints200-response.js +1 -1
  265. package/dist/esm/models/mark-bid-failed-request-dto.d.ts +1 -1
  266. package/dist/esm/models/mark-bid-failed-request-dto.js +1 -1
  267. package/dist/esm/models/mark-bid-failed-v1-request-dto.d.ts +1 -1
  268. package/dist/esm/models/mark-bid-failed-v1-request-dto.js +1 -1
  269. package/dist/esm/models/mark-bid-failed201-response.d.ts +1 -1
  270. package/dist/esm/models/mark-bid-failed201-response.js +1 -1
  271. package/dist/esm/models/negotiation-score-v1-dto.d.ts +1 -1
  272. package/dist/esm/models/negotiation-score-v1-dto.js +1 -1
  273. package/dist/esm/models/negotiation-scored-response-dto.d.ts +1 -1
  274. package/dist/esm/models/negotiation-scored-response-dto.js +1 -1
  275. package/dist/esm/models/oauth-error-response-dto.d.ts +1 -1
  276. package/dist/esm/models/oauth-error-response-dto.js +1 -1
  277. package/dist/esm/models/on-bid-award-reverted-request.d.ts +1 -1
  278. package/dist/esm/models/on-bid-award-reverted-request.js +1 -1
  279. package/dist/esm/models/on-bid-awarded-request.d.ts +1 -1
  280. package/dist/esm/models/on-bid-awarded-request.js +1 -1
  281. package/dist/esm/models/on-bid-canceled-request.d.ts +1 -1
  282. package/dist/esm/models/on-bid-canceled-request.js +1 -1
  283. package/dist/esm/models/on-bid-closed-request.d.ts +1 -1
  284. package/dist/esm/models/on-bid-closed-request.js +1 -1
  285. package/dist/esm/models/on-bid-failed-request.d.ts +1 -1
  286. package/dist/esm/models/on-bid-failed-request.js +1 -1
  287. package/dist/esm/models/on-ping-request.d.ts +1 -1
  288. package/dist/esm/models/on-ping-request.js +1 -1
  289. package/dist/esm/models/partner-webhook-delivery-status.d.ts +1 -1
  290. package/dist/esm/models/partner-webhook-delivery-status.js +1 -1
  291. package/dist/esm/models/partner-webhook-endpoint-status.d.ts +1 -1
  292. package/dist/esm/models/partner-webhook-endpoint-status.js +1 -1
  293. package/dist/esm/models/partner-webhook-event-type.d.ts +1 -1
  294. package/dist/esm/models/partner-webhook-event-type.js +1 -1
  295. package/dist/esm/models/preconditions-dto.d.ts +1 -1
  296. package/dist/esm/models/preconditions-dto.js +1 -1
  297. package/dist/esm/models/preconditions-v1-dto.d.ts +1 -1
  298. package/dist/esm/models/preconditions-v1-dto.js +1 -1
  299. package/dist/esm/models/problem-details-dto.d.ts +1 -1
  300. package/dist/esm/models/problem-details-dto.js +1 -1
  301. package/dist/esm/models/product-receipt-response-dto.d.ts +1 -1
  302. package/dist/esm/models/product-receipt-response-dto.js +1 -1
  303. package/dist/esm/models/product-receipt-v1-response-dto.d.ts +1 -1
  304. package/dist/esm/models/product-receipt-v1-response-dto.js +1 -1
  305. package/dist/esm/models/product-response-dto.d.ts +1 -1
  306. package/dist/esm/models/product-response-dto.js +1 -1
  307. package/dist/esm/models/product-v1-response-dto.d.ts +1 -1
  308. package/dist/esm/models/product-v1-response-dto.js +1 -1
  309. package/dist/esm/models/protected-resource-metadata-dto.d.ts +1 -1
  310. package/dist/esm/models/protected-resource-metadata-dto.js +1 -1
  311. package/dist/esm/models/publish-bid200-response.d.ts +1 -1
  312. package/dist/esm/models/publish-bid200-response.js +1 -1
  313. package/dist/esm/models/regenerate-contract-documents201-response.d.ts +1 -1
  314. package/dist/esm/models/regenerate-contract-documents201-response.js +1 -1
  315. package/dist/esm/models/register-award-request-dto.d.ts +1 -1
  316. package/dist/esm/models/register-award-request-dto.js +1 -1
  317. package/dist/esm/models/register-award-v1-request-dto.d.ts +1 -1
  318. package/dist/esm/models/register-award-v1-request-dto.js +1 -1
  319. package/dist/esm/models/register-award201-response.d.ts +1 -1
  320. package/dist/esm/models/register-award201-response.js +1 -1
  321. package/dist/esm/models/register-bid201-response.d.ts +1 -1
  322. package/dist/esm/models/register-bid201-response.js +1 -1
  323. package/dist/esm/models/register-semo-contract-request-dto.d.ts +1 -1
  324. package/dist/esm/models/register-semo-contract-request-dto.js +1 -1
  325. package/dist/esm/models/request-split-invoice-v1-request-dto.d.ts +1 -1
  326. package/dist/esm/models/request-split-invoice-v1-request-dto.js +1 -1
  327. package/dist/esm/models/retiree-roster-input-dto.d.ts +1 -1
  328. package/dist/esm/models/retiree-roster-input-dto.js +1 -1
  329. package/dist/esm/models/retiree-roster-row-dto.d.ts +1 -1
  330. package/dist/esm/models/retiree-roster-row-dto.js +1 -1
  331. package/dist/esm/models/revert-award-request-dto.d.ts +1 -1
  332. package/dist/esm/models/revert-award-request-dto.js +1 -1
  333. package/dist/esm/models/revert-award200-response.d.ts +1 -1
  334. package/dist/esm/models/revert-award200-response.js +1 -1
  335. package/dist/esm/models/revoke-request-dto.d.ts +1 -1
  336. package/dist/esm/models/revoke-request-dto.js +1 -1
  337. package/dist/esm/models/semo-contract-registered-response-dto.d.ts +1 -1
  338. package/dist/esm/models/semo-contract-registered-response-dto.js +1 -1
  339. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
  340. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
  341. package/dist/esm/models/send-webhook-test-event200-response.d.ts +1 -1
  342. package/dist/esm/models/send-webhook-test-event200-response.js +1 -1
  343. package/dist/esm/models/split-invoice-v1-response-dto.d.ts +1 -1
  344. package/dist/esm/models/split-invoice-v1-response-dto.js +1 -1
  345. package/dist/esm/models/statement-document-dto.d.ts +1 -1
  346. package/dist/esm/models/statement-document-dto.js +1 -1
  347. package/dist/esm/models/statement-product-dto.d.ts +1 -1
  348. package/dist/esm/models/statement-product-dto.js +1 -1
  349. package/dist/esm/models/statement-v1-document-dto.d.ts +1 -1
  350. package/dist/esm/models/statement-v1-document-dto.js +1 -1
  351. package/dist/esm/models/statement-v1-product-dto.d.ts +1 -1
  352. package/dist/esm/models/statement-v1-product-dto.js +1 -1
  353. package/dist/esm/models/submit-negotiation-scores-v1-request-dto.d.ts +1 -1
  354. package/dist/esm/models/submit-negotiation-scores-v1-request-dto.js +1 -1
  355. package/dist/esm/models/supplier-card-payable-response-dto.d.ts +1 -1
  356. package/dist/esm/models/supplier-card-payable-response-dto.js +1 -1
  357. package/dist/esm/models/supplier-tax-type.d.ts +1 -1
  358. package/dist/esm/models/supplier-tax-type.js +1 -1
  359. package/dist/esm/models/token-request-dto.d.ts +1 -1
  360. package/dist/esm/models/token-request-dto.js +1 -1
  361. package/dist/esm/models/token-response-dto.d.ts +1 -1
  362. package/dist/esm/models/token-response-dto.js +1 -1
  363. package/dist/esm/models/update-bid-request-dto.d.ts +1 -1
  364. package/dist/esm/models/update-bid-request-dto.js +1 -1
  365. package/dist/esm/models/update-bid200-response.d.ts +1 -1
  366. package/dist/esm/models/update-bid200-response.js +1 -1
  367. package/dist/esm/models/update-webhook-endpoint-request-dto.d.ts +1 -1
  368. package/dist/esm/models/update-webhook-endpoint-request-dto.js +1 -1
  369. package/dist/esm/models/upload-file-request-dto.d.ts +1 -1
  370. package/dist/esm/models/upload-file-request-dto.js +1 -1
  371. package/dist/esm/models/upload-file-v1-request-dto.d.ts +1 -1
  372. package/dist/esm/models/upload-file-v1-request-dto.js +1 -1
  373. package/dist/esm/models/upload-file201-response.d.ts +1 -1
  374. package/dist/esm/models/upload-file201-response.js +1 -1
  375. package/dist/esm/models/webhook-bid-event-data.d.ts +1 -1
  376. package/dist/esm/models/webhook-bid-event-data.js +1 -1
  377. package/dist/esm/models/webhook-delivery-dto.d.ts +1 -1
  378. package/dist/esm/models/webhook-delivery-dto.js +1 -1
  379. package/dist/esm/models/webhook-endpoint-dto.d.ts +1 -1
  380. package/dist/esm/models/webhook-endpoint-dto.js +1 -1
  381. package/dist/esm/models/webhook-endpoint-with-secret-dto.d.ts +1 -1
  382. package/dist/esm/models/webhook-endpoint-with-secret-dto.js +1 -1
  383. package/dist/esm/models/webhook-event-envelope.d.ts +1 -1
  384. package/dist/esm/models/webhook-event-envelope.js +1 -1
  385. package/dist/esm/models/webhook-ping-event-data.d.ts +1 -1
  386. package/dist/esm/models/webhook-ping-event-data.js +1 -1
  387. package/dist/esm/models/webhook-test-result-dto.d.ts +1 -1
  388. package/dist/esm/models/webhook-test-result-dto.js +1 -1
  389. package/dist/index.d.ts +1 -1
  390. package/dist/index.js +1 -1
  391. package/dist/models/acceptance-result-response-dto.d.ts +1 -1
  392. package/dist/models/acceptance-result-response-dto.js +1 -1
  393. package/dist/models/acceptance-result-v1-response-dto.d.ts +1 -1
  394. package/dist/models/acceptance-result-v1-response-dto.js +1 -1
  395. package/dist/models/acknowledge-product-receipt200-response.d.ts +1 -1
  396. package/dist/models/acknowledge-product-receipt200-response.js +1 -1
  397. package/dist/models/acknowledge-products-request-dto.d.ts +1 -1
  398. package/dist/models/acknowledge-products-request-dto.js +1 -1
  399. package/dist/models/acknowledge-products-v1-request-dto.d.ts +1 -1
  400. package/dist/models/acknowledge-products-v1-request-dto.js +1 -1
  401. package/dist/models/api-catalog-dto.d.ts +1 -1
  402. package/dist/models/api-catalog-dto.js +1 -1
  403. package/dist/models/api-catalog-entry-dto.d.ts +1 -1
  404. package/dist/models/api-catalog-entry-dto.js +1 -1
  405. package/dist/models/api-catalog-link-dto.d.ts +1 -1
  406. package/dist/models/api-catalog-link-dto.js +1 -1
  407. package/dist/models/authorization-server-metadata-dto.d.ts +1 -1
  408. package/dist/models/authorization-server-metadata-dto.js +1 -1
  409. package/dist/models/award-method-public.d.ts +1 -1
  410. package/dist/models/award-method-public.js +1 -1
  411. package/dist/models/award-registered-response-dto.d.ts +1 -1
  412. package/dist/models/award-registered-response-dto.js +1 -1
  413. package/dist/models/award-registered-v2-response-dto.d.ts +1 -1
  414. package/dist/models/award-registered-v2-response-dto.js +1 -1
  415. package/dist/models/award-reverted-v2-response-dto.d.ts +1 -1
  416. package/dist/models/award-reverted-v2-response-dto.js +1 -1
  417. package/dist/models/bid-acceptance-dto.d.ts +1 -1
  418. package/dist/models/bid-acceptance-dto.js +1 -1
  419. package/dist/models/bid-attachment-v1-dto.d.ts +1 -1
  420. package/dist/models/bid-attachment-v1-dto.js +1 -1
  421. package/dist/models/bid-bond-dto.d.ts +1 -1
  422. package/dist/models/bid-bond-dto.js +1 -1
  423. package/dist/models/bid-bond-v1-dto.d.ts +1 -1
  424. package/dist/models/bid-bond-v1-dto.js +1 -1
  425. package/dist/models/bid-cancelled-response-dto.d.ts +1 -1
  426. package/dist/models/bid-cancelled-response-dto.js +1 -1
  427. package/dist/models/bid-contact-dto.d.ts +1 -1
  428. package/dist/models/bid-contact-dto.js +1 -1
  429. package/dist/models/bid-contacts-dto.d.ts +1 -1
  430. package/dist/models/bid-contacts-dto.js +1 -1
  431. package/dist/models/bid-contract-document-dto.d.ts +1 -1
  432. package/dist/models/bid-contract-document-dto.js +1 -1
  433. package/dist/models/bid-contract-documents-batch-v1-request-dto.d.ts +1 -1
  434. package/dist/models/bid-contract-documents-batch-v1-request-dto.js +1 -1
  435. package/dist/models/bid-contract-documents-v1-response-dto.d.ts +1 -1
  436. package/dist/models/bid-contract-documents-v1-response-dto.js +1 -1
  437. package/dist/models/bid-created-response-dto.d.ts +1 -1
  438. package/dist/models/bid-created-response-dto.js +1 -1
  439. package/dist/models/bid-delivery-terms-dto.d.ts +1 -1
  440. package/dist/models/bid-delivery-terms-dto.js +1 -1
  441. package/dist/models/bid-detail-response-dto.d.ts +1 -1
  442. package/dist/models/bid-detail-response-dto.js +1 -1
  443. package/dist/models/bid-document-dto.d.ts +1 -1
  444. package/dist/models/bid-document-dto.js +1 -1
  445. package/dist/models/bid-document-v1-dto.d.ts +1 -1
  446. package/dist/models/bid-document-v1-dto.js +1 -1
  447. package/dist/models/bid-failed-response-dto.d.ts +1 -1
  448. package/dist/models/bid-failed-response-dto.js +1 -1
  449. package/dist/models/bid-failed-v2-response-dto.d.ts +1 -1
  450. package/dist/models/bid-failed-v2-response-dto.js +1 -1
  451. package/dist/models/bid-failure-reason.d.ts +1 -1
  452. package/dist/models/bid-failure-reason.js +1 -1
  453. package/dist/models/bid-item-dto.d.ts +1 -1
  454. package/dist/models/bid-item-dto.js +1 -1
  455. package/dist/models/bid-item-v1-dto.d.ts +1 -1
  456. package/dist/models/bid-item-v1-dto.js +1 -1
  457. package/dist/models/bid-lifecycle-dto.d.ts +1 -1
  458. package/dist/models/bid-lifecycle-dto.js +1 -1
  459. package/dist/models/bid-manager-dto.d.ts +1 -1
  460. package/dist/models/bid-manager-dto.js +1 -1
  461. package/dist/models/bid-manager-v1-dto.d.ts +1 -1
  462. package/dist/models/bid-manager-v1-dto.js +1 -1
  463. package/dist/models/bid-payment-terms-dto.d.ts +1 -1
  464. package/dist/models/bid-payment-terms-dto.js +1 -1
  465. package/dist/models/bid-product-dto.d.ts +1 -1
  466. package/dist/models/bid-product-dto.js +1 -1
  467. package/dist/models/bid-public-status.d.ts +1 -1
  468. package/dist/models/bid-public-status.js +1 -1
  469. package/dist/models/bid-published-response-dto.d.ts +1 -1
  470. package/dist/models/bid-published-response-dto.js +1 -1
  471. package/dist/models/bid-registered-response-dto.d.ts +1 -1
  472. package/dist/models/bid-registered-response-dto.js +1 -1
  473. package/dist/models/bid-result-participant-attachment-dto.d.ts +1 -1
  474. package/dist/models/bid-result-participant-attachment-dto.js +1 -1
  475. package/dist/models/bid-result-participant-dto.d.ts +1 -1
  476. package/dist/models/bid-result-participant-dto.js +1 -1
  477. package/dist/models/bid-result-v1-attachment-dto.d.ts +1 -1
  478. package/dist/models/bid-result-v1-attachment-dto.js +1 -1
  479. package/dist/models/bid-result-v1-bid-product-info-dto.d.ts +1 -1
  480. package/dist/models/bid-result-v1-bid-product-info-dto.js +1 -1
  481. package/dist/models/bid-result-v1-participant-dto.d.ts +1 -1
  482. package/dist/models/bid-result-v1-participant-dto.js +1 -1
  483. package/dist/models/bid-result-v1-product-dto.d.ts +1 -1
  484. package/dist/models/bid-result-v1-product-dto.js +1 -1
  485. package/dist/models/bid-results-batch-v1-request-dto.d.ts +1 -1
  486. package/dist/models/bid-results-batch-v1-request-dto.js +1 -1
  487. package/dist/models/bid-results-response-dto.d.ts +1 -1
  488. package/dist/models/bid-results-response-dto.js +1 -1
  489. package/dist/models/bid-results-v1-response-dto.d.ts +1 -1
  490. package/dist/models/bid-results-v1-response-dto.js +1 -1
  491. package/dist/models/bid-settlement-line-item-dto.d.ts +1 -1
  492. package/dist/models/bid-settlement-line-item-dto.js +1 -1
  493. package/dist/models/bid-settlement-participant-dto.d.ts +1 -1
  494. package/dist/models/bid-settlement-participant-dto.js +1 -1
  495. package/dist/models/bid-settlement-response-dto.d.ts +1 -1
  496. package/dist/models/bid-settlement-response-dto.js +1 -1
  497. package/dist/models/bid-statement-response-dto.d.ts +1 -1
  498. package/dist/models/bid-statement-response-dto.js +1 -1
  499. package/dist/models/bid-statement-v1-response-dto.d.ts +1 -1
  500. package/dist/models/bid-statement-v1-response-dto.js +1 -1
  501. package/dist/models/bid-status.d.ts +1 -1
  502. package/dist/models/bid-status.js +1 -1
  503. package/dist/models/bid-summary-dto.d.ts +1 -1
  504. package/dist/models/bid-summary-dto.js +1 -1
  505. package/dist/models/bid-updated-response-dto.d.ts +1 -1
  506. package/dist/models/bid-updated-response-dto.js +1 -1
  507. package/dist/models/cancel-bid-request-dto.d.ts +1 -1
  508. package/dist/models/cancel-bid-request-dto.js +1 -1
  509. package/dist/models/cancel-bid200-response.d.ts +1 -1
  510. package/dist/models/cancel-bid200-response.js +1 -1
  511. package/dist/models/card-payment-request-response-dto.d.ts +1 -1
  512. package/dist/models/card-payment-request-response-dto.js +1 -1
  513. package/dist/models/complete-acceptance-request-dto.d.ts +1 -1
  514. package/dist/models/complete-acceptance-request-dto.js +1 -1
  515. package/dist/models/complete-acceptance-v1-request-dto.d.ts +1 -1
  516. package/dist/models/complete-acceptance-v1-request-dto.js +1 -1
  517. package/dist/models/complete-acceptance200-response.d.ts +1 -1
  518. package/dist/models/complete-acceptance200-response.js +1 -1
  519. package/dist/models/complete-invoice200-response.d.ts +1 -1
  520. package/dist/models/complete-invoice200-response.js +1 -1
  521. package/dist/models/contract-document-item-dto.d.ts +1 -1
  522. package/dist/models/contract-document-item-dto.js +1 -1
  523. package/dist/models/contract-documents-regenerated-response-dto.d.ts +1 -1
  524. package/dist/models/contract-documents-regenerated-response-dto.js +1 -1
  525. package/dist/models/contract-restriction-confirm-input-dto.d.ts +1 -1
  526. package/dist/models/contract-restriction-confirm-input-dto.js +1 -1
  527. package/dist/models/create-bid-request-dto.d.ts +1 -1
  528. package/dist/models/create-bid-request-dto.js +1 -1
  529. package/dist/models/create-bid-v1-request-dto.d.ts +1 -1
  530. package/dist/models/create-bid-v1-request-dto.js +1 -1
  531. package/dist/models/create-card-payment-request-dto.d.ts +1 -1
  532. package/dist/models/create-card-payment-request-dto.js +1 -1
  533. package/dist/models/create-card-payment200-response.d.ts +1 -1
  534. package/dist/models/create-card-payment200-response.js +1 -1
  535. package/dist/models/create-external-contract-documents-request-dto.d.ts +1 -1
  536. package/dist/models/create-external-contract-documents-request-dto.js +1 -1
  537. package/dist/models/create-external-contract-documents-response-dto.d.ts +1 -1
  538. package/dist/models/create-external-contract-documents-response-dto.js +1 -1
  539. package/dist/models/create-webhook-endpoint-request-dto.d.ts +1 -1
  540. package/dist/models/create-webhook-endpoint-request-dto.js +1 -1
  541. package/dist/models/create-webhook-endpoint201-response.d.ts +1 -1
  542. package/dist/models/create-webhook-endpoint201-response.js +1 -1
  543. package/dist/models/external-contract-document-item-dto.d.ts +1 -1
  544. package/dist/models/external-contract-document-item-dto.js +1 -1
  545. package/dist/models/external-contract-documents-response-dto.d.ts +1 -1
  546. package/dist/models/external-contract-documents-response-dto.js +1 -1
  547. package/dist/models/external-contract-item-dto.d.ts +1 -1
  548. package/dist/models/external-contract-item-dto.js +1 -1
  549. package/dist/models/external-contract-snapshot-dto.d.ts +1 -1
  550. package/dist/models/external-contract-snapshot-dto.js +1 -1
  551. package/dist/models/external-document-inputs-dto.d.ts +1 -1
  552. package/dist/models/external-document-inputs-dto.js +1 -1
  553. package/dist/models/file-meta-response-dto.d.ts +1 -1
  554. package/dist/models/file-meta-response-dto.js +1 -1
  555. package/dist/models/file-uploaded-response-dto.d.ts +1 -1
  556. package/dist/models/file-uploaded-response-dto.js +1 -1
  557. package/dist/models/file-uploaded-v1-response-dto.d.ts +1 -1
  558. package/dist/models/file-uploaded-v1-response-dto.js +1 -1
  559. package/dist/models/generated-external-contract-document-dto.d.ts +1 -1
  560. package/dist/models/generated-external-contract-document-dto.js +1 -1
  561. package/dist/models/get-bid-results200-response.d.ts +1 -1
  562. package/dist/models/get-bid-results200-response.js +1 -1
  563. package/dist/models/get-bid-settlement200-response.d.ts +1 -1
  564. package/dist/models/get-bid-settlement200-response.js +1 -1
  565. package/dist/models/get-bid-statement200-response.d.ts +1 -1
  566. package/dist/models/get-bid-statement200-response.js +1 -1
  567. package/dist/models/get-bid200-response.d.ts +1 -1
  568. package/dist/models/get-bid200-response.js +1 -1
  569. package/dist/models/get-file-meta200-response.d.ts +1 -1
  570. package/dist/models/get-file-meta200-response.js +1 -1
  571. package/dist/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
  572. package/dist/models/get-supplier-card-payable-v2200-response.js +1 -1
  573. package/dist/models/get-webhook-endpoint200-response.d.ts +1 -1
  574. package/dist/models/get-webhook-endpoint200-response.js +1 -1
  575. package/dist/models/health-controller-check200-response.d.ts +1 -1
  576. package/dist/models/health-controller-check200-response.js +1 -1
  577. package/dist/models/health-response-dto.d.ts +1 -1
  578. package/dist/models/health-response-dto.js +1 -1
  579. package/dist/models/hierarchical-region-dto.d.ts +1 -1
  580. package/dist/models/hierarchical-region-dto.js +1 -1
  581. package/dist/models/hierarchical-region-v1-dto.d.ts +1 -1
  582. package/dist/models/hierarchical-region-v1-dto.js +1 -1
  583. package/dist/models/index.d.ts +0 -6
  584. package/dist/models/index.js +0 -6
  585. package/dist/models/introspect-request-dto.d.ts +1 -1
  586. package/dist/models/introspect-request-dto.js +1 -1
  587. package/dist/models/introspection-response-dto.d.ts +1 -1
  588. package/dist/models/introspection-response-dto.js +1 -1
  589. package/dist/models/invalid-param-dto.d.ts +1 -1
  590. package/dist/models/invalid-param-dto.js +1 -1
  591. package/dist/models/invoice-completed-response-dto.d.ts +1 -1
  592. package/dist/models/invoice-completed-response-dto.js +1 -1
  593. package/dist/models/list-bid-results200-response.d.ts +1 -1
  594. package/dist/models/list-bid-results200-response.js +1 -1
  595. package/dist/models/list-bids-response-dto.d.ts +1 -1
  596. package/dist/models/list-bids-response-dto.js +1 -1
  597. package/dist/models/list-bids200-response.d.ts +1 -1
  598. package/dist/models/list-bids200-response.js +1 -1
  599. package/dist/models/list-products200-response.d.ts +1 -1
  600. package/dist/models/list-products200-response.js +1 -1
  601. package/dist/models/list-webhook-deliveries-response-dto.d.ts +1 -1
  602. package/dist/models/list-webhook-deliveries-response-dto.js +1 -1
  603. package/dist/models/list-webhook-deliveries200-response.d.ts +1 -1
  604. package/dist/models/list-webhook-deliveries200-response.js +1 -1
  605. package/dist/models/list-webhook-endpoints200-response.d.ts +1 -1
  606. package/dist/models/list-webhook-endpoints200-response.js +1 -1
  607. package/dist/models/mark-bid-failed-request-dto.d.ts +1 -1
  608. package/dist/models/mark-bid-failed-request-dto.js +1 -1
  609. package/dist/models/mark-bid-failed-v1-request-dto.d.ts +1 -1
  610. package/dist/models/mark-bid-failed-v1-request-dto.js +1 -1
  611. package/dist/models/mark-bid-failed201-response.d.ts +1 -1
  612. package/dist/models/mark-bid-failed201-response.js +1 -1
  613. package/dist/models/negotiation-score-v1-dto.d.ts +1 -1
  614. package/dist/models/negotiation-score-v1-dto.js +1 -1
  615. package/dist/models/negotiation-scored-response-dto.d.ts +1 -1
  616. package/dist/models/negotiation-scored-response-dto.js +1 -1
  617. package/dist/models/oauth-error-response-dto.d.ts +1 -1
  618. package/dist/models/oauth-error-response-dto.js +1 -1
  619. package/dist/models/on-bid-award-reverted-request.d.ts +1 -1
  620. package/dist/models/on-bid-award-reverted-request.js +1 -1
  621. package/dist/models/on-bid-awarded-request.d.ts +1 -1
  622. package/dist/models/on-bid-awarded-request.js +1 -1
  623. package/dist/models/on-bid-canceled-request.d.ts +1 -1
  624. package/dist/models/on-bid-canceled-request.js +1 -1
  625. package/dist/models/on-bid-closed-request.d.ts +1 -1
  626. package/dist/models/on-bid-closed-request.js +1 -1
  627. package/dist/models/on-bid-failed-request.d.ts +1 -1
  628. package/dist/models/on-bid-failed-request.js +1 -1
  629. package/dist/models/on-ping-request.d.ts +1 -1
  630. package/dist/models/on-ping-request.js +1 -1
  631. package/dist/models/partner-webhook-delivery-status.d.ts +1 -1
  632. package/dist/models/partner-webhook-delivery-status.js +1 -1
  633. package/dist/models/partner-webhook-endpoint-status.d.ts +1 -1
  634. package/dist/models/partner-webhook-endpoint-status.js +1 -1
  635. package/dist/models/partner-webhook-event-type.d.ts +1 -1
  636. package/dist/models/partner-webhook-event-type.js +1 -1
  637. package/dist/models/preconditions-dto.d.ts +1 -1
  638. package/dist/models/preconditions-dto.js +1 -1
  639. package/dist/models/preconditions-v1-dto.d.ts +1 -1
  640. package/dist/models/preconditions-v1-dto.js +1 -1
  641. package/dist/models/problem-details-dto.d.ts +1 -1
  642. package/dist/models/problem-details-dto.js +1 -1
  643. package/dist/models/product-receipt-response-dto.d.ts +1 -1
  644. package/dist/models/product-receipt-response-dto.js +1 -1
  645. package/dist/models/product-receipt-v1-response-dto.d.ts +1 -1
  646. package/dist/models/product-receipt-v1-response-dto.js +1 -1
  647. package/dist/models/product-response-dto.d.ts +1 -1
  648. package/dist/models/product-response-dto.js +1 -1
  649. package/dist/models/product-v1-response-dto.d.ts +1 -1
  650. package/dist/models/product-v1-response-dto.js +1 -1
  651. package/dist/models/protected-resource-metadata-dto.d.ts +1 -1
  652. package/dist/models/protected-resource-metadata-dto.js +1 -1
  653. package/dist/models/publish-bid200-response.d.ts +1 -1
  654. package/dist/models/publish-bid200-response.js +1 -1
  655. package/dist/models/regenerate-contract-documents201-response.d.ts +1 -1
  656. package/dist/models/regenerate-contract-documents201-response.js +1 -1
  657. package/dist/models/register-award-request-dto.d.ts +1 -1
  658. package/dist/models/register-award-request-dto.js +1 -1
  659. package/dist/models/register-award-v1-request-dto.d.ts +1 -1
  660. package/dist/models/register-award-v1-request-dto.js +1 -1
  661. package/dist/models/register-award201-response.d.ts +1 -1
  662. package/dist/models/register-award201-response.js +1 -1
  663. package/dist/models/register-bid201-response.d.ts +1 -1
  664. package/dist/models/register-bid201-response.js +1 -1
  665. package/dist/models/register-semo-contract-request-dto.d.ts +1 -1
  666. package/dist/models/register-semo-contract-request-dto.js +1 -1
  667. package/dist/models/request-split-invoice-v1-request-dto.d.ts +1 -1
  668. package/dist/models/request-split-invoice-v1-request-dto.js +1 -1
  669. package/dist/models/retiree-roster-input-dto.d.ts +1 -1
  670. package/dist/models/retiree-roster-input-dto.js +1 -1
  671. package/dist/models/retiree-roster-row-dto.d.ts +1 -1
  672. package/dist/models/retiree-roster-row-dto.js +1 -1
  673. package/dist/models/revert-award-request-dto.d.ts +1 -1
  674. package/dist/models/revert-award-request-dto.js +1 -1
  675. package/dist/models/revert-award200-response.d.ts +1 -1
  676. package/dist/models/revert-award200-response.js +1 -1
  677. package/dist/models/revoke-request-dto.d.ts +1 -1
  678. package/dist/models/revoke-request-dto.js +1 -1
  679. package/dist/models/semo-contract-registered-response-dto.d.ts +1 -1
  680. package/dist/models/semo-contract-registered-response-dto.js +1 -1
  681. package/dist/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
  682. package/dist/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
  683. package/dist/models/send-webhook-test-event200-response.d.ts +1 -1
  684. package/dist/models/send-webhook-test-event200-response.js +1 -1
  685. package/dist/models/split-invoice-v1-response-dto.d.ts +1 -1
  686. package/dist/models/split-invoice-v1-response-dto.js +1 -1
  687. package/dist/models/statement-document-dto.d.ts +1 -1
  688. package/dist/models/statement-document-dto.js +1 -1
  689. package/dist/models/statement-product-dto.d.ts +1 -1
  690. package/dist/models/statement-product-dto.js +1 -1
  691. package/dist/models/statement-v1-document-dto.d.ts +1 -1
  692. package/dist/models/statement-v1-document-dto.js +1 -1
  693. package/dist/models/statement-v1-product-dto.d.ts +1 -1
  694. package/dist/models/statement-v1-product-dto.js +1 -1
  695. package/dist/models/submit-negotiation-scores-v1-request-dto.d.ts +1 -1
  696. package/dist/models/submit-negotiation-scores-v1-request-dto.js +1 -1
  697. package/dist/models/supplier-card-payable-response-dto.d.ts +1 -1
  698. package/dist/models/supplier-card-payable-response-dto.js +1 -1
  699. package/dist/models/supplier-tax-type.d.ts +1 -1
  700. package/dist/models/supplier-tax-type.js +1 -1
  701. package/dist/models/token-request-dto.d.ts +1 -1
  702. package/dist/models/token-request-dto.js +1 -1
  703. package/dist/models/token-response-dto.d.ts +1 -1
  704. package/dist/models/token-response-dto.js +1 -1
  705. package/dist/models/update-bid-request-dto.d.ts +1 -1
  706. package/dist/models/update-bid-request-dto.js +1 -1
  707. package/dist/models/update-bid200-response.d.ts +1 -1
  708. package/dist/models/update-bid200-response.js +1 -1
  709. package/dist/models/update-webhook-endpoint-request-dto.d.ts +1 -1
  710. package/dist/models/update-webhook-endpoint-request-dto.js +1 -1
  711. package/dist/models/upload-file-request-dto.d.ts +1 -1
  712. package/dist/models/upload-file-request-dto.js +1 -1
  713. package/dist/models/upload-file-v1-request-dto.d.ts +1 -1
  714. package/dist/models/upload-file-v1-request-dto.js +1 -1
  715. package/dist/models/upload-file201-response.d.ts +1 -1
  716. package/dist/models/upload-file201-response.js +1 -1
  717. package/dist/models/webhook-bid-event-data.d.ts +1 -1
  718. package/dist/models/webhook-bid-event-data.js +1 -1
  719. package/dist/models/webhook-delivery-dto.d.ts +1 -1
  720. package/dist/models/webhook-delivery-dto.js +1 -1
  721. package/dist/models/webhook-endpoint-dto.d.ts +1 -1
  722. package/dist/models/webhook-endpoint-dto.js +1 -1
  723. package/dist/models/webhook-endpoint-with-secret-dto.d.ts +1 -1
  724. package/dist/models/webhook-endpoint-with-secret-dto.js +1 -1
  725. package/dist/models/webhook-event-envelope.d.ts +1 -1
  726. package/dist/models/webhook-event-envelope.js +1 -1
  727. package/dist/models/webhook-ping-event-data.d.ts +1 -1
  728. package/dist/models/webhook-ping-event-data.js +1 -1
  729. package/dist/models/webhook-test-result-dto.d.ts +1 -1
  730. package/dist/models/webhook-test-result-dto.js +1 -1
  731. package/docs/PartnerV2Api.md +0 -237
  732. package/index.ts +1 -1
  733. package/models/acceptance-result-response-dto.ts +1 -1
  734. package/models/acceptance-result-v1-response-dto.ts +1 -1
  735. package/models/acknowledge-product-receipt200-response.ts +1 -1
  736. package/models/acknowledge-products-request-dto.ts +1 -1
  737. package/models/acknowledge-products-v1-request-dto.ts +1 -1
  738. package/models/api-catalog-dto.ts +1 -1
  739. package/models/api-catalog-entry-dto.ts +1 -1
  740. package/models/api-catalog-link-dto.ts +1 -1
  741. package/models/authorization-server-metadata-dto.ts +1 -1
  742. package/models/award-method-public.ts +1 -1
  743. package/models/award-registered-response-dto.ts +1 -1
  744. package/models/award-registered-v2-response-dto.ts +1 -1
  745. package/models/award-reverted-v2-response-dto.ts +1 -1
  746. package/models/bid-acceptance-dto.ts +1 -1
  747. package/models/bid-attachment-v1-dto.ts +1 -1
  748. package/models/bid-bond-dto.ts +1 -1
  749. package/models/bid-bond-v1-dto.ts +1 -1
  750. package/models/bid-cancelled-response-dto.ts +1 -1
  751. package/models/bid-contact-dto.ts +1 -1
  752. package/models/bid-contacts-dto.ts +1 -1
  753. package/models/bid-contract-document-dto.ts +1 -1
  754. package/models/bid-contract-documents-batch-v1-request-dto.ts +1 -1
  755. package/models/bid-contract-documents-v1-response-dto.ts +1 -1
  756. package/models/bid-created-response-dto.ts +1 -1
  757. package/models/bid-delivery-terms-dto.ts +1 -1
  758. package/models/bid-detail-response-dto.ts +1 -1
  759. package/models/bid-document-dto.ts +1 -1
  760. package/models/bid-document-v1-dto.ts +1 -1
  761. package/models/bid-failed-response-dto.ts +1 -1
  762. package/models/bid-failed-v2-response-dto.ts +1 -1
  763. package/models/bid-failure-reason.ts +1 -1
  764. package/models/bid-item-dto.ts +1 -1
  765. package/models/bid-item-v1-dto.ts +1 -1
  766. package/models/bid-lifecycle-dto.ts +1 -1
  767. package/models/bid-manager-dto.ts +1 -1
  768. package/models/bid-manager-v1-dto.ts +1 -1
  769. package/models/bid-payment-terms-dto.ts +1 -1
  770. package/models/bid-product-dto.ts +1 -1
  771. package/models/bid-public-status.ts +1 -1
  772. package/models/bid-published-response-dto.ts +1 -1
  773. package/models/bid-registered-response-dto.ts +1 -1
  774. package/models/bid-result-participant-attachment-dto.ts +1 -1
  775. package/models/bid-result-participant-dto.ts +1 -1
  776. package/models/bid-result-v1-attachment-dto.ts +1 -1
  777. package/models/bid-result-v1-bid-product-info-dto.ts +1 -1
  778. package/models/bid-result-v1-participant-dto.ts +1 -1
  779. package/models/bid-result-v1-product-dto.ts +1 -1
  780. package/models/bid-results-batch-v1-request-dto.ts +1 -1
  781. package/models/bid-results-response-dto.ts +1 -1
  782. package/models/bid-results-v1-response-dto.ts +1 -1
  783. package/models/bid-settlement-line-item-dto.ts +1 -1
  784. package/models/bid-settlement-participant-dto.ts +1 -1
  785. package/models/bid-settlement-response-dto.ts +1 -1
  786. package/models/bid-statement-response-dto.ts +1 -1
  787. package/models/bid-statement-v1-response-dto.ts +1 -1
  788. package/models/bid-status.ts +1 -1
  789. package/models/bid-summary-dto.ts +1 -1
  790. package/models/bid-updated-response-dto.ts +1 -1
  791. package/models/cancel-bid-request-dto.ts +1 -1
  792. package/models/cancel-bid200-response.ts +1 -1
  793. package/models/card-payment-request-response-dto.ts +1 -1
  794. package/models/complete-acceptance-request-dto.ts +1 -1
  795. package/models/complete-acceptance-v1-request-dto.ts +1 -1
  796. package/models/complete-acceptance200-response.ts +1 -1
  797. package/models/complete-invoice200-response.ts +1 -1
  798. package/models/contract-document-item-dto.ts +1 -1
  799. package/models/contract-documents-regenerated-response-dto.ts +1 -1
  800. package/models/contract-restriction-confirm-input-dto.ts +1 -1
  801. package/models/create-bid-request-dto.ts +1 -1
  802. package/models/create-bid-v1-request-dto.ts +1 -1
  803. package/models/create-card-payment-request-dto.ts +1 -1
  804. package/models/create-card-payment200-response.ts +1 -1
  805. package/models/create-external-contract-documents-request-dto.ts +1 -1
  806. package/models/create-external-contract-documents-response-dto.ts +1 -1
  807. package/models/create-webhook-endpoint-request-dto.ts +1 -1
  808. package/models/create-webhook-endpoint201-response.ts +1 -1
  809. package/models/external-contract-document-item-dto.ts +1 -1
  810. package/models/external-contract-documents-response-dto.ts +1 -1
  811. package/models/external-contract-item-dto.ts +1 -1
  812. package/models/external-contract-snapshot-dto.ts +1 -1
  813. package/models/external-document-inputs-dto.ts +1 -1
  814. package/models/file-meta-response-dto.ts +1 -1
  815. package/models/file-uploaded-response-dto.ts +1 -1
  816. package/models/file-uploaded-v1-response-dto.ts +1 -1
  817. package/models/generated-external-contract-document-dto.ts +1 -1
  818. package/models/get-bid-results200-response.ts +1 -1
  819. package/models/get-bid-settlement200-response.ts +1 -1
  820. package/models/get-bid-statement200-response.ts +1 -1
  821. package/models/get-bid200-response.ts +1 -1
  822. package/models/get-file-meta200-response.ts +1 -1
  823. package/models/get-supplier-card-payable-v2200-response.ts +1 -1
  824. package/models/get-webhook-endpoint200-response.ts +1 -1
  825. package/models/health-controller-check200-response.ts +1 -1
  826. package/models/health-response-dto.ts +1 -1
  827. package/models/hierarchical-region-dto.ts +1 -1
  828. package/models/hierarchical-region-v1-dto.ts +1 -1
  829. package/models/index.ts +0 -6
  830. package/models/introspect-request-dto.ts +1 -1
  831. package/models/introspection-response-dto.ts +1 -1
  832. package/models/invalid-param-dto.ts +1 -1
  833. package/models/invoice-completed-response-dto.ts +1 -1
  834. package/models/list-bid-results200-response.ts +1 -1
  835. package/models/list-bids-response-dto.ts +1 -1
  836. package/models/list-bids200-response.ts +1 -1
  837. package/models/list-products200-response.ts +1 -1
  838. package/models/list-webhook-deliveries-response-dto.ts +1 -1
  839. package/models/list-webhook-deliveries200-response.ts +1 -1
  840. package/models/list-webhook-endpoints200-response.ts +1 -1
  841. package/models/mark-bid-failed-request-dto.ts +1 -1
  842. package/models/mark-bid-failed-v1-request-dto.ts +1 -1
  843. package/models/mark-bid-failed201-response.ts +1 -1
  844. package/models/negotiation-score-v1-dto.ts +1 -1
  845. package/models/negotiation-scored-response-dto.ts +1 -1
  846. package/models/oauth-error-response-dto.ts +1 -1
  847. package/models/on-bid-award-reverted-request.ts +1 -1
  848. package/models/on-bid-awarded-request.ts +1 -1
  849. package/models/on-bid-canceled-request.ts +1 -1
  850. package/models/on-bid-closed-request.ts +1 -1
  851. package/models/on-bid-failed-request.ts +1 -1
  852. package/models/on-ping-request.ts +1 -1
  853. package/models/partner-webhook-delivery-status.ts +1 -1
  854. package/models/partner-webhook-endpoint-status.ts +1 -1
  855. package/models/partner-webhook-event-type.ts +1 -1
  856. package/models/preconditions-dto.ts +1 -1
  857. package/models/preconditions-v1-dto.ts +1 -1
  858. package/models/problem-details-dto.ts +1 -1
  859. package/models/product-receipt-response-dto.ts +1 -1
  860. package/models/product-receipt-v1-response-dto.ts +1 -1
  861. package/models/product-response-dto.ts +1 -1
  862. package/models/product-v1-response-dto.ts +1 -1
  863. package/models/protected-resource-metadata-dto.ts +1 -1
  864. package/models/publish-bid200-response.ts +1 -1
  865. package/models/regenerate-contract-documents201-response.ts +1 -1
  866. package/models/register-award-request-dto.ts +1 -1
  867. package/models/register-award-v1-request-dto.ts +1 -1
  868. package/models/register-award201-response.ts +1 -1
  869. package/models/register-bid201-response.ts +1 -1
  870. package/models/register-semo-contract-request-dto.ts +1 -1
  871. package/models/request-split-invoice-v1-request-dto.ts +1 -1
  872. package/models/retiree-roster-input-dto.ts +1 -1
  873. package/models/retiree-roster-row-dto.ts +1 -1
  874. package/models/revert-award-request-dto.ts +1 -1
  875. package/models/revert-award200-response.ts +1 -1
  876. package/models/revoke-request-dto.ts +1 -1
  877. package/models/semo-contract-registered-response-dto.ts +1 -1
  878. package/models/semo-contract-taxinvoice-status-response-dto.ts +1 -1
  879. package/models/send-webhook-test-event200-response.ts +1 -1
  880. package/models/split-invoice-v1-response-dto.ts +1 -1
  881. package/models/statement-document-dto.ts +1 -1
  882. package/models/statement-product-dto.ts +1 -1
  883. package/models/statement-v1-document-dto.ts +1 -1
  884. package/models/statement-v1-product-dto.ts +1 -1
  885. package/models/submit-negotiation-scores-v1-request-dto.ts +1 -1
  886. package/models/supplier-card-payable-response-dto.ts +1 -1
  887. package/models/supplier-tax-type.ts +1 -1
  888. package/models/token-request-dto.ts +1 -1
  889. package/models/token-response-dto.ts +1 -1
  890. package/models/update-bid-request-dto.ts +1 -1
  891. package/models/update-bid200-response.ts +1 -1
  892. package/models/update-webhook-endpoint-request-dto.ts +1 -1
  893. package/models/upload-file-request-dto.ts +1 -1
  894. package/models/upload-file-v1-request-dto.ts +1 -1
  895. package/models/upload-file201-response.ts +1 -1
  896. package/models/webhook-bid-event-data.ts +1 -1
  897. package/models/webhook-delivery-dto.ts +1 -1
  898. package/models/webhook-endpoint-dto.ts +1 -1
  899. package/models/webhook-endpoint-with-secret-dto.ts +1 -1
  900. package/models/webhook-event-envelope.ts +1 -1
  901. package/models/webhook-ping-event-data.ts +1 -1
  902. package/models/webhook-test-result-dto.ts +1 -1
  903. package/package.json +1 -1
  904. package/dist/esm/models/acceptance-status-response-dto.d.ts +0 -33
  905. package/dist/esm/models/acceptance-status-response-dto.js +0 -14
  906. package/dist/esm/models/bid-participant-summary-dto.d.ts +0 -29
  907. package/dist/esm/models/bid-participant-summary-dto.js +0 -14
  908. package/dist/esm/models/bid-results-batch-request-dto.d.ts +0 -17
  909. package/dist/esm/models/bid-results-batch-request-dto.js +0 -14
  910. package/dist/esm/models/get-bid-acceptance200-response.d.ts +0 -21
  911. package/dist/esm/models/get-bid-acceptance200-response.js +0 -14
  912. package/dist/esm/models/list-bid-contract-documents200-response.d.ts +0 -21
  913. package/dist/esm/models/list-bid-contract-documents200-response.js +0 -14
  914. package/dist/esm/models/list-bid-participants200-response.d.ts +0 -21
  915. package/dist/esm/models/list-bid-participants200-response.js +0 -14
  916. package/dist/models/acceptance-status-response-dto.d.ts +0 -33
  917. package/dist/models/acceptance-status-response-dto.js +0 -15
  918. package/dist/models/bid-participant-summary-dto.d.ts +0 -29
  919. package/dist/models/bid-participant-summary-dto.js +0 -15
  920. package/dist/models/bid-results-batch-request-dto.d.ts +0 -17
  921. package/dist/models/bid-results-batch-request-dto.js +0 -15
  922. package/dist/models/get-bid-acceptance200-response.d.ts +0 -21
  923. package/dist/models/get-bid-acceptance200-response.js +0 -15
  924. package/dist/models/list-bid-contract-documents200-response.d.ts +0 -21
  925. package/dist/models/list-bid-contract-documents200-response.js +0 -15
  926. package/dist/models/list-bid-participants200-response.d.ts +0 -21
  927. package/dist/models/list-bid-participants200-response.js +0 -15
  928. package/docs/AcceptanceStatusResponseDto.md +0 -28
  929. package/docs/BidParticipantSummaryDto.md +0 -26
  930. package/docs/BidResultsBatchRequestDto.md +0 -20
  931. package/docs/GetBidAcceptance200Response.md +0 -22
  932. package/docs/ListBidContractDocuments200Response.md +0 -22
  933. package/docs/ListBidParticipants200Response.md +0 -22
  934. package/models/acceptance-status-response-dto.ts +0 -39
  935. package/models/bid-participant-summary-dto.ts +0 -35
  936. package/models/bid-results-batch-request-dto.ts +0 -23
  937. package/models/get-bid-acceptance200-response.ts +0 -27
  938. package/models/list-bid-contract-documents200-response.ts +0 -27
  939. package/models/list-bid-participants200-response.ts +0 -27
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
package/models/index.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  export * from './acceptance-result-response-dto';
2
2
  export * from './acceptance-result-v1-response-dto';
3
- export * from './acceptance-status-response-dto';
4
3
  export * from './acknowledge-product-receipt200-response';
5
4
  export * from './acknowledge-products-request-dto';
6
5
  export * from './acknowledge-products-v1-request-dto';
@@ -35,7 +34,6 @@ export * from './bid-item-v1-dto';
35
34
  export * from './bid-lifecycle-dto';
36
35
  export * from './bid-manager-dto';
37
36
  export * from './bid-manager-v1-dto';
38
- export * from './bid-participant-summary-dto';
39
37
  export * from './bid-payment-terms-dto';
40
38
  export * from './bid-product-dto';
41
39
  export * from './bid-public-status';
@@ -47,7 +45,6 @@ export * from './bid-result-v1-attachment-dto';
47
45
  export * from './bid-result-v1-bid-product-info-dto';
48
46
  export * from './bid-result-v1-participant-dto';
49
47
  export * from './bid-result-v1-product-dto';
50
- export * from './bid-results-batch-request-dto';
51
48
  export * from './bid-results-batch-v1-request-dto';
52
49
  export * from './bid-results-response-dto';
53
50
  export * from './bid-results-v1-response-dto';
@@ -87,7 +84,6 @@ export * from './file-uploaded-response-dto';
87
84
  export * from './file-uploaded-v1-response-dto';
88
85
  export * from './generated-external-contract-document-dto';
89
86
  export * from './get-bid200-response';
90
- export * from './get-bid-acceptance200-response';
91
87
  export * from './get-bid-results200-response';
92
88
  export * from './get-bid-settlement200-response';
93
89
  export * from './get-bid-statement200-response';
@@ -102,8 +98,6 @@ export * from './introspect-request-dto';
102
98
  export * from './introspection-response-dto';
103
99
  export * from './invalid-param-dto';
104
100
  export * from './invoice-completed-response-dto';
105
- export * from './list-bid-contract-documents200-response';
106
- export * from './list-bid-participants200-response';
107
101
  export * from './list-bid-results200-response';
108
102
  export * from './list-bids200-response';
109
103
  export * from './list-bids-response-dto';
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 버전별 인증 - **_/v2** β€” OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰 λ°œκΈ‰ ν›„ `Authorization: Bearer <token>` 헀더. - **_/v1** β€” V5 μΆ©μ‹€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν—€λ”λ‘œ 전솑. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € ꡬ뢄할 것. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 이닀. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λœλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•  것. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. λͺ©λ‘μ²˜λŸΌ λΆ€κ°€ 정보가 μžˆλŠ” 응닡은 `meta` κ°€ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€ β€” 예: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"…\" } }`. λΆ€κ°€ 정보가 μ—†μœΌλ©΄ `meta` ν‚€λŠ” μ•„μ˜ˆ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(빈 객체λ₯Ό μ‹£μ§€ μ•ŠμŠ΅λ‹ˆλ‹€). λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ μ…‹μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , `/v1/_*` 은 λ™κ²°λœ λ ˆκ±°μ‹œ ν‘œλ©΄μ΄λ©°, 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. 호좜 횟수 자체λ₯Ό 쀄이렀면 웹훅을 μ‚¬μš©ν•˜μ„Έμš”. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`. μ†ŒλΉ„μžλŠ” **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•œλ‹€. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„, `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•œλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**λ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠλŠ”λ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“Έ 것. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ λͺ…μ‹œλΌ μžˆλ‹€. μƒˆ slug 은 좔가될 수 μžˆμœΌλ―€λ‘œ, λͺ¨λ₯΄λŠ” slug 을 λ§Œλ‚˜λ©΄ `type` 이 μ•„λ‹ˆλΌ **HTTP status 둜 폴백**ν•˜λ„λ‘ κ΅¬ν˜„ν•  것. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**이닀. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨λ‹€. μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό 되돌릴 것. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„**. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°„λ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“Έ 것. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•œλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•œλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•  것. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•œλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦°λ‹€. ## 버전 수λͺ…(deprecation/sunset) - **_/v1** 은 λ ˆκ±°μ‹œ V5 cutover μ™„λ£Œ μ‹œμ κΉŒμ§€ μœ μ§€λ˜λŠ” μΆ©μ‹€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€. 폐지 일정이 μ •ν•΄μ§€λ©΄ /v1 응닡에 헀더 μ„Έ κ°œκ°€ μ‹€λ¦½λ‹ˆλ‹€ β€” `Deprecation`(RFC 9745, `@<epoch초>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β€” 이전 μ•ˆλ‚΄ λ¬Έμ„œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€). 일정이 μ •ν•΄μ§€κΈ° μ „μ—λŠ” μ…‹ λ‹€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ’…λ£ŒμΌμ΄ μ§€λ‚œ λ’€μ˜ ν˜ΈμΆœμ€ `404` κ°€ μ•„λ‹ˆλΌ **`410 Gone`** κ³Ό `type: …/endpoint-sunset` 으둜 κ±°μ ˆλ©λ‹ˆλ‹€. λ‘˜μ˜ 뜻이 λ‹€λ¦…λ‹ˆλ‹€ β€” `404` λŠ” \"그런 것이 μžˆμ—ˆλŠ”μ§€ λͺ¨λ₯΄κ² λ‹€\", `410` 은 \"μžˆμ—ˆκ³  μ˜λ„μ μœΌλ‘œ μ—†μ•΄λ‹€\" μž…λ‹ˆλ‹€. `410` 을 λ°›μœΌλ©΄ 경둜 μ˜€νƒ€λ₯Ό μ˜μ‹¬ν•˜μ§€ 말고 /v2 둜 μ΄μ „ν•˜μ„Έμš”. - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•œλ‹€. μ†ŒλΉ„μžλŠ” 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•  것.
6
6
  *
7
- * The version of the OpenAPI document: 32.0.0
7
+ * The version of the OpenAPI document: 33.0.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).