@cmarket/partner-sdk 32.0.0 β 33.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -14
- package/api/oauth-api.ts +1 -1
- package/api/partner-v1-api.ts +1 -1
- package/api/partner-v2-api.ts +1 -298
- package/api/webhooks-api.ts +1 -1
- 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 +1 -133
- package/dist/api/partner-v2-api.js +1 -278
- package/dist/api/webhooks-api.d.ts +1 -1
- package/dist/api/webhooks-api.js +1 -1
- 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 +1 -133
- package/dist/esm/api/partner-v2-api.js +1 -278
- package/dist/esm/api/webhooks-api.d.ts +1 -1
- package/dist/esm/api/webhooks-api.js +1 -1
- 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/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/api-catalog-dto.d.ts +1 -1
- package/dist/esm/models/api-catalog-dto.js +1 -1
- package/dist/esm/models/api-catalog-entry-dto.d.ts +1 -1
- package/dist/esm/models/api-catalog-entry-dto.js +1 -1
- package/dist/esm/models/api-catalog-link-dto.d.ts +1 -1
- package/dist/esm/models/api-catalog-link-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-acceptance-dto.d.ts +1 -1
- package/dist/esm/models/bid-acceptance-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-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-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 +1 -1
- 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-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/index.d.ts +0 -6
- package/dist/esm/models/index.js +0 -6
- 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-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/on-bid-award-reverted-request.d.ts +1 -1
- package/dist/esm/models/on-bid-award-reverted-request.js +1 -1
- package/dist/esm/models/on-bid-awarded-request.d.ts +1 -1
- package/dist/esm/models/on-bid-awarded-request.js +1 -1
- package/dist/esm/models/on-bid-canceled-request.d.ts +1 -1
- package/dist/esm/models/on-bid-canceled-request.js +1 -1
- package/dist/esm/models/on-bid-closed-request.d.ts +1 -1
- package/dist/esm/models/on-bid-closed-request.js +1 -1
- package/dist/esm/models/on-bid-failed-request.d.ts +1 -1
- package/dist/esm/models/on-bid-failed-request.js +1 -1
- package/dist/esm/models/on-ping-request.d.ts +1 -1
- package/dist/esm/models/on-ping-request.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-bid-event-data.d.ts +1 -1
- package/dist/esm/models/webhook-bid-event-data.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-event-envelope.d.ts +1 -1
- package/dist/esm/models/webhook-event-envelope.js +1 -1
- package/dist/esm/models/webhook-ping-event-data.d.ts +1 -1
- package/dist/esm/models/webhook-ping-event-data.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/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/api-catalog-dto.d.ts +1 -1
- package/dist/models/api-catalog-dto.js +1 -1
- package/dist/models/api-catalog-entry-dto.d.ts +1 -1
- package/dist/models/api-catalog-entry-dto.js +1 -1
- package/dist/models/api-catalog-link-dto.d.ts +1 -1
- package/dist/models/api-catalog-link-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-acceptance-dto.d.ts +1 -1
- package/dist/models/bid-acceptance-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-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-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 +1 -1
- 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-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/index.d.ts +0 -6
- package/dist/models/index.js +0 -6
- 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-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/on-bid-award-reverted-request.d.ts +1 -1
- package/dist/models/on-bid-award-reverted-request.js +1 -1
- package/dist/models/on-bid-awarded-request.d.ts +1 -1
- package/dist/models/on-bid-awarded-request.js +1 -1
- package/dist/models/on-bid-canceled-request.d.ts +1 -1
- package/dist/models/on-bid-canceled-request.js +1 -1
- package/dist/models/on-bid-closed-request.d.ts +1 -1
- package/dist/models/on-bid-closed-request.js +1 -1
- package/dist/models/on-bid-failed-request.d.ts +1 -1
- package/dist/models/on-bid-failed-request.js +1 -1
- package/dist/models/on-ping-request.d.ts +1 -1
- package/dist/models/on-ping-request.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-bid-event-data.d.ts +1 -1
- package/dist/models/webhook-bid-event-data.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-event-envelope.d.ts +1 -1
- package/dist/models/webhook-event-envelope.js +1 -1
- package/dist/models/webhook-ping-event-data.d.ts +1 -1
- package/dist/models/webhook-ping-event-data.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/PartnerV2Api.md +0 -237
- 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/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/api-catalog-dto.ts +1 -1
- package/models/api-catalog-entry-dto.ts +1 -1
- package/models/api-catalog-link-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-acceptance-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-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-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 +1 -1
- 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-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/index.ts +0 -6
- 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-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/on-bid-award-reverted-request.ts +1 -1
- package/models/on-bid-awarded-request.ts +1 -1
- package/models/on-bid-canceled-request.ts +1 -1
- package/models/on-bid-closed-request.ts +1 -1
- package/models/on-bid-failed-request.ts +1 -1
- package/models/on-ping-request.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-bid-event-data.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-event-envelope.ts +1 -1
- package/models/webhook-ping-event-data.ts +1 -1
- package/models/webhook-test-result-dto.ts +1 -1
- package/package.json +1 -1
- package/dist/esm/models/acceptance-status-response-dto.d.ts +0 -33
- package/dist/esm/models/acceptance-status-response-dto.js +0 -14
- package/dist/esm/models/bid-participant-summary-dto.d.ts +0 -29
- package/dist/esm/models/bid-participant-summary-dto.js +0 -14
- package/dist/esm/models/bid-results-batch-request-dto.d.ts +0 -17
- package/dist/esm/models/bid-results-batch-request-dto.js +0 -14
- package/dist/esm/models/get-bid-acceptance200-response.d.ts +0 -21
- package/dist/esm/models/get-bid-acceptance200-response.js +0 -14
- package/dist/esm/models/list-bid-contract-documents200-response.d.ts +0 -21
- package/dist/esm/models/list-bid-contract-documents200-response.js +0 -14
- package/dist/esm/models/list-bid-participants200-response.d.ts +0 -21
- package/dist/esm/models/list-bid-participants200-response.js +0 -14
- package/dist/models/acceptance-status-response-dto.d.ts +0 -33
- package/dist/models/acceptance-status-response-dto.js +0 -15
- package/dist/models/bid-participant-summary-dto.d.ts +0 -29
- package/dist/models/bid-participant-summary-dto.js +0 -15
- package/dist/models/bid-results-batch-request-dto.d.ts +0 -17
- package/dist/models/bid-results-batch-request-dto.js +0 -15
- package/dist/models/get-bid-acceptance200-response.d.ts +0 -21
- package/dist/models/get-bid-acceptance200-response.js +0 -15
- package/dist/models/list-bid-contract-documents200-response.d.ts +0 -21
- package/dist/models/list-bid-contract-documents200-response.js +0 -15
- package/dist/models/list-bid-participants200-response.d.ts +0 -21
- package/dist/models/list-bid-participants200-response.js +0 -15
- package/docs/AcceptanceStatusResponseDto.md +0 -28
- package/docs/BidParticipantSummaryDto.md +0 -26
- package/docs/BidResultsBatchRequestDto.md +0 -20
- package/docs/GetBidAcceptance200Response.md +0 -22
- package/docs/ListBidContractDocuments200Response.md +0 -22
- package/docs/ListBidParticipants200Response.md +0 -22
- package/models/acceptance-status-response-dto.ts +0 -39
- package/models/bid-participant-summary-dto.ts +0 -35
- package/models/bid-results-batch-request-dto.ts +0 -23
- package/models/get-bid-acceptance200-response.ts +0 -27
- package/models/list-bid-contract-documents200-response.ts +0 -27
- package/models/list-bid-participants200-response.ts +0 -27
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document:
|
|
7
|
+
* The version of the OpenAPI document: 33.0.0
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
package/package.json
CHANGED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CMARKET V6 Partner API
|
|
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 λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
4
|
-
*
|
|
5
|
-
* The version of the OpenAPI document: 32.0.0
|
|
6
|
-
* Contact: semo.io.kr@gmail.com
|
|
7
|
-
*
|
|
8
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
9
|
-
* https://openapi-generator.tech
|
|
10
|
-
* Do not edit the class manually.
|
|
11
|
-
*/
|
|
12
|
-
export interface AcceptanceStatusResponseDto {
|
|
13
|
-
/**
|
|
14
|
-
* κ³΅κ³ ID(= backend bidId).
|
|
15
|
-
*/
|
|
16
|
-
'bidId': string;
|
|
17
|
-
/**
|
|
18
|
-
* λμ°° 곡κΈμ¬κ° λ©ν(κ²°κ³ΌνμΈ)μ λ³΄κ³ νλμ§ μ¬λΆμ
λλ€. λμ°°μκ° μμΌλ©΄ false μ
λλ€.
|
|
19
|
-
*/
|
|
20
|
-
'delivered': boolean;
|
|
21
|
-
/**
|
|
22
|
-
* λ°μ£ΌκΈ°κ΄μ΄ κ²μλ₯Ό νμΈνλμ§ μ¬λΆμ
λλ€.
|
|
23
|
-
*/
|
|
24
|
-
'confirmed': boolean;
|
|
25
|
-
/**
|
|
26
|
-
* κ²μ νμΈ μΌμ(RFC 3339 UTC). νμΈ μ μ΄λ©΄ null μ
λλ€.
|
|
27
|
-
*/
|
|
28
|
-
'confirmedAt': string | null;
|
|
29
|
-
/**
|
|
30
|
-
* κ²μμλ£ μ μ‘μ΄ μμ₯μ λ°μλ μκ°(RFC 3339 UTC)μ
λλ€. κ²μμλ£ μ μ‘ μ μ΄λ©΄ null μ
λλ€.
|
|
31
|
-
*/
|
|
32
|
-
'contractCompletedAt': string | null;
|
|
33
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/* tslint:disable */
|
|
2
|
-
/* eslint-disable */
|
|
3
|
-
/**
|
|
4
|
-
* CMARKET V6 Partner API
|
|
5
|
-
* μΈλΆ ERP μ°λμ© RESTful API. ## λ²μ λ³ μΈμ¦ - **_/v2** β OAuth2 Bearer JWT (`client_credentials` νλ‘μ°). `/oauth/token` μμ ν ν° λ°κΈ ν `Authorization: Bearer <token>` ν€λ. - **_/v1** β V5 μΆ©μ€ platform-auth. `X-Platform-Id`(cate_set.api_id) / `X-Platform-Secret`(cate_set.api_secret, MD5-hex) ν€λλ‘ μ μ‘. ## κΆν β λ κ°μ λ
립λ μΆ `403` μ λ§λ¬λ€λ©΄ λ μ€ μ΄λ μΆμ κ±Έλ¦° κ²μΈμ§ λ¨Όμ ꡬλΆν κ². - **μ€μ½ν** = *무μμ ν μ μλ*. ν ν°μ λΆμ¬λ `bids:read`Β·`contracts:write` λ±. 미보μ μ `β¦/insufficient-scope`. - **λν λ²μ** = *λꡬμ λ°μ΄ν°λ₯Ό λ€λ£° μ μλ*. API ν€ μ€μ μ΄λ©° μ€μ½νλ‘ ννλμ§ μλλ€. λ²μ λ°μ΄λ©΄ μ€μ½νμ 무κ΄νκ² 403 μ΄λ€. λν λ²μλ ν€λ§λ€ λ μ€ νλλ‘ μ€μ λλ€ β **μμ κ·Έλ£Ή μ μ**(κΈ°κ΄ ν€. μ¬μ
μ²Β·λΆμ κ³μ μ΄ μλ‘ μ겨λ μλ ν¬ν¨) λλ **μ§μ λ°μ£Όμ² λͺ©λ‘**(κ³μ½μΌλ‘ ν©μλ λͺ©λ‘). λ²μλ₯Ό λνμΌ νλ©΄ μ€μ½νκ° μλλΌ ν€ μ€μ λ³κ²½μ μμ²ν κ². ## μ±κ³΅ μλ΅ λ΄ν¬ `/v2` μ λͺ¨λ 2xx λ³Έλ¬Έμ `{ \"data\": β¦ }` μ
λλ€. λ¨μΌ 리μμ€λ λͺ©λ‘μ΄λ κ°μ΅λλ€. λͺ©λ‘μ²λΌ λΆκ° μ λ³΄κ° μλ μλ΅μ `meta` κ° ν¨κ» μ€λ¦½λλ€ β μ: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"β¦\" } }`. λΆκ° μ λ³΄κ° μμΌλ©΄ `meta` ν€λ μμ λκ°μ§ μμ΅λλ€(λΉ κ°μ²΄λ₯Ό μ£μ§ μμ΅λλ€). λ΄ν¬λ₯Ό μ°μ§ μλ νλ©΄μ μ
μ
λλ€. `/oauth/_*` μ `/.well-known/_*` λ κ°κ° RFC 6749Β·RFC 8414Β·RFC 9728 μ΄ μ΅μμ νλλ₯Ό κ·μ νκ³ , `/v1/_*` μ λκ²°λ λ κ±°μ νλ©΄μ΄λ©°, νμΌ λ΄μ© μλ΅μ λ³Έλ¬Έμ΄ JSON μ΄ μλλλ€. μλ¬ μλ΅μλ λ΄ν¬λ₯Ό μμ°μ§ μμ΅λλ€ β μλ problem+json μ΄ λ¨λ
μΌλ‘ μ±
μμ§λλ€. ## μ‘°κ±΄λΆ μμ² (ETag) `/v2` μ λͺ¨λ `GET` μλ΅μ weak `ETag`(`W/\"β¦\"`)κ° μ€λ¦½λλ€. λ°μ κ°μ λ€μ μμ²μ `If-None-Match` ν€λλ‘ λ보λ΄λ©΄, λ΄μ©μ΄ κ·Έλλ‘μΌ λ `304 Not Modified` λ₯Ό λ³Έλ¬Έ μμ΄ λ°μ΅λλ€. κ²°κ³Όκ° λκΈ°λ₯Ό κΈ°λ€λ¦¬λ©° κ°μ μμμ λ°λ³΅ μ‘°ννλ μ°λμ΄λΌλ©΄ μ΄ ν€λ νλλ‘ μ μ‘λμ΄ μ¬λΌμ§λλ€. νΈμΆ νμ μ체λ₯Ό μ€μ΄λ €λ©΄ μΉν
μ μ¬μ©νμΈμ. ## μλ¬ (RFC 9457 problem+json) λͺ¨λ μλ¬ μλ΅μ `application/problem+json`. μλΉμλ **HTTP status + `type` URI** λ‘ λΆκΈ°νλ€. - `retryable`(boolean): μλ μ¬μλ μμ μ¬λΆ. `true`(429Β·5xx transient)λ©΄ backoff ν μ¬μλ, `false`λ©΄ μμ²μ κ³ μ³μΌ νλ€. - `traceId`: μμ² μΆμ id. `X-Correlation-Id` μλ΅ ν€λμ κ°μ κ°μ
λλ€ β λ¬Έμν λ μ΄ κ°μ 첨λΆνμΈμ. - `correlationId`: `traceId` μ κ°μ κ°μ μ μ΄λ¦. κΈ°μ‘΄ μ°λ νΈνμΌλ‘ ν¨κ» μ€λ¦½λλ€. μ μ°λμ `traceId` λ₯Ό μ½μΌμΈμ. - `invalid-params`: κ²μ¦ μ€ν¨(400 `β¦/validation-failed`) μ μλ° νλ κ²½λ‘ λͺ©λ‘(RFC 9457 νμ₯, κ° μμ). `type` μ `https://problems.cmarket.io/partner/<slug>` ννμ **μμ μλ³μ**λ€. RFC 9457 Β§3.1.1 μ΄ νμ©νλ λλ‘ μ΄ URI λ **μμ°Έμ‘°(dereference)λμ§ μλλ€** β λΈλΌμ°μ λ‘ μ΄μ§ λ§κ³ λ¬Έμμ΄ λΉκ΅λ‘λ§ μΈ κ². slug λͺ©λ‘κ³Ό μλ―Έλ κ° μλν¬μΈνΈμ μλ΅ μ€λͺ
μ status λ³λ‘ λͺ
μλΌ μλ€. μ slug μ μΆκ°λ μ μμΌλ―λ‘, λͺ¨λ₯΄λ slug μ λ§λλ©΄ `type` μ΄ μλλΌ **HTTP status λ‘ ν΄λ°±**νλλ‘ κ΅¬νν κ². ### λ©±λ±μ± μλ°: 409 μ 422 μ μ°¨μ΄ - `409` `β¦/idempotency-key-conflict` β κ°μ ν€μ **μ μμ²μ΄ μμ§ μ²λ¦¬ μ€**μ΄λ€. μ μ λ€ κ°μ ν€λ‘ λ€μ λΆλ₯΄λ©΄ κ·Έ κ²°κ³Όλ₯Ό λ°λλ€. - `422` `β¦/idempotency-key-reused` β κ°μ ν€λ₯Ό **λ€λ₯Έ body** λ‘ λ³΄λλ€. μ¬μλν΄λ μμν κ°μ μ€ν¨λ€. μ ν€λ₯Ό μ°κ±°λ body λ₯Ό λλ릴 κ². ## Rate Limit μ μ **60 μμ²/λΆ per `client_id`**, ν ν° λ°κΈ(`/oauth/token`)μ **5 μμ²/λΆ**. μ΄κ³Ό μ `429`(`type: β¦/too-many-requests`). μΏΌν°λ λ κ°μ§ νκΈ°λ‘ ν¨κ» λκ°λ€ β μ κ· μ°λμ νμ€ νλλ₯Ό μΈ κ². - **νμ€**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (μ μ±
) Β· `RateLimit: \"default\";r=59;t=42` (μλ r, 리μ
κΉμ§ t μ΄) - **λ κ±°μ**(κ΄μ©): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. κΈ°μ‘΄ μ°λ νΈνμ μν΄ μ μ§νλ€. `429` μμλ `Retry-After`(μ΄)κ° μ°μ νλ€. λλ λκΈ°ν(νλͺ© λ¨μ λ°λ³΅ λ±λ‘ λ±)λ `Retry-After` λ§νΌ backoff ν μ¬μλν κ². ## μΆμ μμ²μ `X-Correlation-Id` ν€λλ₯Ό μ€μΌλ©΄ κ·Έλλ‘ echo λκ³ , μμΌλ©΄ μλ²κ° λ°κΈνλ€. λͺ¨λ μλ΅(μ±κ³΅/μλ¬)μ `X-Correlation-Id` κ° μ€λ¦°λ€. ## λ²μ μλͺ
(deprecation/sunset) - **_/v1** μ λ κ±°μ V5 cutover μλ£ μμ κΉμ§ μ μ§λλ μΆ©μ€ νλ‘μμ
λλ€. νμ§ μΌμ μ΄ μ ν΄μ§λ©΄ /v1 μλ΅μ ν€λ μΈ κ°κ° μ€λ¦½λλ€ β `Deprecation`(RFC 9745, `@<epochμ΄>`) Β· `Sunset`(RFC 8594, HTTP-date) Β· `Link`(RFC 8288, `rel=\"deprecation\"`/`rel=\"sunset\"` β μ΄μ μλ΄ λ¬Έμλ₯Ό κ°λ¦¬ν΅λλ€). μΌμ μ΄ μ ν΄μ§κΈ° μ μλ μ
λ€ λκ°μ§ μμ΅λλ€. μ’
λ£μΌμ΄ μ§λ λ€μ νΈμΆμ `404` κ° μλλΌ **`410 Gone`** κ³Ό `type: β¦/endpoint-sunset` μΌλ‘ κ±°μ λ©λλ€. λμ λ»μ΄ λ€λ¦
λλ€ β `404` λ \"κ·Έλ° κ²μ΄ μμλμ§ λͺ¨λ₯΄κ² λ€\", `410` μ \"μμκ³ μλμ μΌλ‘ μμ΄λ€\" μ
λλ€. `410` μ λ°μΌλ©΄ κ²½λ‘ μ€νλ₯Ό μμ¬νμ§ λ§κ³ /v2 λ‘ μ΄μ νμΈμ. - **_/v2** breaking λ³κ²½μ CHANGELOG SemVer(major bump)μ `Deprecation`/`Sunset` ν€λλ‘ ν΅μ§νλ€. μλΉμλ μ΄ ν€λλ₯Ό λͺ¨λν°λ§ν κ².
|
|
6
|
-
*
|
|
7
|
-
* The version of the OpenAPI document: 32.0.0
|
|
8
|
-
* Contact: semo.io.kr@gmail.com
|
|
9
|
-
*
|
|
10
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
11
|
-
* https://openapi-generator.tech
|
|
12
|
-
* Do not edit the class manually.
|
|
13
|
-
*/
|
|
14
|
-
export {};
|