@cmarket/partner-sdk 38.5.0 β†’ 38.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (803) hide show
  1. package/README.md +4 -4
  2. package/api/embed-api.ts +1 -1
  3. package/api/oauth-api.ts +1 -1
  4. package/api/partner-api-api.ts +1 -1
  5. package/api/products-api.ts +1 -1
  6. package/api/webhooks-api.ts +25 -25
  7. package/api/well-known-api.ts +1 -1
  8. package/api.ts +1 -1
  9. package/base.ts +1 -1
  10. package/common.ts +1 -1
  11. package/configuration.ts +1 -1
  12. package/dist/api/embed-api.d.ts +1 -1
  13. package/dist/api/embed-api.js +1 -1
  14. package/dist/api/oauth-api.d.ts +1 -1
  15. package/dist/api/oauth-api.js +1 -1
  16. package/dist/api/partner-api-api.d.ts +1 -1
  17. package/dist/api/partner-api-api.js +1 -1
  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 +25 -25
  21. package/dist/api/webhooks-api.js +25 -25
  22. package/dist/api/well-known-api.d.ts +1 -1
  23. package/dist/api/well-known-api.js +1 -1
  24. package/dist/api.d.ts +1 -1
  25. package/dist/api.js +1 -1
  26. package/dist/base.d.ts +1 -1
  27. package/dist/base.js +1 -1
  28. package/dist/common.d.ts +1 -1
  29. package/dist/common.js +1 -1
  30. package/dist/configuration.d.ts +1 -1
  31. package/dist/configuration.js +1 -1
  32. package/dist/esm/api/embed-api.d.ts +1 -1
  33. package/dist/esm/api/embed-api.js +1 -1
  34. package/dist/esm/api/oauth-api.d.ts +1 -1
  35. package/dist/esm/api/oauth-api.js +1 -1
  36. package/dist/esm/api/partner-api-api.d.ts +1 -1
  37. package/dist/esm/api/partner-api-api.js +1 -1
  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 +25 -25
  41. package/dist/esm/api/webhooks-api.js +25 -25
  42. package/dist/esm/api/well-known-api.d.ts +1 -1
  43. package/dist/esm/api/well-known-api.js +1 -1
  44. package/dist/esm/api.d.ts +1 -1
  45. package/dist/esm/api.js +1 -1
  46. package/dist/esm/base.d.ts +1 -1
  47. package/dist/esm/base.js +1 -1
  48. package/dist/esm/common.d.ts +1 -1
  49. package/dist/esm/common.js +1 -1
  50. package/dist/esm/configuration.d.ts +1 -1
  51. package/dist/esm/configuration.js +1 -1
  52. package/dist/esm/index.d.ts +1 -1
  53. package/dist/esm/index.js +1 -1
  54. package/dist/esm/models/acceptance-result-response-dto.d.ts +1 -1
  55. package/dist/esm/models/acceptance-result-response-dto.js +1 -1
  56. package/dist/esm/models/acknowledge-product-receipt200-response.d.ts +1 -1
  57. package/dist/esm/models/acknowledge-product-receipt200-response.js +1 -1
  58. package/dist/esm/models/acknowledge-products-request-dto.d.ts +1 -1
  59. package/dist/esm/models/acknowledge-products-request-dto.js +1 -1
  60. package/dist/esm/models/api-catalog-dto.d.ts +1 -1
  61. package/dist/esm/models/api-catalog-dto.js +1 -1
  62. package/dist/esm/models/api-catalog-entry-dto.d.ts +1 -1
  63. package/dist/esm/models/api-catalog-entry-dto.js +1 -1
  64. package/dist/esm/models/api-catalog-link-dto.d.ts +1 -1
  65. package/dist/esm/models/api-catalog-link-dto.js +1 -1
  66. package/dist/esm/models/authorization-server-metadata-dto.d.ts +1 -1
  67. package/dist/esm/models/authorization-server-metadata-dto.js +1 -1
  68. package/dist/esm/models/award-method-public.d.ts +1 -1
  69. package/dist/esm/models/award-method-public.js +1 -1
  70. package/dist/esm/models/award-registered-v2-response-dto.d.ts +1 -1
  71. package/dist/esm/models/award-registered-v2-response-dto.js +1 -1
  72. package/dist/esm/models/award-reverted-v2-response-dto.d.ts +1 -1
  73. package/dist/esm/models/award-reverted-v2-response-dto.js +1 -1
  74. package/dist/esm/models/bid-acceptance-dto.d.ts +1 -1
  75. package/dist/esm/models/bid-acceptance-dto.js +1 -1
  76. package/dist/esm/models/bid-attachment-input-dto.d.ts +1 -1
  77. package/dist/esm/models/bid-attachment-input-dto.js +1 -1
  78. package/dist/esm/models/bid-bond-dto.d.ts +1 -1
  79. package/dist/esm/models/bid-bond-dto.js +1 -1
  80. package/dist/esm/models/bid-cancelled-response-dto.d.ts +1 -1
  81. package/dist/esm/models/bid-cancelled-response-dto.js +1 -1
  82. package/dist/esm/models/bid-contact-dto.d.ts +1 -1
  83. package/dist/esm/models/bid-contact-dto.js +1 -1
  84. package/dist/esm/models/bid-contacts-dto.d.ts +1 -1
  85. package/dist/esm/models/bid-contacts-dto.js +1 -1
  86. package/dist/esm/models/bid-contract-document-dto.d.ts +1 -1
  87. package/dist/esm/models/bid-contract-document-dto.js +1 -1
  88. package/dist/esm/models/bid-delivery-terms-dto.d.ts +1 -1
  89. package/dist/esm/models/bid-delivery-terms-dto.js +1 -1
  90. package/dist/esm/models/bid-detail-response-dto.d.ts +1 -1
  91. package/dist/esm/models/bid-detail-response-dto.js +1 -1
  92. package/dist/esm/models/bid-document-dto.d.ts +1 -1
  93. package/dist/esm/models/bid-document-dto.js +1 -1
  94. package/dist/esm/models/bid-failed-v2-response-dto.d.ts +1 -1
  95. package/dist/esm/models/bid-failed-v2-response-dto.js +1 -1
  96. package/dist/esm/models/bid-item-dto.d.ts +1 -1
  97. package/dist/esm/models/bid-item-dto.js +1 -1
  98. package/dist/esm/models/bid-lifecycle-dto.d.ts +1 -1
  99. package/dist/esm/models/bid-lifecycle-dto.js +1 -1
  100. package/dist/esm/models/bid-manager-dto.d.ts +1 -1
  101. package/dist/esm/models/bid-manager-dto.js +1 -1
  102. package/dist/esm/models/bid-payment-terms-dto.d.ts +1 -1
  103. package/dist/esm/models/bid-payment-terms-dto.js +1 -1
  104. package/dist/esm/models/bid-product-dto.d.ts +1 -1
  105. package/dist/esm/models/bid-product-dto.js +1 -1
  106. package/dist/esm/models/bid-public-status.d.ts +1 -1
  107. package/dist/esm/models/bid-public-status.js +1 -1
  108. package/dist/esm/models/bid-registered-response-dto.d.ts +1 -1
  109. package/dist/esm/models/bid-registered-response-dto.js +1 -1
  110. package/dist/esm/models/bid-result-participant-attachment-dto.d.ts +1 -1
  111. package/dist/esm/models/bid-result-participant-attachment-dto.js +1 -1
  112. package/dist/esm/models/bid-result-participant-dto.d.ts +1 -1
  113. package/dist/esm/models/bid-result-participant-dto.js +1 -1
  114. package/dist/esm/models/bid-results-response-dto.d.ts +1 -1
  115. package/dist/esm/models/bid-results-response-dto.js +1 -1
  116. package/dist/esm/models/bid-settlement-line-item-dto.d.ts +1 -1
  117. package/dist/esm/models/bid-settlement-line-item-dto.js +1 -1
  118. package/dist/esm/models/bid-settlement-participant-dto.d.ts +1 -1
  119. package/dist/esm/models/bid-settlement-participant-dto.js +1 -1
  120. package/dist/esm/models/bid-settlement-response-dto.d.ts +1 -1
  121. package/dist/esm/models/bid-settlement-response-dto.js +1 -1
  122. package/dist/esm/models/bid-statement-response-dto.d.ts +1 -1
  123. package/dist/esm/models/bid-statement-response-dto.js +1 -1
  124. package/dist/esm/models/bid-summary-dto.d.ts +1 -1
  125. package/dist/esm/models/bid-summary-dto.js +1 -1
  126. package/dist/esm/models/bid-type-public.d.ts +1 -1
  127. package/dist/esm/models/bid-type-public.js +1 -1
  128. package/dist/esm/models/bid-updated-response-dto.d.ts +1 -1
  129. package/dist/esm/models/bid-updated-response-dto.js +1 -1
  130. package/dist/esm/models/cancel-bid-request-dto.d.ts +1 -1
  131. package/dist/esm/models/cancel-bid-request-dto.js +1 -1
  132. package/dist/esm/models/cancel-bid200-response.d.ts +1 -1
  133. package/dist/esm/models/cancel-bid200-response.js +1 -1
  134. package/dist/esm/models/card-payment-request-response-dto.d.ts +1 -1
  135. package/dist/esm/models/card-payment-request-response-dto.js +1 -1
  136. package/dist/esm/models/complete-acceptance-request-dto.d.ts +1 -1
  137. package/dist/esm/models/complete-acceptance-request-dto.js +1 -1
  138. package/dist/esm/models/complete-acceptance200-response.d.ts +1 -1
  139. package/dist/esm/models/complete-acceptance200-response.js +1 -1
  140. package/dist/esm/models/complete-invoice200-response.d.ts +1 -1
  141. package/dist/esm/models/complete-invoice200-response.js +1 -1
  142. package/dist/esm/models/complete-upload-request-dto.d.ts +1 -1
  143. package/dist/esm/models/complete-upload-request-dto.js +1 -1
  144. package/dist/esm/models/contract-restriction-confirm-input-dto.d.ts +1 -1
  145. package/dist/esm/models/contract-restriction-confirm-input-dto.js +1 -1
  146. package/dist/esm/models/create-bid-request-dto.d.ts +1 -1
  147. package/dist/esm/models/create-bid-request-dto.js +1 -1
  148. package/dist/esm/models/create-card-payment-dto.d.ts +1 -1
  149. package/dist/esm/models/create-card-payment-dto.js +1 -1
  150. package/dist/esm/models/create-card-payment-request-dto.d.ts +1 -1
  151. package/dist/esm/models/create-card-payment-request-dto.js +1 -1
  152. package/dist/esm/models/create-card-payment200-response.d.ts +1 -1
  153. package/dist/esm/models/create-card-payment200-response.js +1 -1
  154. package/dist/esm/models/create-embed-launch201-response.d.ts +1 -1
  155. package/dist/esm/models/create-embed-launch201-response.js +1 -1
  156. package/dist/esm/models/create-external-contract-documents-request-dto.d.ts +1 -1
  157. package/dist/esm/models/create-external-contract-documents-request-dto.js +1 -1
  158. package/dist/esm/models/create-external-contract-documents-response-dto.d.ts +1 -1
  159. package/dist/esm/models/create-external-contract-documents-response-dto.js +1 -1
  160. package/dist/esm/models/create-file-upload-url201-response.d.ts +1 -1
  161. package/dist/esm/models/create-file-upload-url201-response.js +1 -1
  162. package/dist/esm/models/create-upload-url-request-dto.d.ts +1 -1
  163. package/dist/esm/models/create-upload-url-request-dto.js +1 -1
  164. package/dist/esm/models/create-webhook-endpoint-request-dto.d.ts +1 -1
  165. package/dist/esm/models/create-webhook-endpoint-request-dto.js +1 -1
  166. package/dist/esm/models/create-webhook-endpoint201-response.d.ts +1 -1
  167. package/dist/esm/models/create-webhook-endpoint201-response.js +1 -1
  168. package/dist/esm/models/delivery-date-type-public.d.ts +1 -1
  169. package/dist/esm/models/delivery-date-type-public.js +1 -1
  170. package/dist/esm/models/delivery-method-public.d.ts +1 -1
  171. package/dist/esm/models/delivery-method-public.js +1 -1
  172. package/dist/esm/models/embed-launch-request-dto.d.ts +1 -1
  173. package/dist/esm/models/embed-launch-request-dto.js +1 -1
  174. package/dist/esm/models/embed-launch-response-dto.d.ts +1 -1
  175. package/dist/esm/models/embed-launch-response-dto.js +1 -1
  176. package/dist/esm/models/excellent-procurement-public.d.ts +1 -1
  177. package/dist/esm/models/excellent-procurement-public.js +1 -1
  178. package/dist/esm/models/external-contract-document-item-dto.d.ts +1 -1
  179. package/dist/esm/models/external-contract-document-item-dto.js +1 -1
  180. package/dist/esm/models/external-contract-documents-response-dto.d.ts +1 -1
  181. package/dist/esm/models/external-contract-documents-response-dto.js +1 -1
  182. package/dist/esm/models/external-contract-item-dto.d.ts +1 -1
  183. package/dist/esm/models/external-contract-item-dto.js +1 -1
  184. package/dist/esm/models/external-contract-snapshot-dto.d.ts +1 -1
  185. package/dist/esm/models/external-contract-snapshot-dto.js +1 -1
  186. package/dist/esm/models/external-document-inputs-dto.d.ts +1 -1
  187. package/dist/esm/models/external-document-inputs-dto.js +1 -1
  188. package/dist/esm/models/file-meta-response-dto.d.ts +1 -1
  189. package/dist/esm/models/file-meta-response-dto.js +1 -1
  190. package/dist/esm/models/file-uploaded-response-dto.d.ts +1 -1
  191. package/dist/esm/models/file-uploaded-response-dto.js +1 -1
  192. package/dist/esm/models/generated-external-contract-document-dto.d.ts +1 -1
  193. package/dist/esm/models/generated-external-contract-document-dto.js +1 -1
  194. package/dist/esm/models/get-bid-settlement200-response.d.ts +1 -1
  195. package/dist/esm/models/get-bid-settlement200-response.js +1 -1
  196. package/dist/esm/models/get-bid-statement200-response.d.ts +1 -1
  197. package/dist/esm/models/get-bid-statement200-response.js +1 -1
  198. package/dist/esm/models/get-bid200-response.d.ts +1 -1
  199. package/dist/esm/models/get-bid200-response.js +1 -1
  200. package/dist/esm/models/get-file-meta200-response.d.ts +1 -1
  201. package/dist/esm/models/get-file-meta200-response.js +1 -1
  202. package/dist/esm/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
  203. package/dist/esm/models/get-supplier-card-payable-v2200-response.js +1 -1
  204. package/dist/esm/models/get-webhook-endpoint200-response.d.ts +1 -1
  205. package/dist/esm/models/get-webhook-endpoint200-response.js +1 -1
  206. package/dist/esm/models/green-product-public.d.ts +1 -1
  207. package/dist/esm/models/green-product-public.js +1 -1
  208. package/dist/esm/models/health-controller-check200-response.d.ts +1 -1
  209. package/dist/esm/models/health-controller-check200-response.js +1 -1
  210. package/dist/esm/models/health-response-dto.d.ts +1 -1
  211. package/dist/esm/models/health-response-dto.js +1 -1
  212. package/dist/esm/models/hierarchical-region-dto.d.ts +1 -1
  213. package/dist/esm/models/hierarchical-region-dto.js +1 -1
  214. package/dist/esm/models/introspect-request-dto.d.ts +1 -1
  215. package/dist/esm/models/introspect-request-dto.js +1 -1
  216. package/dist/esm/models/introspection-response-dto.d.ts +1 -1
  217. package/dist/esm/models/introspection-response-dto.js +1 -1
  218. package/dist/esm/models/invalid-param-dto.d.ts +1 -1
  219. package/dist/esm/models/invalid-param-dto.js +1 -1
  220. package/dist/esm/models/invoice-completed-response-dto.d.ts +1 -1
  221. package/dist/esm/models/invoice-completed-response-dto.js +1 -1
  222. package/dist/esm/models/invoice-split-response-dto.d.ts +1 -1
  223. package/dist/esm/models/invoice-split-response-dto.js +1 -1
  224. package/dist/esm/models/legal-mandatory-public.d.ts +1 -1
  225. package/dist/esm/models/legal-mandatory-public.js +1 -1
  226. package/dist/esm/models/list-bid-results200-response.d.ts +1 -1
  227. package/dist/esm/models/list-bid-results200-response.js +1 -1
  228. package/dist/esm/models/list-bids200-response-meta.d.ts +1 -1
  229. package/dist/esm/models/list-bids200-response-meta.js +1 -1
  230. package/dist/esm/models/list-bids200-response.d.ts +1 -1
  231. package/dist/esm/models/list-bids200-response.js +1 -1
  232. package/dist/esm/models/list-products200-response.d.ts +1 -1
  233. package/dist/esm/models/list-products200-response.js +1 -1
  234. package/dist/esm/models/list-webhook-deliveries-response-dto.d.ts +1 -1
  235. package/dist/esm/models/list-webhook-deliveries-response-dto.js +1 -1
  236. package/dist/esm/models/list-webhook-deliveries200-response.d.ts +1 -1
  237. package/dist/esm/models/list-webhook-deliveries200-response.js +1 -1
  238. package/dist/esm/models/list-webhook-endpoints200-response.d.ts +1 -1
  239. package/dist/esm/models/list-webhook-endpoints200-response.js +1 -1
  240. package/dist/esm/models/mark-bid-failed-request-dto.d.ts +1 -1
  241. package/dist/esm/models/mark-bid-failed-request-dto.js +1 -1
  242. package/dist/esm/models/mark-bid-failed201-response.d.ts +1 -1
  243. package/dist/esm/models/mark-bid-failed201-response.js +1 -1
  244. package/dist/esm/models/negotiation-score-dto.d.ts +1 -1
  245. package/dist/esm/models/negotiation-score-dto.js +1 -1
  246. package/dist/esm/models/negotiation-scored-v2-response-dto.d.ts +1 -1
  247. package/dist/esm/models/negotiation-scored-v2-response-dto.js +1 -1
  248. package/dist/esm/models/oauth-error-response-dto.d.ts +1 -1
  249. package/dist/esm/models/oauth-error-response-dto.js +1 -1
  250. package/dist/esm/models/on-bid-award-reverted-request.d.ts +1 -1
  251. package/dist/esm/models/on-bid-award-reverted-request.js +1 -1
  252. package/dist/esm/models/on-bid-awarded-request.d.ts +1 -1
  253. package/dist/esm/models/on-bid-awarded-request.js +1 -1
  254. package/dist/esm/models/on-bid-canceled-request.d.ts +1 -1
  255. package/dist/esm/models/on-bid-canceled-request.js +1 -1
  256. package/dist/esm/models/on-bid-closed-request.d.ts +1 -1
  257. package/dist/esm/models/on-bid-closed-request.js +1 -1
  258. package/dist/esm/models/on-bid-failed-request.d.ts +1 -1
  259. package/dist/esm/models/on-bid-failed-request.js +1 -1
  260. package/dist/esm/models/on-ping-request.d.ts +1 -1
  261. package/dist/esm/models/on-ping-request.js +1 -1
  262. package/dist/esm/models/partner-webhook-delivery-status.d.ts +1 -1
  263. package/dist/esm/models/partner-webhook-delivery-status.js +1 -1
  264. package/dist/esm/models/partner-webhook-endpoint-status.d.ts +1 -1
  265. package/dist/esm/models/partner-webhook-endpoint-status.js +1 -1
  266. package/dist/esm/models/partner-webhook-event-type.d.ts +1 -1
  267. package/dist/esm/models/partner-webhook-event-type.js +1 -1
  268. package/dist/esm/models/payment-method-public.d.ts +1 -1
  269. package/dist/esm/models/payment-method-public.js +1 -1
  270. package/dist/esm/models/preconditions-dto.d.ts +1 -1
  271. package/dist/esm/models/preconditions-dto.js +1 -1
  272. package/dist/esm/models/problem-details-dto.d.ts +1 -1
  273. package/dist/esm/models/problem-details-dto.js +1 -1
  274. package/dist/esm/models/product-receipt-response-dto.d.ts +1 -1
  275. package/dist/esm/models/product-receipt-response-dto.js +1 -1
  276. package/dist/esm/models/product-response-dto.d.ts +1 -1
  277. package/dist/esm/models/product-response-dto.js +1 -1
  278. package/dist/esm/models/protected-resource-metadata-dto.d.ts +1 -1
  279. package/dist/esm/models/protected-resource-metadata-dto.js +1 -1
  280. package/dist/esm/models/register-award-request-dto.d.ts +1 -1
  281. package/dist/esm/models/register-award-request-dto.js +1 -1
  282. package/dist/esm/models/register-award201-response.d.ts +1 -1
  283. package/dist/esm/models/register-award201-response.js +1 -1
  284. package/dist/esm/models/register-bid201-response.d.ts +1 -1
  285. package/dist/esm/models/register-bid201-response.js +1 -1
  286. package/dist/esm/models/register-semo-contract-request-dto.d.ts +1 -1
  287. package/dist/esm/models/register-semo-contract-request-dto.js +1 -1
  288. package/dist/esm/models/request-invoice-split-request-dto.d.ts +1 -1
  289. package/dist/esm/models/request-invoice-split-request-dto.js +1 -1
  290. package/dist/esm/models/request-invoice-split200-response.d.ts +1 -1
  291. package/dist/esm/models/request-invoice-split200-response.js +1 -1
  292. package/dist/esm/models/retiree-roster-input-dto.d.ts +1 -1
  293. package/dist/esm/models/retiree-roster-input-dto.js +1 -1
  294. package/dist/esm/models/retiree-roster-row-dto.d.ts +1 -1
  295. package/dist/esm/models/retiree-roster-row-dto.js +1 -1
  296. package/dist/esm/models/revert-award-request-dto.d.ts +1 -1
  297. package/dist/esm/models/revert-award-request-dto.js +1 -1
  298. package/dist/esm/models/revert-award200-response.d.ts +1 -1
  299. package/dist/esm/models/revert-award200-response.js +1 -1
  300. package/dist/esm/models/revoke-request-dto.d.ts +1 -1
  301. package/dist/esm/models/revoke-request-dto.js +1 -1
  302. package/dist/esm/models/semo-contract-registered-response-dto.d.ts +1 -1
  303. package/dist/esm/models/semo-contract-registered-response-dto.js +1 -1
  304. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
  305. package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
  306. package/dist/esm/models/send-webhook-test-event200-response.d.ts +1 -1
  307. package/dist/esm/models/send-webhook-test-event200-response.js +1 -1
  308. package/dist/esm/models/statement-document-dto.d.ts +1 -1
  309. package/dist/esm/models/statement-document-dto.js +1 -1
  310. package/dist/esm/models/statement-product-dto.d.ts +1 -1
  311. package/dist/esm/models/statement-product-dto.js +1 -1
  312. package/dist/esm/models/submit-negotiation-scores-request-dto.d.ts +1 -1
  313. package/dist/esm/models/submit-negotiation-scores-request-dto.js +1 -1
  314. package/dist/esm/models/submit-negotiation-scores201-response.d.ts +1 -1
  315. package/dist/esm/models/submit-negotiation-scores201-response.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-launch-request-dto.d.ts +1 -1
  471. package/dist/models/embed-launch-request-dto.js +1 -1
  472. package/dist/models/embed-launch-response-dto.d.ts +1 -1
  473. package/dist/models/embed-launch-response-dto.js +1 -1
  474. package/dist/models/excellent-procurement-public.d.ts +1 -1
  475. package/dist/models/excellent-procurement-public.js +1 -1
  476. package/dist/models/external-contract-document-item-dto.d.ts +1 -1
  477. package/dist/models/external-contract-document-item-dto.js +1 -1
  478. package/dist/models/external-contract-documents-response-dto.d.ts +1 -1
  479. package/dist/models/external-contract-documents-response-dto.js +1 -1
  480. package/dist/models/external-contract-item-dto.d.ts +1 -1
  481. package/dist/models/external-contract-item-dto.js +1 -1
  482. package/dist/models/external-contract-snapshot-dto.d.ts +1 -1
  483. package/dist/models/external-contract-snapshot-dto.js +1 -1
  484. package/dist/models/external-document-inputs-dto.d.ts +1 -1
  485. package/dist/models/external-document-inputs-dto.js +1 -1
  486. package/dist/models/file-meta-response-dto.d.ts +1 -1
  487. package/dist/models/file-meta-response-dto.js +1 -1
  488. package/dist/models/file-uploaded-response-dto.d.ts +1 -1
  489. package/dist/models/file-uploaded-response-dto.js +1 -1
  490. package/dist/models/generated-external-contract-document-dto.d.ts +1 -1
  491. package/dist/models/generated-external-contract-document-dto.js +1 -1
  492. package/dist/models/get-bid-settlement200-response.d.ts +1 -1
  493. package/dist/models/get-bid-settlement200-response.js +1 -1
  494. package/dist/models/get-bid-statement200-response.d.ts +1 -1
  495. package/dist/models/get-bid-statement200-response.js +1 -1
  496. package/dist/models/get-bid200-response.d.ts +1 -1
  497. package/dist/models/get-bid200-response.js +1 -1
  498. package/dist/models/get-file-meta200-response.d.ts +1 -1
  499. package/dist/models/get-file-meta200-response.js +1 -1
  500. package/dist/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
  501. package/dist/models/get-supplier-card-payable-v2200-response.js +1 -1
  502. package/dist/models/get-webhook-endpoint200-response.d.ts +1 -1
  503. package/dist/models/get-webhook-endpoint200-response.js +1 -1
  504. package/dist/models/green-product-public.d.ts +1 -1
  505. package/dist/models/green-product-public.js +1 -1
  506. package/dist/models/health-controller-check200-response.d.ts +1 -1
  507. package/dist/models/health-controller-check200-response.js +1 -1
  508. package/dist/models/health-response-dto.d.ts +1 -1
  509. package/dist/models/health-response-dto.js +1 -1
  510. package/dist/models/hierarchical-region-dto.d.ts +1 -1
  511. package/dist/models/hierarchical-region-dto.js +1 -1
  512. package/dist/models/introspect-request-dto.d.ts +1 -1
  513. package/dist/models/introspect-request-dto.js +1 -1
  514. package/dist/models/introspection-response-dto.d.ts +1 -1
  515. package/dist/models/introspection-response-dto.js +1 -1
  516. package/dist/models/invalid-param-dto.d.ts +1 -1
  517. package/dist/models/invalid-param-dto.js +1 -1
  518. package/dist/models/invoice-completed-response-dto.d.ts +1 -1
  519. package/dist/models/invoice-completed-response-dto.js +1 -1
  520. package/dist/models/invoice-split-response-dto.d.ts +1 -1
  521. package/dist/models/invoice-split-response-dto.js +1 -1
  522. package/dist/models/legal-mandatory-public.d.ts +1 -1
  523. package/dist/models/legal-mandatory-public.js +1 -1
  524. package/dist/models/list-bid-results200-response.d.ts +1 -1
  525. package/dist/models/list-bid-results200-response.js +1 -1
  526. package/dist/models/list-bids200-response-meta.d.ts +1 -1
  527. package/dist/models/list-bids200-response-meta.js +1 -1
  528. package/dist/models/list-bids200-response.d.ts +1 -1
  529. package/dist/models/list-bids200-response.js +1 -1
  530. package/dist/models/list-products200-response.d.ts +1 -1
  531. package/dist/models/list-products200-response.js +1 -1
  532. package/dist/models/list-webhook-deliveries-response-dto.d.ts +1 -1
  533. package/dist/models/list-webhook-deliveries-response-dto.js +1 -1
  534. package/dist/models/list-webhook-deliveries200-response.d.ts +1 -1
  535. package/dist/models/list-webhook-deliveries200-response.js +1 -1
  536. package/dist/models/list-webhook-endpoints200-response.d.ts +1 -1
  537. package/dist/models/list-webhook-endpoints200-response.js +1 -1
  538. package/dist/models/mark-bid-failed-request-dto.d.ts +1 -1
  539. package/dist/models/mark-bid-failed-request-dto.js +1 -1
  540. package/dist/models/mark-bid-failed201-response.d.ts +1 -1
  541. package/dist/models/mark-bid-failed201-response.js +1 -1
  542. package/dist/models/negotiation-score-dto.d.ts +1 -1
  543. package/dist/models/negotiation-score-dto.js +1 -1
  544. package/dist/models/negotiation-scored-v2-response-dto.d.ts +1 -1
  545. package/dist/models/negotiation-scored-v2-response-dto.js +1 -1
  546. package/dist/models/oauth-error-response-dto.d.ts +1 -1
  547. package/dist/models/oauth-error-response-dto.js +1 -1
  548. package/dist/models/on-bid-award-reverted-request.d.ts +1 -1
  549. package/dist/models/on-bid-award-reverted-request.js +1 -1
  550. package/dist/models/on-bid-awarded-request.d.ts +1 -1
  551. package/dist/models/on-bid-awarded-request.js +1 -1
  552. package/dist/models/on-bid-canceled-request.d.ts +1 -1
  553. package/dist/models/on-bid-canceled-request.js +1 -1
  554. package/dist/models/on-bid-closed-request.d.ts +1 -1
  555. package/dist/models/on-bid-closed-request.js +1 -1
  556. package/dist/models/on-bid-failed-request.d.ts +1 -1
  557. package/dist/models/on-bid-failed-request.js +1 -1
  558. package/dist/models/on-ping-request.d.ts +1 -1
  559. package/dist/models/on-ping-request.js +1 -1
  560. package/dist/models/partner-webhook-delivery-status.d.ts +1 -1
  561. package/dist/models/partner-webhook-delivery-status.js +1 -1
  562. package/dist/models/partner-webhook-endpoint-status.d.ts +1 -1
  563. package/dist/models/partner-webhook-endpoint-status.js +1 -1
  564. package/dist/models/partner-webhook-event-type.d.ts +1 -1
  565. package/dist/models/partner-webhook-event-type.js +1 -1
  566. package/dist/models/payment-method-public.d.ts +1 -1
  567. package/dist/models/payment-method-public.js +1 -1
  568. package/dist/models/preconditions-dto.d.ts +1 -1
  569. package/dist/models/preconditions-dto.js +1 -1
  570. package/dist/models/problem-details-dto.d.ts +1 -1
  571. package/dist/models/problem-details-dto.js +1 -1
  572. package/dist/models/product-receipt-response-dto.d.ts +1 -1
  573. package/dist/models/product-receipt-response-dto.js +1 -1
  574. package/dist/models/product-response-dto.d.ts +1 -1
  575. package/dist/models/product-response-dto.js +1 -1
  576. package/dist/models/protected-resource-metadata-dto.d.ts +1 -1
  577. package/dist/models/protected-resource-metadata-dto.js +1 -1
  578. package/dist/models/register-award-request-dto.d.ts +1 -1
  579. package/dist/models/register-award-request-dto.js +1 -1
  580. package/dist/models/register-award201-response.d.ts +1 -1
  581. package/dist/models/register-award201-response.js +1 -1
  582. package/dist/models/register-bid201-response.d.ts +1 -1
  583. package/dist/models/register-bid201-response.js +1 -1
  584. package/dist/models/register-semo-contract-request-dto.d.ts +1 -1
  585. package/dist/models/register-semo-contract-request-dto.js +1 -1
  586. package/dist/models/request-invoice-split-request-dto.d.ts +1 -1
  587. package/dist/models/request-invoice-split-request-dto.js +1 -1
  588. package/dist/models/request-invoice-split200-response.d.ts +1 -1
  589. package/dist/models/request-invoice-split200-response.js +1 -1
  590. package/dist/models/retiree-roster-input-dto.d.ts +1 -1
  591. package/dist/models/retiree-roster-input-dto.js +1 -1
  592. package/dist/models/retiree-roster-row-dto.d.ts +1 -1
  593. package/dist/models/retiree-roster-row-dto.js +1 -1
  594. package/dist/models/revert-award-request-dto.d.ts +1 -1
  595. package/dist/models/revert-award-request-dto.js +1 -1
  596. package/dist/models/revert-award200-response.d.ts +1 -1
  597. package/dist/models/revert-award200-response.js +1 -1
  598. package/dist/models/revoke-request-dto.d.ts +1 -1
  599. package/dist/models/revoke-request-dto.js +1 -1
  600. package/dist/models/semo-contract-registered-response-dto.d.ts +1 -1
  601. package/dist/models/semo-contract-registered-response-dto.js +1 -1
  602. package/dist/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
  603. package/dist/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
  604. package/dist/models/send-webhook-test-event200-response.d.ts +1 -1
  605. package/dist/models/send-webhook-test-event200-response.js +1 -1
  606. package/dist/models/statement-document-dto.d.ts +1 -1
  607. package/dist/models/statement-document-dto.js +1 -1
  608. package/dist/models/statement-product-dto.d.ts +1 -1
  609. package/dist/models/statement-product-dto.js +1 -1
  610. package/dist/models/submit-negotiation-scores-request-dto.d.ts +1 -1
  611. package/dist/models/submit-negotiation-scores-request-dto.js +1 -1
  612. package/dist/models/submit-negotiation-scores201-response.d.ts +1 -1
  613. package/dist/models/submit-negotiation-scores201-response.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 +2 -2
  649. package/docs/OauthApi.md +3 -3
  650. package/docs/PartnerApiApi.md +78 -78
  651. package/docs/ProductsApi.md +5 -5
  652. package/docs/WebhooksApi.md +6 -6
  653. package/docs/WellKnownApi.md +3 -3
  654. package/index.ts +1 -1
  655. package/models/acceptance-result-response-dto.ts +1 -1
  656. package/models/acknowledge-product-receipt200-response.ts +1 -1
  657. package/models/acknowledge-products-request-dto.ts +1 -1
  658. package/models/api-catalog-dto.ts +1 -1
  659. package/models/api-catalog-entry-dto.ts +1 -1
  660. package/models/api-catalog-link-dto.ts +1 -1
  661. package/models/authorization-server-metadata-dto.ts +1 -1
  662. package/models/award-method-public.ts +1 -1
  663. package/models/award-registered-v2-response-dto.ts +1 -1
  664. package/models/award-reverted-v2-response-dto.ts +1 -1
  665. package/models/bid-acceptance-dto.ts +1 -1
  666. package/models/bid-attachment-input-dto.ts +1 -1
  667. package/models/bid-bond-dto.ts +1 -1
  668. package/models/bid-cancelled-response-dto.ts +1 -1
  669. package/models/bid-contact-dto.ts +1 -1
  670. package/models/bid-contacts-dto.ts +1 -1
  671. package/models/bid-contract-document-dto.ts +1 -1
  672. package/models/bid-delivery-terms-dto.ts +1 -1
  673. package/models/bid-detail-response-dto.ts +1 -1
  674. package/models/bid-document-dto.ts +1 -1
  675. package/models/bid-failed-v2-response-dto.ts +1 -1
  676. package/models/bid-item-dto.ts +1 -1
  677. package/models/bid-lifecycle-dto.ts +1 -1
  678. package/models/bid-manager-dto.ts +1 -1
  679. package/models/bid-payment-terms-dto.ts +1 -1
  680. package/models/bid-product-dto.ts +1 -1
  681. package/models/bid-public-status.ts +1 -1
  682. package/models/bid-registered-response-dto.ts +1 -1
  683. package/models/bid-result-participant-attachment-dto.ts +1 -1
  684. package/models/bid-result-participant-dto.ts +1 -1
  685. package/models/bid-results-response-dto.ts +1 -1
  686. package/models/bid-settlement-line-item-dto.ts +1 -1
  687. package/models/bid-settlement-participant-dto.ts +1 -1
  688. package/models/bid-settlement-response-dto.ts +1 -1
  689. package/models/bid-statement-response-dto.ts +1 -1
  690. package/models/bid-summary-dto.ts +1 -1
  691. package/models/bid-type-public.ts +1 -1
  692. package/models/bid-updated-response-dto.ts +1 -1
  693. package/models/cancel-bid-request-dto.ts +1 -1
  694. package/models/cancel-bid200-response.ts +1 -1
  695. package/models/card-payment-request-response-dto.ts +1 -1
  696. package/models/complete-acceptance-request-dto.ts +1 -1
  697. package/models/complete-acceptance200-response.ts +1 -1
  698. package/models/complete-invoice200-response.ts +1 -1
  699. package/models/complete-upload-request-dto.ts +1 -1
  700. package/models/contract-restriction-confirm-input-dto.ts +1 -1
  701. package/models/create-bid-request-dto.ts +1 -1
  702. package/models/create-card-payment-dto.ts +1 -1
  703. package/models/create-card-payment-request-dto.ts +1 -1
  704. package/models/create-card-payment200-response.ts +1 -1
  705. package/models/create-embed-launch201-response.ts +1 -1
  706. package/models/create-external-contract-documents-request-dto.ts +1 -1
  707. package/models/create-external-contract-documents-response-dto.ts +1 -1
  708. package/models/create-file-upload-url201-response.ts +1 -1
  709. package/models/create-upload-url-request-dto.ts +1 -1
  710. package/models/create-webhook-endpoint-request-dto.ts +1 -1
  711. package/models/create-webhook-endpoint201-response.ts +1 -1
  712. package/models/delivery-date-type-public.ts +1 -1
  713. package/models/delivery-method-public.ts +1 -1
  714. package/models/embed-launch-request-dto.ts +1 -1
  715. package/models/embed-launch-response-dto.ts +1 -1
  716. package/models/excellent-procurement-public.ts +1 -1
  717. package/models/external-contract-document-item-dto.ts +1 -1
  718. package/models/external-contract-documents-response-dto.ts +1 -1
  719. package/models/external-contract-item-dto.ts +1 -1
  720. package/models/external-contract-snapshot-dto.ts +1 -1
  721. package/models/external-document-inputs-dto.ts +1 -1
  722. package/models/file-meta-response-dto.ts +1 -1
  723. package/models/file-uploaded-response-dto.ts +1 -1
  724. package/models/generated-external-contract-document-dto.ts +1 -1
  725. package/models/get-bid-settlement200-response.ts +1 -1
  726. package/models/get-bid-statement200-response.ts +1 -1
  727. package/models/get-bid200-response.ts +1 -1
  728. package/models/get-file-meta200-response.ts +1 -1
  729. package/models/get-supplier-card-payable-v2200-response.ts +1 -1
  730. package/models/get-webhook-endpoint200-response.ts +1 -1
  731. package/models/green-product-public.ts +1 -1
  732. package/models/health-controller-check200-response.ts +1 -1
  733. package/models/health-response-dto.ts +1 -1
  734. package/models/hierarchical-region-dto.ts +1 -1
  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/negotiation-score-dto.ts +1 -1
  751. package/models/negotiation-scored-v2-response-dto.ts +1 -1
  752. package/models/oauth-error-response-dto.ts +1 -1
  753. package/models/on-bid-award-reverted-request.ts +1 -1
  754. package/models/on-bid-awarded-request.ts +1 -1
  755. package/models/on-bid-canceled-request.ts +1 -1
  756. package/models/on-bid-closed-request.ts +1 -1
  757. package/models/on-bid-failed-request.ts +1 -1
  758. package/models/on-ping-request.ts +1 -1
  759. package/models/partner-webhook-delivery-status.ts +1 -1
  760. package/models/partner-webhook-endpoint-status.ts +1 -1
  761. package/models/partner-webhook-event-type.ts +1 -1
  762. package/models/payment-method-public.ts +1 -1
  763. package/models/preconditions-dto.ts +1 -1
  764. package/models/problem-details-dto.ts +1 -1
  765. package/models/product-receipt-response-dto.ts +1 -1
  766. package/models/product-response-dto.ts +1 -1
  767. package/models/protected-resource-metadata-dto.ts +1 -1
  768. package/models/register-award-request-dto.ts +1 -1
  769. package/models/register-award201-response.ts +1 -1
  770. package/models/register-bid201-response.ts +1 -1
  771. package/models/register-semo-contract-request-dto.ts +1 -1
  772. package/models/request-invoice-split-request-dto.ts +1 -1
  773. package/models/request-invoice-split200-response.ts +1 -1
  774. package/models/retiree-roster-input-dto.ts +1 -1
  775. package/models/retiree-roster-row-dto.ts +1 -1
  776. package/models/revert-award-request-dto.ts +1 -1
  777. package/models/revert-award200-response.ts +1 -1
  778. package/models/revoke-request-dto.ts +1 -1
  779. package/models/semo-contract-registered-response-dto.ts +1 -1
  780. package/models/semo-contract-taxinvoice-status-response-dto.ts +1 -1
  781. package/models/send-webhook-test-event200-response.ts +1 -1
  782. package/models/statement-document-dto.ts +1 -1
  783. package/models/statement-product-dto.ts +1 -1
  784. package/models/submit-negotiation-scores-request-dto.ts +1 -1
  785. package/models/submit-negotiation-scores201-response.ts +1 -1
  786. package/models/supplier-card-payable-response-dto.ts +1 -1
  787. package/models/supplier-tax-type.ts +1 -1
  788. package/models/token-request-dto.ts +1 -1
  789. package/models/token-response-dto.ts +1 -1
  790. package/models/update-bid-request-dto.ts +1 -1
  791. package/models/update-bid200-response.ts +1 -1
  792. package/models/update-webhook-endpoint-request-dto.ts +1 -1
  793. package/models/upload-file-request-dto.ts +1 -1
  794. package/models/upload-file201-response.ts +1 -1
  795. package/models/upload-url-created-response-dto.ts +1 -1
  796. package/models/webhook-bid-event-data.ts +1 -1
  797. package/models/webhook-delivery-dto.ts +1 -1
  798. package/models/webhook-endpoint-dto.ts +1 -1
  799. package/models/webhook-endpoint-with-secret-dto.ts +1 -1
  800. package/models/webhook-event-envelope.ts +1 -1
  801. package/models/webhook-ping-event-data.ts +1 -1
  802. package/models/webhook-test-result-dto.ts +1 -1
  803. package/package.json +1 -1
@@ -58,13 +58,13 @@ const { status, data } = await apiInstance.acknowledgeProductReceipt(
58
58
  ### HTTP response details
59
59
  | Status code | Description | Response headers |
60
60
  |-------------|-------------|------------------|
61
- |**200** | μˆ˜μ‹ ν™•μΈ κ²°κ³Ό. | - |
61
+ |**200** | μˆ˜μ‹ ν™•μΈ κ²°κ³Ό. | * RateLimit - ν˜„μž¬ 창의 μž”μ—¬ μΏΌν„°(&#x60;r&#x60;)와 λ¦¬μ…‹κΉŒμ§€ 남은 초(&#x60;t&#x60;). 이 값이 0 에 κ°€κΉŒμ›Œμ§€λ©΄ μš”μ²­ 간격을 λŠ˜λ¦¬μ„Έμš” β€” 429 λ₯Ό λ§Œλ‚˜κΈ° 전에 μ‘°μ ˆν•˜λΌκ³  μ£ΌλŠ” κ°’μž…λ‹ˆλ‹€. <br> * RateLimit-Policy - 적용 쀑인 μΏΌν„° μ •μ±…(&#x60;q&#x60; μš”μ²­ 수 / &#x60;w&#x60; μ°½ 크기(초)). λ³€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•œ 번 읽어 두면 λ©λ‹ˆλ‹€. <br> |
62
62
  |**400** | μž…λ ₯ 검증 μ‹€νŒ¨(&#x60;type: …/validation-failed&#x60;), Idempotency-Key 헀더 λˆ„λ½/ν˜•μ‹ 였λ₯˜(&#x60;…/idempotency-key-required&#x60;, &#x60;…/idempotency-key-invalid&#x60;), λ˜λŠ” μš”μ²­ λ‚΄μš©μ΄ μœ νš¨ν•˜μ§€ μ•ŠμŒ(&#x60;…/upstream-invalid-input&#x60;). | - |
63
63
  |**401** | Bearer 토큰 μ—†μŒ(&#x60;type: …/missing-bearer-token&#x60;) λ˜λŠ” 만료/μœ„λ³€μ‘°/폐기(&#x60;…/invalid-token&#x60;). | - |
64
64
  |**403** | ν‚€ 미바인딩(&#x60;type: …/unbound-partner-key&#x60;), ν΄λΌμ΄μ–ΈνŠΈ IP 차단(&#x60;…/ip-not-allowed&#x60;), μŠ€μ½”ν”„ λΆ€μ‘±(&#x60;…/insufficient-scope&#x60;), buyerId κ°€ ν‚€μ˜ λŒ€ν–‰ λ²”μœ„ λ°–(&#x60;…/buyer-scope-mismatch&#x60; β€” μƒŒλ“œλ°•μŠ€ ν‚€μ˜ λ²”μœ„ μœ„λ°˜λ„ 이 slug), λ˜λŠ” μš”μ²­ κΆŒν•œ μ—†μŒ(&#x60;…/upstream-forbidden&#x60;). | - |
65
65
  |**409** | 원 μš”μ²­μ΄ 아직 처리 쀑인 μƒνƒœμ—μ„œ 같은 Idempotency-Key μž¬μ „μ†‘(&#x60;type: …/idempotency-key-conflict&#x60; β€” μž μ‹œ λ’€ 같은 ν‚€λ‘œ μž¬μ‹œλ„ν•˜λ©΄ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€) λ˜λŠ” ν˜„μž¬ μƒνƒœμ™€ μΆ©λŒν•˜λŠ” μš”μ²­(&#x60;…/upstream-conflict&#x60;). | - |
66
66
  |**422** | 동일 Idempotency-Key λ₯Ό **λ‹€λ₯Έ body** 둜 μž¬μ „μ†‘(&#x60;type: …/idempotency-key-reused&#x60;). μž¬μ‹œλ„ν•΄λ„ 동일 μ‹€νŒ¨ β€” μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό μ›λž˜λŒ€λ‘œ λ˜λŒλ €μ•Ό ν•œλ‹€. ν˜•μ‹μ€ λ§žμ§€λ§Œ λ‚΄μš©μƒ μ²˜λ¦¬ν•  수 μ—†λŠ” μš”μ²­(&#x60;…/upstream-unprocessable&#x60;)도 이 μƒνƒœλ‹€. | - |
67
- |**429** | rate limit 초과(&#x60;type: …/too-many-requests&#x60;) β€” μ „μ—­ 60/min per client_id. λŒ€κΈ° μ‹œκ°„μ€ &#x60;Retry-After&#x60;(초)κ°€ μš°μ„ ν•˜κ³ , μž”μ—¬ 쿼터·정책은 ν‘œμ€€ ν•„λ“œ &#x60;RateLimit&#x60;/&#x60;RateLimit-Policy&#x60;(draft-ietf-httpapi-ratelimit-headers)둜 λ‚˜κ°‘λ‹ˆλ‹€. κ΄€μš© 헀더 &#x60;X-RateLimit-Limit&#x60;/&#x60;X-RateLimit-Remaining&#x60;/&#x60;X-RateLimit-Reset&#x60; 도 ν•¨κ»˜ μ‹€λ¦¬μ§€λ§Œ ν‘œμ€€μ΄ μ•„λ‹ˆλ―€λ‘œ μƒˆ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ½μœΌμ„Έμš”. &#x60;retryable: true&#x60;. | * Retry-After - μž¬μ‹œλ„κΉŒμ§€ λŒ€κΈ°ν•  초. <br> * RateLimit - ν˜„μž¬ 창의 μž”μ—¬ μΏΌν„°. 예: &#x60;\&quot;default\&quot;;r&#x3D;0;t&#x3D;42&#x60;. <br> * RateLimit-Policy - 적용 쀑인 μΏΌν„° μ •μ±…. 예: &#x60;\&quot;default\&quot;;q&#x3D;60;w&#x3D;60&#x60;. <br> |
67
+ |**429** | rate limit 초과(&#x60;type: …/too-many-requests&#x60;) β€” μ „μ—­ 60/min per client_id. λŒ€κΈ° μ‹œκ°„μ€ &#x60;Retry-After&#x60;(초)κ°€ μš°μ„ ν•˜κ³ , μž”μ—¬ 쿼터·정책은 ν‘œμ€€ ν•„λ“œ &#x60;RateLimit&#x60;/&#x60;RateLimit-Policy&#x60;(draft-ietf-httpapi-ratelimit-headers)둜 λ‚˜κ°‘λ‹ˆλ‹€. κ΄€μš© 헀더 &#x60;X-RateLimit-Limit&#x60;/&#x60;X-RateLimit-Remaining&#x60;/&#x60;X-RateLimit-Reset&#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> |
68
68
  |**500** | μ„œλ²„ λ‚΄λΆ€ 였λ₯˜(&#x60;type: …/internal-server-error&#x60;). &#x60;retryable: true&#x60;. | - |
69
69
  |**502** | μš”μ²­μ„ μ²˜λ¦¬ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€(&#x60;type: …/upstream-rejected&#x60;). &#x60;retryable: true&#x60;. | - |
70
70
  |**503** | μΌμ‹œμ μœΌλ‘œ μ²˜λ¦¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€(&#x60;type: …/service-unavailable&#x60;). &#x60;Retry-After&#x60; 헀더 μ°Έμ‘°. &#x60;retryable: true&#x60;. | * Retry-After - μž¬μ‹œλ„κΉŒμ§€ λŒ€κΈ°ν•  초. <br> |
@@ -121,13 +121,13 @@ const { status, data } = await apiInstance.listProducts(
121
121
  ### HTTP response details
122
122
  | Status code | Description | Response headers |
123
123
  |-------------|-------------|------------------|
124
- |**200** | 미전솑 λ¬Όν’ˆ λͺ©λ‘. | * ETag - λ¦¬μ†ŒμŠ€ μ§€λ¬Έ(weak). λ‹€μŒ μš”μ²­μ˜ &#x60;If-None-Match&#x60; ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄ λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ &#x60;304 Not Modified&#x60; λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. <br> |
125
- |**304** | &#x60;If-None-Match&#x60; 지문이 ν˜„μž¬ λ¦¬μ†ŒμŠ€μ™€ κ°™μŠ΅λ‹ˆλ‹€ β€” λ‚΄μš©μ΄ λ°”λ€Œμ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. **본문이 μ—†μŠ΅λ‹ˆλ‹€.** 직전에 받은 값을 κ·ΈλŒ€λ‘œ μ“°μ„Έμš”. | * ETag - λ¦¬μ†ŒμŠ€ μ§€λ¬Έ(weak). λ‹€μŒ μš”μ²­μ˜ &#x60;If-None-Match&#x60; ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄ λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ &#x60;304 Not Modified&#x60; λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. <br> |
124
+ |**200** | 미전솑 λ¬Όν’ˆ λͺ©λ‘. | * RateLimit - ν˜„μž¬ 창의 μž”μ—¬ μΏΌν„°(&#x60;r&#x60;)와 λ¦¬μ…‹κΉŒμ§€ 남은 초(&#x60;t&#x60;). 이 값이 0 에 κ°€κΉŒμ›Œμ§€λ©΄ μš”μ²­ 간격을 λŠ˜λ¦¬μ„Έμš” β€” 429 λ₯Ό λ§Œλ‚˜κΈ° 전에 μ‘°μ ˆν•˜λΌκ³  μ£ΌλŠ” κ°’μž…λ‹ˆλ‹€. <br> * RateLimit-Policy - 적용 쀑인 μΏΌν„° μ •μ±…(&#x60;q&#x60; μš”μ²­ 수 / &#x60;w&#x60; μ°½ 크기(초)). λ³€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•œ 번 읽어 두면 λ©λ‹ˆλ‹€. <br> * ETag - λ¦¬μ†ŒμŠ€ μ§€λ¬Έ(weak). λ‹€μŒ μš”μ²­μ˜ &#x60;If-None-Match&#x60; ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄ λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ &#x60;304 Not Modified&#x60; λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. <br> |
125
+ |**304** | &#x60;If-None-Match&#x60; 지문이 ν˜„μž¬ λ¦¬μ†ŒμŠ€μ™€ κ°™μŠ΅λ‹ˆλ‹€ β€” λ‚΄μš©μ΄ λ°”λ€Œμ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. **본문이 μ—†μŠ΅λ‹ˆλ‹€.** 직전에 받은 값을 κ·ΈλŒ€λ‘œ μ“°μ„Έμš”. | * RateLimit - ν˜„μž¬ 창의 μž”μ—¬ μΏΌν„°(&#x60;r&#x60;)와 λ¦¬μ…‹κΉŒμ§€ 남은 초(&#x60;t&#x60;). 이 값이 0 에 κ°€κΉŒμ›Œμ§€λ©΄ μš”μ²­ 간격을 λŠ˜λ¦¬μ„Έμš” β€” 429 λ₯Ό λ§Œλ‚˜κΈ° 전에 μ‘°μ ˆν•˜λΌκ³  μ£ΌλŠ” κ°’μž…λ‹ˆλ‹€. <br> * RateLimit-Policy - 적용 쀑인 μΏΌν„° μ •μ±…(&#x60;q&#x60; μš”μ²­ 수 / &#x60;w&#x60; μ°½ 크기(초)). λ³€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•œ 번 읽어 두면 λ©λ‹ˆλ‹€. <br> * ETag - λ¦¬μ†ŒμŠ€ μ§€λ¬Έ(weak). λ‹€μŒ μš”μ²­μ˜ &#x60;If-None-Match&#x60; ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄ λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ &#x60;304 Not Modified&#x60; λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. <br> |
126
126
  |**400** | 쿼리/λ³Έλ¬Έ μž…λ ₯ 검증 μ‹€νŒ¨(&#x60;type: …/validation-failed&#x60;) β€” μƒν•œ 초과(&#x60;bidRefs&#x60; 101건 λ“±), κ°’ ν˜•μ‹ μœ„λ°˜, μ•Œ 수 μ—†λŠ” &#x60;cursor&#x60; λ“±. | - |
127
127
  |**401** | Bearer 토큰 μ—†μŒ(&#x60;type: …/missing-bearer-token&#x60;) λ˜λŠ” 만료/μœ„λ³€μ‘°/폐기(&#x60;…/invalid-token&#x60;). | - |
128
128
  |**403** | ν‚€ 미바인딩(&#x60;type: …/unbound-partner-key&#x60;), ν΄λΌμ΄μ–ΈνŠΈ IP 차단(&#x60;…/ip-not-allowed&#x60;), μŠ€μ½”ν”„ λΆ€μ‘±(&#x60;…/insufficient-scope&#x60;), buyerId κ°€ ν‚€μ˜ λŒ€ν–‰ λ²”μœ„ λ°–(&#x60;…/buyer-scope-mismatch&#x60; β€” μƒŒλ“œλ°•μŠ€ ν‚€μ˜ λ²”μœ„ μœ„λ°˜λ„ 이 slug), λ˜λŠ” μš”μ²­ κΆŒν•œ μ—†μŒ(&#x60;…/upstream-forbidden&#x60;). | - |
129
129
  |**404** | λŒ€μƒμ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€(&#x60;type: …/upstream-not-found&#x60;). | - |
130
- |**429** | rate limit 초과(&#x60;type: …/too-many-requests&#x60;) β€” μ „μ—­ 60/min per client_id. λŒ€κΈ° μ‹œκ°„μ€ &#x60;Retry-After&#x60;(초)κ°€ μš°μ„ ν•˜κ³ , μž”μ—¬ 쿼터·정책은 ν‘œμ€€ ν•„λ“œ &#x60;RateLimit&#x60;/&#x60;RateLimit-Policy&#x60;(draft-ietf-httpapi-ratelimit-headers)둜 λ‚˜κ°‘λ‹ˆλ‹€. κ΄€μš© 헀더 &#x60;X-RateLimit-Limit&#x60;/&#x60;X-RateLimit-Remaining&#x60;/&#x60;X-RateLimit-Reset&#x60; 도 ν•¨κ»˜ μ‹€λ¦¬μ§€λ§Œ ν‘œμ€€μ΄ μ•„λ‹ˆλ―€λ‘œ μƒˆ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ½μœΌμ„Έμš”. &#x60;retryable: true&#x60;. | * Retry-After - μž¬μ‹œλ„κΉŒμ§€ λŒ€κΈ°ν•  초. <br> * RateLimit - ν˜„μž¬ 창의 μž”μ—¬ μΏΌν„°. 예: &#x60;\&quot;default\&quot;;r&#x3D;0;t&#x3D;42&#x60;. <br> * RateLimit-Policy - 적용 쀑인 μΏΌν„° μ •μ±…. 예: &#x60;\&quot;default\&quot;;q&#x3D;60;w&#x3D;60&#x60;. <br> |
130
+ |**429** | rate limit 초과(&#x60;type: …/too-many-requests&#x60;) β€” μ „μ—­ 60/min per client_id. λŒ€κΈ° μ‹œκ°„μ€ &#x60;Retry-After&#x60;(초)κ°€ μš°μ„ ν•˜κ³ , μž”μ—¬ 쿼터·정책은 ν‘œμ€€ ν•„λ“œ &#x60;RateLimit&#x60;/&#x60;RateLimit-Policy&#x60;(draft-ietf-httpapi-ratelimit-headers)둜 λ‚˜κ°‘λ‹ˆλ‹€. κ΄€μš© 헀더 &#x60;X-RateLimit-Limit&#x60;/&#x60;X-RateLimit-Remaining&#x60;/&#x60;X-RateLimit-Reset&#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> |
131
131
  |**500** | μ„œλ²„ λ‚΄λΆ€ 였λ₯˜(&#x60;type: …/internal-server-error&#x60;). &#x60;retryable: true&#x60;. | - |
132
132
  |**502** | μš”μ²­μ„ μ²˜λ¦¬ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€(&#x60;type: …/upstream-rejected&#x60;). &#x60;retryable: true&#x60;. | - |
133
133
  |**503** | μΌμ‹œμ μœΌλ‘œ μ²˜λ¦¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€(&#x60;type: …/service-unavailable&#x60;). &#x60;Retry-After&#x60; 헀더 μ°Έμ‘°. &#x60;retryable: true&#x60;. | * Retry-After - μž¬μ‹œλ„κΉŒμ§€ λŒ€κΈ°ν•  초. <br> |
@@ -14,7 +14,7 @@ All URIs are relative to *https://partner-api.c-market.net*
14
14
  # **onBidAwardReverted**
15
15
  > onBidAwardReverted(onBidAwardRevertedRequest)
16
16
 
17
- λ°œμ†‘μž User-Agent λŠ” `cmarket-webhooks/1` μž…λ‹ˆλ‹€. **μ„œλͺ… 검증은 원문 λ°”μ΄νŠΈλ‘œ ν•˜μ„Έμš”.** JSON 을 νŒŒμ‹±ν•œ λ’€ λ‹€μ‹œ μ§λ ¬ν™”ν•˜λ©΄ ν‚€ μˆœμ„œΒ·κ³΅λ°±μ΄ 달라져 μ„œλͺ…이 μ–΄κΈ‹λ‚©λ‹ˆλ‹€. **μ„œλͺ… κ·œμ•½μ€ [Standard Webhooks](https://www.standardwebhooks.com) μž…λ‹ˆλ‹€** β€” 검증을 직접 μ§œμ§€ 말고 각 μ–Έμ–΄μ˜ `standardwebhooks` λΌμ΄λΈŒλŸ¬λ¦¬μ— λ°œκΈ‰λ°›μ€ μ‹œν¬λ¦Ώ(`whsec_…`)을 κ·ΈλŒ€λ‘œ λ„˜κΈ°μ„Έμš”. **μž¬μ‹œλ„λŠ” at-least-once μž…λ‹ˆλ‹€.** 같은 μ΄λ²€νŠΈκ°€ 두 번 올 수 μžˆμœΌλ‹ˆ `webhook-id` 둜 쀑볡 μ œκ±°ν•˜μ„Έμš”. **λ³Έλ¬Έμ—λŠ” μ΅œμ†Œ μ •λ³΄λ§Œ λ‹΄κΉλ‹ˆλ‹€.** μƒμ„ΈλŠ” 이벀트λ₯Ό 받은 λ’€ ν•΄λ‹Ή 쑰회 μ—”λ“œν¬μΈνŠΈλ‘œ κ°€μ Έμ˜€μ„Έμš” β€” 같은 사싀을 두 곳이 각자 ν‘œν˜„ν•˜λ©΄ κ°ˆλΌμ§‘λ‹ˆλ‹€.
17
+ μš΄μ˜μžκ°€ 낙찰을 λ˜λŒλ ΈμŠ΅λ‹ˆλ‹€. **이미 받은 `bid.awarded` λ₯Ό 무효둜 μ·¨κΈ‰ν•˜μ„Έμš”** β€” 계약·정산을 이 곡고둜 μ§„ν–‰ν–ˆλ‹€λ©΄ λ˜λŒλ €μ•Ό ν•©λ‹ˆλ‹€. 이후 λ‹€μ‹œ λ‚™μ°°λ˜λ©΄ `bid.awarded` κ°€ μƒˆλ‘œ μ˜΅λ‹ˆλ‹€.
18
18
 
19
19
  ### Example
20
20
 
@@ -79,7 +79,7 @@ No authorization required
79
79
  # **onBidAwarded**
80
80
  > onBidAwarded(onBidAwardedRequest)
81
81
 
82
- λ°œμ†‘μž User-Agent λŠ” `cmarket-webhooks/1` μž…λ‹ˆλ‹€. **μ„œλͺ… 검증은 원문 λ°”μ΄νŠΈλ‘œ ν•˜μ„Έμš”.** JSON 을 νŒŒμ‹±ν•œ λ’€ λ‹€μ‹œ μ§λ ¬ν™”ν•˜λ©΄ ν‚€ μˆœμ„œΒ·κ³΅λ°±μ΄ 달라져 μ„œλͺ…이 μ–΄κΈ‹λ‚©λ‹ˆλ‹€. **μ„œλͺ… κ·œμ•½μ€ [Standard Webhooks](https://www.standardwebhooks.com) μž…λ‹ˆλ‹€** β€” 검증을 직접 μ§œμ§€ 말고 각 μ–Έμ–΄μ˜ `standardwebhooks` λΌμ΄λΈŒλŸ¬λ¦¬μ— λ°œκΈ‰λ°›μ€ μ‹œν¬λ¦Ώ(`whsec_…`)을 κ·ΈλŒ€λ‘œ λ„˜κΈ°μ„Έμš”. **μž¬μ‹œλ„λŠ” at-least-once μž…λ‹ˆλ‹€.** 같은 μ΄λ²€νŠΈκ°€ 두 번 올 수 μžˆμœΌλ‹ˆ `webhook-id` 둜 쀑볡 μ œκ±°ν•˜μ„Έμš”. **λ³Έλ¬Έμ—λŠ” μ΅œμ†Œ μ •λ³΄λ§Œ λ‹΄κΉλ‹ˆλ‹€.** μƒμ„ΈλŠ” 이벀트λ₯Ό 받은 λ’€ ν•΄λ‹Ή 쑰회 μ—”λ“œν¬μΈνŠΈλ‘œ κ°€μ Έμ˜€μ„Έμš” β€” 같은 사싀을 두 곳이 각자 ν‘œν˜„ν•˜λ©΄ κ°ˆλΌμ§‘λ‹ˆλ‹€.
82
+ 낙찰이 ν™•μ •λμŠ΅λ‹ˆλ‹€. λ‚™μ°°μžλŠ” `GET /v2/bid-results` 의 `participants[].isWinner` 둜 μ½μœΌμ„Έμš” β€” **곡고 μƒνƒœλ‘œ νŒμ •ν•˜μ§€ λ§ˆμ„Έμš”.** `AWARDED` λΌλŠ” μƒνƒœλŠ” μ‘΄μž¬ν•˜μ§€ μ•Šκ³  λ‚™μ°° 직후 `CONTRACT_IN_PROGRESS` 둜 μ „μ΄ν•©λ‹ˆλ‹€. λ‹€μˆ˜μ—…μ²΄ λ‚™μ°°μ—μ„œλŠ” `isWinner` κ°€ μ—¬λŸΏμΌ 수 μžˆμŠ΅λ‹ˆλ‹€.
83
83
 
84
84
  ### Example
85
85
 
@@ -144,7 +144,7 @@ No authorization required
144
144
  # **onBidCanceled**
145
145
  > onBidCanceled(onBidCanceledRequest)
146
146
 
147
- λ°œμ†‘μž User-Agent λŠ” `cmarket-webhooks/1` μž…λ‹ˆλ‹€. **μ„œλͺ… 검증은 원문 λ°”μ΄νŠΈλ‘œ ν•˜μ„Έμš”.** JSON 을 νŒŒμ‹±ν•œ λ’€ λ‹€μ‹œ μ§λ ¬ν™”ν•˜λ©΄ ν‚€ μˆœμ„œΒ·κ³΅λ°±μ΄ 달라져 μ„œλͺ…이 μ–΄κΈ‹λ‚©λ‹ˆλ‹€. **μ„œλͺ… κ·œμ•½μ€ [Standard Webhooks](https://www.standardwebhooks.com) μž…λ‹ˆλ‹€** β€” 검증을 직접 μ§œμ§€ 말고 각 μ–Έμ–΄μ˜ `standardwebhooks` λΌμ΄λΈŒλŸ¬λ¦¬μ— λ°œκΈ‰λ°›μ€ μ‹œν¬λ¦Ώ(`whsec_…`)을 κ·ΈλŒ€λ‘œ λ„˜κΈ°μ„Έμš”. **μž¬μ‹œλ„λŠ” at-least-once μž…λ‹ˆλ‹€.** 같은 μ΄λ²€νŠΈκ°€ 두 번 올 수 μžˆμœΌλ‹ˆ `webhook-id` 둜 쀑볡 μ œκ±°ν•˜μ„Έμš”. **λ³Έλ¬Έμ—λŠ” μ΅œμ†Œ μ •λ³΄λ§Œ λ‹΄κΉλ‹ˆλ‹€.** μƒμ„ΈλŠ” 이벀트λ₯Ό 받은 λ’€ ν•΄λ‹Ή 쑰회 μ—”λ“œν¬μΈνŠΈλ‘œ κ°€μ Έμ˜€μ„Έμš” β€” 같은 사싀을 두 곳이 각자 ν‘œν˜„ν•˜λ©΄ κ°ˆλΌμ§‘λ‹ˆλ‹€.
147
+ 곡고가 μ·¨μ†ŒλμŠ΅λ‹ˆλ‹€. μ§„ν–‰ μ€‘μ΄λ˜ 절차λ₯Ό μ€‘λ‹¨ν•˜μ„Έμš”. μ·¨μ†ŒλŠ” 마감 μ „ν›„ μ–΄λŠ μ‹œμ μ—λ„ 올 수 있고, 이미 `bid.closed` λ₯Ό 받은 뒀에도 μ˜΅λ‹ˆλ‹€.
148
148
 
149
149
  ### Example
150
150
 
@@ -209,7 +209,7 @@ No authorization required
209
209
  # **onBidClosed**
210
210
  > onBidClosed(onBidClosedRequest)
211
211
 
212
- λ°œμ†‘μž User-Agent λŠ” `cmarket-webhooks/1` μž…λ‹ˆλ‹€. **μ„œλͺ… 검증은 원문 λ°”μ΄νŠΈλ‘œ ν•˜μ„Έμš”.** JSON 을 νŒŒμ‹±ν•œ λ’€ λ‹€μ‹œ μ§λ ¬ν™”ν•˜λ©΄ ν‚€ μˆœμ„œΒ·κ³΅λ°±μ΄ 달라져 μ„œλͺ…이 μ–΄κΈ‹λ‚©λ‹ˆλ‹€. **μ„œλͺ… κ·œμ•½μ€ [Standard Webhooks](https://www.standardwebhooks.com) μž…λ‹ˆλ‹€** β€” 검증을 직접 μ§œμ§€ 말고 각 μ–Έμ–΄μ˜ `standardwebhooks` λΌμ΄λΈŒλŸ¬λ¦¬μ— λ°œκΈ‰λ°›μ€ μ‹œν¬λ¦Ώ(`whsec_…`)을 κ·ΈλŒ€λ‘œ λ„˜κΈ°μ„Έμš”. **μž¬μ‹œλ„λŠ” at-least-once μž…λ‹ˆλ‹€.** 같은 μ΄λ²€νŠΈκ°€ 두 번 올 수 μžˆμœΌλ‹ˆ `webhook-id` 둜 쀑볡 μ œκ±°ν•˜μ„Έμš”. **λ³Έλ¬Έμ—λŠ” μ΅œμ†Œ μ •λ³΄λ§Œ λ‹΄κΉλ‹ˆλ‹€.** μƒμ„ΈλŠ” 이벀트λ₯Ό 받은 λ’€ ν•΄λ‹Ή 쑰회 μ—”λ“œν¬μΈνŠΈλ‘œ κ°€μ Έμ˜€μ„Έμš” β€” 같은 사싀을 두 곳이 각자 ν‘œν˜„ν•˜λ©΄ κ°ˆλΌμ§‘λ‹ˆλ‹€.
212
+ 응찰 μ ‘μˆ˜κ°€ λλ‚¬μŠ΅λ‹ˆλ‹€. **λ‚™μ°°μžλŠ” 아직 μ—†μŠ΅λ‹ˆλ‹€** β€” 이 μ‹œμ μ— κ²°κ³Όλ₯Ό 물으면 빈 값을 λ°›μŠ΅λ‹ˆλ‹€. 낙찰이 ν™•μ •λ˜λ©΄ `bid.awarded` κ°€ λ”°λ‘œ μ˜΅λ‹ˆλ‹€.
213
213
 
214
214
  ### Example
215
215
 
@@ -274,7 +274,7 @@ No authorization required
274
274
  # **onBidFailed**
275
275
  > onBidFailed(onBidFailedRequest)
276
276
 
277
- λ°œμ†‘μž User-Agent λŠ” `cmarket-webhooks/1` μž…λ‹ˆλ‹€. **μ„œλͺ… 검증은 원문 λ°”μ΄νŠΈλ‘œ ν•˜μ„Έμš”.** JSON 을 νŒŒμ‹±ν•œ λ’€ λ‹€μ‹œ μ§λ ¬ν™”ν•˜λ©΄ ν‚€ μˆœμ„œΒ·κ³΅λ°±μ΄ 달라져 μ„œλͺ…이 μ–΄κΈ‹λ‚©λ‹ˆλ‹€. **μ„œλͺ… κ·œμ•½μ€ [Standard Webhooks](https://www.standardwebhooks.com) μž…λ‹ˆλ‹€** β€” 검증을 직접 μ§œμ§€ 말고 각 μ–Έμ–΄μ˜ `standardwebhooks` λΌμ΄λΈŒλŸ¬λ¦¬μ— λ°œκΈ‰λ°›μ€ μ‹œν¬λ¦Ώ(`whsec_…`)을 κ·ΈλŒ€λ‘œ λ„˜κΈ°μ„Έμš”. **μž¬μ‹œλ„λŠ” at-least-once μž…λ‹ˆλ‹€.** 같은 μ΄λ²€νŠΈκ°€ 두 번 올 수 μžˆμœΌλ‹ˆ `webhook-id` 둜 쀑볡 μ œκ±°ν•˜μ„Έμš”. **λ³Έλ¬Έμ—λŠ” μ΅œμ†Œ μ •λ³΄λ§Œ λ‹΄κΉλ‹ˆλ‹€.** μƒμ„ΈλŠ” 이벀트λ₯Ό 받은 λ’€ ν•΄λ‹Ή 쑰회 μ—”λ“œν¬μΈνŠΈλ‘œ κ°€μ Έμ˜€μ„Έμš” β€” 같은 사싀을 두 곳이 각자 ν‘œν˜„ν•˜λ©΄ κ°ˆλΌμ§‘λ‹ˆλ‹€.
277
+ 유찰이 ν™•μ •λμŠ΅λ‹ˆλ‹€(λ‚™μ°°μž 없이 μ’…λ£Œ). 재곡고 μ—¬λΆ€λŠ” λ°œμ£ΌκΈ°κ΄€ νŒλ‹¨μ΄λ©° κ·Έλ•Œ μƒˆ 곡고번호둜 μƒˆ μ΄λ²€νŠΈκ°€ μ˜΅λ‹ˆλ‹€ β€” 이 곡고λ₯Ό 기닀리지 λ§ˆμ„Έμš”.
278
278
 
279
279
  ### Example
280
280
 
@@ -339,7 +339,7 @@ No authorization required
339
339
  # **onPing**
340
340
  > onPing(onPingRequest)
341
341
 
342
- λ°œμ†‘μž User-Agent λŠ” `cmarket-webhooks/1` μž…λ‹ˆλ‹€. **μ„œλͺ… 검증은 원문 λ°”μ΄νŠΈλ‘œ ν•˜μ„Έμš”.** JSON 을 νŒŒμ‹±ν•œ λ’€ λ‹€μ‹œ μ§λ ¬ν™”ν•˜λ©΄ ν‚€ μˆœμ„œΒ·κ³΅λ°±μ΄ 달라져 μ„œλͺ…이 μ–΄κΈ‹λ‚©λ‹ˆλ‹€. **μ„œλͺ… κ·œμ•½μ€ [Standard Webhooks](https://www.standardwebhooks.com) μž…λ‹ˆλ‹€** β€” 검증을 직접 μ§œμ§€ 말고 각 μ–Έμ–΄μ˜ `standardwebhooks` λΌμ΄λΈŒλŸ¬λ¦¬μ— λ°œκΈ‰λ°›μ€ μ‹œν¬λ¦Ώ(`whsec_…`)을 κ·ΈλŒ€λ‘œ λ„˜κΈ°μ„Έμš”. **μž¬μ‹œλ„λŠ” at-least-once μž…λ‹ˆλ‹€.** 같은 μ΄λ²€νŠΈκ°€ 두 번 올 수 μžˆμœΌλ‹ˆ `webhook-id` 둜 쀑볡 μ œκ±°ν•˜μ„Έμš”. **λ³Έλ¬Έμ—λŠ” μ΅œμ†Œ μ •λ³΄λ§Œ λ‹΄κΉλ‹ˆλ‹€.** μƒμ„ΈλŠ” 이벀트λ₯Ό 받은 λ’€ ν•΄λ‹Ή 쑰회 μ—”λ“œν¬μΈνŠΈλ‘œ κ°€μ Έμ˜€μ„Έμš” β€” 같은 사싀을 두 곳이 각자 ν‘œν˜„ν•˜λ©΄ κ°ˆλΌμ§‘λ‹ˆλ‹€.
342
+ μˆ˜μ‹  μ£Όμ†Œμ™€ μ„œλͺ… 검증이 μ‹€μ œλ‘œ λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” λ°œμ†‘μž…λ‹ˆλ‹€. λ³Έλ¬Έμ—λŠ” 확인을 μš”μ²­ν•œ ꡬ독 μ‹λ³„μžλ§Œ λ‹΄κΈ°κ³  곡고 μ •λ³΄λŠ” μ—†μŠ΅λ‹ˆλ‹€ β€” μ²˜λ¦¬ν•˜μ§€ 말고 2xx 만 돌렀주면 λ©λ‹ˆλ‹€. ꡬ독 λŒ€μƒμ΄ μ•„λ‹ˆλ―€λ‘œ `eventTypes` 에 λ„£μœΌλ©΄ 400 μž…λ‹ˆλ‹€.
343
343
 
344
344
  ### Example
345
345
 
@@ -48,7 +48,7 @@ No authorization required
48
48
  ### HTTP response details
49
49
  | Status code | Description | Response headers |
50
50
  |-------------|-------------|------------------|
51
- |**200** | RFC 9727 API μΉ΄νƒˆλ‘œκ·Έ. μ‚¬λžŒμš© 포털과 κΈ°κ³„μš© OpenAPI λ¬Έμ„œμ˜ μ£Όμ†Œλ₯Ό linkset 으둜 λŒλ €μ€λ‹ˆλ‹€. | - |
51
+ |**200** | RFC 9727 API μΉ΄νƒˆλ‘œκ·Έ. μ‚¬λžŒμš© 포털과 κΈ°κ³„μš© OpenAPI λ¬Έμ„œμ˜ μ£Όμ†Œλ₯Ό linkset 으둜 λŒλ €μ€λ‹ˆλ‹€. | * RateLimit - ν˜„μž¬ 창의 μž”μ—¬ μΏΌν„°(&#x60;r&#x60;)와 λ¦¬μ…‹κΉŒμ§€ 남은 초(&#x60;t&#x60;). 이 값이 0 에 κ°€κΉŒμ›Œμ§€λ©΄ μš”μ²­ 간격을 λŠ˜λ¦¬μ„Έμš” β€” 429 λ₯Ό λ§Œλ‚˜κΈ° 전에 μ‘°μ ˆν•˜λΌκ³  μ£ΌλŠ” κ°’μž…λ‹ˆλ‹€. <br> * RateLimit-Policy - 적용 쀑인 μΏΌν„° μ •μ±…(&#x60;q&#x60; μš”μ²­ 수 / &#x60;w&#x60; μ°½ 크기(초)). λ³€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•œ 번 읽어 두면 λ©λ‹ˆλ‹€. <br> |
52
52
 
53
53
  [[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)
54
54
 
@@ -92,7 +92,7 @@ No authorization required
92
92
  ### HTTP response details
93
93
  | Status code | Description | Response headers |
94
94
  |-------------|-------------|------------------|
95
- |**200** | RFC 8414 인가 μ„œλ²„ 메타데이터. RFC κ°€ μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜λ―€λ‘œ &#x60;{data}&#x60; λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. | - |
95
+ |**200** | RFC 8414 인가 μ„œλ²„ 메타데이터. RFC κ°€ μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜λ―€λ‘œ &#x60;{data}&#x60; λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. | * RateLimit - ν˜„μž¬ 창의 μž”μ—¬ μΏΌν„°(&#x60;r&#x60;)와 λ¦¬μ…‹κΉŒμ§€ 남은 초(&#x60;t&#x60;). 이 값이 0 에 κ°€κΉŒμ›Œμ§€λ©΄ μš”μ²­ 간격을 λŠ˜λ¦¬μ„Έμš” β€” 429 λ₯Ό λ§Œλ‚˜κΈ° 전에 μ‘°μ ˆν•˜λΌκ³  μ£ΌλŠ” κ°’μž…λ‹ˆλ‹€. <br> * RateLimit-Policy - 적용 쀑인 μΏΌν„° μ •μ±…(&#x60;q&#x60; μš”μ²­ 수 / &#x60;w&#x60; μ°½ 크기(초)). λ³€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•œ 번 읽어 두면 λ©λ‹ˆλ‹€. <br> |
96
96
 
97
97
  [[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)
98
98
 
@@ -136,7 +136,7 @@ No authorization required
136
136
  ### HTTP response details
137
137
  | Status code | Description | Response headers |
138
138
  |-------------|-------------|------------------|
139
- |**200** | RFC 9728 보호 μžμ› 메타데이터. 이 API λ₯Ό μ§€ν‚€λŠ” 인가 μ„œλ²„κ°€ 어디인지 μ•Œλ € μ€λ‹ˆλ‹€. | - |
139
+ |**200** | RFC 9728 보호 μžμ› 메타데이터. 이 API λ₯Ό μ§€ν‚€λŠ” 인가 μ„œλ²„κ°€ 어디인지 μ•Œλ € μ€λ‹ˆλ‹€. | * RateLimit - ν˜„μž¬ 창의 μž”μ—¬ μΏΌν„°(&#x60;r&#x60;)와 λ¦¬μ…‹κΉŒμ§€ 남은 초(&#x60;t&#x60;). 이 값이 0 에 κ°€κΉŒμ›Œμ§€λ©΄ μš”μ²­ 간격을 λŠ˜λ¦¬μ„Έμš” β€” 429 λ₯Ό λ§Œλ‚˜κΈ° 전에 μ‘°μ ˆν•˜λΌκ³  μ£ΌλŠ” κ°’μž…λ‹ˆλ‹€. <br> * RateLimit-Policy - 적용 쀑인 μΏΌν„° μ •μ±…(&#x60;q&#x60; μš”μ²­ 수 / &#x60;w&#x60; μ°½ 크기(초)). λ³€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•œ 번 읽어 두면 λ©λ‹ˆλ‹€. <br> |
140
140
 
141
141
  [[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)
142
142
 
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: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -4,7 +4,7 @@
4
4
  * CMARKET V6 Partner API
5
5
  * μ™ΈλΆ€ ERP μ—°λ™μš© RESTful API. ## 인증 OAuth2 Bearer JWT (`client_credentials` ν”Œλ‘œμš°). `/oauth/token` μ—μ„œ 토큰을 λ°œκΈ‰λ°›μ•„ `Authorization: Bearer <token>` ν—€λ”λ‘œ μ‹€μœΌμ„Έμš”. ## κΆŒν•œ β€” 두 개의 λ…λ¦½λœ μΆ• `403` 을 λ§Œλ‚¬λ‹€λ©΄ λ‘˜ 쀑 μ–΄λŠ 좕에 κ±Έλ¦° 것인지 λ¨Όμ € κ΅¬λΆ„ν•˜μ„Έμš”. - **μŠ€μ½”ν”„** = *무엇을 ν•  수 μžˆλ‚˜*. 토큰에 λΆ€μ—¬λœ `bids:read`Β·`contracts:write` λ“±μž…λ‹ˆλ‹€. 미보유 μ‹œ `…/insufficient-scope`. - **λŒ€ν–‰ λ²”μœ„** = *λˆ„κ΅¬μ˜ 데이터λ₯Ό λ‹€λ£° 수 μžˆλ‚˜*. API ν‚€ 섀정이며 μŠ€μ½”ν”„λ‘œ ν‘œν˜„λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ²”μœ„ 밖이면 μŠ€μ½”ν”„μ™€ λ¬΄κ΄€ν•˜κ²Œ 403 μž…λ‹ˆλ‹€. λŒ€ν–‰ λ²”μœ„λŠ” ν‚€λ§ˆλ‹€ λ‘˜ 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€ β€” **μ†Œμ† κ·Έλ£Ή 전원**(κΈ°κ΄€ ν‚€. μ‚¬μ—…μ²˜Β·λΆ€μ„œ 계정이 μƒˆλ‘œ 생겨도 μžλ™ 포함) λ˜λŠ” **μ§€μ • 발주처 λͺ©λ‘**(κ³„μ•½μœΌλ‘œ ν•©μ˜λœ λͺ©λ‘). λ²”μœ„λ₯Ό λ„“ν˜€μ•Ό ν•˜λ©΄ μŠ€μ½”ν”„κ°€ μ•„λ‹ˆλΌ ν‚€ μ„€μ • 변경을 μš”μ²­ν•˜μ„Έμš”. ## 성곡 응닡 λ΄‰νˆ¬ `/v2` 의 λͺ¨λ“  2xx 본문은 `{ \"data\": … }` μž…λ‹ˆλ‹€. 단일 λ¦¬μ†ŒμŠ€λ“  λͺ©λ‘μ΄λ“  κ°™μŠ΅λ‹ˆλ‹€. **λͺ©λ‘μ€ `data` κ°€ 배열이고 `meta` κ°€ 항상 ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€** β€” `{ \"data\": [...], \"meta\": { \"nextCursor\": \"Mg==\", \"hasMore\": true } }`. 단일 λ¦¬μ†ŒμŠ€ μ‘λ‹΅μ—λŠ” `meta` κ°€ λ‚˜κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ΄‰νˆ¬λ₯Ό μ“°μ§€ μ•ŠλŠ” ν‘œλ©΄μ€ λ‘˜μž…λ‹ˆλ‹€. `/oauth/_*` 와 `/.well-known/_*` λŠ” 각각 RFC 6749Β·RFC 8414Β·RFC 9728 이 μ΅œμƒμœ„ ν•„λ“œλ₯Ό κ·œμ •ν•˜κ³ , 파일 λ‚΄μš© 응닡은 본문이 JSON 이 μ•„λ‹™λ‹ˆλ‹€. μ—λŸ¬ μ‘λ‹΅μ—λŠ” λ΄‰νˆ¬λ₯Ό μ”Œμš°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ β€” μ•„λž˜ problem+json 이 λ‹¨λ…μœΌλ‘œ μ±…μž„μ§‘λ‹ˆλ‹€. ## 쑰건뢀 μš”μ²­ (ETag) `/v2` 의 λͺ¨λ“  `GET` 응닡에 weak `ETag`(`W/\"…\"`)κ°€ μ‹€λ¦½λ‹ˆλ‹€. 받은 값을 λ‹€μŒ μš”μ²­μ˜ `If-None-Match` ν—€λ”λ‘œ λ˜λ³΄λ‚΄λ©΄, λ‚΄μš©μ΄ κ·ΈλŒ€λ‘œμΌ λ•Œ `304 Not Modified` λ₯Ό λ³Έλ¬Έ 없이 λ°›μŠ΅λ‹ˆλ‹€. κ²°κ³Όκ°€ λ‚˜κΈ°λ₯Ό 기닀리며 같은 μžμ›μ„ 반볡 μ‘°νšŒν•˜λŠ” 연동이라면 이 헀더 ν•˜λ‚˜λ‘œ μ „μ†‘λŸ‰μ΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. ## μ—λŸ¬ (RFC 9457 problem+json) λͺ¨λ“  μ—λŸ¬ 응닡은 `application/problem+json` μž…λ‹ˆλ‹€. **HTTP status + `type` URI** 둜 λΆ„κΈ°ν•˜μ„Έμš”. - `retryable`(boolean): μžλ™ μž¬μ‹œλ„ μ•ˆμ „ μ—¬λΆ€. `true`(429Β·5xx transient)λ©΄ backoff ν›„ μž¬μ‹œλ„ν•˜κ³ , `false`λ©΄ μš”μ²­μ„ 고쳐야 ν•©λ‹ˆλ‹€. - `traceId`: μš”μ²­ 좔적 id. `X-Correlation-Id` 응닡 헀더와 같은 κ°’μž…λ‹ˆλ‹€ β€” λ¬Έμ˜ν•  λ•Œ 이 값을 μ²¨λΆ€ν•˜μ„Έμš”. - `correlationId`: `traceId` 와 같은 κ°’μ˜ μ˜› 이름. κΈ°μ‘΄ 연동 ν˜Έν™˜μœΌλ‘œ ν•¨κ»˜ μ‹€λ¦½λ‹ˆλ‹€. μƒˆ 연동은 `traceId` λ₯Ό μ½μœΌμ„Έμš”. - `invalid-params`: 검증 μ‹€νŒ¨(400 `…/validation-failed`) μ‹œ μœ„λ°˜ ν•„λ“œ 경둜 λͺ©λ‘(RFC 9457 ν™•μž₯, κ°’ μ—†μŒ). `type` 은 `https://problems.cmarket.io/partner/<slug>` ν˜•νƒœμ˜ **μ•ˆμ • μ‹λ³„μž**μž…λ‹ˆλ‹€. RFC 9457 Β§3.1.1 이 ν—ˆμš©ν•˜λŠ” λŒ€λ‘œ 이 URI λŠ” **μ—­μ°Έμ‘°(dereference)λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€** β€” λΈŒλΌμš°μ €λ‘œ μ—΄μ§€ 말고 λ¬Έμžμ—΄ λΉ„κ΅λ‘œλ§Œ μ“°μ„Έμš”. slug λͺ©λ‘κ³Ό μ˜λ―ΈλŠ” 각 μ—”λ“œν¬μΈνŠΈμ˜ 응닡 μ„€λͺ…에 status λ³„λ‘œ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. ### λ©±λ“±μ„± μœ„λ°˜: 409 와 422 의 차이 - `409` `…/idempotency-key-conflict` β€” 같은 ν‚€μ˜ **원 μš”μ²­μ΄ 아직 처리 쀑**μž…λ‹ˆλ‹€. μž μ‹œ λ’€ 같은 ν‚€λ‘œ λ‹€μ‹œ λΆ€λ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°›μŠ΅λ‹ˆλ‹€. - `422` `…/idempotency-key-reused` β€” 같은 ν‚€λ₯Ό **λ‹€λ₯Έ body** 둜 λ³΄λƒˆμŠ΅λ‹ˆλ‹€. μž¬μ‹œλ„ν•΄λ„ μ˜μ›νžˆ 같은 μ‹€νŒ¨μ΄λ‹ˆ μƒˆ ν‚€λ₯Ό μ“°κ±°λ‚˜ body λ₯Ό λ˜λŒλ¦¬μ„Έμš”. ## Rate Limit μ „μ—­ **60 μš”μ²­/λΆ„ per `client_id`**, 토큰 λ°œκΈ‰(`/oauth/token`)은 **5 μš”μ²­/λΆ„** μž…λ‹ˆλ‹€. 초과 μ‹œ `429`(`type: …/too-many-requests`). μΏΌν„°λŠ” 두 κ°€μ§€ ν‘œκΈ°λ‘œ ν•¨κ»˜ λ‚˜κ°‘λ‹ˆλ‹€ β€” μ‹ κ·œ 연동은 ν‘œμ€€ ν•„λ“œλ₯Ό μ“°μ„Έμš”. - **ν‘œμ€€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ •μ±…) Β· `RateLimit: \"default\";r=59;t=42` (μž”λŸ‰ r, λ¦¬μ…‹κΉŒμ§€ t 초) - **λ ˆκ±°μ‹œ**(κ΄€μš©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ 연동 ν˜Έν™˜μ„ μœ„ν•΄ μœ μ§€ν•©λ‹ˆλ‹€. `429` μ—μ„œλŠ” `Retry-After`(초)κ°€ μš°μ„ ν•©λ‹ˆλ‹€. λŒ€λŸ‰ 동기화(ν’ˆλͺ© λ‹¨μœ„ 반볡 등둝 λ“±)λŠ” `Retry-After` 만큼 backoff ν›„ μž¬μ‹œλ„ν•˜μ„Έμš”. ## 좔적 μš”μ²­μ— `X-Correlation-Id` 헀더λ₯Ό μ‹€μœΌλ©΄ κ·ΈλŒ€λ‘œ echo 되고, μ—†μœΌλ©΄ μ„œλ²„κ°€ λ°œκΈ‰ν•©λ‹ˆλ‹€. λͺ¨λ“  응닡(성곡/μ—λŸ¬)에 `X-Correlation-Id` κ°€ μ‹€λ¦½λ‹ˆλ‹€. ## μ „λ°©ν˜Έν™˜ β€” λͺ¨λ₯΄λŠ” ν•„λ“œμ™€ κ°’μ—μ„œ κΉ¨μ§€μ§€ μ•Šκ²Œ λ‹€μŒ 셋은 breaking λ³€κ²½μœΌλ‘œ 보지 μ•ŠμœΌλ©° minor λ¦΄λ¦¬μŠ€μ—μ„œ 예고 없이 μΌμ–΄λ‚©λ‹ˆλ‹€. 이 μ „μ œλ‘œ κ΅¬ν˜„ν•˜μ„Έμš”. - **선택 ν•„λ“œ μΆ”κ°€**: λͺ¨λ₯΄λŠ” ν•„λ“œλŠ” λ¬΄μ‹œν•˜μ„Έμš”. 엄격 νŒŒμ„œ(unknown key κ±°λΆ€)λ₯Ό μ“°μ§€ λ§ˆμ„Έμš”. - **enum κ°’ μΆ”κ°€**: μƒνƒœΒ·λ‚™μ°°λ°©λ²• 등에 μƒˆ 값이 μƒκΉλ‹ˆλ‹€. λͺ¨λ₯΄λŠ” 값을 λ§Œλ‚˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 말고 원문 λ¬Έμžμ—΄μ„ λ³΄μ‘΄ν•˜μ„Έμš”. - **problem `type` slug μΆ”κ°€**: λͺ¨λ₯΄λŠ” slug 은 **HTTP status 둜 폴백**ν•΄ λΆ„κΈ°ν•˜μ„Έμš”. ## 버전 수λͺ…(deprecation/sunset) - **_/v2** breaking 변경은 CHANGELOG SemVer(major bump)와 `Deprecation`/`Sunset` ν—€λ”λ‘œ ν†΅μ§€ν•©λ‹ˆλ‹€. 이 헀더λ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ„Έμš”.
6
6
  *
7
- * The version of the OpenAPI document: 38.5.0
7
+ * The version of the OpenAPI document: 38.7.0
8
8
  * Contact: semo.io.kr@gmail.com
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).