@cmarket/partner-sdk 31.1.0 β 31.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/api/oauth-api.ts +1 -1
- package/api/partner-v1-api.ts +1 -1
- package/api/partner-v2-api.ts +13 -13
- package/api/well-known-api.ts +1 -1
- package/api.ts +1 -1
- package/base.ts +1 -1
- package/common.ts +1 -1
- package/configuration.ts +1 -1
- package/dist/api/oauth-api.d.ts +1 -1
- package/dist/api/oauth-api.js +1 -1
- package/dist/api/partner-v1-api.d.ts +1 -1
- package/dist/api/partner-v1-api.js +1 -1
- package/dist/api/partner-v2-api.d.ts +13 -13
- package/dist/api/partner-v2-api.js +13 -13
- package/dist/api/well-known-api.d.ts +1 -1
- package/dist/api/well-known-api.js +1 -1
- package/dist/api.d.ts +1 -1
- package/dist/api.js +1 -1
- package/dist/base.d.ts +1 -1
- package/dist/base.js +1 -1
- package/dist/common.d.ts +1 -1
- package/dist/common.js +1 -1
- package/dist/configuration.d.ts +1 -1
- package/dist/configuration.js +1 -1
- package/dist/esm/api/oauth-api.d.ts +1 -1
- package/dist/esm/api/oauth-api.js +1 -1
- package/dist/esm/api/partner-v1-api.d.ts +1 -1
- package/dist/esm/api/partner-v1-api.js +1 -1
- package/dist/esm/api/partner-v2-api.d.ts +13 -13
- package/dist/esm/api/partner-v2-api.js +13 -13
- package/dist/esm/api/well-known-api.d.ts +1 -1
- package/dist/esm/api/well-known-api.js +1 -1
- package/dist/esm/api.d.ts +1 -1
- package/dist/esm/api.js +1 -1
- package/dist/esm/base.d.ts +1 -1
- package/dist/esm/base.js +1 -1
- package/dist/esm/common.d.ts +1 -1
- package/dist/esm/common.js +1 -1
- package/dist/esm/configuration.d.ts +1 -1
- package/dist/esm/configuration.js +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/models/acceptance-result-response-dto.d.ts +1 -1
- package/dist/esm/models/acceptance-result-response-dto.js +1 -1
- package/dist/esm/models/acceptance-result-v1-response-dto.d.ts +1 -1
- package/dist/esm/models/acceptance-result-v1-response-dto.js +1 -1
- package/dist/esm/models/acceptance-status-response-dto.d.ts +1 -1
- package/dist/esm/models/acceptance-status-response-dto.js +1 -1
- package/dist/esm/models/acknowledge-product-receipt200-response.d.ts +1 -1
- package/dist/esm/models/acknowledge-product-receipt200-response.js +1 -1
- package/dist/esm/models/acknowledge-products-request-dto.d.ts +1 -1
- package/dist/esm/models/acknowledge-products-request-dto.js +1 -1
- package/dist/esm/models/acknowledge-products-v1-request-dto.d.ts +1 -1
- package/dist/esm/models/acknowledge-products-v1-request-dto.js +1 -1
- package/dist/esm/models/authorization-server-metadata-dto.d.ts +1 -1
- package/dist/esm/models/authorization-server-metadata-dto.js +1 -1
- package/dist/esm/models/award-method-public.d.ts +1 -1
- package/dist/esm/models/award-method-public.js +1 -1
- package/dist/esm/models/award-registered-response-dto.d.ts +1 -1
- package/dist/esm/models/award-registered-response-dto.js +1 -1
- package/dist/esm/models/award-registered-v2-response-dto.d.ts +1 -1
- package/dist/esm/models/award-registered-v2-response-dto.js +1 -1
- package/dist/esm/models/award-reverted-v2-response-dto.d.ts +1 -1
- package/dist/esm/models/award-reverted-v2-response-dto.js +1 -1
- package/dist/esm/models/bid-attachment-v1-dto.d.ts +1 -1
- package/dist/esm/models/bid-attachment-v1-dto.js +1 -1
- package/dist/esm/models/bid-bond-dto.d.ts +1 -1
- package/dist/esm/models/bid-bond-dto.js +1 -1
- package/dist/esm/models/bid-bond-v1-dto.d.ts +1 -1
- package/dist/esm/models/bid-bond-v1-dto.js +1 -1
- package/dist/esm/models/bid-cancelled-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-cancelled-response-dto.js +1 -1
- package/dist/esm/models/bid-contact-dto.d.ts +1 -1
- package/dist/esm/models/bid-contact-dto.js +1 -1
- package/dist/esm/models/bid-contacts-dto.d.ts +1 -1
- package/dist/esm/models/bid-contacts-dto.js +1 -1
- package/dist/esm/models/bid-contract-document-dto.d.ts +1 -1
- package/dist/esm/models/bid-contract-document-dto.js +1 -1
- package/dist/esm/models/bid-contract-documents-batch-v1-request-dto.d.ts +1 -1
- package/dist/esm/models/bid-contract-documents-batch-v1-request-dto.js +1 -1
- package/dist/esm/models/bid-contract-documents-v1-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-contract-documents-v1-response-dto.js +1 -1
- package/dist/esm/models/bid-created-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-created-response-dto.js +1 -1
- package/dist/esm/models/bid-delivery-terms-dto.d.ts +1 -1
- package/dist/esm/models/bid-delivery-terms-dto.js +1 -1
- package/dist/esm/models/bid-detail-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-detail-response-dto.js +1 -1
- package/dist/esm/models/bid-document-dto.d.ts +1 -1
- package/dist/esm/models/bid-document-dto.js +1 -1
- package/dist/esm/models/bid-document-v1-dto.d.ts +1 -1
- package/dist/esm/models/bid-document-v1-dto.js +1 -1
- package/dist/esm/models/bid-failed-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-failed-response-dto.js +1 -1
- package/dist/esm/models/bid-failed-v2-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-failed-v2-response-dto.js +1 -1
- package/dist/esm/models/bid-failure-reason.d.ts +1 -1
- package/dist/esm/models/bid-failure-reason.js +1 -1
- package/dist/esm/models/bid-item-dto.d.ts +1 -1
- package/dist/esm/models/bid-item-dto.js +1 -1
- package/dist/esm/models/bid-item-v1-dto.d.ts +1 -1
- package/dist/esm/models/bid-item-v1-dto.js +1 -1
- package/dist/esm/models/bid-lifecycle-dto.d.ts +1 -1
- package/dist/esm/models/bid-lifecycle-dto.js +1 -1
- package/dist/esm/models/bid-manager-dto.d.ts +1 -1
- package/dist/esm/models/bid-manager-dto.js +1 -1
- package/dist/esm/models/bid-manager-v1-dto.d.ts +1 -1
- package/dist/esm/models/bid-manager-v1-dto.js +1 -1
- package/dist/esm/models/bid-participant-summary-dto.d.ts +1 -1
- package/dist/esm/models/bid-participant-summary-dto.js +1 -1
- package/dist/esm/models/bid-payment-terms-dto.d.ts +1 -1
- package/dist/esm/models/bid-payment-terms-dto.js +1 -1
- package/dist/esm/models/bid-product-dto.d.ts +1 -1
- package/dist/esm/models/bid-product-dto.js +1 -1
- package/dist/esm/models/bid-public-status.d.ts +1 -1
- package/dist/esm/models/bid-public-status.js +1 -1
- package/dist/esm/models/bid-published-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-published-response-dto.js +1 -1
- package/dist/esm/models/bid-registered-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-registered-response-dto.js +1 -1
- package/dist/esm/models/bid-result-participant-attachment-dto.d.ts +1 -1
- package/dist/esm/models/bid-result-participant-attachment-dto.js +1 -1
- package/dist/esm/models/bid-result-participant-dto.d.ts +1 -1
- package/dist/esm/models/bid-result-participant-dto.js +1 -1
- package/dist/esm/models/bid-result-v1-attachment-dto.d.ts +1 -1
- package/dist/esm/models/bid-result-v1-attachment-dto.js +1 -1
- package/dist/esm/models/bid-result-v1-bid-product-info-dto.d.ts +1 -1
- package/dist/esm/models/bid-result-v1-bid-product-info-dto.js +1 -1
- package/dist/esm/models/bid-result-v1-participant-dto.d.ts +1 -1
- package/dist/esm/models/bid-result-v1-participant-dto.js +1 -1
- package/dist/esm/models/bid-result-v1-product-dto.d.ts +1 -1
- package/dist/esm/models/bid-result-v1-product-dto.js +1 -1
- package/dist/esm/models/bid-results-batch-request-dto.d.ts +1 -1
- package/dist/esm/models/bid-results-batch-request-dto.js +1 -1
- package/dist/esm/models/bid-results-batch-v1-request-dto.d.ts +1 -1
- package/dist/esm/models/bid-results-batch-v1-request-dto.js +1 -1
- package/dist/esm/models/bid-results-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-results-response-dto.js +1 -1
- package/dist/esm/models/bid-results-v1-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-results-v1-response-dto.js +1 -1
- package/dist/esm/models/bid-settlement-line-item-dto.d.ts +1 -1
- package/dist/esm/models/bid-settlement-line-item-dto.js +1 -1
- package/dist/esm/models/bid-settlement-participant-dto.d.ts +1 -1
- package/dist/esm/models/bid-settlement-participant-dto.js +1 -1
- package/dist/esm/models/bid-settlement-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-settlement-response-dto.js +1 -1
- package/dist/esm/models/bid-statement-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-statement-response-dto.js +1 -1
- package/dist/esm/models/bid-statement-v1-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-statement-v1-response-dto.js +1 -1
- package/dist/esm/models/bid-status.d.ts +1 -1
- package/dist/esm/models/bid-status.js +1 -1
- package/dist/esm/models/bid-summary-dto.d.ts +1 -1
- package/dist/esm/models/bid-summary-dto.js +1 -1
- package/dist/esm/models/bid-updated-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-updated-response-dto.js +1 -1
- package/dist/esm/models/cancel-bid-request-dto.d.ts +1 -1
- package/dist/esm/models/cancel-bid-request-dto.js +1 -1
- package/dist/esm/models/cancel-bid200-response.d.ts +1 -1
- package/dist/esm/models/cancel-bid200-response.js +1 -1
- package/dist/esm/models/card-payment-request-response-dto.d.ts +1 -1
- package/dist/esm/models/card-payment-request-response-dto.js +1 -1
- package/dist/esm/models/complete-acceptance-request-dto.d.ts +1 -1
- package/dist/esm/models/complete-acceptance-request-dto.js +1 -1
- package/dist/esm/models/complete-acceptance-v1-request-dto.d.ts +1 -1
- package/dist/esm/models/complete-acceptance-v1-request-dto.js +1 -1
- package/dist/esm/models/complete-acceptance200-response.d.ts +1 -1
- package/dist/esm/models/complete-acceptance200-response.js +1 -1
- package/dist/esm/models/complete-invoice200-response.d.ts +1 -1
- package/dist/esm/models/complete-invoice200-response.js +1 -1
- package/dist/esm/models/contract-document-item-dto.d.ts +1 -1
- package/dist/esm/models/contract-document-item-dto.js +1 -1
- package/dist/esm/models/contract-documents-regenerated-response-dto.d.ts +1 -1
- package/dist/esm/models/contract-documents-regenerated-response-dto.js +1 -1
- package/dist/esm/models/contract-restriction-confirm-input-dto.d.ts +1 -1
- package/dist/esm/models/contract-restriction-confirm-input-dto.js +1 -1
- package/dist/esm/models/create-bid-request-dto.d.ts +1 -1
- package/dist/esm/models/create-bid-request-dto.js +1 -1
- package/dist/esm/models/create-bid-v1-request-dto.d.ts +1 -1
- package/dist/esm/models/create-bid-v1-request-dto.js +1 -1
- package/dist/esm/models/create-card-payment-request-dto.d.ts +1 -1
- package/dist/esm/models/create-card-payment-request-dto.js +1 -1
- package/dist/esm/models/create-card-payment200-response.d.ts +1 -1
- package/dist/esm/models/create-card-payment200-response.js +1 -1
- package/dist/esm/models/create-external-contract-documents-request-dto.d.ts +1 -1
- package/dist/esm/models/create-external-contract-documents-request-dto.js +1 -1
- package/dist/esm/models/create-external-contract-documents-response-dto.d.ts +1 -1
- package/dist/esm/models/create-external-contract-documents-response-dto.js +1 -1
- package/dist/esm/models/create-webhook-endpoint-request-dto.d.ts +1 -1
- package/dist/esm/models/create-webhook-endpoint-request-dto.js +1 -1
- package/dist/esm/models/create-webhook-endpoint201-response.d.ts +1 -1
- package/dist/esm/models/create-webhook-endpoint201-response.js +1 -1
- package/dist/esm/models/external-contract-document-item-dto.d.ts +1 -1
- package/dist/esm/models/external-contract-document-item-dto.js +1 -1
- package/dist/esm/models/external-contract-documents-response-dto.d.ts +1 -1
- package/dist/esm/models/external-contract-documents-response-dto.js +1 -1
- package/dist/esm/models/external-contract-item-dto.d.ts +1 -1
- package/dist/esm/models/external-contract-item-dto.js +1 -1
- package/dist/esm/models/external-contract-snapshot-dto.d.ts +1 -1
- package/dist/esm/models/external-contract-snapshot-dto.js +1 -1
- package/dist/esm/models/external-document-inputs-dto.d.ts +1 -1
- package/dist/esm/models/external-document-inputs-dto.js +1 -1
- package/dist/esm/models/file-meta-response-dto.d.ts +2 -2
- package/dist/esm/models/file-meta-response-dto.js +1 -1
- package/dist/esm/models/file-uploaded-response-dto.d.ts +1 -1
- package/dist/esm/models/file-uploaded-response-dto.js +1 -1
- package/dist/esm/models/file-uploaded-v1-response-dto.d.ts +1 -1
- package/dist/esm/models/file-uploaded-v1-response-dto.js +1 -1
- package/dist/esm/models/generated-external-contract-document-dto.d.ts +1 -1
- package/dist/esm/models/generated-external-contract-document-dto.js +1 -1
- package/dist/esm/models/get-bid-acceptance200-response.d.ts +1 -1
- package/dist/esm/models/get-bid-acceptance200-response.js +1 -1
- package/dist/esm/models/get-bid-results200-response.d.ts +1 -1
- package/dist/esm/models/get-bid-results200-response.js +1 -1
- package/dist/esm/models/get-bid-settlement200-response.d.ts +1 -1
- package/dist/esm/models/get-bid-settlement200-response.js +1 -1
- package/dist/esm/models/get-bid-statement200-response.d.ts +1 -1
- package/dist/esm/models/get-bid-statement200-response.js +1 -1
- package/dist/esm/models/get-bid200-response.d.ts +1 -1
- package/dist/esm/models/get-bid200-response.js +1 -1
- package/dist/esm/models/get-file-meta200-response.d.ts +1 -1
- package/dist/esm/models/get-file-meta200-response.js +1 -1
- package/dist/esm/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
- package/dist/esm/models/get-supplier-card-payable-v2200-response.js +1 -1
- package/dist/esm/models/get-webhook-endpoint200-response.d.ts +1 -1
- package/dist/esm/models/get-webhook-endpoint200-response.js +1 -1
- package/dist/esm/models/health-controller-check200-response.d.ts +1 -1
- package/dist/esm/models/health-controller-check200-response.js +1 -1
- package/dist/esm/models/health-response-dto.d.ts +1 -1
- package/dist/esm/models/health-response-dto.js +1 -1
- package/dist/esm/models/hierarchical-region-dto.d.ts +1 -1
- package/dist/esm/models/hierarchical-region-dto.js +1 -1
- package/dist/esm/models/hierarchical-region-v1-dto.d.ts +1 -1
- package/dist/esm/models/hierarchical-region-v1-dto.js +1 -1
- package/dist/esm/models/introspect-request-dto.d.ts +1 -1
- package/dist/esm/models/introspect-request-dto.js +1 -1
- package/dist/esm/models/introspection-response-dto.d.ts +1 -1
- package/dist/esm/models/introspection-response-dto.js +1 -1
- package/dist/esm/models/invalid-param-dto.d.ts +1 -1
- package/dist/esm/models/invalid-param-dto.js +1 -1
- package/dist/esm/models/invoice-completed-response-dto.d.ts +1 -1
- package/dist/esm/models/invoice-completed-response-dto.js +1 -1
- package/dist/esm/models/list-bid-contract-documents200-response.d.ts +1 -1
- package/dist/esm/models/list-bid-contract-documents200-response.js +1 -1
- package/dist/esm/models/list-bid-participants200-response.d.ts +1 -1
- package/dist/esm/models/list-bid-participants200-response.js +1 -1
- package/dist/esm/models/list-bid-results200-response.d.ts +1 -1
- package/dist/esm/models/list-bid-results200-response.js +1 -1
- package/dist/esm/models/list-bids-response-dto.d.ts +1 -1
- package/dist/esm/models/list-bids-response-dto.js +1 -1
- package/dist/esm/models/list-bids200-response.d.ts +1 -1
- package/dist/esm/models/list-bids200-response.js +1 -1
- package/dist/esm/models/list-products200-response.d.ts +1 -1
- package/dist/esm/models/list-products200-response.js +1 -1
- package/dist/esm/models/list-webhook-deliveries-response-dto.d.ts +1 -1
- package/dist/esm/models/list-webhook-deliveries-response-dto.js +1 -1
- package/dist/esm/models/list-webhook-deliveries200-response.d.ts +1 -1
- package/dist/esm/models/list-webhook-deliveries200-response.js +1 -1
- package/dist/esm/models/list-webhook-endpoints200-response.d.ts +1 -1
- package/dist/esm/models/list-webhook-endpoints200-response.js +1 -1
- package/dist/esm/models/mark-bid-failed-request-dto.d.ts +1 -1
- package/dist/esm/models/mark-bid-failed-request-dto.js +1 -1
- package/dist/esm/models/mark-bid-failed-v1-request-dto.d.ts +1 -1
- package/dist/esm/models/mark-bid-failed-v1-request-dto.js +1 -1
- package/dist/esm/models/mark-bid-failed201-response.d.ts +1 -1
- package/dist/esm/models/mark-bid-failed201-response.js +1 -1
- package/dist/esm/models/negotiation-score-v1-dto.d.ts +1 -1
- package/dist/esm/models/negotiation-score-v1-dto.js +1 -1
- package/dist/esm/models/negotiation-scored-response-dto.d.ts +1 -1
- package/dist/esm/models/negotiation-scored-response-dto.js +1 -1
- package/dist/esm/models/oauth-error-response-dto.d.ts +1 -1
- package/dist/esm/models/oauth-error-response-dto.js +1 -1
- package/dist/esm/models/partner-webhook-delivery-status.d.ts +1 -1
- package/dist/esm/models/partner-webhook-delivery-status.js +1 -1
- package/dist/esm/models/partner-webhook-endpoint-status.d.ts +1 -1
- package/dist/esm/models/partner-webhook-endpoint-status.js +1 -1
- package/dist/esm/models/partner-webhook-event-type.d.ts +1 -1
- package/dist/esm/models/partner-webhook-event-type.js +1 -1
- package/dist/esm/models/preconditions-dto.d.ts +1 -1
- package/dist/esm/models/preconditions-dto.js +1 -1
- package/dist/esm/models/preconditions-v1-dto.d.ts +1 -1
- package/dist/esm/models/preconditions-v1-dto.js +1 -1
- package/dist/esm/models/problem-details-dto.d.ts +1 -1
- package/dist/esm/models/problem-details-dto.js +1 -1
- package/dist/esm/models/product-receipt-response-dto.d.ts +1 -1
- package/dist/esm/models/product-receipt-response-dto.js +1 -1
- package/dist/esm/models/product-receipt-v1-response-dto.d.ts +1 -1
- package/dist/esm/models/product-receipt-v1-response-dto.js +1 -1
- package/dist/esm/models/product-response-dto.d.ts +1 -1
- package/dist/esm/models/product-response-dto.js +1 -1
- package/dist/esm/models/product-v1-response-dto.d.ts +1 -1
- package/dist/esm/models/product-v1-response-dto.js +1 -1
- package/dist/esm/models/protected-resource-metadata-dto.d.ts +1 -1
- package/dist/esm/models/protected-resource-metadata-dto.js +1 -1
- package/dist/esm/models/publish-bid200-response.d.ts +1 -1
- package/dist/esm/models/publish-bid200-response.js +1 -1
- package/dist/esm/models/regenerate-contract-documents201-response.d.ts +1 -1
- package/dist/esm/models/regenerate-contract-documents201-response.js +1 -1
- package/dist/esm/models/register-award-request-dto.d.ts +1 -1
- package/dist/esm/models/register-award-request-dto.js +1 -1
- package/dist/esm/models/register-award-v1-request-dto.d.ts +1 -1
- package/dist/esm/models/register-award-v1-request-dto.js +1 -1
- package/dist/esm/models/register-award201-response.d.ts +1 -1
- package/dist/esm/models/register-award201-response.js +1 -1
- package/dist/esm/models/register-bid201-response.d.ts +1 -1
- package/dist/esm/models/register-bid201-response.js +1 -1
- package/dist/esm/models/register-semo-contract-request-dto.d.ts +1 -1
- package/dist/esm/models/register-semo-contract-request-dto.js +1 -1
- package/dist/esm/models/request-split-invoice-v1-request-dto.d.ts +1 -1
- package/dist/esm/models/request-split-invoice-v1-request-dto.js +1 -1
- package/dist/esm/models/retiree-roster-input-dto.d.ts +1 -1
- package/dist/esm/models/retiree-roster-input-dto.js +1 -1
- package/dist/esm/models/retiree-roster-row-dto.d.ts +1 -1
- package/dist/esm/models/retiree-roster-row-dto.js +1 -1
- package/dist/esm/models/revert-award-request-dto.d.ts +1 -1
- package/dist/esm/models/revert-award-request-dto.js +1 -1
- package/dist/esm/models/revert-award200-response.d.ts +1 -1
- package/dist/esm/models/revert-award200-response.js +1 -1
- package/dist/esm/models/revoke-request-dto.d.ts +1 -1
- package/dist/esm/models/revoke-request-dto.js +1 -1
- package/dist/esm/models/semo-contract-registered-response-dto.d.ts +1 -1
- package/dist/esm/models/semo-contract-registered-response-dto.js +1 -1
- package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
- package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
- package/dist/esm/models/send-webhook-test-event200-response.d.ts +1 -1
- package/dist/esm/models/send-webhook-test-event200-response.js +1 -1
- package/dist/esm/models/split-invoice-v1-response-dto.d.ts +1 -1
- package/dist/esm/models/split-invoice-v1-response-dto.js +1 -1
- package/dist/esm/models/statement-document-dto.d.ts +1 -1
- package/dist/esm/models/statement-document-dto.js +1 -1
- package/dist/esm/models/statement-product-dto.d.ts +1 -1
- package/dist/esm/models/statement-product-dto.js +1 -1
- package/dist/esm/models/statement-v1-document-dto.d.ts +1 -1
- package/dist/esm/models/statement-v1-document-dto.js +1 -1
- package/dist/esm/models/statement-v1-product-dto.d.ts +1 -1
- package/dist/esm/models/statement-v1-product-dto.js +1 -1
- package/dist/esm/models/submit-negotiation-scores-v1-request-dto.d.ts +1 -1
- package/dist/esm/models/submit-negotiation-scores-v1-request-dto.js +1 -1
- package/dist/esm/models/supplier-card-payable-response-dto.d.ts +1 -1
- package/dist/esm/models/supplier-card-payable-response-dto.js +1 -1
- package/dist/esm/models/supplier-tax-type.d.ts +1 -1
- package/dist/esm/models/supplier-tax-type.js +1 -1
- package/dist/esm/models/token-request-dto.d.ts +1 -1
- package/dist/esm/models/token-request-dto.js +1 -1
- package/dist/esm/models/token-response-dto.d.ts +1 -1
- package/dist/esm/models/token-response-dto.js +1 -1
- package/dist/esm/models/update-bid-request-dto.d.ts +1 -1
- package/dist/esm/models/update-bid-request-dto.js +1 -1
- package/dist/esm/models/update-bid200-response.d.ts +1 -1
- package/dist/esm/models/update-bid200-response.js +1 -1
- package/dist/esm/models/update-webhook-endpoint-request-dto.d.ts +1 -1
- package/dist/esm/models/update-webhook-endpoint-request-dto.js +1 -1
- package/dist/esm/models/upload-file-request-dto.d.ts +1 -1
- package/dist/esm/models/upload-file-request-dto.js +1 -1
- package/dist/esm/models/upload-file-v1-request-dto.d.ts +1 -1
- package/dist/esm/models/upload-file-v1-request-dto.js +1 -1
- package/dist/esm/models/upload-file201-response.d.ts +1 -1
- package/dist/esm/models/upload-file201-response.js +1 -1
- package/dist/esm/models/webhook-delivery-dto.d.ts +1 -1
- package/dist/esm/models/webhook-delivery-dto.js +1 -1
- package/dist/esm/models/webhook-endpoint-dto.d.ts +1 -1
- package/dist/esm/models/webhook-endpoint-dto.js +1 -1
- package/dist/esm/models/webhook-endpoint-with-secret-dto.d.ts +1 -1
- package/dist/esm/models/webhook-endpoint-with-secret-dto.js +1 -1
- package/dist/esm/models/webhook-test-result-dto.d.ts +1 -1
- package/dist/esm/models/webhook-test-result-dto.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/models/acceptance-result-response-dto.d.ts +1 -1
- package/dist/models/acceptance-result-response-dto.js +1 -1
- package/dist/models/acceptance-result-v1-response-dto.d.ts +1 -1
- package/dist/models/acceptance-result-v1-response-dto.js +1 -1
- package/dist/models/acceptance-status-response-dto.d.ts +1 -1
- package/dist/models/acceptance-status-response-dto.js +1 -1
- package/dist/models/acknowledge-product-receipt200-response.d.ts +1 -1
- package/dist/models/acknowledge-product-receipt200-response.js +1 -1
- package/dist/models/acknowledge-products-request-dto.d.ts +1 -1
- package/dist/models/acknowledge-products-request-dto.js +1 -1
- package/dist/models/acknowledge-products-v1-request-dto.d.ts +1 -1
- package/dist/models/acknowledge-products-v1-request-dto.js +1 -1
- package/dist/models/authorization-server-metadata-dto.d.ts +1 -1
- package/dist/models/authorization-server-metadata-dto.js +1 -1
- package/dist/models/award-method-public.d.ts +1 -1
- package/dist/models/award-method-public.js +1 -1
- package/dist/models/award-registered-response-dto.d.ts +1 -1
- package/dist/models/award-registered-response-dto.js +1 -1
- package/dist/models/award-registered-v2-response-dto.d.ts +1 -1
- package/dist/models/award-registered-v2-response-dto.js +1 -1
- package/dist/models/award-reverted-v2-response-dto.d.ts +1 -1
- package/dist/models/award-reverted-v2-response-dto.js +1 -1
- package/dist/models/bid-attachment-v1-dto.d.ts +1 -1
- package/dist/models/bid-attachment-v1-dto.js +1 -1
- package/dist/models/bid-bond-dto.d.ts +1 -1
- package/dist/models/bid-bond-dto.js +1 -1
- package/dist/models/bid-bond-v1-dto.d.ts +1 -1
- package/dist/models/bid-bond-v1-dto.js +1 -1
- package/dist/models/bid-cancelled-response-dto.d.ts +1 -1
- package/dist/models/bid-cancelled-response-dto.js +1 -1
- package/dist/models/bid-contact-dto.d.ts +1 -1
- package/dist/models/bid-contact-dto.js +1 -1
- package/dist/models/bid-contacts-dto.d.ts +1 -1
- package/dist/models/bid-contacts-dto.js +1 -1
- package/dist/models/bid-contract-document-dto.d.ts +1 -1
- package/dist/models/bid-contract-document-dto.js +1 -1
- package/dist/models/bid-contract-documents-batch-v1-request-dto.d.ts +1 -1
- package/dist/models/bid-contract-documents-batch-v1-request-dto.js +1 -1
- package/dist/models/bid-contract-documents-v1-response-dto.d.ts +1 -1
- package/dist/models/bid-contract-documents-v1-response-dto.js +1 -1
- package/dist/models/bid-created-response-dto.d.ts +1 -1
- package/dist/models/bid-created-response-dto.js +1 -1
- package/dist/models/bid-delivery-terms-dto.d.ts +1 -1
- package/dist/models/bid-delivery-terms-dto.js +1 -1
- package/dist/models/bid-detail-response-dto.d.ts +1 -1
- package/dist/models/bid-detail-response-dto.js +1 -1
- package/dist/models/bid-document-dto.d.ts +1 -1
- package/dist/models/bid-document-dto.js +1 -1
- package/dist/models/bid-document-v1-dto.d.ts +1 -1
- package/dist/models/bid-document-v1-dto.js +1 -1
- package/dist/models/bid-failed-response-dto.d.ts +1 -1
- package/dist/models/bid-failed-response-dto.js +1 -1
- package/dist/models/bid-failed-v2-response-dto.d.ts +1 -1
- package/dist/models/bid-failed-v2-response-dto.js +1 -1
- package/dist/models/bid-failure-reason.d.ts +1 -1
- package/dist/models/bid-failure-reason.js +1 -1
- package/dist/models/bid-item-dto.d.ts +1 -1
- package/dist/models/bid-item-dto.js +1 -1
- package/dist/models/bid-item-v1-dto.d.ts +1 -1
- package/dist/models/bid-item-v1-dto.js +1 -1
- package/dist/models/bid-lifecycle-dto.d.ts +1 -1
- package/dist/models/bid-lifecycle-dto.js +1 -1
- package/dist/models/bid-manager-dto.d.ts +1 -1
- package/dist/models/bid-manager-dto.js +1 -1
- package/dist/models/bid-manager-v1-dto.d.ts +1 -1
- package/dist/models/bid-manager-v1-dto.js +1 -1
- package/dist/models/bid-participant-summary-dto.d.ts +1 -1
- package/dist/models/bid-participant-summary-dto.js +1 -1
- package/dist/models/bid-payment-terms-dto.d.ts +1 -1
- package/dist/models/bid-payment-terms-dto.js +1 -1
- package/dist/models/bid-product-dto.d.ts +1 -1
- package/dist/models/bid-product-dto.js +1 -1
- package/dist/models/bid-public-status.d.ts +1 -1
- package/dist/models/bid-public-status.js +1 -1
- package/dist/models/bid-published-response-dto.d.ts +1 -1
- package/dist/models/bid-published-response-dto.js +1 -1
- package/dist/models/bid-registered-response-dto.d.ts +1 -1
- package/dist/models/bid-registered-response-dto.js +1 -1
- package/dist/models/bid-result-participant-attachment-dto.d.ts +1 -1
- package/dist/models/bid-result-participant-attachment-dto.js +1 -1
- package/dist/models/bid-result-participant-dto.d.ts +1 -1
- package/dist/models/bid-result-participant-dto.js +1 -1
- package/dist/models/bid-result-v1-attachment-dto.d.ts +1 -1
- package/dist/models/bid-result-v1-attachment-dto.js +1 -1
- package/dist/models/bid-result-v1-bid-product-info-dto.d.ts +1 -1
- package/dist/models/bid-result-v1-bid-product-info-dto.js +1 -1
- package/dist/models/bid-result-v1-participant-dto.d.ts +1 -1
- package/dist/models/bid-result-v1-participant-dto.js +1 -1
- package/dist/models/bid-result-v1-product-dto.d.ts +1 -1
- package/dist/models/bid-result-v1-product-dto.js +1 -1
- package/dist/models/bid-results-batch-request-dto.d.ts +1 -1
- package/dist/models/bid-results-batch-request-dto.js +1 -1
- package/dist/models/bid-results-batch-v1-request-dto.d.ts +1 -1
- package/dist/models/bid-results-batch-v1-request-dto.js +1 -1
- package/dist/models/bid-results-response-dto.d.ts +1 -1
- package/dist/models/bid-results-response-dto.js +1 -1
- package/dist/models/bid-results-v1-response-dto.d.ts +1 -1
- package/dist/models/bid-results-v1-response-dto.js +1 -1
- package/dist/models/bid-settlement-line-item-dto.d.ts +1 -1
- package/dist/models/bid-settlement-line-item-dto.js +1 -1
- package/dist/models/bid-settlement-participant-dto.d.ts +1 -1
- package/dist/models/bid-settlement-participant-dto.js +1 -1
- package/dist/models/bid-settlement-response-dto.d.ts +1 -1
- package/dist/models/bid-settlement-response-dto.js +1 -1
- package/dist/models/bid-statement-response-dto.d.ts +1 -1
- package/dist/models/bid-statement-response-dto.js +1 -1
- package/dist/models/bid-statement-v1-response-dto.d.ts +1 -1
- package/dist/models/bid-statement-v1-response-dto.js +1 -1
- package/dist/models/bid-status.d.ts +1 -1
- package/dist/models/bid-status.js +1 -1
- package/dist/models/bid-summary-dto.d.ts +1 -1
- package/dist/models/bid-summary-dto.js +1 -1
- package/dist/models/bid-updated-response-dto.d.ts +1 -1
- package/dist/models/bid-updated-response-dto.js +1 -1
- package/dist/models/cancel-bid-request-dto.d.ts +1 -1
- package/dist/models/cancel-bid-request-dto.js +1 -1
- package/dist/models/cancel-bid200-response.d.ts +1 -1
- package/dist/models/cancel-bid200-response.js +1 -1
- package/dist/models/card-payment-request-response-dto.d.ts +1 -1
- package/dist/models/card-payment-request-response-dto.js +1 -1
- package/dist/models/complete-acceptance-request-dto.d.ts +1 -1
- package/dist/models/complete-acceptance-request-dto.js +1 -1
- package/dist/models/complete-acceptance-v1-request-dto.d.ts +1 -1
- package/dist/models/complete-acceptance-v1-request-dto.js +1 -1
- package/dist/models/complete-acceptance200-response.d.ts +1 -1
- package/dist/models/complete-acceptance200-response.js +1 -1
- package/dist/models/complete-invoice200-response.d.ts +1 -1
- package/dist/models/complete-invoice200-response.js +1 -1
- package/dist/models/contract-document-item-dto.d.ts +1 -1
- package/dist/models/contract-document-item-dto.js +1 -1
- package/dist/models/contract-documents-regenerated-response-dto.d.ts +1 -1
- package/dist/models/contract-documents-regenerated-response-dto.js +1 -1
- package/dist/models/contract-restriction-confirm-input-dto.d.ts +1 -1
- package/dist/models/contract-restriction-confirm-input-dto.js +1 -1
- package/dist/models/create-bid-request-dto.d.ts +1 -1
- package/dist/models/create-bid-request-dto.js +1 -1
- package/dist/models/create-bid-v1-request-dto.d.ts +1 -1
- package/dist/models/create-bid-v1-request-dto.js +1 -1
- package/dist/models/create-card-payment-request-dto.d.ts +1 -1
- package/dist/models/create-card-payment-request-dto.js +1 -1
- package/dist/models/create-card-payment200-response.d.ts +1 -1
- package/dist/models/create-card-payment200-response.js +1 -1
- package/dist/models/create-external-contract-documents-request-dto.d.ts +1 -1
- package/dist/models/create-external-contract-documents-request-dto.js +1 -1
- package/dist/models/create-external-contract-documents-response-dto.d.ts +1 -1
- package/dist/models/create-external-contract-documents-response-dto.js +1 -1
- package/dist/models/create-webhook-endpoint-request-dto.d.ts +1 -1
- package/dist/models/create-webhook-endpoint-request-dto.js +1 -1
- package/dist/models/create-webhook-endpoint201-response.d.ts +1 -1
- package/dist/models/create-webhook-endpoint201-response.js +1 -1
- package/dist/models/external-contract-document-item-dto.d.ts +1 -1
- package/dist/models/external-contract-document-item-dto.js +1 -1
- package/dist/models/external-contract-documents-response-dto.d.ts +1 -1
- package/dist/models/external-contract-documents-response-dto.js +1 -1
- package/dist/models/external-contract-item-dto.d.ts +1 -1
- package/dist/models/external-contract-item-dto.js +1 -1
- package/dist/models/external-contract-snapshot-dto.d.ts +1 -1
- package/dist/models/external-contract-snapshot-dto.js +1 -1
- package/dist/models/external-document-inputs-dto.d.ts +1 -1
- package/dist/models/external-document-inputs-dto.js +1 -1
- package/dist/models/file-meta-response-dto.d.ts +2 -2
- package/dist/models/file-meta-response-dto.js +1 -1
- package/dist/models/file-uploaded-response-dto.d.ts +1 -1
- package/dist/models/file-uploaded-response-dto.js +1 -1
- package/dist/models/file-uploaded-v1-response-dto.d.ts +1 -1
- package/dist/models/file-uploaded-v1-response-dto.js +1 -1
- package/dist/models/generated-external-contract-document-dto.d.ts +1 -1
- package/dist/models/generated-external-contract-document-dto.js +1 -1
- package/dist/models/get-bid-acceptance200-response.d.ts +1 -1
- package/dist/models/get-bid-acceptance200-response.js +1 -1
- package/dist/models/get-bid-results200-response.d.ts +1 -1
- package/dist/models/get-bid-results200-response.js +1 -1
- package/dist/models/get-bid-settlement200-response.d.ts +1 -1
- package/dist/models/get-bid-settlement200-response.js +1 -1
- package/dist/models/get-bid-statement200-response.d.ts +1 -1
- package/dist/models/get-bid-statement200-response.js +1 -1
- package/dist/models/get-bid200-response.d.ts +1 -1
- package/dist/models/get-bid200-response.js +1 -1
- package/dist/models/get-file-meta200-response.d.ts +1 -1
- package/dist/models/get-file-meta200-response.js +1 -1
- package/dist/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
- package/dist/models/get-supplier-card-payable-v2200-response.js +1 -1
- package/dist/models/get-webhook-endpoint200-response.d.ts +1 -1
- package/dist/models/get-webhook-endpoint200-response.js +1 -1
- package/dist/models/health-controller-check200-response.d.ts +1 -1
- package/dist/models/health-controller-check200-response.js +1 -1
- package/dist/models/health-response-dto.d.ts +1 -1
- package/dist/models/health-response-dto.js +1 -1
- package/dist/models/hierarchical-region-dto.d.ts +1 -1
- package/dist/models/hierarchical-region-dto.js +1 -1
- package/dist/models/hierarchical-region-v1-dto.d.ts +1 -1
- package/dist/models/hierarchical-region-v1-dto.js +1 -1
- package/dist/models/introspect-request-dto.d.ts +1 -1
- package/dist/models/introspect-request-dto.js +1 -1
- package/dist/models/introspection-response-dto.d.ts +1 -1
- package/dist/models/introspection-response-dto.js +1 -1
- package/dist/models/invalid-param-dto.d.ts +1 -1
- package/dist/models/invalid-param-dto.js +1 -1
- package/dist/models/invoice-completed-response-dto.d.ts +1 -1
- package/dist/models/invoice-completed-response-dto.js +1 -1
- package/dist/models/list-bid-contract-documents200-response.d.ts +1 -1
- package/dist/models/list-bid-contract-documents200-response.js +1 -1
- package/dist/models/list-bid-participants200-response.d.ts +1 -1
- package/dist/models/list-bid-participants200-response.js +1 -1
- package/dist/models/list-bid-results200-response.d.ts +1 -1
- package/dist/models/list-bid-results200-response.js +1 -1
- package/dist/models/list-bids-response-dto.d.ts +1 -1
- package/dist/models/list-bids-response-dto.js +1 -1
- package/dist/models/list-bids200-response.d.ts +1 -1
- package/dist/models/list-bids200-response.js +1 -1
- package/dist/models/list-products200-response.d.ts +1 -1
- package/dist/models/list-products200-response.js +1 -1
- package/dist/models/list-webhook-deliveries-response-dto.d.ts +1 -1
- package/dist/models/list-webhook-deliveries-response-dto.js +1 -1
- package/dist/models/list-webhook-deliveries200-response.d.ts +1 -1
- package/dist/models/list-webhook-deliveries200-response.js +1 -1
- package/dist/models/list-webhook-endpoints200-response.d.ts +1 -1
- package/dist/models/list-webhook-endpoints200-response.js +1 -1
- package/dist/models/mark-bid-failed-request-dto.d.ts +1 -1
- package/dist/models/mark-bid-failed-request-dto.js +1 -1
- package/dist/models/mark-bid-failed-v1-request-dto.d.ts +1 -1
- package/dist/models/mark-bid-failed-v1-request-dto.js +1 -1
- package/dist/models/mark-bid-failed201-response.d.ts +1 -1
- package/dist/models/mark-bid-failed201-response.js +1 -1
- package/dist/models/negotiation-score-v1-dto.d.ts +1 -1
- package/dist/models/negotiation-score-v1-dto.js +1 -1
- package/dist/models/negotiation-scored-response-dto.d.ts +1 -1
- package/dist/models/negotiation-scored-response-dto.js +1 -1
- package/dist/models/oauth-error-response-dto.d.ts +1 -1
- package/dist/models/oauth-error-response-dto.js +1 -1
- package/dist/models/partner-webhook-delivery-status.d.ts +1 -1
- package/dist/models/partner-webhook-delivery-status.js +1 -1
- package/dist/models/partner-webhook-endpoint-status.d.ts +1 -1
- package/dist/models/partner-webhook-endpoint-status.js +1 -1
- package/dist/models/partner-webhook-event-type.d.ts +1 -1
- package/dist/models/partner-webhook-event-type.js +1 -1
- package/dist/models/preconditions-dto.d.ts +1 -1
- package/dist/models/preconditions-dto.js +1 -1
- package/dist/models/preconditions-v1-dto.d.ts +1 -1
- package/dist/models/preconditions-v1-dto.js +1 -1
- package/dist/models/problem-details-dto.d.ts +1 -1
- package/dist/models/problem-details-dto.js +1 -1
- package/dist/models/product-receipt-response-dto.d.ts +1 -1
- package/dist/models/product-receipt-response-dto.js +1 -1
- package/dist/models/product-receipt-v1-response-dto.d.ts +1 -1
- package/dist/models/product-receipt-v1-response-dto.js +1 -1
- package/dist/models/product-response-dto.d.ts +1 -1
- package/dist/models/product-response-dto.js +1 -1
- package/dist/models/product-v1-response-dto.d.ts +1 -1
- package/dist/models/product-v1-response-dto.js +1 -1
- package/dist/models/protected-resource-metadata-dto.d.ts +1 -1
- package/dist/models/protected-resource-metadata-dto.js +1 -1
- package/dist/models/publish-bid200-response.d.ts +1 -1
- package/dist/models/publish-bid200-response.js +1 -1
- package/dist/models/regenerate-contract-documents201-response.d.ts +1 -1
- package/dist/models/regenerate-contract-documents201-response.js +1 -1
- package/dist/models/register-award-request-dto.d.ts +1 -1
- package/dist/models/register-award-request-dto.js +1 -1
- package/dist/models/register-award-v1-request-dto.d.ts +1 -1
- package/dist/models/register-award-v1-request-dto.js +1 -1
- package/dist/models/register-award201-response.d.ts +1 -1
- package/dist/models/register-award201-response.js +1 -1
- package/dist/models/register-bid201-response.d.ts +1 -1
- package/dist/models/register-bid201-response.js +1 -1
- package/dist/models/register-semo-contract-request-dto.d.ts +1 -1
- package/dist/models/register-semo-contract-request-dto.js +1 -1
- package/dist/models/request-split-invoice-v1-request-dto.d.ts +1 -1
- package/dist/models/request-split-invoice-v1-request-dto.js +1 -1
- package/dist/models/retiree-roster-input-dto.d.ts +1 -1
- package/dist/models/retiree-roster-input-dto.js +1 -1
- package/dist/models/retiree-roster-row-dto.d.ts +1 -1
- package/dist/models/retiree-roster-row-dto.js +1 -1
- package/dist/models/revert-award-request-dto.d.ts +1 -1
- package/dist/models/revert-award-request-dto.js +1 -1
- package/dist/models/revert-award200-response.d.ts +1 -1
- package/dist/models/revert-award200-response.js +1 -1
- package/dist/models/revoke-request-dto.d.ts +1 -1
- package/dist/models/revoke-request-dto.js +1 -1
- package/dist/models/semo-contract-registered-response-dto.d.ts +1 -1
- package/dist/models/semo-contract-registered-response-dto.js +1 -1
- package/dist/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
- package/dist/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
- package/dist/models/send-webhook-test-event200-response.d.ts +1 -1
- package/dist/models/send-webhook-test-event200-response.js +1 -1
- package/dist/models/split-invoice-v1-response-dto.d.ts +1 -1
- package/dist/models/split-invoice-v1-response-dto.js +1 -1
- package/dist/models/statement-document-dto.d.ts +1 -1
- package/dist/models/statement-document-dto.js +1 -1
- package/dist/models/statement-product-dto.d.ts +1 -1
- package/dist/models/statement-product-dto.js +1 -1
- package/dist/models/statement-v1-document-dto.d.ts +1 -1
- package/dist/models/statement-v1-document-dto.js +1 -1
- package/dist/models/statement-v1-product-dto.d.ts +1 -1
- package/dist/models/statement-v1-product-dto.js +1 -1
- package/dist/models/submit-negotiation-scores-v1-request-dto.d.ts +1 -1
- package/dist/models/submit-negotiation-scores-v1-request-dto.js +1 -1
- package/dist/models/supplier-card-payable-response-dto.d.ts +1 -1
- package/dist/models/supplier-card-payable-response-dto.js +1 -1
- package/dist/models/supplier-tax-type.d.ts +1 -1
- package/dist/models/supplier-tax-type.js +1 -1
- package/dist/models/token-request-dto.d.ts +1 -1
- package/dist/models/token-request-dto.js +1 -1
- package/dist/models/token-response-dto.d.ts +1 -1
- package/dist/models/token-response-dto.js +1 -1
- package/dist/models/update-bid-request-dto.d.ts +1 -1
- package/dist/models/update-bid-request-dto.js +1 -1
- package/dist/models/update-bid200-response.d.ts +1 -1
- package/dist/models/update-bid200-response.js +1 -1
- package/dist/models/update-webhook-endpoint-request-dto.d.ts +1 -1
- package/dist/models/update-webhook-endpoint-request-dto.js +1 -1
- package/dist/models/upload-file-request-dto.d.ts +1 -1
- package/dist/models/upload-file-request-dto.js +1 -1
- package/dist/models/upload-file-v1-request-dto.d.ts +1 -1
- package/dist/models/upload-file-v1-request-dto.js +1 -1
- package/dist/models/upload-file201-response.d.ts +1 -1
- package/dist/models/upload-file201-response.js +1 -1
- package/dist/models/webhook-delivery-dto.d.ts +1 -1
- package/dist/models/webhook-delivery-dto.js +1 -1
- package/dist/models/webhook-endpoint-dto.d.ts +1 -1
- package/dist/models/webhook-endpoint-dto.js +1 -1
- package/dist/models/webhook-endpoint-with-secret-dto.d.ts +1 -1
- package/dist/models/webhook-endpoint-with-secret-dto.js +1 -1
- package/dist/models/webhook-test-result-dto.d.ts +1 -1
- package/dist/models/webhook-test-result-dto.js +1 -1
- package/docs/FileMetaResponseDto.md +1 -1
- package/docs/PartnerV2Api.md +5 -5
- package/index.ts +1 -1
- package/models/acceptance-result-response-dto.ts +1 -1
- package/models/acceptance-result-v1-response-dto.ts +1 -1
- package/models/acceptance-status-response-dto.ts +1 -1
- package/models/acknowledge-product-receipt200-response.ts +1 -1
- package/models/acknowledge-products-request-dto.ts +1 -1
- package/models/acknowledge-products-v1-request-dto.ts +1 -1
- package/models/authorization-server-metadata-dto.ts +1 -1
- package/models/award-method-public.ts +1 -1
- package/models/award-registered-response-dto.ts +1 -1
- package/models/award-registered-v2-response-dto.ts +1 -1
- package/models/award-reverted-v2-response-dto.ts +1 -1
- package/models/bid-attachment-v1-dto.ts +1 -1
- package/models/bid-bond-dto.ts +1 -1
- package/models/bid-bond-v1-dto.ts +1 -1
- package/models/bid-cancelled-response-dto.ts +1 -1
- package/models/bid-contact-dto.ts +1 -1
- package/models/bid-contacts-dto.ts +1 -1
- package/models/bid-contract-document-dto.ts +1 -1
- package/models/bid-contract-documents-batch-v1-request-dto.ts +1 -1
- package/models/bid-contract-documents-v1-response-dto.ts +1 -1
- package/models/bid-created-response-dto.ts +1 -1
- package/models/bid-delivery-terms-dto.ts +1 -1
- package/models/bid-detail-response-dto.ts +1 -1
- package/models/bid-document-dto.ts +1 -1
- package/models/bid-document-v1-dto.ts +1 -1
- package/models/bid-failed-response-dto.ts +1 -1
- package/models/bid-failed-v2-response-dto.ts +1 -1
- package/models/bid-failure-reason.ts +1 -1
- package/models/bid-item-dto.ts +1 -1
- package/models/bid-item-v1-dto.ts +1 -1
- package/models/bid-lifecycle-dto.ts +1 -1
- package/models/bid-manager-dto.ts +1 -1
- package/models/bid-manager-v1-dto.ts +1 -1
- package/models/bid-participant-summary-dto.ts +1 -1
- package/models/bid-payment-terms-dto.ts +1 -1
- package/models/bid-product-dto.ts +1 -1
- package/models/bid-public-status.ts +1 -1
- package/models/bid-published-response-dto.ts +1 -1
- package/models/bid-registered-response-dto.ts +1 -1
- package/models/bid-result-participant-attachment-dto.ts +1 -1
- package/models/bid-result-participant-dto.ts +1 -1
- package/models/bid-result-v1-attachment-dto.ts +1 -1
- package/models/bid-result-v1-bid-product-info-dto.ts +1 -1
- package/models/bid-result-v1-participant-dto.ts +1 -1
- package/models/bid-result-v1-product-dto.ts +1 -1
- package/models/bid-results-batch-request-dto.ts +1 -1
- package/models/bid-results-batch-v1-request-dto.ts +1 -1
- package/models/bid-results-response-dto.ts +1 -1
- package/models/bid-results-v1-response-dto.ts +1 -1
- package/models/bid-settlement-line-item-dto.ts +1 -1
- package/models/bid-settlement-participant-dto.ts +1 -1
- package/models/bid-settlement-response-dto.ts +1 -1
- package/models/bid-statement-response-dto.ts +1 -1
- package/models/bid-statement-v1-response-dto.ts +1 -1
- package/models/bid-status.ts +1 -1
- package/models/bid-summary-dto.ts +1 -1
- package/models/bid-updated-response-dto.ts +1 -1
- package/models/cancel-bid-request-dto.ts +1 -1
- package/models/cancel-bid200-response.ts +1 -1
- package/models/card-payment-request-response-dto.ts +1 -1
- package/models/complete-acceptance-request-dto.ts +1 -1
- package/models/complete-acceptance-v1-request-dto.ts +1 -1
- package/models/complete-acceptance200-response.ts +1 -1
- package/models/complete-invoice200-response.ts +1 -1
- package/models/contract-document-item-dto.ts +1 -1
- package/models/contract-documents-regenerated-response-dto.ts +1 -1
- package/models/contract-restriction-confirm-input-dto.ts +1 -1
- package/models/create-bid-request-dto.ts +1 -1
- package/models/create-bid-v1-request-dto.ts +1 -1
- package/models/create-card-payment-request-dto.ts +1 -1
- package/models/create-card-payment200-response.ts +1 -1
- package/models/create-external-contract-documents-request-dto.ts +1 -1
- package/models/create-external-contract-documents-response-dto.ts +1 -1
- package/models/create-webhook-endpoint-request-dto.ts +1 -1
- package/models/create-webhook-endpoint201-response.ts +1 -1
- package/models/external-contract-document-item-dto.ts +1 -1
- package/models/external-contract-documents-response-dto.ts +1 -1
- package/models/external-contract-item-dto.ts +1 -1
- package/models/external-contract-snapshot-dto.ts +1 -1
- package/models/external-document-inputs-dto.ts +1 -1
- package/models/file-meta-response-dto.ts +2 -2
- package/models/file-uploaded-response-dto.ts +1 -1
- package/models/file-uploaded-v1-response-dto.ts +1 -1
- package/models/generated-external-contract-document-dto.ts +1 -1
- package/models/get-bid-acceptance200-response.ts +1 -1
- package/models/get-bid-results200-response.ts +1 -1
- package/models/get-bid-settlement200-response.ts +1 -1
- package/models/get-bid-statement200-response.ts +1 -1
- package/models/get-bid200-response.ts +1 -1
- package/models/get-file-meta200-response.ts +1 -1
- package/models/get-supplier-card-payable-v2200-response.ts +1 -1
- package/models/get-webhook-endpoint200-response.ts +1 -1
- package/models/health-controller-check200-response.ts +1 -1
- package/models/health-response-dto.ts +1 -1
- package/models/hierarchical-region-dto.ts +1 -1
- package/models/hierarchical-region-v1-dto.ts +1 -1
- package/models/introspect-request-dto.ts +1 -1
- package/models/introspection-response-dto.ts +1 -1
- package/models/invalid-param-dto.ts +1 -1
- package/models/invoice-completed-response-dto.ts +1 -1
- package/models/list-bid-contract-documents200-response.ts +1 -1
- package/models/list-bid-participants200-response.ts +1 -1
- package/models/list-bid-results200-response.ts +1 -1
- package/models/list-bids-response-dto.ts +1 -1
- package/models/list-bids200-response.ts +1 -1
- package/models/list-products200-response.ts +1 -1
- package/models/list-webhook-deliveries-response-dto.ts +1 -1
- package/models/list-webhook-deliveries200-response.ts +1 -1
- package/models/list-webhook-endpoints200-response.ts +1 -1
- package/models/mark-bid-failed-request-dto.ts +1 -1
- package/models/mark-bid-failed-v1-request-dto.ts +1 -1
- package/models/mark-bid-failed201-response.ts +1 -1
- package/models/negotiation-score-v1-dto.ts +1 -1
- package/models/negotiation-scored-response-dto.ts +1 -1
- package/models/oauth-error-response-dto.ts +1 -1
- package/models/partner-webhook-delivery-status.ts +1 -1
- package/models/partner-webhook-endpoint-status.ts +1 -1
- package/models/partner-webhook-event-type.ts +1 -1
- package/models/preconditions-dto.ts +1 -1
- package/models/preconditions-v1-dto.ts +1 -1
- package/models/problem-details-dto.ts +1 -1
- package/models/product-receipt-response-dto.ts +1 -1
- package/models/product-receipt-v1-response-dto.ts +1 -1
- package/models/product-response-dto.ts +1 -1
- package/models/product-v1-response-dto.ts +1 -1
- package/models/protected-resource-metadata-dto.ts +1 -1
- package/models/publish-bid200-response.ts +1 -1
- package/models/regenerate-contract-documents201-response.ts +1 -1
- package/models/register-award-request-dto.ts +1 -1
- package/models/register-award-v1-request-dto.ts +1 -1
- package/models/register-award201-response.ts +1 -1
- package/models/register-bid201-response.ts +1 -1
- package/models/register-semo-contract-request-dto.ts +1 -1
- package/models/request-split-invoice-v1-request-dto.ts +1 -1
- package/models/retiree-roster-input-dto.ts +1 -1
- package/models/retiree-roster-row-dto.ts +1 -1
- package/models/revert-award-request-dto.ts +1 -1
- package/models/revert-award200-response.ts +1 -1
- package/models/revoke-request-dto.ts +1 -1
- package/models/semo-contract-registered-response-dto.ts +1 -1
- package/models/semo-contract-taxinvoice-status-response-dto.ts +1 -1
- package/models/send-webhook-test-event200-response.ts +1 -1
- package/models/split-invoice-v1-response-dto.ts +1 -1
- package/models/statement-document-dto.ts +1 -1
- package/models/statement-product-dto.ts +1 -1
- package/models/statement-v1-document-dto.ts +1 -1
- package/models/statement-v1-product-dto.ts +1 -1
- package/models/submit-negotiation-scores-v1-request-dto.ts +1 -1
- package/models/supplier-card-payable-response-dto.ts +1 -1
- package/models/supplier-tax-type.ts +1 -1
- package/models/token-request-dto.ts +1 -1
- package/models/token-response-dto.ts +1 -1
- package/models/update-bid-request-dto.ts +1 -1
- package/models/update-bid200-response.ts +1 -1
- package/models/update-webhook-endpoint-request-dto.ts +1 -1
- package/models/upload-file-request-dto.ts +1 -1
- package/models/upload-file-v1-request-dto.ts +1 -1
- package/models/upload-file201-response.ts +1 -1
- package/models/webhook-delivery-dto.ts +1 -1
- package/models/webhook-endpoint-dto.ts +1 -1
- package/models/webhook-endpoint-with-secret-dto.ts +1 -1
- package/models/webhook-test-result-dto.ts +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 31.1.
|
|
5
|
+
* The version of the OpenAPI document: 31.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 31.1.
|
|
8
|
+
* The version of the OpenAPI document: 31.1.1
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 31.1.
|
|
5
|
+
* The version of the OpenAPI document: 31.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 31.1.
|
|
8
|
+
* The version of the OpenAPI document: 31.1.1
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 31.1.
|
|
5
|
+
* The version of the OpenAPI document: 31.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 31.1.
|
|
8
|
+
* The version of the OpenAPI document: 31.1.1
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 31.1.
|
|
5
|
+
* The version of the OpenAPI document: 31.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 31.1.
|
|
8
|
+
* The version of the OpenAPI document: 31.1.1
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 31.1.
|
|
5
|
+
* The version of the OpenAPI document: 31.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 31.1.
|
|
8
|
+
* The version of the OpenAPI document: 31.1.1
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 31.1.
|
|
5
|
+
* The version of the OpenAPI document: 31.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 31.1.
|
|
8
|
+
* The version of the OpenAPI document: 31.1.1
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 31.1.
|
|
5
|
+
* The version of the OpenAPI document: 31.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 31.1.
|
|
8
|
+
* The version of the OpenAPI document: 31.1.1
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 31.1.
|
|
5
|
+
* The version of the OpenAPI document: 31.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 31.1.
|
|
8
|
+
* The version of the OpenAPI document: 31.1.1
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 31.1.
|
|
5
|
+
* The version of the OpenAPI document: 31.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 31.1.
|
|
8
|
+
* The version of the OpenAPI document: 31.1.1
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
Name | Type | Description | Notes
|
|
7
7
|
------------ | ------------- | ------------- | -------------
|
|
8
|
-
**fileKey** | **string** | νμΌ ν€(
|
|
8
|
+
**fileKey** | **string** | νμΌ ν€(μλ¬Έ λμλ¬ΈμΒ·μ«μ 32μ). μμ²ν κ°μ΄ μλλΌ μ μ₯μμ μ κ· ν€μ
λλ€. | [default to undefined]
|
|
9
9
|
**fileName** | **string** | μλ³Έ νμΌλͺ
. | [default to undefined]
|
|
10
10
|
**fileSize** | **number** | νμΌ ν¬κΈ°(λ°μ΄νΈ). | [default to undefined]
|
|
11
11
|
**uploadedAt** | **string** | μ
λ‘λ μΌμ(RFC 3339 UTC). | [default to undefined]
|
package/docs/PartnerV2Api.md
CHANGED
|
@@ -651,7 +651,7 @@ import {
|
|
|
651
651
|
const configuration = new Configuration();
|
|
652
652
|
const apiInstance = new PartnerV2Api(configuration);
|
|
653
653
|
|
|
654
|
-
let fileKey: string; //νμΌ ν€ β
|
|
654
|
+
let fileKey: string; //νμΌ ν€ β μλ¬Έ λμλ¬ΈμΒ·μ«μ 32μ. μ
λ‘λ(`POST /v1|/v2/files`) μλ΅μμ λ°μ κ°. 16μ§μ(hex)λ‘ κ°μ ν΄ ν΄λΌμ΄μΈνΈμμ κ±Έλ¬λ΄μ§ λ§μΈμ β μ
λ‘λλ νμΌμ ν€μλ hex κ° μλ λ¬Έμκ° λ€μ΄κ°λλ€. (default to undefined)
|
|
655
655
|
|
|
656
656
|
const { status, data } = await apiInstance.downloadFile(
|
|
657
657
|
fileKey
|
|
@@ -662,7 +662,7 @@ const { status, data } = await apiInstance.downloadFile(
|
|
|
662
662
|
|
|
663
663
|
|Name | Type | Description | Notes|
|
|
664
664
|
|------------- | ------------- | ------------- | -------------|
|
|
665
|
-
| **fileKey** | [**string**] | νμΌ ν€ β
|
|
665
|
+
| **fileKey** | [**string**] | νμΌ ν€ β μλ¬Έ λμλ¬ΈμΒ·μ«μ 32μ. μ
λ‘λ(`POST /v1|/v2/files`) μλ΅μμ λ°μ κ°. 16μ§μ(hex)λ‘ κ°μ ν΄ ν΄λΌμ΄μΈνΈμμ κ±Έλ¬λ΄μ§ λ§μΈμ β μ
λ‘λλ νμΌμ ν€μλ hex κ° μλ λ¬Έμκ° λ€μ΄κ°λλ€. | defaults to undefined|
|
|
666
666
|
|
|
667
667
|
|
|
668
668
|
### Return type
|
|
@@ -982,7 +982,7 @@ const { status, data } = await apiInstance.getBidStatement(
|
|
|
982
982
|
# **getFileMeta**
|
|
983
983
|
> GetFileMeta200Response getFileMeta()
|
|
984
984
|
|
|
985
|
-
νμΌλͺ
Β·ν¬κΈ°Β·μ
λ‘λ μκ°κ³Ό λ΄λ €λ°κΈ° μ£Όμλ₯Ό ν¨κ» μ‘°νν©λλ€. **λ΄λ €λ°κΈ°:** μλ΅μ `downloadUrl` λ‘ νμΌμ λ°μΌμΈμ. μμ² μμ μ μλͺ
νλ―λ‘ μ ν¨κΈ°κ°μ΄ μμ΅λλ€ β μ μ₯ν΄ λκ³ μ¬μ¬μ©νμ§ λ§μκ³ νμν λ μ΄ μ‘°νλ₯Ό λ€μ νΈμΆνμΈμ. **ꡬ κ²½λ‘:** λ²μ μλ `GET /files/{fileKey}` λ λ§λ£ μλ μμ μ£Όμμ΄κ³ ννΈλ μλ΅μ `fileUrl`/`fullUrl` μ΄ κ·Έ κ°μ κ°λ¦¬ν΅λλ€. μΈμ¦λ μ€μ½νλ μλ μ νλ©΄μ΄λΌ μ κ· μ°λμ μ΄ μλν¬μΈνΈλ₯Ό μ°μΈμ. ꡬ κ²½λ‘λ λΉλΆκ° μ μ§λ©λλ€. **MIME νμ
μ μ£μ§ μμ΅λλ€.** μ μ₯μκ° κ·Έ κ°μ μ λ’°ν μ μκ² λ³΄κ΄νμ§ μμμ, μ§μ΄λ΄λ©΄ κ·Έκ²μΌλ‘ λΆκΈ°ν μͺ½μ΄ μ‘°μ©ν ν립λλ€. νμ₯μλ `fileName` μ κ·Έλλ‘ λ€μ΄ μμ΅λλ€. **νμμ΄ νλ¦° ν€λ 404 κ° μλλΌ 400 μ
λλ€.**
|
|
985
|
+
νμΌλͺ
Β·ν¬κΈ°Β·μ
λ‘λ μκ°κ³Ό λ΄λ €λ°κΈ° μ£Όμλ₯Ό ν¨κ» μ‘°νν©λλ€. **λ΄λ €λ°κΈ°:** μλ΅μ `downloadUrl` λ‘ νμΌμ λ°μΌμΈμ. μμ² μμ μ μλͺ
νλ―λ‘ μ ν¨κΈ°κ°μ΄ μμ΅λλ€ β μ μ₯ν΄ λκ³ μ¬μ¬μ©νμ§ λ§μκ³ νμν λ μ΄ μ‘°νλ₯Ό λ€μ νΈμΆνμΈμ. **ꡬ κ²½λ‘:** λ²μ μλ `GET /files/{fileKey}` λ λ§λ£ μλ μμ μ£Όμμ΄κ³ ννΈλ μλ΅μ `fileUrl`/`fullUrl` μ΄ κ·Έ κ°μ κ°λ¦¬ν΅λλ€. μΈμ¦λ μ€μ½νλ μλ μ νλ©΄μ΄λΌ μ κ· μ°λμ μ΄ μλν¬μΈνΈλ₯Ό μ°μΈμ. ꡬ κ²½λ‘λ λΉλΆκ° μ μ§λ©λλ€. **MIME νμ
μ μ£μ§ μμ΅λλ€.** μ μ₯μκ° κ·Έ κ°μ μ λ’°ν μ μκ² λ³΄κ΄νμ§ μμμ, μ§μ΄λ΄λ©΄ κ·Έκ²μΌλ‘ λΆκΈ°ν μͺ½μ΄ μ‘°μ©ν ν립λλ€. νμ₯μλ `fileName` μ κ·Έλλ‘ λ€μ΄ μμ΅λλ€. **νμμ΄ νλ¦° ν€λ 404 κ° μλλΌ 400 μ
λλ€.** fileKey λ **μλ¬Έ λμλ¬ΈμΒ·μ«μ 32μ**μ΄κ³ , κ·Έ ννκ° μλ κ°μ μ μ΄μ ν€κ° λ μ μμΌλ―λ‘ κ·Έλ κ² λ΅ν©λλ€. νμμ λ§μ§λ§ μλ ν€λ 404 μ
λλ€. ν€λ₯Ό 16μ§μ(hex)λ‘ κ°μ ν΄ ν΄λΌμ΄μΈνΈμμ κ±Έλ¬λ΄μ§ λ§μΈμ β μ
λ‘λλ νμΌμ ν€μλ hex κ° μλ λ¬Έμκ° λ€μ΄κ°λλ€. **νμ μ€μ½ν:** `files:read`
|
|
986
986
|
|
|
987
987
|
### Example
|
|
988
988
|
|
|
@@ -995,7 +995,7 @@ import {
|
|
|
995
995
|
const configuration = new Configuration();
|
|
996
996
|
const apiInstance = new PartnerV2Api(configuration);
|
|
997
997
|
|
|
998
|
-
let fileKey: string; //νμΌ ν€ β μ
λ‘λ μλ΅μ fileKey(
|
|
998
|
+
let fileKey: string; //νμΌ ν€ β μ
λ‘λ μλ΅μ fileKey(μλ¬Έ λμλ¬ΈμΒ·μ«μ 32μ). (default to undefined)
|
|
999
999
|
|
|
1000
1000
|
const { status, data } = await apiInstance.getFileMeta(
|
|
1001
1001
|
fileKey
|
|
@@ -1006,7 +1006,7 @@ const { status, data } = await apiInstance.getFileMeta(
|
|
|
1006
1006
|
|
|
1007
1007
|
|Name | Type | Description | Notes|
|
|
1008
1008
|
|------------- | ------------- | ------------- | -------------|
|
|
1009
|
-
| **fileKey** | [**string**] | νμΌ ν€ β μ
λ‘λ μλ΅μ fileKey(
|
|
1009
|
+
| **fileKey** | [**string**] | νμΌ ν€ β μ
λ‘λ μλ΅μ fileKey(μλ¬Έ λμλ¬ΈμΒ·μ«μ 32μ). | defaults to undefined|
|
|
1010
1010
|
|
|
1011
1011
|
|
|
1012
1012
|
### Return type
|
package/index.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document: 31.1.
|
|
7
|
+
* The version of the OpenAPI document: 31.1.1
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document: 31.1.
|
|
7
|
+
* The version of the OpenAPI document: 31.1.1
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document: 31.1.
|
|
7
|
+
* The version of the OpenAPI document: 31.1.1
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document: 31.1.
|
|
7
|
+
* The version of the OpenAPI document: 31.1.1
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## λ μ΄νΈ λ¦¬λ° μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document: 31.1.
|
|
7
|
+
* The version of the OpenAPI document: 31.1.1
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|