@cmarket/partner-sdk 42.0.2 β†’ 43.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (823) hide show
  1. package/README.md +4 -9
  2. package/api/embed-api.ts +5 -5
  3. package/api/oauth-api.ts +1 -1
  4. package/api/partner-api-api.ts +5 -98
  5. package/api/products-api.ts +1 -1
  6. package/api/webhooks-api.ts +1 -1
  7. package/api/well-known-api.ts +1 -1
  8. package/api.ts +1 -1
  9. package/base.ts +1 -1
  10. package/common.ts +1 -1
  11. package/configuration.ts +1 -1
  12. package/dist/api/embed-api.d.ts +5 -5
  13. package/dist/api/embed-api.js +5 -5
  14. package/dist/api/oauth-api.d.ts +1 -1
  15. package/dist/api/oauth-api.js +1 -1
  16. package/dist/api/partner-api-api.d.ts +5 -47
  17. package/dist/api/partner-api-api.js +5 -91
  18. package/dist/api/products-api.d.ts +1 -1
  19. package/dist/api/products-api.js +1 -1
  20. package/dist/api/webhooks-api.d.ts +1 -1
  21. package/dist/api/webhooks-api.js +1 -1
  22. package/dist/api/well-known-api.d.ts +1 -1
  23. package/dist/api/well-known-api.js +1 -1
  24. package/dist/api.d.ts +1 -1
  25. package/dist/api.js +1 -1
  26. package/dist/base.d.ts +1 -1
  27. package/dist/base.js +1 -1
  28. package/dist/common.d.ts +1 -1
  29. package/dist/common.js +1 -1
  30. package/dist/configuration.d.ts +1 -1
  31. package/dist/configuration.js +1 -1
  32. package/dist/esm/api/embed-api.d.ts +5 -5
  33. package/dist/esm/api/embed-api.js +5 -5
  34. package/dist/esm/api/oauth-api.d.ts +1 -1
  35. package/dist/esm/api/oauth-api.js +1 -1
  36. package/dist/esm/api/partner-api-api.d.ts +5 -47
  37. package/dist/esm/api/partner-api-api.js +5 -91
  38. package/dist/esm/api/products-api.d.ts +1 -1
  39. package/dist/esm/api/products-api.js +1 -1
  40. package/dist/esm/api/webhooks-api.d.ts +1 -1
  41. package/dist/esm/api/webhooks-api.js +1 -1
  42. package/dist/esm/api/well-known-api.d.ts +1 -1
  43. package/dist/esm/api/well-known-api.js +1 -1
  44. package/dist/esm/api.d.ts +1 -1
  45. package/dist/esm/api.js +1 -1
  46. package/dist/esm/base.d.ts +1 -1
  47. package/dist/esm/base.js +1 -1
  48. package/dist/esm/common.d.ts +1 -1
  49. package/dist/esm/common.js +1 -1
  50. package/dist/esm/configuration.d.ts +1 -1
  51. package/dist/esm/configuration.js +1 -1
  52. package/dist/esm/index.d.ts +1 -1
  53. package/dist/esm/index.js +1 -1
  54. package/dist/esm/models/acceptance-result-response-dto.d.ts +1 -1
  55. package/dist/esm/models/acceptance-result-response-dto.js +1 -1
  56. package/dist/esm/models/acknowledge-product-receipt200-response.d.ts +1 -1
  57. package/dist/esm/models/acknowledge-product-receipt200-response.js +1 -1
  58. package/dist/esm/models/acknowledge-products-request-dto.d.ts +1 -1
  59. package/dist/esm/models/acknowledge-products-request-dto.js +1 -1
  60. package/dist/esm/models/api-catalog-dto.d.ts +1 -1
  61. package/dist/esm/models/api-catalog-dto.js +1 -1
  62. package/dist/esm/models/api-catalog-entry-dto.d.ts +1 -1
  63. package/dist/esm/models/api-catalog-entry-dto.js +1 -1
  64. package/dist/esm/models/api-catalog-link-dto.d.ts +1 -1
  65. package/dist/esm/models/api-catalog-link-dto.js +1 -1
  66. package/dist/esm/models/authorization-server-metadata-dto.d.ts +1 -1
  67. package/dist/esm/models/authorization-server-metadata-dto.js +1 -1
  68. package/dist/esm/models/award-method-public.d.ts +1 -1
  69. package/dist/esm/models/award-method-public.js +1 -1
  70. package/dist/esm/models/award-registered-v2-response-dto.d.ts +1 -1
  71. package/dist/esm/models/award-registered-v2-response-dto.js +1 -1
  72. package/dist/esm/models/award-reverted-v2-response-dto.d.ts +1 -1
  73. package/dist/esm/models/award-reverted-v2-response-dto.js +1 -1
  74. package/dist/esm/models/bid-acceptance-dto.d.ts +1 -1
  75. package/dist/esm/models/bid-acceptance-dto.js +1 -1
  76. package/dist/esm/models/bid-attachment-input-dto.d.ts +1 -1
  77. package/dist/esm/models/bid-attachment-input-dto.js +1 -1
  78. package/dist/esm/models/bid-bond-dto.d.ts +1 -1
  79. package/dist/esm/models/bid-bond-dto.js +1 -1
  80. package/dist/esm/models/bid-cancelled-response-dto.d.ts +1 -1
  81. package/dist/esm/models/bid-cancelled-response-dto.js +1 -1
  82. package/dist/esm/models/bid-contact-dto.d.ts +1 -1
  83. package/dist/esm/models/bid-contact-dto.js +1 -1
  84. package/dist/esm/models/bid-contacts-dto.d.ts +1 -1
  85. package/dist/esm/models/bid-contacts-dto.js +1 -1
  86. package/dist/esm/models/bid-contract-document-dto.d.ts +1 -1
  87. package/dist/esm/models/bid-contract-document-dto.js +1 -1
  88. package/dist/esm/models/bid-delivery-terms-dto.d.ts +1 -1
  89. package/dist/esm/models/bid-delivery-terms-dto.js +1 -1
  90. package/dist/esm/models/bid-detail-response-dto.d.ts +1 -1
  91. package/dist/esm/models/bid-detail-response-dto.js +1 -1
  92. package/dist/esm/models/bid-document-dto.d.ts +1 -1
  93. package/dist/esm/models/bid-document-dto.js +1 -1
  94. package/dist/esm/models/bid-failed-v2-response-dto.d.ts +1 -1
  95. package/dist/esm/models/bid-failed-v2-response-dto.js +1 -1
  96. package/dist/esm/models/bid-item-dto.d.ts +1 -1
  97. package/dist/esm/models/bid-item-dto.js +1 -1
  98. package/dist/esm/models/bid-lifecycle-dto.d.ts +1 -1
  99. package/dist/esm/models/bid-lifecycle-dto.js +1 -1
  100. package/dist/esm/models/bid-manager-dto.d.ts +1 -1
  101. package/dist/esm/models/bid-manager-dto.js +1 -1
  102. package/dist/esm/models/bid-payment-terms-dto.d.ts +1 -1
  103. package/dist/esm/models/bid-payment-terms-dto.js +1 -1
  104. package/dist/esm/models/bid-product-dto.d.ts +1 -1
  105. package/dist/esm/models/bid-product-dto.js +1 -1
  106. package/dist/esm/models/bid-public-status.d.ts +1 -1
  107. package/dist/esm/models/bid-public-status.js +1 -1
  108. package/dist/esm/models/bid-registered-response-dto.d.ts +1 -1
  109. package/dist/esm/models/bid-registered-response-dto.js +1 -1
  110. package/dist/esm/models/bid-result-participant-attachment-dto.d.ts +1 -1
  111. package/dist/esm/models/bid-result-participant-attachment-dto.js +1 -1
  112. package/dist/esm/models/bid-result-participant-dto.d.ts +1 -1
  113. package/dist/esm/models/bid-result-participant-dto.js +1 -1
  114. package/dist/esm/models/bid-results-response-dto.d.ts +1 -1
  115. package/dist/esm/models/bid-results-response-dto.js +1 -1
  116. package/dist/esm/models/bid-settlement-line-item-dto.d.ts +1 -1
  117. package/dist/esm/models/bid-settlement-line-item-dto.js +1 -1
  118. package/dist/esm/models/bid-settlement-participant-dto.d.ts +1 -1
  119. package/dist/esm/models/bid-settlement-participant-dto.js +1 -1
  120. package/dist/esm/models/bid-settlement-response-dto.d.ts +1 -1
  121. package/dist/esm/models/bid-settlement-response-dto.js +1 -1
  122. package/dist/esm/models/bid-statement-response-dto.d.ts +1 -1
  123. package/dist/esm/models/bid-statement-response-dto.js +1 -1
  124. package/dist/esm/models/bid-summary-dto.d.ts +1 -1
  125. package/dist/esm/models/bid-summary-dto.js +1 -1
  126. package/dist/esm/models/bid-type-public.d.ts +1 -1
  127. package/dist/esm/models/bid-type-public.js +1 -1
  128. package/dist/esm/models/bid-updated-response-dto.d.ts +1 -1
  129. package/dist/esm/models/bid-updated-response-dto.js +1 -1
  130. package/dist/esm/models/cancel-bid-request-dto.d.ts +1 -1
  131. package/dist/esm/models/cancel-bid-request-dto.js +1 -1
  132. package/dist/esm/models/cancel-bid200-response.d.ts +1 -1
  133. package/dist/esm/models/cancel-bid200-response.js +1 -1
  134. package/dist/esm/models/card-payment-request-response-dto.d.ts +1 -1
  135. package/dist/esm/models/card-payment-request-response-dto.js +1 -1
  136. package/dist/esm/models/complete-acceptance-request-dto.d.ts +1 -1
  137. package/dist/esm/models/complete-acceptance-request-dto.js +1 -1
  138. package/dist/esm/models/complete-acceptance200-response.d.ts +1 -1
  139. package/dist/esm/models/complete-acceptance200-response.js +1 -1
  140. package/dist/esm/models/complete-invoice200-response.d.ts +1 -1
  141. package/dist/esm/models/complete-invoice200-response.js +1 -1
  142. package/dist/esm/models/complete-upload-request-dto.d.ts +1 -1
  143. package/dist/esm/models/complete-upload-request-dto.js +1 -1
  144. package/dist/esm/models/contract-restriction-confirm-input-dto.d.ts +1 -1
  145. package/dist/esm/models/contract-restriction-confirm-input-dto.js +1 -1
  146. package/dist/esm/models/create-bid-request-dto.d.ts +1 -1
  147. package/dist/esm/models/create-bid-request-dto.js +1 -1
  148. package/dist/esm/models/create-card-payment-dto.d.ts +1 -1
  149. package/dist/esm/models/create-card-payment-dto.js +1 -1
  150. package/dist/esm/models/create-card-payment-request-dto.d.ts +1 -1
  151. package/dist/esm/models/create-card-payment-request-dto.js +1 -1
  152. package/dist/esm/models/create-card-payment200-response.d.ts +1 -1
  153. package/dist/esm/models/create-card-payment200-response.js +1 -1
  154. package/dist/esm/models/create-embed-launch201-response.d.ts +1 -1
  155. package/dist/esm/models/create-embed-launch201-response.js +1 -1
  156. package/dist/esm/models/create-external-contract-documents-request-dto.d.ts +1 -1
  157. package/dist/esm/models/create-external-contract-documents-request-dto.js +1 -1
  158. package/dist/esm/models/create-external-contract-documents-response-dto.d.ts +1 -1
  159. package/dist/esm/models/create-external-contract-documents-response-dto.js +1 -1
  160. package/dist/esm/models/create-file-upload-url201-response.d.ts +1 -1
  161. package/dist/esm/models/create-file-upload-url201-response.js +1 -1
  162. package/dist/esm/models/create-upload-url-request-dto.d.ts +1 -1
  163. package/dist/esm/models/create-upload-url-request-dto.js +1 -1
  164. package/dist/esm/models/create-webhook-endpoint-request-dto.d.ts +1 -1
  165. package/dist/esm/models/create-webhook-endpoint-request-dto.js +1 -1
  166. package/dist/esm/models/create-webhook-endpoint201-response.d.ts +1 -1
  167. package/dist/esm/models/create-webhook-endpoint201-response.js +1 -1
  168. package/dist/esm/models/delivery-date-type-public.d.ts +1 -1
  169. package/dist/esm/models/delivery-date-type-public.js +1 -1
  170. package/dist/esm/models/delivery-method-public.d.ts +1 -1
  171. package/dist/esm/models/delivery-method-public.js +1 -1
  172. package/dist/esm/models/embed-bid-prefill-dto.d.ts +1 -1
  173. package/dist/esm/models/embed-bid-prefill-dto.js +1 -1
  174. package/dist/esm/models/embed-bid-prefill-item-dto.d.ts +1 -1
  175. package/dist/esm/models/embed-bid-prefill-item-dto.js +1 -1
  176. package/dist/esm/models/embed-bid-prefill-manager-dto.d.ts +1 -1
  177. package/dist/esm/models/embed-bid-prefill-manager-dto.js +1 -1
  178. package/dist/esm/models/embed-launch-request-dto.d.ts +1 -1
  179. package/dist/esm/models/embed-launch-request-dto.js +1 -1
  180. package/dist/esm/models/embed-launch-response-dto.d.ts +1 -1
  181. package/dist/esm/models/embed-launch-response-dto.js +1 -1
  182. package/dist/esm/models/excellent-procurement-public.d.ts +1 -1
  183. package/dist/esm/models/excellent-procurement-public.js +1 -1
  184. package/dist/esm/models/external-contract-document-item-dto.d.ts +1 -1
  185. package/dist/esm/models/external-contract-document-item-dto.js +1 -1
  186. package/dist/esm/models/external-contract-documents-response-dto.d.ts +1 -1
  187. package/dist/esm/models/external-contract-documents-response-dto.js +1 -1
  188. package/dist/esm/models/external-contract-item-dto.d.ts +1 -1
  189. package/dist/esm/models/external-contract-item-dto.js +1 -1
  190. package/dist/esm/models/external-contract-snapshot-dto.d.ts +1 -1
  191. package/dist/esm/models/external-contract-snapshot-dto.js +1 -1
  192. package/dist/esm/models/external-document-inputs-dto.d.ts +1 -1
  193. package/dist/esm/models/external-document-inputs-dto.js +1 -1
  194. package/dist/esm/models/file-meta-response-dto.d.ts +1 -1
  195. package/dist/esm/models/file-meta-response-dto.js +1 -1
  196. package/dist/esm/models/file-uploaded-response-dto.d.ts +1 -1
  197. package/dist/esm/models/file-uploaded-response-dto.js +1 -1
  198. package/dist/esm/models/generated-external-contract-document-dto.d.ts +1 -1
  199. package/dist/esm/models/generated-external-contract-document-dto.js +1 -1
  200. package/dist/esm/models/get-bid-settlement200-response.d.ts +1 -1
  201. package/dist/esm/models/get-bid-settlement200-response.js +1 -1
  202. package/dist/esm/models/get-bid-statement200-response.d.ts +1 -1
  203. package/dist/esm/models/get-bid-statement200-response.js +1 -1
  204. package/dist/esm/models/get-bid200-response.d.ts +1 -1
  205. package/dist/esm/models/get-bid200-response.js +1 -1
  206. package/dist/esm/models/get-file-meta200-response.d.ts +1 -1
  207. package/dist/esm/models/get-file-meta200-response.js +1 -1
  208. package/dist/esm/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
  209. package/dist/esm/models/get-supplier-card-payable-v2200-response.js +1 -1
  210. package/dist/esm/models/get-webhook-endpoint200-response.d.ts +1 -1
  211. package/dist/esm/models/get-webhook-endpoint200-response.js +1 -1
  212. package/dist/esm/models/green-product-public.d.ts +1 -1
  213. package/dist/esm/models/green-product-public.js +1 -1
  214. package/dist/esm/models/health-controller-check200-response.d.ts +1 -1
  215. package/dist/esm/models/health-controller-check200-response.js +1 -1
  216. package/dist/esm/models/health-response-dto.d.ts +1 -1
  217. package/dist/esm/models/health-response-dto.js +1 -1
  218. package/dist/esm/models/hierarchical-region-dto.d.ts +1 -1
  219. package/dist/esm/models/hierarchical-region-dto.js +1 -1
  220. package/dist/esm/models/index.d.ts +0 -4
  221. package/dist/esm/models/index.js +0 -4
  222. package/dist/esm/models/introspect-request-dto.d.ts +1 -1
  223. package/dist/esm/models/introspect-request-dto.js +1 -1
  224. package/dist/esm/models/introspection-response-dto.d.ts +1 -1
  225. package/dist/esm/models/introspection-response-dto.js +1 -1
  226. package/dist/esm/models/invalid-param-dto.d.ts +1 -1
  227. package/dist/esm/models/invalid-param-dto.js +1 -1
  228. package/dist/esm/models/invoice-completed-response-dto.d.ts +1 -1
  229. package/dist/esm/models/invoice-completed-response-dto.js +1 -1
  230. package/dist/esm/models/invoice-split-response-dto.d.ts +1 -1
  231. package/dist/esm/models/invoice-split-response-dto.js +1 -1
  232. package/dist/esm/models/legal-mandatory-public.d.ts +1 -1
  233. package/dist/esm/models/legal-mandatory-public.js +1 -1
  234. package/dist/esm/models/list-bid-results200-response.d.ts +1 -1
  235. package/dist/esm/models/list-bid-results200-response.js +1 -1
  236. package/dist/esm/models/list-bids200-response-meta.d.ts +1 -1
  237. package/dist/esm/models/list-bids200-response-meta.js +1 -1
  238. package/dist/esm/models/list-bids200-response.d.ts +1 -1
  239. package/dist/esm/models/list-bids200-response.js +1 -1
  240. package/dist/esm/models/list-products200-response.d.ts +1 -1
  241. package/dist/esm/models/list-products200-response.js +1 -1
  242. package/dist/esm/models/list-webhook-deliveries-response-dto.d.ts +1 -1
  243. package/dist/esm/models/list-webhook-deliveries-response-dto.js +1 -1
  244. package/dist/esm/models/list-webhook-deliveries200-response.d.ts +1 -1
  245. package/dist/esm/models/list-webhook-deliveries200-response.js +1 -1
  246. package/dist/esm/models/list-webhook-endpoints200-response.d.ts +1 -1
  247. package/dist/esm/models/list-webhook-endpoints200-response.js +1 -1
  248. package/dist/esm/models/mark-bid-failed-request-dto.d.ts +1 -1
  249. package/dist/esm/models/mark-bid-failed-request-dto.js +1 -1
  250. package/dist/esm/models/mark-bid-failed201-response.d.ts +1 -1
  251. package/dist/esm/models/mark-bid-failed201-response.js +1 -1
  252. package/dist/esm/models/oauth-error-response-dto.d.ts +1 -1
  253. package/dist/esm/models/oauth-error-response-dto.js +1 -1
  254. package/dist/esm/models/on-bid-award-reverted-request.d.ts +1 -1
  255. package/dist/esm/models/on-bid-award-reverted-request.js +1 -1
  256. package/dist/esm/models/on-bid-awarded-request.d.ts +1 -1
  257. package/dist/esm/models/on-bid-awarded-request.js +1 -1
  258. package/dist/esm/models/on-bid-canceled-request.d.ts +1 -1
  259. package/dist/esm/models/on-bid-canceled-request.js +1 -1
  260. package/dist/esm/models/on-bid-closed-request.d.ts +1 -1
  261. package/dist/esm/models/on-bid-closed-request.js +1 -1
  262. package/dist/esm/models/on-bid-failed-request.d.ts +1 -1
  263. package/dist/esm/models/on-bid-failed-request.js +1 -1
  264. package/dist/esm/models/on-ping-request.d.ts +1 -1
  265. package/dist/esm/models/on-ping-request.js +1 -1
  266. package/dist/esm/models/partner-webhook-delivery-status.d.ts +1 -1
  267. package/dist/esm/models/partner-webhook-delivery-status.js +1 -1
  268. package/dist/esm/models/partner-webhook-endpoint-status.d.ts +1 -1
  269. package/dist/esm/models/partner-webhook-endpoint-status.js +1 -1
  270. package/dist/esm/models/partner-webhook-event-type.d.ts +1 -1
  271. package/dist/esm/models/partner-webhook-event-type.js +1 -1
  272. package/dist/esm/models/payment-method-public.d.ts +1 -1
  273. package/dist/esm/models/payment-method-public.js +1 -1
  274. package/dist/esm/models/preconditions-dto.d.ts +1 -1
  275. package/dist/esm/models/preconditions-dto.js +1 -1
  276. package/dist/esm/models/problem-details-dto.d.ts +1 -1
  277. package/dist/esm/models/problem-details-dto.js +1 -1
  278. package/dist/esm/models/product-receipt-response-dto.d.ts +1 -1
  279. package/dist/esm/models/product-receipt-response-dto.js +1 -1
  280. package/dist/esm/models/product-response-dto.d.ts +1 -1
  281. package/dist/esm/models/product-response-dto.js +1 -1
  282. package/dist/esm/models/protected-resource-metadata-dto.d.ts +1 -1
  283. package/dist/esm/models/protected-resource-metadata-dto.js +1 -1
  284. package/dist/esm/models/register-award-request-dto.d.ts +1 -1
  285. package/dist/esm/models/register-award-request-dto.js +1 -1
  286. package/dist/esm/models/register-award201-response.d.ts +1 -1
  287. package/dist/esm/models/register-award201-response.js +1 -1
  288. package/dist/esm/models/register-bid201-response.d.ts +1 -1
  289. package/dist/esm/models/register-bid201-response.js +1 -1
  290. package/dist/esm/models/register-semo-contract-request-dto.d.ts +1 -1
  291. package/dist/esm/models/register-semo-contract-request-dto.js +1 -1
  292. package/dist/esm/models/request-invoice-split-request-dto.d.ts +1 -1
  293. package/dist/esm/models/request-invoice-split-request-dto.js +1 -1
  294. package/dist/esm/models/request-invoice-split200-response.d.ts +1 -1
  295. package/dist/esm/models/request-invoice-split200-response.js +1 -1
  296. package/dist/esm/models/retiree-roster-input-dto.d.ts +1 -1
  297. package/dist/esm/models/retiree-roster-input-dto.js +1 -1
  298. package/dist/esm/models/retiree-roster-row-dto.d.ts +1 -1
  299. package/dist/esm/models/retiree-roster-row-dto.js +1 -1
  300. package/dist/esm/models/revert-award-request-dto.d.ts +1 -1
  301. package/dist/esm/models/revert-award-request-dto.js +1 -1
  302. package/dist/esm/models/revert-award200-response.d.ts +1 -1
  303. package/dist/esm/models/revert-award200-response.js +1 -1
  304. package/dist/esm/models/revoke-request-dto.d.ts +1 -1
  305. package/dist/esm/models/revoke-request-dto.js +1 -1
  306. package/dist/esm/models/semo-contract-registered-response-dto.d.ts +1 -1
  307. package/dist/esm/models/semo-contract-registered-response-dto.js +1 -1
  308. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
  309. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
  310. package/dist/esm/models/send-webhook-test-event200-response.d.ts +1 -1
  311. package/dist/esm/models/send-webhook-test-event200-response.js +1 -1
  312. package/dist/esm/models/statement-document-dto.d.ts +1 -1
  313. package/dist/esm/models/statement-document-dto.js +1 -1
  314. package/dist/esm/models/statement-product-dto.d.ts +1 -1
  315. package/dist/esm/models/statement-product-dto.js +1 -1
  316. package/dist/esm/models/supplier-card-payable-response-dto.d.ts +1 -1
  317. package/dist/esm/models/supplier-card-payable-response-dto.js +1 -1
  318. package/dist/esm/models/supplier-tax-type.d.ts +1 -1
  319. package/dist/esm/models/supplier-tax-type.js +1 -1
  320. package/dist/esm/models/token-request-dto.d.ts +1 -1
  321. package/dist/esm/models/token-request-dto.js +1 -1
  322. package/dist/esm/models/token-response-dto.d.ts +1 -1
  323. package/dist/esm/models/token-response-dto.js +1 -1
  324. package/dist/esm/models/update-bid-request-dto.d.ts +1 -1
  325. package/dist/esm/models/update-bid-request-dto.js +1 -1
  326. package/dist/esm/models/update-bid200-response.d.ts +1 -1
  327. package/dist/esm/models/update-bid200-response.js +1 -1
  328. package/dist/esm/models/update-webhook-endpoint-request-dto.d.ts +1 -1
  329. package/dist/esm/models/update-webhook-endpoint-request-dto.js +1 -1
  330. package/dist/esm/models/upload-file-request-dto.d.ts +1 -1
  331. package/dist/esm/models/upload-file-request-dto.js +1 -1
  332. package/dist/esm/models/upload-file201-response.d.ts +1 -1
  333. package/dist/esm/models/upload-file201-response.js +1 -1
  334. package/dist/esm/models/upload-url-created-response-dto.d.ts +1 -1
  335. package/dist/esm/models/upload-url-created-response-dto.js +1 -1
  336. package/dist/esm/models/webhook-bid-event-data.d.ts +1 -1
  337. package/dist/esm/models/webhook-bid-event-data.js +1 -1
  338. package/dist/esm/models/webhook-delivery-dto.d.ts +1 -1
  339. package/dist/esm/models/webhook-delivery-dto.js +1 -1
  340. package/dist/esm/models/webhook-endpoint-dto.d.ts +1 -1
  341. package/dist/esm/models/webhook-endpoint-dto.js +1 -1
  342. package/dist/esm/models/webhook-endpoint-with-secret-dto.d.ts +1 -1
  343. package/dist/esm/models/webhook-endpoint-with-secret-dto.js +1 -1
  344. package/dist/esm/models/webhook-event-envelope.d.ts +1 -1
  345. package/dist/esm/models/webhook-event-envelope.js +1 -1
  346. package/dist/esm/models/webhook-ping-event-data.d.ts +1 -1
  347. package/dist/esm/models/webhook-ping-event-data.js +1 -1
  348. package/dist/esm/models/webhook-test-result-dto.d.ts +1 -1
  349. package/dist/esm/models/webhook-test-result-dto.js +1 -1
  350. package/dist/index.d.ts +1 -1
  351. package/dist/index.js +1 -1
  352. package/dist/models/acceptance-result-response-dto.d.ts +1 -1
  353. package/dist/models/acceptance-result-response-dto.js +1 -1
  354. package/dist/models/acknowledge-product-receipt200-response.d.ts +1 -1
  355. package/dist/models/acknowledge-product-receipt200-response.js +1 -1
  356. package/dist/models/acknowledge-products-request-dto.d.ts +1 -1
  357. package/dist/models/acknowledge-products-request-dto.js +1 -1
  358. package/dist/models/api-catalog-dto.d.ts +1 -1
  359. package/dist/models/api-catalog-dto.js +1 -1
  360. package/dist/models/api-catalog-entry-dto.d.ts +1 -1
  361. package/dist/models/api-catalog-entry-dto.js +1 -1
  362. package/dist/models/api-catalog-link-dto.d.ts +1 -1
  363. package/dist/models/api-catalog-link-dto.js +1 -1
  364. package/dist/models/authorization-server-metadata-dto.d.ts +1 -1
  365. package/dist/models/authorization-server-metadata-dto.js +1 -1
  366. package/dist/models/award-method-public.d.ts +1 -1
  367. package/dist/models/award-method-public.js +1 -1
  368. package/dist/models/award-registered-v2-response-dto.d.ts +1 -1
  369. package/dist/models/award-registered-v2-response-dto.js +1 -1
  370. package/dist/models/award-reverted-v2-response-dto.d.ts +1 -1
  371. package/dist/models/award-reverted-v2-response-dto.js +1 -1
  372. package/dist/models/bid-acceptance-dto.d.ts +1 -1
  373. package/dist/models/bid-acceptance-dto.js +1 -1
  374. package/dist/models/bid-attachment-input-dto.d.ts +1 -1
  375. package/dist/models/bid-attachment-input-dto.js +1 -1
  376. package/dist/models/bid-bond-dto.d.ts +1 -1
  377. package/dist/models/bid-bond-dto.js +1 -1
  378. package/dist/models/bid-cancelled-response-dto.d.ts +1 -1
  379. package/dist/models/bid-cancelled-response-dto.js +1 -1
  380. package/dist/models/bid-contact-dto.d.ts +1 -1
  381. package/dist/models/bid-contact-dto.js +1 -1
  382. package/dist/models/bid-contacts-dto.d.ts +1 -1
  383. package/dist/models/bid-contacts-dto.js +1 -1
  384. package/dist/models/bid-contract-document-dto.d.ts +1 -1
  385. package/dist/models/bid-contract-document-dto.js +1 -1
  386. package/dist/models/bid-delivery-terms-dto.d.ts +1 -1
  387. package/dist/models/bid-delivery-terms-dto.js +1 -1
  388. package/dist/models/bid-detail-response-dto.d.ts +1 -1
  389. package/dist/models/bid-detail-response-dto.js +1 -1
  390. package/dist/models/bid-document-dto.d.ts +1 -1
  391. package/dist/models/bid-document-dto.js +1 -1
  392. package/dist/models/bid-failed-v2-response-dto.d.ts +1 -1
  393. package/dist/models/bid-failed-v2-response-dto.js +1 -1
  394. package/dist/models/bid-item-dto.d.ts +1 -1
  395. package/dist/models/bid-item-dto.js +1 -1
  396. package/dist/models/bid-lifecycle-dto.d.ts +1 -1
  397. package/dist/models/bid-lifecycle-dto.js +1 -1
  398. package/dist/models/bid-manager-dto.d.ts +1 -1
  399. package/dist/models/bid-manager-dto.js +1 -1
  400. package/dist/models/bid-payment-terms-dto.d.ts +1 -1
  401. package/dist/models/bid-payment-terms-dto.js +1 -1
  402. package/dist/models/bid-product-dto.d.ts +1 -1
  403. package/dist/models/bid-product-dto.js +1 -1
  404. package/dist/models/bid-public-status.d.ts +1 -1
  405. package/dist/models/bid-public-status.js +1 -1
  406. package/dist/models/bid-registered-response-dto.d.ts +1 -1
  407. package/dist/models/bid-registered-response-dto.js +1 -1
  408. package/dist/models/bid-result-participant-attachment-dto.d.ts +1 -1
  409. package/dist/models/bid-result-participant-attachment-dto.js +1 -1
  410. package/dist/models/bid-result-participant-dto.d.ts +1 -1
  411. package/dist/models/bid-result-participant-dto.js +1 -1
  412. package/dist/models/bid-results-response-dto.d.ts +1 -1
  413. package/dist/models/bid-results-response-dto.js +1 -1
  414. package/dist/models/bid-settlement-line-item-dto.d.ts +1 -1
  415. package/dist/models/bid-settlement-line-item-dto.js +1 -1
  416. package/dist/models/bid-settlement-participant-dto.d.ts +1 -1
  417. package/dist/models/bid-settlement-participant-dto.js +1 -1
  418. package/dist/models/bid-settlement-response-dto.d.ts +1 -1
  419. package/dist/models/bid-settlement-response-dto.js +1 -1
  420. package/dist/models/bid-statement-response-dto.d.ts +1 -1
  421. package/dist/models/bid-statement-response-dto.js +1 -1
  422. package/dist/models/bid-summary-dto.d.ts +1 -1
  423. package/dist/models/bid-summary-dto.js +1 -1
  424. package/dist/models/bid-type-public.d.ts +1 -1
  425. package/dist/models/bid-type-public.js +1 -1
  426. package/dist/models/bid-updated-response-dto.d.ts +1 -1
  427. package/dist/models/bid-updated-response-dto.js +1 -1
  428. package/dist/models/cancel-bid-request-dto.d.ts +1 -1
  429. package/dist/models/cancel-bid-request-dto.js +1 -1
  430. package/dist/models/cancel-bid200-response.d.ts +1 -1
  431. package/dist/models/cancel-bid200-response.js +1 -1
  432. package/dist/models/card-payment-request-response-dto.d.ts +1 -1
  433. package/dist/models/card-payment-request-response-dto.js +1 -1
  434. package/dist/models/complete-acceptance-request-dto.d.ts +1 -1
  435. package/dist/models/complete-acceptance-request-dto.js +1 -1
  436. package/dist/models/complete-acceptance200-response.d.ts +1 -1
  437. package/dist/models/complete-acceptance200-response.js +1 -1
  438. package/dist/models/complete-invoice200-response.d.ts +1 -1
  439. package/dist/models/complete-invoice200-response.js +1 -1
  440. package/dist/models/complete-upload-request-dto.d.ts +1 -1
  441. package/dist/models/complete-upload-request-dto.js +1 -1
  442. package/dist/models/contract-restriction-confirm-input-dto.d.ts +1 -1
  443. package/dist/models/contract-restriction-confirm-input-dto.js +1 -1
  444. package/dist/models/create-bid-request-dto.d.ts +1 -1
  445. package/dist/models/create-bid-request-dto.js +1 -1
  446. package/dist/models/create-card-payment-dto.d.ts +1 -1
  447. package/dist/models/create-card-payment-dto.js +1 -1
  448. package/dist/models/create-card-payment-request-dto.d.ts +1 -1
  449. package/dist/models/create-card-payment-request-dto.js +1 -1
  450. package/dist/models/create-card-payment200-response.d.ts +1 -1
  451. package/dist/models/create-card-payment200-response.js +1 -1
  452. package/dist/models/create-embed-launch201-response.d.ts +1 -1
  453. package/dist/models/create-embed-launch201-response.js +1 -1
  454. package/dist/models/create-external-contract-documents-request-dto.d.ts +1 -1
  455. package/dist/models/create-external-contract-documents-request-dto.js +1 -1
  456. package/dist/models/create-external-contract-documents-response-dto.d.ts +1 -1
  457. package/dist/models/create-external-contract-documents-response-dto.js +1 -1
  458. package/dist/models/create-file-upload-url201-response.d.ts +1 -1
  459. package/dist/models/create-file-upload-url201-response.js +1 -1
  460. package/dist/models/create-upload-url-request-dto.d.ts +1 -1
  461. package/dist/models/create-upload-url-request-dto.js +1 -1
  462. package/dist/models/create-webhook-endpoint-request-dto.d.ts +1 -1
  463. package/dist/models/create-webhook-endpoint-request-dto.js +1 -1
  464. package/dist/models/create-webhook-endpoint201-response.d.ts +1 -1
  465. package/dist/models/create-webhook-endpoint201-response.js +1 -1
  466. package/dist/models/delivery-date-type-public.d.ts +1 -1
  467. package/dist/models/delivery-date-type-public.js +1 -1
  468. package/dist/models/delivery-method-public.d.ts +1 -1
  469. package/dist/models/delivery-method-public.js +1 -1
  470. package/dist/models/embed-bid-prefill-dto.d.ts +1 -1
  471. package/dist/models/embed-bid-prefill-dto.js +1 -1
  472. package/dist/models/embed-bid-prefill-item-dto.d.ts +1 -1
  473. package/dist/models/embed-bid-prefill-item-dto.js +1 -1
  474. package/dist/models/embed-bid-prefill-manager-dto.d.ts +1 -1
  475. package/dist/models/embed-bid-prefill-manager-dto.js +1 -1
  476. package/dist/models/embed-launch-request-dto.d.ts +1 -1
  477. package/dist/models/embed-launch-request-dto.js +1 -1
  478. package/dist/models/embed-launch-response-dto.d.ts +1 -1
  479. package/dist/models/embed-launch-response-dto.js +1 -1
  480. package/dist/models/excellent-procurement-public.d.ts +1 -1
  481. package/dist/models/excellent-procurement-public.js +1 -1
  482. package/dist/models/external-contract-document-item-dto.d.ts +1 -1
  483. package/dist/models/external-contract-document-item-dto.js +1 -1
  484. package/dist/models/external-contract-documents-response-dto.d.ts +1 -1
  485. package/dist/models/external-contract-documents-response-dto.js +1 -1
  486. package/dist/models/external-contract-item-dto.d.ts +1 -1
  487. package/dist/models/external-contract-item-dto.js +1 -1
  488. package/dist/models/external-contract-snapshot-dto.d.ts +1 -1
  489. package/dist/models/external-contract-snapshot-dto.js +1 -1
  490. package/dist/models/external-document-inputs-dto.d.ts +1 -1
  491. package/dist/models/external-document-inputs-dto.js +1 -1
  492. package/dist/models/file-meta-response-dto.d.ts +1 -1
  493. package/dist/models/file-meta-response-dto.js +1 -1
  494. package/dist/models/file-uploaded-response-dto.d.ts +1 -1
  495. package/dist/models/file-uploaded-response-dto.js +1 -1
  496. package/dist/models/generated-external-contract-document-dto.d.ts +1 -1
  497. package/dist/models/generated-external-contract-document-dto.js +1 -1
  498. package/dist/models/get-bid-settlement200-response.d.ts +1 -1
  499. package/dist/models/get-bid-settlement200-response.js +1 -1
  500. package/dist/models/get-bid-statement200-response.d.ts +1 -1
  501. package/dist/models/get-bid-statement200-response.js +1 -1
  502. package/dist/models/get-bid200-response.d.ts +1 -1
  503. package/dist/models/get-bid200-response.js +1 -1
  504. package/dist/models/get-file-meta200-response.d.ts +1 -1
  505. package/dist/models/get-file-meta200-response.js +1 -1
  506. package/dist/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
  507. package/dist/models/get-supplier-card-payable-v2200-response.js +1 -1
  508. package/dist/models/get-webhook-endpoint200-response.d.ts +1 -1
  509. package/dist/models/get-webhook-endpoint200-response.js +1 -1
  510. package/dist/models/green-product-public.d.ts +1 -1
  511. package/dist/models/green-product-public.js +1 -1
  512. package/dist/models/health-controller-check200-response.d.ts +1 -1
  513. package/dist/models/health-controller-check200-response.js +1 -1
  514. package/dist/models/health-response-dto.d.ts +1 -1
  515. package/dist/models/health-response-dto.js +1 -1
  516. package/dist/models/hierarchical-region-dto.d.ts +1 -1
  517. package/dist/models/hierarchical-region-dto.js +1 -1
  518. package/dist/models/index.d.ts +0 -4
  519. package/dist/models/index.js +0 -4
  520. package/dist/models/introspect-request-dto.d.ts +1 -1
  521. package/dist/models/introspect-request-dto.js +1 -1
  522. package/dist/models/introspection-response-dto.d.ts +1 -1
  523. package/dist/models/introspection-response-dto.js +1 -1
  524. package/dist/models/invalid-param-dto.d.ts +1 -1
  525. package/dist/models/invalid-param-dto.js +1 -1
  526. package/dist/models/invoice-completed-response-dto.d.ts +1 -1
  527. package/dist/models/invoice-completed-response-dto.js +1 -1
  528. package/dist/models/invoice-split-response-dto.d.ts +1 -1
  529. package/dist/models/invoice-split-response-dto.js +1 -1
  530. package/dist/models/legal-mandatory-public.d.ts +1 -1
  531. package/dist/models/legal-mandatory-public.js +1 -1
  532. package/dist/models/list-bid-results200-response.d.ts +1 -1
  533. package/dist/models/list-bid-results200-response.js +1 -1
  534. package/dist/models/list-bids200-response-meta.d.ts +1 -1
  535. package/dist/models/list-bids200-response-meta.js +1 -1
  536. package/dist/models/list-bids200-response.d.ts +1 -1
  537. package/dist/models/list-bids200-response.js +1 -1
  538. package/dist/models/list-products200-response.d.ts +1 -1
  539. package/dist/models/list-products200-response.js +1 -1
  540. package/dist/models/list-webhook-deliveries-response-dto.d.ts +1 -1
  541. package/dist/models/list-webhook-deliveries-response-dto.js +1 -1
  542. package/dist/models/list-webhook-deliveries200-response.d.ts +1 -1
  543. package/dist/models/list-webhook-deliveries200-response.js +1 -1
  544. package/dist/models/list-webhook-endpoints200-response.d.ts +1 -1
  545. package/dist/models/list-webhook-endpoints200-response.js +1 -1
  546. package/dist/models/mark-bid-failed-request-dto.d.ts +1 -1
  547. package/dist/models/mark-bid-failed-request-dto.js +1 -1
  548. package/dist/models/mark-bid-failed201-response.d.ts +1 -1
  549. package/dist/models/mark-bid-failed201-response.js +1 -1
  550. package/dist/models/oauth-error-response-dto.d.ts +1 -1
  551. package/dist/models/oauth-error-response-dto.js +1 -1
  552. package/dist/models/on-bid-award-reverted-request.d.ts +1 -1
  553. package/dist/models/on-bid-award-reverted-request.js +1 -1
  554. package/dist/models/on-bid-awarded-request.d.ts +1 -1
  555. package/dist/models/on-bid-awarded-request.js +1 -1
  556. package/dist/models/on-bid-canceled-request.d.ts +1 -1
  557. package/dist/models/on-bid-canceled-request.js +1 -1
  558. package/dist/models/on-bid-closed-request.d.ts +1 -1
  559. package/dist/models/on-bid-closed-request.js +1 -1
  560. package/dist/models/on-bid-failed-request.d.ts +1 -1
  561. package/dist/models/on-bid-failed-request.js +1 -1
  562. package/dist/models/on-ping-request.d.ts +1 -1
  563. package/dist/models/on-ping-request.js +1 -1
  564. package/dist/models/partner-webhook-delivery-status.d.ts +1 -1
  565. package/dist/models/partner-webhook-delivery-status.js +1 -1
  566. package/dist/models/partner-webhook-endpoint-status.d.ts +1 -1
  567. package/dist/models/partner-webhook-endpoint-status.js +1 -1
  568. package/dist/models/partner-webhook-event-type.d.ts +1 -1
  569. package/dist/models/partner-webhook-event-type.js +1 -1
  570. package/dist/models/payment-method-public.d.ts +1 -1
  571. package/dist/models/payment-method-public.js +1 -1
  572. package/dist/models/preconditions-dto.d.ts +1 -1
  573. package/dist/models/preconditions-dto.js +1 -1
  574. package/dist/models/problem-details-dto.d.ts +1 -1
  575. package/dist/models/problem-details-dto.js +1 -1
  576. package/dist/models/product-receipt-response-dto.d.ts +1 -1
  577. package/dist/models/product-receipt-response-dto.js +1 -1
  578. package/dist/models/product-response-dto.d.ts +1 -1
  579. package/dist/models/product-response-dto.js +1 -1
  580. package/dist/models/protected-resource-metadata-dto.d.ts +1 -1
  581. package/dist/models/protected-resource-metadata-dto.js +1 -1
  582. package/dist/models/register-award-request-dto.d.ts +1 -1
  583. package/dist/models/register-award-request-dto.js +1 -1
  584. package/dist/models/register-award201-response.d.ts +1 -1
  585. package/dist/models/register-award201-response.js +1 -1
  586. package/dist/models/register-bid201-response.d.ts +1 -1
  587. package/dist/models/register-bid201-response.js +1 -1
  588. package/dist/models/register-semo-contract-request-dto.d.ts +1 -1
  589. package/dist/models/register-semo-contract-request-dto.js +1 -1
  590. package/dist/models/request-invoice-split-request-dto.d.ts +1 -1
  591. package/dist/models/request-invoice-split-request-dto.js +1 -1
  592. package/dist/models/request-invoice-split200-response.d.ts +1 -1
  593. package/dist/models/request-invoice-split200-response.js +1 -1
  594. package/dist/models/retiree-roster-input-dto.d.ts +1 -1
  595. package/dist/models/retiree-roster-input-dto.js +1 -1
  596. package/dist/models/retiree-roster-row-dto.d.ts +1 -1
  597. package/dist/models/retiree-roster-row-dto.js +1 -1
  598. package/dist/models/revert-award-request-dto.d.ts +1 -1
  599. package/dist/models/revert-award-request-dto.js +1 -1
  600. package/dist/models/revert-award200-response.d.ts +1 -1
  601. package/dist/models/revert-award200-response.js +1 -1
  602. package/dist/models/revoke-request-dto.d.ts +1 -1
  603. package/dist/models/revoke-request-dto.js +1 -1
  604. package/dist/models/semo-contract-registered-response-dto.d.ts +1 -1
  605. package/dist/models/semo-contract-registered-response-dto.js +1 -1
  606. package/dist/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
  607. package/dist/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
  608. package/dist/models/send-webhook-test-event200-response.d.ts +1 -1
  609. package/dist/models/send-webhook-test-event200-response.js +1 -1
  610. package/dist/models/statement-document-dto.d.ts +1 -1
  611. package/dist/models/statement-document-dto.js +1 -1
  612. package/dist/models/statement-product-dto.d.ts +1 -1
  613. package/dist/models/statement-product-dto.js +1 -1
  614. package/dist/models/supplier-card-payable-response-dto.d.ts +1 -1
  615. package/dist/models/supplier-card-payable-response-dto.js +1 -1
  616. package/dist/models/supplier-tax-type.d.ts +1 -1
  617. package/dist/models/supplier-tax-type.js +1 -1
  618. package/dist/models/token-request-dto.d.ts +1 -1
  619. package/dist/models/token-request-dto.js +1 -1
  620. package/dist/models/token-response-dto.d.ts +1 -1
  621. package/dist/models/token-response-dto.js +1 -1
  622. package/dist/models/update-bid-request-dto.d.ts +1 -1
  623. package/dist/models/update-bid-request-dto.js +1 -1
  624. package/dist/models/update-bid200-response.d.ts +1 -1
  625. package/dist/models/update-bid200-response.js +1 -1
  626. package/dist/models/update-webhook-endpoint-request-dto.d.ts +1 -1
  627. package/dist/models/update-webhook-endpoint-request-dto.js +1 -1
  628. package/dist/models/upload-file-request-dto.d.ts +1 -1
  629. package/dist/models/upload-file-request-dto.js +1 -1
  630. package/dist/models/upload-file201-response.d.ts +1 -1
  631. package/dist/models/upload-file201-response.js +1 -1
  632. package/dist/models/upload-url-created-response-dto.d.ts +1 -1
  633. package/dist/models/upload-url-created-response-dto.js +1 -1
  634. package/dist/models/webhook-bid-event-data.d.ts +1 -1
  635. package/dist/models/webhook-bid-event-data.js +1 -1
  636. package/dist/models/webhook-delivery-dto.d.ts +1 -1
  637. package/dist/models/webhook-delivery-dto.js +1 -1
  638. package/dist/models/webhook-endpoint-dto.d.ts +1 -1
  639. package/dist/models/webhook-endpoint-dto.js +1 -1
  640. package/dist/models/webhook-endpoint-with-secret-dto.d.ts +1 -1
  641. package/dist/models/webhook-endpoint-with-secret-dto.js +1 -1
  642. package/dist/models/webhook-event-envelope.d.ts +1 -1
  643. package/dist/models/webhook-event-envelope.js +1 -1
  644. package/dist/models/webhook-ping-event-data.d.ts +1 -1
  645. package/dist/models/webhook-ping-event-data.js +1 -1
  646. package/dist/models/webhook-test-result-dto.d.ts +1 -1
  647. package/dist/models/webhook-test-result-dto.js +1 -1
  648. package/docs/EmbedApi.md +1 -1
  649. package/docs/PartnerApiApi.md +1 -69
  650. package/index.ts +1 -1
  651. package/models/acceptance-result-response-dto.ts +1 -1
  652. package/models/acknowledge-product-receipt200-response.ts +1 -1
  653. package/models/acknowledge-products-request-dto.ts +1 -1
  654. package/models/api-catalog-dto.ts +1 -1
  655. package/models/api-catalog-entry-dto.ts +1 -1
  656. package/models/api-catalog-link-dto.ts +1 -1
  657. package/models/authorization-server-metadata-dto.ts +1 -1
  658. package/models/award-method-public.ts +1 -1
  659. package/models/award-registered-v2-response-dto.ts +1 -1
  660. package/models/award-reverted-v2-response-dto.ts +1 -1
  661. package/models/bid-acceptance-dto.ts +1 -1
  662. package/models/bid-attachment-input-dto.ts +1 -1
  663. package/models/bid-bond-dto.ts +1 -1
  664. package/models/bid-cancelled-response-dto.ts +1 -1
  665. package/models/bid-contact-dto.ts +1 -1
  666. package/models/bid-contacts-dto.ts +1 -1
  667. package/models/bid-contract-document-dto.ts +1 -1
  668. package/models/bid-delivery-terms-dto.ts +1 -1
  669. package/models/bid-detail-response-dto.ts +1 -1
  670. package/models/bid-document-dto.ts +1 -1
  671. package/models/bid-failed-v2-response-dto.ts +1 -1
  672. package/models/bid-item-dto.ts +1 -1
  673. package/models/bid-lifecycle-dto.ts +1 -1
  674. package/models/bid-manager-dto.ts +1 -1
  675. package/models/bid-payment-terms-dto.ts +1 -1
  676. package/models/bid-product-dto.ts +1 -1
  677. package/models/bid-public-status.ts +1 -1
  678. package/models/bid-registered-response-dto.ts +1 -1
  679. package/models/bid-result-participant-attachment-dto.ts +1 -1
  680. package/models/bid-result-participant-dto.ts +1 -1
  681. package/models/bid-results-response-dto.ts +1 -1
  682. package/models/bid-settlement-line-item-dto.ts +1 -1
  683. package/models/bid-settlement-participant-dto.ts +1 -1
  684. package/models/bid-settlement-response-dto.ts +1 -1
  685. package/models/bid-statement-response-dto.ts +1 -1
  686. package/models/bid-summary-dto.ts +1 -1
  687. package/models/bid-type-public.ts +1 -1
  688. package/models/bid-updated-response-dto.ts +1 -1
  689. package/models/cancel-bid-request-dto.ts +1 -1
  690. package/models/cancel-bid200-response.ts +1 -1
  691. package/models/card-payment-request-response-dto.ts +1 -1
  692. package/models/complete-acceptance-request-dto.ts +1 -1
  693. package/models/complete-acceptance200-response.ts +1 -1
  694. package/models/complete-invoice200-response.ts +1 -1
  695. package/models/complete-upload-request-dto.ts +1 -1
  696. package/models/contract-restriction-confirm-input-dto.ts +1 -1
  697. package/models/create-bid-request-dto.ts +1 -1
  698. package/models/create-card-payment-dto.ts +1 -1
  699. package/models/create-card-payment-request-dto.ts +1 -1
  700. package/models/create-card-payment200-response.ts +1 -1
  701. package/models/create-embed-launch201-response.ts +1 -1
  702. package/models/create-external-contract-documents-request-dto.ts +1 -1
  703. package/models/create-external-contract-documents-response-dto.ts +1 -1
  704. package/models/create-file-upload-url201-response.ts +1 -1
  705. package/models/create-upload-url-request-dto.ts +1 -1
  706. package/models/create-webhook-endpoint-request-dto.ts +1 -1
  707. package/models/create-webhook-endpoint201-response.ts +1 -1
  708. package/models/delivery-date-type-public.ts +1 -1
  709. package/models/delivery-method-public.ts +1 -1
  710. package/models/embed-bid-prefill-dto.ts +1 -1
  711. package/models/embed-bid-prefill-item-dto.ts +1 -1
  712. package/models/embed-bid-prefill-manager-dto.ts +1 -1
  713. package/models/embed-launch-request-dto.ts +1 -1
  714. package/models/embed-launch-response-dto.ts +1 -1
  715. package/models/excellent-procurement-public.ts +1 -1
  716. package/models/external-contract-document-item-dto.ts +1 -1
  717. package/models/external-contract-documents-response-dto.ts +1 -1
  718. package/models/external-contract-item-dto.ts +1 -1
  719. package/models/external-contract-snapshot-dto.ts +1 -1
  720. package/models/external-document-inputs-dto.ts +1 -1
  721. package/models/file-meta-response-dto.ts +1 -1
  722. package/models/file-uploaded-response-dto.ts +1 -1
  723. package/models/generated-external-contract-document-dto.ts +1 -1
  724. package/models/get-bid-settlement200-response.ts +1 -1
  725. package/models/get-bid-statement200-response.ts +1 -1
  726. package/models/get-bid200-response.ts +1 -1
  727. package/models/get-file-meta200-response.ts +1 -1
  728. package/models/get-supplier-card-payable-v2200-response.ts +1 -1
  729. package/models/get-webhook-endpoint200-response.ts +1 -1
  730. package/models/green-product-public.ts +1 -1
  731. package/models/health-controller-check200-response.ts +1 -1
  732. package/models/health-response-dto.ts +1 -1
  733. package/models/hierarchical-region-dto.ts +1 -1
  734. package/models/index.ts +0 -4
  735. package/models/introspect-request-dto.ts +1 -1
  736. package/models/introspection-response-dto.ts +1 -1
  737. package/models/invalid-param-dto.ts +1 -1
  738. package/models/invoice-completed-response-dto.ts +1 -1
  739. package/models/invoice-split-response-dto.ts +1 -1
  740. package/models/legal-mandatory-public.ts +1 -1
  741. package/models/list-bid-results200-response.ts +1 -1
  742. package/models/list-bids200-response-meta.ts +1 -1
  743. package/models/list-bids200-response.ts +1 -1
  744. package/models/list-products200-response.ts +1 -1
  745. package/models/list-webhook-deliveries-response-dto.ts +1 -1
  746. package/models/list-webhook-deliveries200-response.ts +1 -1
  747. package/models/list-webhook-endpoints200-response.ts +1 -1
  748. package/models/mark-bid-failed-request-dto.ts +1 -1
  749. package/models/mark-bid-failed201-response.ts +1 -1
  750. package/models/oauth-error-response-dto.ts +1 -1
  751. package/models/on-bid-award-reverted-request.ts +1 -1
  752. package/models/on-bid-awarded-request.ts +1 -1
  753. package/models/on-bid-canceled-request.ts +1 -1
  754. package/models/on-bid-closed-request.ts +1 -1
  755. package/models/on-bid-failed-request.ts +1 -1
  756. package/models/on-ping-request.ts +1 -1
  757. package/models/partner-webhook-delivery-status.ts +1 -1
  758. package/models/partner-webhook-endpoint-status.ts +1 -1
  759. package/models/partner-webhook-event-type.ts +1 -1
  760. package/models/payment-method-public.ts +1 -1
  761. package/models/preconditions-dto.ts +1 -1
  762. package/models/problem-details-dto.ts +1 -1
  763. package/models/product-receipt-response-dto.ts +1 -1
  764. package/models/product-response-dto.ts +1 -1
  765. package/models/protected-resource-metadata-dto.ts +1 -1
  766. package/models/register-award-request-dto.ts +1 -1
  767. package/models/register-award201-response.ts +1 -1
  768. package/models/register-bid201-response.ts +1 -1
  769. package/models/register-semo-contract-request-dto.ts +1 -1
  770. package/models/request-invoice-split-request-dto.ts +1 -1
  771. package/models/request-invoice-split200-response.ts +1 -1
  772. package/models/retiree-roster-input-dto.ts +1 -1
  773. package/models/retiree-roster-row-dto.ts +1 -1
  774. package/models/revert-award-request-dto.ts +1 -1
  775. package/models/revert-award200-response.ts +1 -1
  776. package/models/revoke-request-dto.ts +1 -1
  777. package/models/semo-contract-registered-response-dto.ts +1 -1
  778. package/models/semo-contract-taxinvoice-status-response-dto.ts +1 -1
  779. package/models/send-webhook-test-event200-response.ts +1 -1
  780. package/models/statement-document-dto.ts +1 -1
  781. package/models/statement-product-dto.ts +1 -1
  782. package/models/supplier-card-payable-response-dto.ts +1 -1
  783. package/models/supplier-tax-type.ts +1 -1
  784. package/models/token-request-dto.ts +1 -1
  785. package/models/token-response-dto.ts +1 -1
  786. package/models/update-bid-request-dto.ts +1 -1
  787. package/models/update-bid200-response.ts +1 -1
  788. package/models/update-webhook-endpoint-request-dto.ts +1 -1
  789. package/models/upload-file-request-dto.ts +1 -1
  790. package/models/upload-file201-response.ts +1 -1
  791. package/models/upload-url-created-response-dto.ts +1 -1
  792. package/models/webhook-bid-event-data.ts +1 -1
  793. package/models/webhook-delivery-dto.ts +1 -1
  794. package/models/webhook-endpoint-dto.ts +1 -1
  795. package/models/webhook-endpoint-with-secret-dto.ts +1 -1
  796. package/models/webhook-event-envelope.ts +1 -1
  797. package/models/webhook-ping-event-data.ts +1 -1
  798. package/models/webhook-test-result-dto.ts +1 -1
  799. package/package.json +1 -1
  800. package/dist/esm/models/negotiation-score-dto.d.ts +0 -25
  801. package/dist/esm/models/negotiation-score-dto.js +0 -14
  802. package/dist/esm/models/negotiation-scored-v2-response-dto.d.ts +0 -29
  803. package/dist/esm/models/negotiation-scored-v2-response-dto.js +0 -16
  804. package/dist/esm/models/submit-negotiation-scores-request-dto.d.ts +0 -22
  805. package/dist/esm/models/submit-negotiation-scores-request-dto.js +0 -14
  806. package/dist/esm/models/submit-negotiation-scores201-response.d.ts +0 -15
  807. package/dist/esm/models/submit-negotiation-scores201-response.js +0 -14
  808. package/dist/models/negotiation-score-dto.d.ts +0 -25
  809. package/dist/models/negotiation-score-dto.js +0 -15
  810. package/dist/models/negotiation-scored-v2-response-dto.d.ts +0 -29
  811. package/dist/models/negotiation-scored-v2-response-dto.js +0 -19
  812. package/dist/models/submit-negotiation-scores-request-dto.d.ts +0 -22
  813. package/dist/models/submit-negotiation-scores-request-dto.js +0 -15
  814. package/dist/models/submit-negotiation-scores201-response.d.ts +0 -15
  815. package/dist/models/submit-negotiation-scores201-response.js +0 -15
  816. package/docs/NegotiationScoreDto.md +0 -24
  817. package/docs/NegotiationScoredV2ResponseDto.md +0 -24
  818. package/docs/SubmitNegotiationScores201Response.md +0 -20
  819. package/docs/SubmitNegotiationScoresRequestDto.md +0 -22
  820. package/models/negotiation-score-dto.ts +0 -31
  821. package/models/negotiation-scored-v2-response-dto.ts +0 -38
  822. package/models/submit-negotiation-scores-request-dto.ts +0 -30
  823. package/models/submit-negotiation-scores201-response.ts +0 -23
@@ -35,7 +35,6 @@ All URIs are relative to *https://partner-api.c-market.net*
35
35
  |[**revertAward**](#revertaward) | **DELETE** /v2/bids/{bidRef}/award | λ‚™μ°° 되돌리기|
36
36
  |[**rotateWebhookSecret**](#rotatewebhooksecret) | **POST** /v2/webhook-endpoints/{endpointId}/rotate-secret | μ›Ήν›… μ„œλͺ… μ‹œν¬λ¦Ώ μž¬λ°œκΈ‰|
37
37
  |[**sendWebhookTestEvent**](#sendwebhooktestevent) | **POST** /v2/webhook-endpoints/{endpointId}/test | μ›Ήν›… μ—°κ²° 확인 λ°œμ†‘|
38
- |[**submitNegotiationScores**](#submitnegotiationscores) | **POST** /v2/bids/{bidRef}/negotiation-scores | ν˜‘μƒ μ μˆ˜ν‰κ°€|
39
38
  |[**updateBid**](#updatebid) | **PATCH** /v2/bids/{bidRef} | 곡고 μˆ˜μ •|
40
39
  |[**updateWebhookEndpoint**](#updatewebhookendpoint) | **PATCH** /v2/webhook-endpoints/{endpointId} | μ›Ήν›… ꡬ독 μˆ˜μ •|
41
40
  |[**uploadFile**](#uploadfile) | **POST** /v2/files | 곡고 μ²¨λΆ€νŒŒμΌ μ—…λ‘œλ“œ (κΈ°λ³Έ)|
@@ -1567,7 +1566,7 @@ const { status, data } = await apiInstance.markBidFailed(
1567
1566
  # **registerAward**
1568
1567
  > RegisterAward201Response registerAward(registerAwardRequestDto)
1569
1568
 
1570
- λ‚™μ°° κ²°κ³Όλ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€. μŠ€μ½”ν”„ `awards:write` Β· `Idempotency-Key` 헀더 ν•„μˆ˜. - μž…μ°° 마감(μž…μ°°μ™„λ£Œ) μƒνƒœμ—μ„œ ν˜ΈμΆœν•©λ‹ˆλ‹€. - λ‚™μ°° ν›„ 곡고 μƒνƒœλŠ” 계약진행(`CONTRACT_IN_PROGRESS`)μž…λ‹ˆλ‹€. `AWARDED` 곡고 μƒνƒœλŠ” μ—†μœΌλ―€λ‘œ λ‚™μ°° μ—¬λΆ€λŠ” `participants[].isWinner`둜 νŒλ‹¨ν•©λ‹ˆλ‹€. - ν˜‘μƒ 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) κ³΅κ³ λŠ” `POST /v2/bids/{bidRef}/negotiation-scores`둜 평가λ₯Ό λ§ˆμ³μ•Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. - λ°œμ£ΌκΈ°κ΄€μ€ API ν‚€λ‘œ κ²°μ •λ©λ‹ˆλ‹€(`buyerId`λ₯Ό 보내지 μ•ŠμŠ΅λ‹ˆλ‹€). - 같은 킀와 같은 body둜 μž¬μ „μ†‘ν•˜λ©΄ 24μ‹œκ°„ λ™μ•ˆ μΊμ‹œλœ 응닡을 λŒλ €μ€λ‹ˆλ‹€.
1569
+ λ‚™μ°° κ²°κ³Όλ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€. μŠ€μ½”ν”„ `awards:write` Β· `Idempotency-Key` 헀더 ν•„μˆ˜. - μž…μ°° 마감(μž…μ°°μ™„λ£Œ) μƒνƒœμ—μ„œ ν˜ΈμΆœν•©λ‹ˆλ‹€. - λ‚™μ°° ν›„ 곡고 μƒνƒœλŠ” 계약진행(`CONTRACT_IN_PROGRESS`)μž…λ‹ˆλ‹€. `AWARDED` 곡고 μƒνƒœλŠ” μ—†μœΌλ―€λ‘œ λ‚™μ°° μ—¬λΆ€λŠ” `participants[].isWinner`둜 νŒλ‹¨ν•©λ‹ˆλ‹€. - ν˜‘μƒ 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) κ³΅κ³ λŠ” 평가λ₯Ό λ§ˆμ³μ•Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ μˆ˜ν‰κ°€λŠ” API둜 μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ©° CMARKET ν™”λ©΄(μž„λ² λ“œ 포함)μ—μ„œ μ§„ν–‰ν•©λ‹ˆλ‹€. - λ°œμ£ΌκΈ°κ΄€μ€ API ν‚€λ‘œ κ²°μ •λ©λ‹ˆλ‹€(`buyerId`λ₯Ό 보내지 μ•ŠμŠ΅λ‹ˆλ‹€). - 같은 킀와 같은 body둜 μž¬μ „μ†‘ν•˜λ©΄ 24μ‹œκ°„ λ™μ•ˆ μΊμ‹œλœ 응닡을 λŒλ €μ€λ‹ˆλ‹€.
1571
1570
 
1572
1571
  ### Example
1573
1572
 
@@ -2019,73 +2018,6 @@ const { status, data } = await apiInstance.sendWebhookTestEvent(
2019
2018
 
2020
2019
  [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
2021
2020
 
2022
- # **submitNegotiationScores**
2023
- > SubmitNegotiationScores201Response submitNegotiationScores(submitNegotiationScoresRequestDto)
2024
-
2025
- ν˜‘μƒ 방식(`NEGOTIATION`, `NEGOTIATION_AUTO`) 곡고의 μ‘μ°°μžλ³„ 점수λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€. μŠ€μ½”ν”„ `awards:write` Β· `Idempotency-Key` 헀더 ν•„μˆ˜. - μž…μ°° 마감 ν›„ λ‚™μ°°(`POST /v2/bids/{bidRef}/award`) 전에 ν˜ΈμΆœν•©λ‹ˆλ‹€. ν˜‘μƒ 방식 κ³΅κ³ λŠ” 이 평가λ₯Ό λ§ˆμ³μ•Ό 낙찰에 μ§„μž…ν•©λ‹ˆλ‹€. - `complete=true`λ©΄ ν‰κ°€μ™„λ£Œλ‘œ μ²˜λ¦¬λ˜μ–΄ 낙찰을 ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. - λ°œμ£ΌκΈ°κ΄€μ€ API ν‚€λ‘œ κ²°μ •λ©λ‹ˆλ‹€(`buyerId`λ₯Ό 보내지 μ•ŠμŠ΅λ‹ˆλ‹€).
2026
-
2027
- ### Example
2028
-
2029
- ```typescript
2030
- import {
2031
- PartnerApiApi,
2032
- Configuration,
2033
- SubmitNegotiationScoresRequestDto
2034
- } from '@cmarket/partner-sdk';
2035
-
2036
- const configuration = new Configuration();
2037
- const apiInstance = new PartnerApiApi(configuration);
2038
-
2039
- let bidRef: string; //λ°œμ£ΌκΈ°κ΄€ 자체 ꡬ맀번호(ꢌμž₯) λ˜λŠ” c-market 곡고번호. κ΅¬λ§€λ²ˆν˜ΈλŠ” 킀에 μ—°κ²°λœ λ°œμ£ΌκΈ°κ΄€ λ²”μœ„μ—μ„œ μ΅œμ‹  λΌμš΄λ“œ 곡고둜 ν•΄μ†Œλ©λ‹ˆλ‹€. (default to undefined)
2040
- let idempotencyKey: string; //λ©±λ“±ν‚€(1~255자, `[A-Za-z0-9_-]`). **μž¬μ‹œλ„ν•  λ•ŒλŠ” 처음과 같은 ν‚€λ₯Ό 보내야** 쀑볡 생성이 λ§‰νž™λ‹ˆλ‹€. νƒ€μž„μ•„μ›ƒΒ·λ„€νŠΈμ›Œν¬ 였λ₯˜λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄μ„œ μƒˆ ν‚€λ₯Ό λ§Œλ“€λ©΄ λ³„κ°œ μš”μ²­μ΄ λ©λ‹ˆλ‹€. UUID v4λ₯Ό λ§Œλ“€μ–΄ 연동 μ‹œμŠ€ν…œμ— μ €μž₯ν•˜κ±°λ‚˜, μš”μ²­ λ‚΄μš©μ—μ„œ κ²°μ •μ μœΌλ‘œ νŒŒμƒν•˜μ„Έμš”(예: `bid-create-{ꡬ맀번호}`). 같은 킀와 같은 bodyλŠ” 24μ‹œκ°„ λ™μ•ˆ μΊμ‹œλœ 응닡을 κ·ΈλŒ€λ‘œ λŒλ €μ€λ‹ˆλ‹€. (default to undefined)
2041
- let submitNegotiationScoresRequestDto: SubmitNegotiationScoresRequestDto; //
2042
-
2043
- const { status, data } = await apiInstance.submitNegotiationScores(
2044
- bidRef,
2045
- idempotencyKey,
2046
- submitNegotiationScoresRequestDto
2047
- );
2048
- ```
2049
-
2050
- ### Parameters
2051
-
2052
- |Name | Type | Description | Notes|
2053
- |------------- | ------------- | ------------- | -------------|
2054
- | **submitNegotiationScoresRequestDto** | **SubmitNegotiationScoresRequestDto**| | |
2055
- | **bidRef** | [**string**] | λ°œμ£ΌκΈ°κ΄€ 자체 ꡬ맀번호(ꢌμž₯) λ˜λŠ” c-market 곡고번호. κ΅¬λ§€λ²ˆν˜ΈλŠ” 킀에 μ—°κ²°λœ λ°œμ£ΌκΈ°κ΄€ λ²”μœ„μ—μ„œ μ΅œμ‹  λΌμš΄λ“œ 곡고둜 ν•΄μ†Œλ©λ‹ˆλ‹€. | defaults to undefined|
2056
- | **idempotencyKey** | [**string**] | λ©±λ“±ν‚€(1~255자, `[A-Za-z0-9_-]`). **μž¬μ‹œλ„ν•  λ•ŒλŠ” 처음과 같은 ν‚€λ₯Ό 보내야** 쀑볡 생성이 λ§‰νž™λ‹ˆλ‹€. νƒ€μž„μ•„μ›ƒΒ·λ„€νŠΈμ›Œν¬ 였λ₯˜λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄μ„œ μƒˆ ν‚€λ₯Ό λ§Œλ“€λ©΄ λ³„κ°œ μš”μ²­μ΄ λ©λ‹ˆλ‹€. UUID v4λ₯Ό λ§Œλ“€μ–΄ 연동 μ‹œμŠ€ν…œμ— μ €μž₯ν•˜κ±°λ‚˜, μš”μ²­ λ‚΄μš©μ—μ„œ κ²°μ •μ μœΌλ‘œ νŒŒμƒν•˜μ„Έμš”(예: `bid-create-{ꡬ맀번호}`). 같은 킀와 같은 bodyλŠ” 24μ‹œκ°„ λ™μ•ˆ μΊμ‹œλœ 응닡을 κ·ΈλŒ€λ‘œ λŒλ €μ€λ‹ˆλ‹€. | defaults to undefined|
2057
-
2058
-
2059
- ### Return type
2060
-
2061
- **SubmitNegotiationScores201Response**
2062
-
2063
- ### Authorization
2064
-
2065
- [partner-oauth2](../README.md#partner-oauth2)
2066
-
2067
- ### HTTP request headers
2068
-
2069
- - **Content-Type**: application/json
2070
- - **Accept**: application/json, application/problem+json
2071
-
2072
-
2073
- ### HTTP response details
2074
- | Status code | Description | Response headers |
2075
- |-------------|-------------|------------------|
2076
- |**201** | ν˜‘μƒ μ μˆ˜ν‰κ°€ μ™„λ£Œ. | * RateLimit - ν˜„μž¬ 창의 μž”μ—¬ μΏΌν„°(&#x60;r&#x60;)와 λ¦¬μ…‹κΉŒμ§€ 남은 초(&#x60;t&#x60;). 이 값이 0에 κ°€κΉŒμ›Œμ§€λ©΄ μš”μ²­ 간격을 λŠ˜λ¦¬μ„Έμš” β€” 429λ₯Ό λ§Œλ‚˜κΈ° 전에 μ‘°μ ˆν•˜λΌκ³  μ£ΌλŠ” κ°’μž…λ‹ˆλ‹€. <br> * RateLimit-Policy - 적용 쀑인 μΏΌν„° μ •μ±…(&#x60;q&#x60; μš”μ²­ 수 / &#x60;w&#x60; μ°½ 크기(초)). λ³€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•œ 번 읽어 두면 λ©λ‹ˆλ‹€. <br> |
2077
- |**400** | μž…λ ₯ 검증 μ‹€νŒ¨(&#x60;…/validation-failed&#x60;), &#x60;Idempotency-Key&#x60; λˆ„λ½Β·ν˜•μ‹ 였λ₯˜(&#x60;…/idempotency-key-required&#x60;, &#x60;…/idempotency-key-invalid&#x60;), μš”μ²­ λ‚΄μš© 였λ₯˜(&#x60;…/upstream-invalid-input&#x60;). | - |
2078
- |**401** | Bearer 토큰 μ—†μŒ(&#x60;…/missing-bearer-token&#x60;), λ§Œλ£ŒΒ·μœ„λ³€μ‘°Β·νκΈ°(&#x60;…/invalid-token&#x60;). | - |
2079
- |**403** | ν‚€ 미바인딩(&#x60;…/unbound-partner-key&#x60;), IP 차단(&#x60;…/ip-not-allowed&#x60;), μŠ€μ½”ν”„ λΆ€μ‘±(&#x60;…/insufficient-scope&#x60;), λŒ€ν–‰ λ²”μœ„ λ°–(&#x60;…/buyer-scope-mismatch&#x60;), κΆŒν•œ μ—†μŒ(&#x60;…/upstream-forbidden&#x60;). | - |
2080
- |**409** | 같은 &#x60;Idempotency-Key&#x60;의 원 μš”μ²­μ΄ 처리 쀑(&#x60;…/idempotency-key-conflict&#x60;), λ˜λŠ” ν˜„μž¬ μƒνƒœμ™€ 좩돌(&#x60;…/upstream-conflict&#x60;). μ•žμ˜ 경우 μž μ‹œ ν›„ 같은 ν‚€λ‘œ μž¬μ‹œλ„ν•˜λ©΄ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. | - |
2081
- |**422** | 같은 &#x60;Idempotency-Key&#x60;λ₯Ό λ‹€λ₯Έ body둜 μž¬μ „μ†‘(&#x60;…/idempotency-key-reused&#x60;), λ˜λŠ” λ‚΄μš©μƒ 처리 λΆˆκ°€(&#x60;…/upstream-unprocessable&#x60;). μž¬μ‹œλ„ν•΄λ„ 같은 μ‹€νŒ¨μ΄λ―€λ‘œ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦½λ‹ˆλ‹€. | - |
2082
- |**429** | μš”μ²­ ν•œλ„ 초과(&#x60;…/too-many-requests&#x60;). ν•œλ„λŠ” &#x60;client_id&#x60;λ‹Ή λΆ„λ‹Ή 60회. λŒ€κΈ° μ‹œκ°„μ€ &#x60;Retry-After&#x60;(초), μž”μ—¬ μΏΌν„°λŠ” &#x60;RateLimit&#x60;Β·&#x60;RateLimit-Policy&#x60; 헀더에 μ‹€λ¦½λ‹ˆλ‹€. &#x60;retryable: true&#x60;. | * Retry-After - μž¬μ‹œλ„κΉŒμ§€ λŒ€κΈ°ν•  초. <br> * RateLimit - ν˜„μž¬ 창의 μž”μ—¬ μΏΌν„°. 예: &#x60;\&quot;default\&quot;;r&#x3D;0;t&#x3D;42&#x60;. <br> * RateLimit-Policy - 적용 쀑인 μΏΌν„° μ •μ±…(&#x60;q&#x60; μš”μ²­ 수 / &#x60;w&#x60; μ°½ 크기(초)). λ³€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•œ 번 읽어 두면 λ©λ‹ˆλ‹€. <br> |
2083
- |**500** | μ„œλ²„ λ‚΄λΆ€ 였λ₯˜(&#x60;…/internal-server-error&#x60;). &#x60;retryable: true&#x60;. | - |
2084
- |**502** | μš”μ²­ 처리 μ‹€νŒ¨(&#x60;…/upstream-rejected&#x60;). &#x60;retryable: true&#x60;. | - |
2085
- |**503** | μΌμ‹œμ  처리 λΆˆκ°€(&#x60;…/service-unavailable&#x60;). &#x60;Retry-After&#x60; 헀더λ₯Ό λ”°λ¦…λ‹ˆλ‹€. &#x60;retryable: true&#x60;. | * Retry-After - μž¬μ‹œλ„κΉŒμ§€ λŒ€κΈ°ν•  초. <br> |
2086
-
2087
- [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
2088
-
2089
2021
  # **updateBid**
2090
2022
  > UpdateBid200Response updateBid(updateBidRequestDto)
2091
2023
 
package/index.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token`μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403`을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • λ°œμ£ΌκΈ°κ΄€ λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2`의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }`μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data`κ°€ 배열이고 `meta`κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta`κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*`와 `/.well-known/_*`λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2`의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified`λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json`μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId`와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId`λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type`은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URIλŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409와 422의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ bodyλ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id`κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug은 **HTTP status둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 42.0.2
7
+ * The version of the OpenAPI document: 43.0.1
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).