From 73383cc466511ba5ab74146a3cec55d8af87dacc Mon Sep 17 00:00:00 2001 From: Shahed Nasser Date: Fri, 5 Aug 2022 15:06:12 +0300 Subject: [PATCH] chore(docs): Refactor API Reference (#1883) --- .github/workflows/generate-api-reference.yml | 51 + .github/workflows/generate-js-reference.yml | 6 +- .github/workflows/generate-reference.yml | 6 +- .github/workflows/oas-test.yml | 34 + .gitignore | 2 +- docs/api/admin-spec3-base.json | 107 +- docs/api/admin-spec3.json | 12225 +++++++++++----- docs/api/admin-spec3.yaml | 8296 ++++++++--- docs/api/admin/components/schemas/OAuth.yaml | 32 + .../api/admin/components/schemas/address.yaml | 82 + .../admin/components/schemas/batch_job.yaml | 139 + docs/api/admin/components/schemas/cart.yaml | 174 + .../admin/components/schemas/claim_image.yaml | 38 + .../admin/components/schemas/claim_item.yaml | 83 + .../admin/components/schemas/claim_order.yaml | 121 + .../admin/components/schemas/claim_tag.yaml | 33 + .../api/admin/components/schemas/country.yaml | 53 + .../admin/components/schemas/currency.yaml | 28 + .../schemas/custom_shipping_option.yaml | 53 + .../admin/components/schemas/customer.yaml | 72 + .../components/schemas/customer_group.yaml | 46 + .../admin/components/schemas/discount.yaml | 91 + .../schemas/discount_condition.yaml | 92 + .../discount_condition_customer_group.yaml | 34 + .../schemas/discount_condition_product.yaml | 34 + ...discount_condition_product_collection.yaml | 34 + .../discount_condition_product_tag.yaml | 34 + .../discount_condition_product_type.yaml | 34 + .../components/schemas/discount_rule.yaml | 66 + .../admin/components/schemas/draft-order.yaml | 71 + .../admin/components/schemas/fulfillment.yaml | 117 + .../components/schemas/fulfillment_item.yaml | 28 + .../schemas/fulfillment_provider.yaml | 15 + .../admin/components/schemas/gift_card.yaml | 70 + .../schemas/gift_card_transaction.yaml | 43 + .../components/schemas/idempotency_key.yaml | 55 + docs/api/admin/components/schemas/image.yaml | 31 + docs/api/admin/components/schemas/invite.yaml | 50 + .../admin/components/schemas/line_item.yaml | 172 + .../schemas/line_item_adjustment.yaml | 39 + .../schemas/line_item_tax_line.yaml | 44 + .../components/schemas/money_amount.yaml | 84 + docs/api/admin/components/schemas/note.yaml | 50 + .../components/schemas/notification.yaml | 67 + .../schemas/notification_provider.yaml | 17 + .../schemas/notification_resend.yaml | 61 + docs/api/admin/components/schemas/order.yaml | 268 + .../api/admin/components/schemas/payment.yaml | 96 + .../components/schemas/payment_provider.yaml | 17 + .../components/schemas/payment_session.yaml | 74 + .../admin/components/schemas/price_list.yaml | 70 + .../api/admin/components/schemas/product.yaml | 188 + .../schemas/product_collection.yaml | 45 + .../components/schemas/product_option.yaml | 49 + .../schemas/product_option_value.yaml | 54 + .../admin/components/schemas/product_tag.yaml | 31 + .../components/schemas/product_tax_rate.yaml | 36 + .../components/schemas/product_type.yaml | 31 + .../schemas/product_type_tax_rate.yaml | 36 + .../components/schemas/product_variant.yaml | 149 + docs/api/admin/components/schemas/refund.yaml | 64 + docs/api/admin/components/schemas/region.yaml | 102 + docs/api/admin/components/schemas/return.yaml | 98 + .../admin/components/schemas/return_item.yaml | 57 + .../components/schemas/return_reason.yaml | 52 + .../components/schemas/sales_channel.yaml | 34 + .../schemas/sales_channel_tax_line.yaml | 44 + .../components/schemas/shipping_method.yaml | 76 + .../components/schemas/shipping_option.yaml | 103 + .../schemas/shipping_option_requirement.yaml | 43 + .../components/schemas/shipping_profile.yaml | 62 + .../components/schemas/shipping_tax_rate.yaml | 36 + .../admin/components/schemas/staged_job.yaml | 18 + docs/api/admin/components/schemas/store.yaml | 59 + docs/api/admin/components/schemas/swap.yaml | 149 + .../admin/components/schemas/tax_line.yaml | 36 + .../components/schemas/tax_provider.yaml | 15 + .../admin/components/schemas/tax_rate.yaml | 81 + .../components/schemas/tracking_link.yaml | 55 + docs/api/admin/components/schemas/user.yaml | 43 + docs/api/admin/openapi.yaml | 353 + .../admin/paths/admin_draft-orders_{id}.yaml | 67 + docs/api/admin/paths/apps.yaml | 18 + docs/api/admin/paths/apps_authorizations.yaml | 34 + docs/api/admin/paths/auth.yaml | 62 + docs/api/admin/paths/batch-jobs.yaml | 318 + docs/api/admin/paths/batch-jobs_{id}.yaml | 23 + .../admin/paths/batch-jobs_{id}_cancel.yaml | 23 + .../admin/paths/batch-jobs_{id}_confirm.yaml | 23 + docs/api/admin/paths/collections.yaml | 157 + docs/api/admin/paths/collections_{id}.yaml | 96 + .../collections_{id}_products_batch.yaml | 83 + docs/api/admin/paths/customer-groups.yaml | 170 + .../api/admin/paths/customer-groups_{id}.yaml | 99 + .../paths/customer-groups_{id}_customers.yaml | 34 + .../customer-groups_{id}_customers_batch.yaml | 80 + docs/api/admin/paths/customers.yaml | 98 + docs/api/admin/paths/customers_{id}.yaml | 103 + docs/api/admin/paths/discounts.yaml | 250 + .../admin/paths/discounts_code_{code}.yaml | 33 + .../discounts_{discount_id}_conditions.yaml | 86 + ...iscount_id}_conditions_{condition_id}.yaml | 176 + docs/api/admin/paths/discounts_{id}.yaml | 221 + .../paths/discounts_{id}_dynamic-codes.yaml | 45 + .../discounts_{id}_dynamic-codes_{code}.yaml | 29 + .../discounts_{id}_regions_{region_id}.yaml | 58 + docs/api/admin/paths/draft-orders.yaml | 162 + docs/api/admin/paths/draft-orders_{id}.yaml | 55 + .../paths/draft-orders_{id}_line-items.yaml | 48 + ...raft-orders_{id}_line-items_{line_id}.yaml | 77 + .../admin/paths/draft-orders_{id}_pay.yaml | 23 + docs/api/admin/paths/gift-cards.yaml | 90 + docs/api/admin/paths/gift-cards_{id}.yaml | 105 + docs/api/admin/paths/invites.yaml | 47 + docs/api/admin/paths/invites_accept.yaml | 38 + docs/api/admin/paths/invites_{invite_id}.yaml | 32 + .../paths/invites_{invite_id}_resend.yaml | 17 + docs/api/admin/paths/notes.yaml | 79 + docs/api/admin/paths/notes_{id}.yaml | 88 + docs/api/admin/paths/notifications.yaml | 72 + .../paths/notifications_{id}_resend.yaml | 35 + docs/api/admin/paths/order_{id}_claims.yaml | 144 + .../paths/order_{id}_claims_{claim_id}.yaml | 120 + docs/api/admin/paths/order_{id}_swaps.yaml | 107 + docs/api/admin/paths/orders.yaml | 241 + docs/api/admin/paths/orders_{id}.yaml | 114 + docs/api/admin/paths/orders_{id}_archive.yaml | 23 + docs/api/admin/paths/orders_{id}_cancel.yaml | 26 + docs/api/admin/paths/orders_{id}_capture.yaml | 23 + .../orders_{id}_claims_{claim_id}_cancel.yaml | 29 + ...s_{id}_claims_{claim_id}_fulfillments.yaml | 44 + ..._fulfillments_{fulfillment_id}_cancel.yaml | 35 + ...ders_{id}_claims_{claim_id}_shipments.yaml | 44 + .../api/admin/paths/orders_{id}_complete.yaml | 23 + .../admin/paths/orders_{id}_fulfillment.yaml | 56 + ..._fulfillments_{fulfillment_id}_cancel.yaml | 29 + docs/api/admin/paths/orders_{id}_refund.yaml | 45 + docs/api/admin/paths/orders_{id}_return.yaml | 82 + .../api/admin/paths/orders_{id}_shipment.yaml | 43 + .../paths/orders_{id}_shipping-methods.yaml | 49 + .../orders_{id}_swaps_{swap_id}_cancel.yaml | 29 + ...ers_{id}_swaps_{swap_id}_fulfillments.yaml | 44 + ..._fulfillments_{fulfillment_id}_cancel.yaml | 35 + ..._{id}_swaps_{swap_id}_process-payment.yaml | 32 + ...orders_{id}_swaps_{swap_id}_shipments.yaml | 49 + docs/api/admin/paths/price-lists.yaml | 263 + .../admin/paths/price-lists_:id_products.yaml | 194 + docs/api/admin/paths/price-lists_{id}.yaml | 155 + .../paths/price-lists_{id}_prices_batch.yaml | 115 + ...sts_{id}_products_{product_id}_prices.yaml | 42 + ...sts_{id}_variants_{variant_id}_prices.yaml | 42 + docs/api/admin/paths/product-tags.yaml | 110 + docs/api/admin/paths/product-types.yaml | 110 + docs/api/admin/paths/products.yaml | 469 + docs/api/admin/paths/products_tag-usage.yaml | 27 + docs/api/admin/paths/products_types.yaml | 18 + docs/api/admin/paths/products_{id}.yaml | 297 + .../admin/paths/products_{id}_metadata.yaml | 37 + .../admin/paths/products_{id}_options.yaml | 33 + .../products_{id}_options_{option_id}.yaml | 82 + .../admin/paths/products_{id}_variants.yaml | 188 + .../products_{id}_variants_{variant_id}.yaml | 171 + docs/api/admin/paths/regions.yaml | 132 + docs/api/admin/paths/regions_{id}.yaml | 135 + .../admin/paths/regions_{id}_countries.yaml | 37 + ...regions_{id}_countries_{country_code}.yaml | 32 + .../regions_{id}_fulfillment-options.yaml | 35 + .../regions_{id}_fulfillment-providers.yaml | 33 + ...}_fulfillment-providers_{provider_id}.yaml | 29 + .../paths/regions_{id}_payment-providers.yaml | 33 + ..._{id}_payment-providers_{provider_id}.yaml | 29 + docs/api/admin/paths/return-reasons.yaml | 59 + docs/api/admin/paths/return-reasons_{id}.yaml | 97 + docs/api/admin/paths/returns.yaml | 39 + docs/api/admin/paths/returns_{id}_cancel.yaml | 22 + .../api/admin/paths/returns_{id}_receive.yaml | 48 + docs/api/admin/paths/sales-channels.yaml | 177 + docs/api/admin/paths/sales-channels_{id}.yaml | 92 + .../sales-channels_{id}_products_batch.yaml | 82 + docs/api/admin/paths/shipping-options.yaml | 124 + .../admin/paths/shipping-options_{id}.yaml | 119 + docs/api/admin/paths/shipping-profiles.yaml | 44 + .../admin/paths/shipping-profiles_{id}.yaml | 85 + docs/api/admin/paths/store.yaml | 69 + .../admin/paths/store_currencies_{code}.yaml | 52 + .../admin/paths/store_payment-providers.yaml | 18 + docs/api/admin/paths/store_tax-providers.yaml | 18 + docs/api/admin/paths/swaps.yaml | 40 + docs/api/admin/paths/swaps_{id}.yaml | 23 + docs/api/admin/paths/tax-rates.yaml | 172 + docs/api/admin/paths/tax-rates_:id.yaml | 102 + .../tax-rates_:id_product-types_batch.yaml | 96 + .../paths/tax-rates_:id_products_batch.yaml | 94 + .../tax-rates_:id_shipping-options_batch.yaml | 96 + docs/api/admin/paths/tax-rates_{id}.yaml | 32 + docs/api/admin/paths/uploads.yaml | 32 + docs/api/admin/paths/users.yaml | 63 + .../api/admin/paths/users_password-token.yaml | 21 + .../api/admin/paths/users_reset-password.yaml | 35 + docs/api/admin/paths/users_{id}.yaml | 102 + docs/api/admin/paths/variants.yaml | 45 + docs/api/store-spec3-base.json | 42 +- docs/api/store-spec3.json | 5439 +++++-- docs/api/store-spec3.yaml | 4893 +++++-- docs/api/store/components/schemas/OAuth.yaml | 32 + .../api/store/components/schemas/address.yaml | 82 + .../store/components/schemas/batch_job.yaml | 139 + docs/api/store/components/schemas/cart.yaml | 174 + .../store/components/schemas/claim_image.yaml | 38 + .../store/components/schemas/claim_item.yaml | 83 + .../store/components/schemas/claim_order.yaml | 121 + .../store/components/schemas/claim_tag.yaml | 33 + .../api/store/components/schemas/country.yaml | 53 + .../store/components/schemas/currency.yaml | 28 + .../schemas/custom_shipping_option.yaml | 53 + .../store/components/schemas/customer.yaml | 72 + .../components/schemas/customer_group.yaml | 46 + .../store/components/schemas/discount.yaml | 91 + .../schemas/discount_condition.yaml | 92 + .../discount_condition_customer_group.yaml | 34 + .../schemas/discount_condition_product.yaml | 34 + ...discount_condition_product_collection.yaml | 34 + .../discount_condition_product_tag.yaml | 34 + .../discount_condition_product_type.yaml | 34 + .../components/schemas/discount_rule.yaml | 66 + .../store/components/schemas/draft-order.yaml | 71 + .../store/components/schemas/fulfillment.yaml | 117 + .../components/schemas/fulfillment_item.yaml | 28 + .../schemas/fulfillment_provider.yaml | 15 + .../store/components/schemas/gift_card.yaml | 70 + .../schemas/gift_card_transaction.yaml | 43 + .../components/schemas/idempotency_key.yaml | 55 + docs/api/store/components/schemas/image.yaml | 31 + docs/api/store/components/schemas/invite.yaml | 50 + .../store/components/schemas/line_item.yaml | 172 + .../schemas/line_item_adjustment.yaml | 39 + .../schemas/line_item_tax_line.yaml | 44 + .../components/schemas/money_amount.yaml | 84 + docs/api/store/components/schemas/note.yaml | 50 + .../components/schemas/notification.yaml | 67 + .../schemas/notification_provider.yaml | 17 + .../schemas/notification_resend.yaml | 61 + docs/api/store/components/schemas/order.yaml | 268 + .../api/store/components/schemas/payment.yaml | 96 + .../components/schemas/payment_provider.yaml | 17 + .../components/schemas/payment_session.yaml | 74 + .../store/components/schemas/price_list.yaml | 70 + .../api/store/components/schemas/product.yaml | 188 + .../schemas/product_collection.yaml | 45 + .../components/schemas/product_option.yaml | 49 + .../schemas/product_option_value.yaml | 54 + .../store/components/schemas/product_tag.yaml | 31 + .../components/schemas/product_tax_rate.yaml | 36 + .../components/schemas/product_type.yaml | 31 + .../schemas/product_type_tax_rate.yaml | 36 + .../components/schemas/product_variant.yaml | 149 + docs/api/store/components/schemas/refund.yaml | 64 + docs/api/store/components/schemas/region.yaml | 102 + docs/api/store/components/schemas/return.yaml | 98 + .../store/components/schemas/return_item.yaml | 57 + .../components/schemas/return_reason.yaml | 52 + .../components/schemas/sales_channel.yaml | 34 + .../schemas/sales_channel_tax_line.yaml | 44 + .../components/schemas/shipping_method.yaml | 76 + .../components/schemas/shipping_option.yaml | 103 + .../schemas/shipping_option_requirement.yaml | 43 + .../components/schemas/shipping_profile.yaml | 62 + .../components/schemas/shipping_tax_rate.yaml | 36 + .../store/components/schemas/staged_job.yaml | 18 + docs/api/store/components/schemas/store.yaml | 59 + docs/api/store/components/schemas/swap.yaml | 149 + .../store/components/schemas/tax_line.yaml | 36 + .../components/schemas/tax_provider.yaml | 15 + .../store/components/schemas/tax_rate.yaml | 81 + .../components/schemas/tracking_link.yaml | 55 + docs/api/store/components/schemas/user.yaml | 43 + docs/api/store/endpoints/carts.yaml | 349 - docs/api/store/endpoints/customers.yaml | 226 - docs/api/store/endpoints/orders.yaml | 137 - .../api/store/endpoints/product-variants.yaml | 61 - docs/api/store/endpoints/products.yaml | 56 - docs/api/store/endpoints/regions.yaml | 58 - .../api/store/endpoints/shipping-options.yaml | 53 - docs/api/store/endpoints/swaps.yaml | 56 - docs/api/store/openapi.yaml | 138 + docs/api/store/paths/auth.yaml | 60 + docs/api/store/paths/auth_{email}.yaml | 24 + docs/api/store/paths/carts.yaml | 65 + docs/api/store/paths/carts_{id}.yaml | 109 + docs/api/store/paths/carts_{id}_complete.yaml | 64 + .../paths/carts_{id}_discounts_{code}.yaml | 28 + .../store/paths/carts_{id}_line-items.yaml | 42 + .../carts_{id}_line-items_{line_id}.yaml | 67 + .../paths/carts_{id}_payment-session.yaml | 35 + .../paths/carts_{id}_payment-sessions.yaml | 24 + ...s_{id}_payment-sessions_{provider_id}.yaml | 69 + ...ayment-sessions_{provider_id}_refresh.yaml | 32 + .../paths/carts_{id}_shipping-methods.yaml | 40 + docs/api/store/paths/carts_{id}_taxes.yaml | 24 + docs/api/store/paths/collections.yaml | 85 + docs/api/store/paths/collections_{id}.yaml | 22 + docs/api/store/paths/customers.yaml | 63 + docs/api/store/paths/customers_me.yaml | 64 + .../store/paths/customers_me_addresses.yaml | 27 + .../customers_me_addresses_{address_id}.yaml | 52 + docs/api/store/paths/customers_me_orders.yaml | 54 + .../paths/customers_me_payment-methods.yaml | 31 + .../store/paths/customers_password-reset.yaml | 37 + .../store/paths/customers_password-token.yaml | 23 + docs/api/store/paths/gift-cards_{code}.yaml | 22 + docs/api/store/paths/orders.yaml | 42 + .../store/paths/orders_cart_{cart_id}.yaml | 22 + docs/api/store/paths/orders_{id}.yaml | 22 + docs/api/store/paths/products.yaml | 158 + docs/api/store/paths/products_search.yaml | 35 + docs/api/store/paths/products_{id}.yaml | 22 + docs/api/store/paths/regions.yaml | 74 + docs/api/store/paths/regions_{id}.yaml | 22 + docs/api/store/paths/return-reasons.yaml | 17 + docs/api/store/paths/return-reasons_{id}.yaml | 22 + docs/api/store/paths/returns.yaml | 60 + docs/api/store/paths/shipping-options.yaml | 35 + .../paths/shipping-options_{cart_id}.yaml | 24 + docs/api/store/paths/swaps.yaml | 68 + docs/api/store/paths/swaps_{cart_id}.yaml | 22 + docs/api/store/paths/variants.yaml | 77 + .../store/paths/variants_{variant_id}.yaml | 42 + package.json | 2 + .../src/models/restock-notification.ts | 4 +- .../api/routes/admin/apps/authorize-app.ts | 6 +- .../medusa/src/api/routes/admin/apps/list.ts | 8 +- .../api/routes/admin/auth/create-session.ts | 27 +- .../api/routes/admin/auth/delete-session.ts | 2 +- .../src/api/routes/admin/auth/get-session.ts | 4 +- .../routes/admin/batch/cancel-batch-job.ts | 2 +- .../routes/admin/batch/confirm-batch-job.ts | 5 +- .../routes/admin/batch/create-batch-job.ts | 46 +- .../api/routes/admin/batch/get-batch-job.ts | 2 +- .../api/routes/admin/batch/list-batch-jobs.ts | 234 +- .../routes/admin/collections/add-products.ts | 19 +- .../admin/collections/delete-collection.ts | 10 +- .../admin/collections/get-collection.ts | 7 +- .../admin/collections/list-collections.ts | 98 +- .../admin/collections/remove-products.ts | 30 +- .../admin/collections/update-collection.ts | 6 +- .../customer-groups/add-customers-batch.ts | 35 +- .../customer-groups/create-customer-group.ts | 7 +- .../customer-groups/delete-customer-group.ts | 12 +- .../customer-groups/delete-customers-batch.ts | 35 +- .../get-customer-group-customers.ts | 24 +- .../customer-groups/get-customer-group.ts | 9 +- .../customer-groups/list-customer-groups.ts | 116 +- .../customer-groups/update-customer-group.ts | 25 +- .../routes/admin/customers/create-customer.ts | 39 +- .../routes/admin/customers/get-customer.ts | 6 +- .../routes/admin/customers/list-customers.ts | 27 +- .../routes/admin/customers/update-customer.ts | 25 +- .../api/routes/admin/discounts/add-region.ts | 6 +- .../admin/discounts/create-condition.ts | 62 +- .../routes/admin/discounts/create-discount.ts | 102 +- .../admin/discounts/create-dynamic-code.ts | 8 +- .../admin/discounts/delete-condition.ts | 22 +- .../routes/admin/discounts/delete-discount.ts | 7 +- .../admin/discounts/delete-dynamic-code.ts | 5 +- .../routes/admin/discounts/get-condition.ts | 17 +- .../admin/discounts/get-discount-by-code.ts | 3 + .../routes/admin/discounts/get-discount.ts | 8 +- .../routes/admin/discounts/list-discounts.ts | 41 +- .../routes/admin/discounts/remove-region.ts | 8 +- .../admin/discounts/update-condition.ts | 63 +- .../routes/admin/discounts/update-discount.ts | 93 +- .../admin/draft-orders/create-draft-order.ts | 35 +- .../admin/draft-orders/create-line-item.ts | 27 +- .../admin/draft-orders/delete-draft-order.ts | 7 +- .../admin/draft-orders/delete-line-item.ts | 12 +- .../admin/draft-orders/get-draft-order.ts | 17 +- .../admin/draft-orders/list-draft-orders.ts | 33 +- .../admin/draft-orders/register-payment.ts | 7 +- .../admin/draft-orders/update-draft-order.ts | 41 +- .../admin/draft-orders/update-line-item.ts | 11 +- .../admin/gift-cards/create-gift-card.ts | 11 +- .../admin/gift-cards/delete-gift-card.ts | 7 +- .../routes/admin/gift-cards/get-gift-card.ts | 2 +- .../admin/gift-cards/list-gift-cards.ts | 18 +- .../admin/gift-cards/update-gift-card.ts | 11 +- .../api/routes/admin/invites/accept-invite.ts | 6 +- .../api/routes/admin/invites/create-invite.ts | 7 +- .../api/routes/admin/invites/delete-invite.ts | 21 +- .../api/routes/admin/invites/list-invites.ts | 2 +- .../api/routes/admin/invites/resend-invite.ts | 4 +- .../src/api/routes/admin/notes/create-note.ts | 7 +- .../src/api/routes/admin/notes/delete-note.ts | 11 +- .../src/api/routes/admin/notes/get-note.ts | 2 +- .../src/api/routes/admin/notes/list-notes.ts | 23 +- .../src/api/routes/admin/notes/update-note.ts | 2 +- .../admin/notifications/list-notifications.ts | 23 +- .../notifications/resend-notification.ts | 15 +- .../admin/orders/add-shipping-method.ts | 7 +- .../api/routes/admin/orders/archive-order.ts | 2 +- .../api/routes/admin/orders/cancel-claim.ts | 11 +- .../admin/orders/cancel-fulfillment-claim.ts | 15 +- .../admin/orders/cancel-fulfillment-swap.ts | 15 +- .../routes/admin/orders/cancel-fulfillment.ts | 13 +- .../api/routes/admin/orders/cancel-order.ts | 3 +- .../api/routes/admin/orders/cancel-swap.ts | 11 +- .../routes/admin/orders/capture-payment.ts | 5 +- .../api/routes/admin/orders/complete-order.ts | 2 +- .../admin/orders/create-claim-shipment.ts | 11 +- .../api/routes/admin/orders/create-claim.ts | 44 +- .../routes/admin/orders/create-fulfillment.ts | 19 +- .../routes/admin/orders/create-shipment.ts | 14 +- .../admin/orders/create-swap-shipment.ts | 14 +- .../api/routes/admin/orders/create-swap.ts | 54 +- .../api/routes/admin/orders/fulfill-claim.ts | 14 +- .../api/routes/admin/orders/fulfill-swap.ts | 12 +- .../src/api/routes/admin/orders/get-order.ts | 2 +- .../api/routes/admin/orders/list-orders.ts | 164 +- .../admin/orders/process-swap-payment.ts | 11 +- .../api/routes/admin/orders/refund-payment.ts | 9 +- .../api/routes/admin/orders/request-return.ts | 33 +- .../api/routes/admin/orders/update-claim.ts | 53 +- .../api/routes/admin/orders/update-order.ts | 39 +- .../admin/price-lists/add-prices-batch.ts | 90 +- .../admin/price-lists/create-price-list.ts | 103 +- .../admin/price-lists/delete-price-list.ts | 9 +- .../admin/price-lists/delete-prices-batch.ts | 32 +- .../price-lists/delete-product-prices.ts | 26 +- .../price-lists/delete-variant-prices.ts | 26 +- .../admin/price-lists/get-price-list.ts | 3 +- .../price-lists/list-price-list-products.ts | 149 +- .../admin/price-lists/list-price-lists.ts | 115 +- .../admin/price-lists/update-price-list.ts | 100 +- .../admin/product-tags/list-product-tags.ts | 108 +- .../admin/product-types/list-product-types.ts | 112 +- .../api/routes/admin/products/add-option.ts | 7 +- .../routes/admin/products/create-product.ts | 89 +- .../routes/admin/products/create-variant.ts | 37 +- .../routes/admin/products/delete-option.ts | 14 +- .../routes/admin/products/delete-product.ts | 9 +- .../routes/admin/products/delete-variant.ts | 18 +- .../api/routes/admin/products/get-product.ts | 4 +- .../routes/admin/products/list-products.ts | 175 +- .../admin/products/list-tag-usage-count.ts | 29 + .../routes/admin/products/list-variants.ts | 26 +- .../api/routes/admin/products/set-metadata.ts | 5 +- .../routes/admin/products/update-option.ts | 11 +- .../routes/admin/products/update-product.ts | 95 +- .../routes/admin/products/update-variant.ts | 35 +- .../api/routes/admin/regions/add-country.ts | 13 +- .../admin/regions/add-fulfillment-provider.ts | 16 +- .../admin/regions/add-payment-provider.ts | 15 +- .../api/routes/admin/regions/create-region.ts | 29 +- .../api/routes/admin/regions/delete-region.ts | 9 +- .../admin/regions/get-fulfillment-options.ts | 18 +- .../api/routes/admin/regions/get-region.ts | 5 +- .../api/routes/admin/regions/list-regions.ts | 34 +- .../routes/admin/regions/remove-country.ts | 17 +- .../regions/remove-fulfillment-provider.ts | 9 +- .../admin/regions/remove-payment-provider.ts | 9 +- .../api/routes/admin/regions/update-region.ts | 20 +- .../admin/return-reasons/create-reason.ts | 5 +- .../admin/return-reasons/delete-reason.ts | 9 +- .../routes/admin/return-reasons/get-reason.ts | 3 +- .../admin/return-reasons/update-reason.ts | 6 +- .../api/routes/admin/returns/cancel-return.ts | 4 +- .../api/routes/admin/returns/list-returns.ts | 16 +- .../routes/admin/returns/receive-return.ts | 14 +- .../admin/sales-channels/add-product-batch.ts | 30 +- .../sales-channels/create-sales-channel.ts | 27 +- .../sales-channels/delete-products-batch.ts | 28 +- .../sales-channels/delete-sales-channel.ts | 10 +- .../admin/sales-channels/get-sales-channel.ts | 3 +- .../sales-channels/list-sales-channels.ts | 110 +- .../sales-channels/update-sales-channel.ts | 7 +- .../create-shipping-option.ts | 20 +- .../delete-shipping-option.ts | 7 +- .../shipping-options/get-shipping-option.ts | 2 +- .../shipping-options/list-shipping-options.ts | 21 +- .../update-shipping-option.ts | 13 +- .../delete-shipping-profile.ts | 9 +- .../shipping-profiles/get-shipping-profile.ts | 3 +- .../update-shipping-profile.ts | 5 +- .../api/routes/admin/store/add-currency.ts | 10 +- .../admin/store/list-payment-providers.ts | 2 +- .../routes/admin/store/list-tax-providers.ts | 2 +- .../api/routes/admin/store/remove-currency.ts | 10 +- .../api/routes/admin/store/update-store.ts | 14 +- .../src/api/routes/admin/swaps/get-swap.ts | 3 +- .../src/api/routes/admin/swaps/list-swaps.ts | 16 +- .../admin/tax-rates/add-to-product-types.ts | 39 +- .../routes/admin/tax-rates/add-to-products.ts | 39 +- .../tax-rates/add-to-shipping-options.ts | 41 +- .../routes/admin/tax-rates/create-tax-rate.ts | 73 +- .../routes/admin/tax-rates/delete-tax-rate.ts | 11 +- .../routes/admin/tax-rates/get-tax-rate.ts | 27 +- .../routes/admin/tax-rates/list-tax-rates.ts | 92 +- .../tax-rates/remove-from-product-types.ts | 39 +- .../admin/tax-rates/remove-from-products.ts | 39 +- .../tax-rates/remove-from-shipping-options.ts | 39 +- .../routes/admin/tax-rates/update-tax-rate.ts | 67 +- .../api/routes/admin/uploads/create-upload.ts | 27 +- .../api/routes/admin/uploads/delete-upload.ts | 27 +- .../routes/admin/uploads/get-download-url.ts | 12 +- .../src/api/routes/admin/users/create-user.ts | 8 +- .../src/api/routes/admin/users/delete-user.ts | 11 +- .../src/api/routes/admin/users/get-user.ts | 4 +- .../src/api/routes/admin/users/list-users.ts | 2 +- .../admin/users/reset-password-token.ts | 3 +- .../api/routes/admin/users/reset-password.ts | 12 +- .../src/api/routes/admin/users/update-user.ts | 35 +- .../routes/admin/variants/list-variants.ts | 18 +- .../src/api/routes/store/auth/exists.ts | 9 +- .../src/api/routes/store/auth/get-session.ts | 2 + .../routes/store/carts/add-shipping-method.ts | 11 +- .../api/routes/store/carts/calculate-taxes.ts | 15 +- .../api/routes/store/carts/complete-cart.ts | 43 +- .../src/api/routes/store/carts/create-cart.ts | 33 +- .../routes/store/carts/set-payment-session.ts | 11 +- .../src/api/routes/store/carts/update-cart.ts | 32 +- .../store/collections/list-collections.ts | 68 +- .../routes/store/customers/create-address.ts | 4 +- .../routes/store/customers/create-customer.ts | 55 +- .../routes/store/customers/delete-address.ts | 3 +- .../api/routes/store/customers/list-orders.ts | 35 +- .../store/customers/reset-password-token.ts | 15 +- .../routes/store/customers/reset-password.ts | 27 +- .../routes/store/customers/update-address.ts | 10 +- .../routes/store/customers/update-customer.ts | 6 +- .../routes/store/gift-cards/get-gift-card.ts | 13 +- .../routes/store/orders/get-order-by-cart.ts | 3 +- .../src/api/routes/store/orders/get-order.ts | 7 +- .../api/routes/store/orders/lookup-order.ts | 26 +- .../routes/store/products/list-products.ts | 138 +- .../src/api/routes/store/products/search.ts | 28 +- .../api/routes/store/regions/list-regions.ts | 63 +- .../api/routes/store/returns/create-return.ts | 33 +- .../src/api/routes/store/swaps/create-swap.ts | 27 +- .../api/routes/store/variants/get-variant.ts | 19 +- .../routes/store/variants/list-variants.ts | 56 +- packages/medusa/src/models/address.ts | 62 +- packages/medusa/src/models/batch-job.ts | 110 +- packages/medusa/src/models/cart.ts | 105 +- packages/medusa/src/models/claim-image.ts | 19 +- packages/medusa/src/models/claim-item.ts | 38 +- packages/medusa/src/models/claim-order.ts | 46 +- packages/medusa/src/models/claim-tag.ts | 20 +- packages/medusa/src/models/country.ts | 65 +- packages/medusa/src/models/currency.ts | 12 + .../src/models/custom-shipping-option.ts | 41 +- packages/medusa/src/models/customer-group.ts | 48 +- packages/medusa/src/models/customer.ts | 48 +- .../discount-condition-customer-group.ts | 27 +- .../discount-condition-product-collection.ts | 27 +- .../models/discount-condition-product-tag.ts | 27 +- .../models/discount-condition-product-type.ts | 27 +- .../src/models/discount-condition-product.ts | 27 +- .../medusa/src/models/discount-condition.ts | 64 +- packages/medusa/src/models/discount-rule.ts | 27 +- packages/medusa/src/models/discount.ts | 46 +- packages/medusa/src/models/draft-order.ts | 58 +- .../medusa/src/models/fulfillment-item.ts | 15 +- .../medusa/src/models/fulfillment-provider.ts | 2 + packages/medusa/src/models/fulfillment.ts | 63 +- .../src/models/gift-card-transaction.ts | 31 +- packages/medusa/src/models/gift-card.ts | 37 +- packages/medusa/src/models/idempotency-key.ts | 55 + packages/medusa/src/models/image.ts | 20 +- packages/medusa/src/models/invite.ts | 57 +- .../medusa/src/models/line-item-adjustment.ts | 49 +- .../medusa/src/models/line-item-tax-line.ts | 49 +- packages/medusa/src/models/line-item.ts | 131 +- packages/medusa/src/models/money-amount.ts | 48 +- packages/medusa/src/models/note.ts | 39 +- .../src/models/notification-provider.ts | 4 + packages/medusa/src/models/notification.ts | 70 +- packages/medusa/src/models/oauth.ts | 37 + packages/medusa/src/models/order.ts | 248 +- .../medusa/src/models/payment-provider.ts | 4 + packages/medusa/src/models/payment-session.ts | 30 +- packages/medusa/src/models/payment.ts | 60 +- packages/medusa/src/models/price-list.ts | 47 +- .../medusa/src/models/product-collection.ts | 23 +- .../medusa/src/models/product-option-value.ts | 32 +- packages/medusa/src/models/product-option.ts | 26 +- packages/medusa/src/models/product-tag.ts | 20 +- .../medusa/src/models/product-tax-rate.ts | 34 +- .../src/models/product-type-tax-rate.ts | 24 +- packages/medusa/src/models/product-type.ts | 20 +- packages/medusa/src/models/product-variant.ts | 58 +- packages/medusa/src/models/product.ts | 119 +- packages/medusa/src/models/refund.ts | 35 +- packages/medusa/src/models/region.ts | 66 +- packages/medusa/src/models/return-item.ts | 36 +- packages/medusa/src/models/return-reason.ts | 33 +- packages/medusa/src/models/return.ts | 62 +- packages/medusa/src/models/sales-channel.ts | 40 +- .../src/models/shipping-method-tax-line.ts | 49 +- packages/medusa/src/models/shipping-method.ts | 49 +- .../src/models/shipping-option-requirement.ts | 19 +- packages/medusa/src/models/shipping-option.ts | 49 +- .../medusa/src/models/shipping-profile.ts | 31 +- .../medusa/src/models/shipping-tax-rate.ts | 26 +- packages/medusa/src/models/staged-job.ts | 23 + packages/medusa/src/models/store.ts | 54 +- packages/medusa/src/models/swap.ts | 91 +- packages/medusa/src/models/tax-line.ts | 18 +- packages/medusa/src/models/tax-provider.ts | 2 + packages/medusa/src/models/tax-rate.ts | 61 +- packages/medusa/src/models/tracking-link.ts | 29 +- packages/medusa/src/models/user.ts | 24 +- scripts/build-openapi.js | 16 + www/docs/.yarn/install-state.gz | Bin 1382538 -> 1539862 bytes www/docs/docusaurus.config.js | 66 +- www/docs/package.json | 1 + www/docs/src/components/Banner/Banner.js | 56 - .../src/components/Banner/banner.module.css | 18 - www/docs/src/components/Banner/index.js | 1 - www/docs/src/components/Layout/Layout.js | 3 +- www/docs/src/components/Tabs/tabs.module.css | 1 - www/docs/src/css/custom.css | 11 +- www/docs/src/theme/DocCard/index.js | 1 + www/docs/src/theme/Redoc/index.js | 62 + www/docs/src/theme/SearchPage/index.js | 1 + www/docs/yarn.lock | 882 +- yarn.lock | 166 +- 625 files changed, 52358 insertions(+), 11660 deletions(-) create mode 100644 .github/workflows/generate-api-reference.yml create mode 100644 .github/workflows/oas-test.yml create mode 100644 docs/api/admin/components/schemas/OAuth.yaml create mode 100644 docs/api/admin/components/schemas/address.yaml create mode 100644 docs/api/admin/components/schemas/batch_job.yaml create mode 100644 docs/api/admin/components/schemas/cart.yaml create mode 100644 docs/api/admin/components/schemas/claim_image.yaml create mode 100644 docs/api/admin/components/schemas/claim_item.yaml create mode 100644 docs/api/admin/components/schemas/claim_order.yaml create mode 100644 docs/api/admin/components/schemas/claim_tag.yaml create mode 100644 docs/api/admin/components/schemas/country.yaml create mode 100644 docs/api/admin/components/schemas/currency.yaml create mode 100644 docs/api/admin/components/schemas/custom_shipping_option.yaml create mode 100644 docs/api/admin/components/schemas/customer.yaml create mode 100644 docs/api/admin/components/schemas/customer_group.yaml create mode 100644 docs/api/admin/components/schemas/discount.yaml create mode 100644 docs/api/admin/components/schemas/discount_condition.yaml create mode 100644 docs/api/admin/components/schemas/discount_condition_customer_group.yaml create mode 100644 docs/api/admin/components/schemas/discount_condition_product.yaml create mode 100644 docs/api/admin/components/schemas/discount_condition_product_collection.yaml create mode 100644 docs/api/admin/components/schemas/discount_condition_product_tag.yaml create mode 100644 docs/api/admin/components/schemas/discount_condition_product_type.yaml create mode 100644 docs/api/admin/components/schemas/discount_rule.yaml create mode 100644 docs/api/admin/components/schemas/draft-order.yaml create mode 100644 docs/api/admin/components/schemas/fulfillment.yaml create mode 100644 docs/api/admin/components/schemas/fulfillment_item.yaml create mode 100644 docs/api/admin/components/schemas/fulfillment_provider.yaml create mode 100644 docs/api/admin/components/schemas/gift_card.yaml create mode 100644 docs/api/admin/components/schemas/gift_card_transaction.yaml create mode 100644 docs/api/admin/components/schemas/idempotency_key.yaml create mode 100644 docs/api/admin/components/schemas/image.yaml create mode 100644 docs/api/admin/components/schemas/invite.yaml create mode 100644 docs/api/admin/components/schemas/line_item.yaml create mode 100644 docs/api/admin/components/schemas/line_item_adjustment.yaml create mode 100644 docs/api/admin/components/schemas/line_item_tax_line.yaml create mode 100644 docs/api/admin/components/schemas/money_amount.yaml create mode 100644 docs/api/admin/components/schemas/note.yaml create mode 100644 docs/api/admin/components/schemas/notification.yaml create mode 100644 docs/api/admin/components/schemas/notification_provider.yaml create mode 100644 docs/api/admin/components/schemas/notification_resend.yaml create mode 100644 docs/api/admin/components/schemas/order.yaml create mode 100644 docs/api/admin/components/schemas/payment.yaml create mode 100644 docs/api/admin/components/schemas/payment_provider.yaml create mode 100644 docs/api/admin/components/schemas/payment_session.yaml create mode 100644 docs/api/admin/components/schemas/price_list.yaml create mode 100644 docs/api/admin/components/schemas/product.yaml create mode 100644 docs/api/admin/components/schemas/product_collection.yaml create mode 100644 docs/api/admin/components/schemas/product_option.yaml create mode 100644 docs/api/admin/components/schemas/product_option_value.yaml create mode 100644 docs/api/admin/components/schemas/product_tag.yaml create mode 100644 docs/api/admin/components/schemas/product_tax_rate.yaml create mode 100644 docs/api/admin/components/schemas/product_type.yaml create mode 100644 docs/api/admin/components/schemas/product_type_tax_rate.yaml create mode 100644 docs/api/admin/components/schemas/product_variant.yaml create mode 100644 docs/api/admin/components/schemas/refund.yaml create mode 100644 docs/api/admin/components/schemas/region.yaml create mode 100644 docs/api/admin/components/schemas/return.yaml create mode 100644 docs/api/admin/components/schemas/return_item.yaml create mode 100644 docs/api/admin/components/schemas/return_reason.yaml create mode 100644 docs/api/admin/components/schemas/sales_channel.yaml create mode 100644 docs/api/admin/components/schemas/sales_channel_tax_line.yaml create mode 100644 docs/api/admin/components/schemas/shipping_method.yaml create mode 100644 docs/api/admin/components/schemas/shipping_option.yaml create mode 100644 docs/api/admin/components/schemas/shipping_option_requirement.yaml create mode 100644 docs/api/admin/components/schemas/shipping_profile.yaml create mode 100644 docs/api/admin/components/schemas/shipping_tax_rate.yaml create mode 100644 docs/api/admin/components/schemas/staged_job.yaml create mode 100644 docs/api/admin/components/schemas/store.yaml create mode 100644 docs/api/admin/components/schemas/swap.yaml create mode 100644 docs/api/admin/components/schemas/tax_line.yaml create mode 100644 docs/api/admin/components/schemas/tax_provider.yaml create mode 100644 docs/api/admin/components/schemas/tax_rate.yaml create mode 100644 docs/api/admin/components/schemas/tracking_link.yaml create mode 100644 docs/api/admin/components/schemas/user.yaml create mode 100644 docs/api/admin/openapi.yaml create mode 100644 docs/api/admin/paths/admin_draft-orders_{id}.yaml create mode 100644 docs/api/admin/paths/apps.yaml create mode 100644 docs/api/admin/paths/apps_authorizations.yaml create mode 100644 docs/api/admin/paths/auth.yaml create mode 100644 docs/api/admin/paths/batch-jobs.yaml create mode 100644 docs/api/admin/paths/batch-jobs_{id}.yaml create mode 100644 docs/api/admin/paths/batch-jobs_{id}_cancel.yaml create mode 100644 docs/api/admin/paths/batch-jobs_{id}_confirm.yaml create mode 100644 docs/api/admin/paths/collections.yaml create mode 100644 docs/api/admin/paths/collections_{id}.yaml create mode 100644 docs/api/admin/paths/collections_{id}_products_batch.yaml create mode 100644 docs/api/admin/paths/customer-groups.yaml create mode 100644 docs/api/admin/paths/customer-groups_{id}.yaml create mode 100644 docs/api/admin/paths/customer-groups_{id}_customers.yaml create mode 100644 docs/api/admin/paths/customer-groups_{id}_customers_batch.yaml create mode 100644 docs/api/admin/paths/customers.yaml create mode 100644 docs/api/admin/paths/customers_{id}.yaml create mode 100644 docs/api/admin/paths/discounts.yaml create mode 100644 docs/api/admin/paths/discounts_code_{code}.yaml create mode 100644 docs/api/admin/paths/discounts_{discount_id}_conditions.yaml create mode 100644 docs/api/admin/paths/discounts_{discount_id}_conditions_{condition_id}.yaml create mode 100644 docs/api/admin/paths/discounts_{id}.yaml create mode 100644 docs/api/admin/paths/discounts_{id}_dynamic-codes.yaml create mode 100644 docs/api/admin/paths/discounts_{id}_dynamic-codes_{code}.yaml create mode 100644 docs/api/admin/paths/discounts_{id}_regions_{region_id}.yaml create mode 100644 docs/api/admin/paths/draft-orders.yaml create mode 100644 docs/api/admin/paths/draft-orders_{id}.yaml create mode 100644 docs/api/admin/paths/draft-orders_{id}_line-items.yaml create mode 100644 docs/api/admin/paths/draft-orders_{id}_line-items_{line_id}.yaml create mode 100644 docs/api/admin/paths/draft-orders_{id}_pay.yaml create mode 100644 docs/api/admin/paths/gift-cards.yaml create mode 100644 docs/api/admin/paths/gift-cards_{id}.yaml create mode 100644 docs/api/admin/paths/invites.yaml create mode 100644 docs/api/admin/paths/invites_accept.yaml create mode 100644 docs/api/admin/paths/invites_{invite_id}.yaml create mode 100644 docs/api/admin/paths/invites_{invite_id}_resend.yaml create mode 100644 docs/api/admin/paths/notes.yaml create mode 100644 docs/api/admin/paths/notes_{id}.yaml create mode 100644 docs/api/admin/paths/notifications.yaml create mode 100644 docs/api/admin/paths/notifications_{id}_resend.yaml create mode 100644 docs/api/admin/paths/order_{id}_claims.yaml create mode 100644 docs/api/admin/paths/order_{id}_claims_{claim_id}.yaml create mode 100644 docs/api/admin/paths/order_{id}_swaps.yaml create mode 100644 docs/api/admin/paths/orders.yaml create mode 100644 docs/api/admin/paths/orders_{id}.yaml create mode 100644 docs/api/admin/paths/orders_{id}_archive.yaml create mode 100644 docs/api/admin/paths/orders_{id}_cancel.yaml create mode 100644 docs/api/admin/paths/orders_{id}_capture.yaml create mode 100644 docs/api/admin/paths/orders_{id}_claims_{claim_id}_cancel.yaml create mode 100644 docs/api/admin/paths/orders_{id}_claims_{claim_id}_fulfillments.yaml create mode 100644 docs/api/admin/paths/orders_{id}_claims_{claim_id}_fulfillments_{fulfillment_id}_cancel.yaml create mode 100644 docs/api/admin/paths/orders_{id}_claims_{claim_id}_shipments.yaml create mode 100644 docs/api/admin/paths/orders_{id}_complete.yaml create mode 100644 docs/api/admin/paths/orders_{id}_fulfillment.yaml create mode 100644 docs/api/admin/paths/orders_{id}_fulfillments_{fulfillment_id}_cancel.yaml create mode 100644 docs/api/admin/paths/orders_{id}_refund.yaml create mode 100644 docs/api/admin/paths/orders_{id}_return.yaml create mode 100644 docs/api/admin/paths/orders_{id}_shipment.yaml create mode 100644 docs/api/admin/paths/orders_{id}_shipping-methods.yaml create mode 100644 docs/api/admin/paths/orders_{id}_swaps_{swap_id}_cancel.yaml create mode 100644 docs/api/admin/paths/orders_{id}_swaps_{swap_id}_fulfillments.yaml create mode 100644 docs/api/admin/paths/orders_{id}_swaps_{swap_id}_fulfillments_{fulfillment_id}_cancel.yaml create mode 100644 docs/api/admin/paths/orders_{id}_swaps_{swap_id}_process-payment.yaml create mode 100644 docs/api/admin/paths/orders_{id}_swaps_{swap_id}_shipments.yaml create mode 100644 docs/api/admin/paths/price-lists.yaml create mode 100644 docs/api/admin/paths/price-lists_:id_products.yaml create mode 100644 docs/api/admin/paths/price-lists_{id}.yaml create mode 100644 docs/api/admin/paths/price-lists_{id}_prices_batch.yaml create mode 100644 docs/api/admin/paths/price-lists_{id}_products_{product_id}_prices.yaml create mode 100644 docs/api/admin/paths/price-lists_{id}_variants_{variant_id}_prices.yaml create mode 100644 docs/api/admin/paths/product-tags.yaml create mode 100644 docs/api/admin/paths/product-types.yaml create mode 100644 docs/api/admin/paths/products.yaml create mode 100644 docs/api/admin/paths/products_tag-usage.yaml create mode 100644 docs/api/admin/paths/products_types.yaml create mode 100644 docs/api/admin/paths/products_{id}.yaml create mode 100644 docs/api/admin/paths/products_{id}_metadata.yaml create mode 100644 docs/api/admin/paths/products_{id}_options.yaml create mode 100644 docs/api/admin/paths/products_{id}_options_{option_id}.yaml create mode 100644 docs/api/admin/paths/products_{id}_variants.yaml create mode 100644 docs/api/admin/paths/products_{id}_variants_{variant_id}.yaml create mode 100644 docs/api/admin/paths/regions.yaml create mode 100644 docs/api/admin/paths/regions_{id}.yaml create mode 100644 docs/api/admin/paths/regions_{id}_countries.yaml create mode 100644 docs/api/admin/paths/regions_{id}_countries_{country_code}.yaml create mode 100644 docs/api/admin/paths/regions_{id}_fulfillment-options.yaml create mode 100644 docs/api/admin/paths/regions_{id}_fulfillment-providers.yaml create mode 100644 docs/api/admin/paths/regions_{id}_fulfillment-providers_{provider_id}.yaml create mode 100644 docs/api/admin/paths/regions_{id}_payment-providers.yaml create mode 100644 docs/api/admin/paths/regions_{id}_payment-providers_{provider_id}.yaml create mode 100644 docs/api/admin/paths/return-reasons.yaml create mode 100644 docs/api/admin/paths/return-reasons_{id}.yaml create mode 100644 docs/api/admin/paths/returns.yaml create mode 100644 docs/api/admin/paths/returns_{id}_cancel.yaml create mode 100644 docs/api/admin/paths/returns_{id}_receive.yaml create mode 100644 docs/api/admin/paths/sales-channels.yaml create mode 100644 docs/api/admin/paths/sales-channels_{id}.yaml create mode 100644 docs/api/admin/paths/sales-channels_{id}_products_batch.yaml create mode 100644 docs/api/admin/paths/shipping-options.yaml create mode 100644 docs/api/admin/paths/shipping-options_{id}.yaml create mode 100644 docs/api/admin/paths/shipping-profiles.yaml create mode 100644 docs/api/admin/paths/shipping-profiles_{id}.yaml create mode 100644 docs/api/admin/paths/store.yaml create mode 100644 docs/api/admin/paths/store_currencies_{code}.yaml create mode 100644 docs/api/admin/paths/store_payment-providers.yaml create mode 100644 docs/api/admin/paths/store_tax-providers.yaml create mode 100644 docs/api/admin/paths/swaps.yaml create mode 100644 docs/api/admin/paths/swaps_{id}.yaml create mode 100644 docs/api/admin/paths/tax-rates.yaml create mode 100644 docs/api/admin/paths/tax-rates_:id.yaml create mode 100644 docs/api/admin/paths/tax-rates_:id_product-types_batch.yaml create mode 100644 docs/api/admin/paths/tax-rates_:id_products_batch.yaml create mode 100644 docs/api/admin/paths/tax-rates_:id_shipping-options_batch.yaml create mode 100644 docs/api/admin/paths/tax-rates_{id}.yaml create mode 100644 docs/api/admin/paths/uploads.yaml create mode 100644 docs/api/admin/paths/users.yaml create mode 100644 docs/api/admin/paths/users_password-token.yaml create mode 100644 docs/api/admin/paths/users_reset-password.yaml create mode 100644 docs/api/admin/paths/users_{id}.yaml create mode 100644 docs/api/admin/paths/variants.yaml create mode 100644 docs/api/store/components/schemas/OAuth.yaml create mode 100644 docs/api/store/components/schemas/address.yaml create mode 100644 docs/api/store/components/schemas/batch_job.yaml create mode 100644 docs/api/store/components/schemas/cart.yaml create mode 100644 docs/api/store/components/schemas/claim_image.yaml create mode 100644 docs/api/store/components/schemas/claim_item.yaml create mode 100644 docs/api/store/components/schemas/claim_order.yaml create mode 100644 docs/api/store/components/schemas/claim_tag.yaml create mode 100644 docs/api/store/components/schemas/country.yaml create mode 100644 docs/api/store/components/schemas/currency.yaml create mode 100644 docs/api/store/components/schemas/custom_shipping_option.yaml create mode 100644 docs/api/store/components/schemas/customer.yaml create mode 100644 docs/api/store/components/schemas/customer_group.yaml create mode 100644 docs/api/store/components/schemas/discount.yaml create mode 100644 docs/api/store/components/schemas/discount_condition.yaml create mode 100644 docs/api/store/components/schemas/discount_condition_customer_group.yaml create mode 100644 docs/api/store/components/schemas/discount_condition_product.yaml create mode 100644 docs/api/store/components/schemas/discount_condition_product_collection.yaml create mode 100644 docs/api/store/components/schemas/discount_condition_product_tag.yaml create mode 100644 docs/api/store/components/schemas/discount_condition_product_type.yaml create mode 100644 docs/api/store/components/schemas/discount_rule.yaml create mode 100644 docs/api/store/components/schemas/draft-order.yaml create mode 100644 docs/api/store/components/schemas/fulfillment.yaml create mode 100644 docs/api/store/components/schemas/fulfillment_item.yaml create mode 100644 docs/api/store/components/schemas/fulfillment_provider.yaml create mode 100644 docs/api/store/components/schemas/gift_card.yaml create mode 100644 docs/api/store/components/schemas/gift_card_transaction.yaml create mode 100644 docs/api/store/components/schemas/idempotency_key.yaml create mode 100644 docs/api/store/components/schemas/image.yaml create mode 100644 docs/api/store/components/schemas/invite.yaml create mode 100644 docs/api/store/components/schemas/line_item.yaml create mode 100644 docs/api/store/components/schemas/line_item_adjustment.yaml create mode 100644 docs/api/store/components/schemas/line_item_tax_line.yaml create mode 100644 docs/api/store/components/schemas/money_amount.yaml create mode 100644 docs/api/store/components/schemas/note.yaml create mode 100644 docs/api/store/components/schemas/notification.yaml create mode 100644 docs/api/store/components/schemas/notification_provider.yaml create mode 100644 docs/api/store/components/schemas/notification_resend.yaml create mode 100644 docs/api/store/components/schemas/order.yaml create mode 100644 docs/api/store/components/schemas/payment.yaml create mode 100644 docs/api/store/components/schemas/payment_provider.yaml create mode 100644 docs/api/store/components/schemas/payment_session.yaml create mode 100644 docs/api/store/components/schemas/price_list.yaml create mode 100644 docs/api/store/components/schemas/product.yaml create mode 100644 docs/api/store/components/schemas/product_collection.yaml create mode 100644 docs/api/store/components/schemas/product_option.yaml create mode 100644 docs/api/store/components/schemas/product_option_value.yaml create mode 100644 docs/api/store/components/schemas/product_tag.yaml create mode 100644 docs/api/store/components/schemas/product_tax_rate.yaml create mode 100644 docs/api/store/components/schemas/product_type.yaml create mode 100644 docs/api/store/components/schemas/product_type_tax_rate.yaml create mode 100644 docs/api/store/components/schemas/product_variant.yaml create mode 100644 docs/api/store/components/schemas/refund.yaml create mode 100644 docs/api/store/components/schemas/region.yaml create mode 100644 docs/api/store/components/schemas/return.yaml create mode 100644 docs/api/store/components/schemas/return_item.yaml create mode 100644 docs/api/store/components/schemas/return_reason.yaml create mode 100644 docs/api/store/components/schemas/sales_channel.yaml create mode 100644 docs/api/store/components/schemas/sales_channel_tax_line.yaml create mode 100644 docs/api/store/components/schemas/shipping_method.yaml create mode 100644 docs/api/store/components/schemas/shipping_option.yaml create mode 100644 docs/api/store/components/schemas/shipping_option_requirement.yaml create mode 100644 docs/api/store/components/schemas/shipping_profile.yaml create mode 100644 docs/api/store/components/schemas/shipping_tax_rate.yaml create mode 100644 docs/api/store/components/schemas/staged_job.yaml create mode 100644 docs/api/store/components/schemas/store.yaml create mode 100644 docs/api/store/components/schemas/swap.yaml create mode 100644 docs/api/store/components/schemas/tax_line.yaml create mode 100644 docs/api/store/components/schemas/tax_provider.yaml create mode 100644 docs/api/store/components/schemas/tax_rate.yaml create mode 100644 docs/api/store/components/schemas/tracking_link.yaml create mode 100644 docs/api/store/components/schemas/user.yaml delete mode 100644 docs/api/store/endpoints/carts.yaml delete mode 100644 docs/api/store/endpoints/customers.yaml delete mode 100644 docs/api/store/endpoints/orders.yaml delete mode 100644 docs/api/store/endpoints/product-variants.yaml delete mode 100644 docs/api/store/endpoints/products.yaml delete mode 100644 docs/api/store/endpoints/regions.yaml delete mode 100644 docs/api/store/endpoints/shipping-options.yaml delete mode 100644 docs/api/store/endpoints/swaps.yaml create mode 100644 docs/api/store/openapi.yaml create mode 100644 docs/api/store/paths/auth.yaml create mode 100644 docs/api/store/paths/auth_{email}.yaml create mode 100644 docs/api/store/paths/carts.yaml create mode 100644 docs/api/store/paths/carts_{id}.yaml create mode 100644 docs/api/store/paths/carts_{id}_complete.yaml create mode 100644 docs/api/store/paths/carts_{id}_discounts_{code}.yaml create mode 100644 docs/api/store/paths/carts_{id}_line-items.yaml create mode 100644 docs/api/store/paths/carts_{id}_line-items_{line_id}.yaml create mode 100644 docs/api/store/paths/carts_{id}_payment-session.yaml create mode 100644 docs/api/store/paths/carts_{id}_payment-sessions.yaml create mode 100644 docs/api/store/paths/carts_{id}_payment-sessions_{provider_id}.yaml create mode 100644 docs/api/store/paths/carts_{id}_payment-sessions_{provider_id}_refresh.yaml create mode 100644 docs/api/store/paths/carts_{id}_shipping-methods.yaml create mode 100644 docs/api/store/paths/carts_{id}_taxes.yaml create mode 100644 docs/api/store/paths/collections.yaml create mode 100644 docs/api/store/paths/collections_{id}.yaml create mode 100644 docs/api/store/paths/customers.yaml create mode 100644 docs/api/store/paths/customers_me.yaml create mode 100644 docs/api/store/paths/customers_me_addresses.yaml create mode 100644 docs/api/store/paths/customers_me_addresses_{address_id}.yaml create mode 100644 docs/api/store/paths/customers_me_orders.yaml create mode 100644 docs/api/store/paths/customers_me_payment-methods.yaml create mode 100644 docs/api/store/paths/customers_password-reset.yaml create mode 100644 docs/api/store/paths/customers_password-token.yaml create mode 100644 docs/api/store/paths/gift-cards_{code}.yaml create mode 100644 docs/api/store/paths/orders.yaml create mode 100644 docs/api/store/paths/orders_cart_{cart_id}.yaml create mode 100644 docs/api/store/paths/orders_{id}.yaml create mode 100644 docs/api/store/paths/products.yaml create mode 100644 docs/api/store/paths/products_search.yaml create mode 100644 docs/api/store/paths/products_{id}.yaml create mode 100644 docs/api/store/paths/regions.yaml create mode 100644 docs/api/store/paths/regions_{id}.yaml create mode 100644 docs/api/store/paths/return-reasons.yaml create mode 100644 docs/api/store/paths/return-reasons_{id}.yaml create mode 100644 docs/api/store/paths/returns.yaml create mode 100644 docs/api/store/paths/shipping-options.yaml create mode 100644 docs/api/store/paths/shipping-options_{cart_id}.yaml create mode 100644 docs/api/store/paths/swaps.yaml create mode 100644 docs/api/store/paths/swaps_{cart_id}.yaml create mode 100644 docs/api/store/paths/variants.yaml create mode 100644 docs/api/store/paths/variants_{variant_id}.yaml delete mode 100644 www/docs/src/components/Banner/Banner.js delete mode 100644 www/docs/src/components/Banner/banner.module.css delete mode 100644 www/docs/src/components/Banner/index.js create mode 100644 www/docs/src/theme/Redoc/index.js diff --git a/.github/workflows/generate-api-reference.yml b/.github/workflows/generate-api-reference.yml new file mode 100644 index 0000000000..a1dd8a12d6 --- /dev/null +++ b/.github/workflows/generate-api-reference.yml @@ -0,0 +1,51 @@ +name: Generate API Reference +on: + pull_request: + types: + - closed + branches: + - "master" + paths: + - packages/medusa/src/api/routes/** + - '!packages/medusa/src/api/routes/**/index.ts' + - '!packages/medusa/src/api/routes/**/index.js' +jobs: + api: + runs-on: ubuntu-latest + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.9.1 + with: + access_token: ${{ github.token }} + + - name: Checkout + uses: actions/checkout@v2.3.5 + with: + token: ${{ secrets.REFERENCE_PAT }} + fetch-depth: 0 + + - name: Setup Node.js environment + uses: actions/setup-node@v2.4.1 + with: + node-version: "14" + cache: "yarn" + + - name: Install dependencies + uses: ./.github/actions/cache-deps + with: + extension: reference + + - name: Build Packages + run: yarn build + + - name: Generate API Reference + run: yarn openapi:generate + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v4 + with: + commit-message: 'chore(docs): Generated API Reference' + base: 'master' + title: 'chore(docs): Updated API Reference' + labels: 'type: chore' + add-paths: docs/api/* diff --git a/.github/workflows/generate-js-reference.yml b/.github/workflows/generate-js-reference.yml index e3d626d2a2..0e122f01b4 100644 --- a/.github/workflows/generate-js-reference.yml +++ b/.github/workflows/generate-js-reference.yml @@ -46,8 +46,8 @@ jobs: - name: Create Pull Request uses: peter-evans/create-pull-request@v4 with: - commit-message: 'docs: Generated JS Client Reference (automated)' + commit-message: 'chore(docs): Generated JS Client Reference (automated)' base: 'master' - title: 'docs: Generated JS Client Reference (automated)' - labels: 'type: docs' + title: 'chore(docs): Updated API Reference' + labels: 'type: chore' add-paths: docs/content/references/js-client/** diff --git a/.github/workflows/generate-reference.yml b/.github/workflows/generate-reference.yml index 629dc50173..5de3c78839 100644 --- a/.github/workflows/generate-reference.yml +++ b/.github/workflows/generate-reference.yml @@ -46,8 +46,8 @@ jobs: - name: Create Pull Request uses: peter-evans/create-pull-request@v4 with: - commit-message: 'docs: Generated Services Reference (automated)' + commit-message: 'chore(docs): Generated Services Reference (automated)' base: 'master' - title: 'docs: Generated Services Reference (automated)' - labels: 'type: docs' + title: 'chore(docs): Generated Services Reference (automated)' + labels: 'type: chore' add-paths: docs/content/references/services/** diff --git a/.github/workflows/oas-test.yml b/.github/workflows/oas-test.yml new file mode 100644 index 0000000000..bf71dbe3f0 --- /dev/null +++ b/.github/workflows/oas-test.yml @@ -0,0 +1,34 @@ +name: OAS Comments Format Validation +on: + pull_request: + paths: + - packages/medusa/src/api/routes/** + +jobs: + docs-test: + runs-on: ubuntu-latest + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.9.1 + with: + access_token: ${{ github.token }} + + - name: Checkout + uses: actions/checkout@v2.3.5 + with: + fetch-depth: 0 + + - name: Setup Node.js environment + uses: actions/setup-node@v2.4.1 + with: + node-version: "14" + cache: "yarn" + + - name: Install dependencies + uses: ./.github/actions/cache-deps + with: + extension: oas + + - name: Build OAS + run: | + yarn openapi:generate diff --git a/.gitignore b/.gitignore index b1aabe88b2..a71537084f 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,4 @@ lerna-debug.log .idea .turbo -build/** +build/** \ No newline at end of file diff --git a/docs/api/admin-spec3-base.json b/docs/api/admin-spec3-base.json index f809364d5b..8cfc3c2283 100644 --- a/docs/api/admin-spec3-base.json +++ b/docs/api/admin-spec3-base.json @@ -3,70 +3,165 @@ "info": { "version": "1.0.0", "title": "Medusa Admin API", + "description": "API reference for Medusa's Admin endpoints. All endpoints are prefixed with `/admin`.", "license": { - "name": "MIT" + "name": "MIT", + "url": "https://github.com/medusajs/medusa/blob/master/LICENSE" } }, "tags": [ { "name": "Auth", - "description": "Auth endpoints allows authorization of admin Users and manages their sessions." + "description": "Auth endpoints that allow authorization of admin Users and manages their sessions." + }, + { + "name": "App", + "description": "App endpoints that allow handling apps in Medusa.", + "x-resourceId": "OAuth" + }, + { + "name": "Batch Job", + "description": "Batch Job endpoints that allow handling batch jobs in Medusa.", + "x-resourceId": "batch_job" + }, + { + "name": "Claim", + "description": "Claim endpoints that allow handling claims in Medusa.", + "x-resourceId": "claim_order" }, { "name": "Collection", + "description": "Collection endpoints that allow handling collections in Medusa.", "x-resourceId": "product_collection" }, { "name": "Customer", + "description": "Customer endpoints that allow handling customers in Medusa.", "x-resourceId": "customer" }, + { + "name": "Customer Group", + "description": "Customer Group endpoints that allow handling customer groups in Medusa.", + "x-resourceId": "customer_group" + }, { "name": "Discount", + "description": "Discount endpoints that allow handling discounts in Medusa.", "x-resourceId": "discount" }, + { + "name": "Discount Condition", + "description": "Discount Condition endpoints that allow handling discount conditions in Medusa.", + "x-resourceId": "discount_condition" + }, + { + "name": "Draft Order", + "description": "Draft Order endpoints that allow handling draft orders in Medusa.", + "x-resourceId": "draft-order" + }, { "name": "Gift Card", + "description": "Gift Card endpoints that allow handling gift cards in Medusa.", "x-resourceId": "gift_card" }, + { + "name": "Invite", + "description": "Invite endpoints that allow handling invites in Medusa.", + "x-resourceId": "invite" + }, + { + "name": "Note", + "description": "Note endpoints that allow handling notes in Medusa.", + "x-resourceId": "note" + }, { "name": "Notification", + "description": "Notification endpoints that allow handling notifications in Medusa.", "x-resourceId": "notification" }, { "name": "Order", + "description": "Order endpoints that allow handling orders in Medusa.", "x-resourceId": "order" }, + { + "name": "Price List", + "description": "Price List endpoints that allow handling price lists in Medusa.", + "x-resourceId": "price_list" + }, { "name": "Product", + "description": "Product endpoints that allow handling products in Medusa.", "x-resourceId": "product" }, + { + "name": "Product Tag", + "description": "Product Tag endpoints that allow handling product tags in Medusa.", + "x-resourceId": "product_tag" + }, + { + "name": "Product Types", + "description": "Product Types endpoints that allow handling product types in Medusa.", + "x-resourceId": "product_type" + }, + { + "name": "Product Variant", + "description": "Product Variant endpoints that allow handling product variants in Medusa.", + "x-resourceId": "product_variant" + }, { "name": "Region", + "description": "Region endpoints that allow handling regions in Medusa.", "x-resourceId": "region" }, + { + "name": "Return Reason", + "description": "Return Reason endpoints that allow handling return reasons in Medusa.", + "x-resourceId": "return_reason" + }, { "name": "Return", + "description": "Return endpoints that allow handling returns in Medusa.", "x-resourceId": "return" }, + { + "name": "Sales Channel", + "description": "Sales Channel endpoints that allow handling sales channels in Medusa.", + "x-resourceId": "sales_channel" + }, { "name": "Shipping Option", + "description": "Shipping Option endpoints that allow handling shipping options in Medusa.", "x-resourceId": "shipping_option" }, { "name": "Shipping Profile", + "description": "Shipping Profile endpoints that allow handling shipping profiles in Medusa.", "x-resourceId": "shipping_profile" }, + { + "name": "Store", + "description": "Store endpoints that allow handling stores in Medusa.", + "x-resourceId": "store" + }, { "name": "Swap", + "description": "Swap endpoints that allow handling swaps in Medusa.", "x-resourceId": "swap" }, { - "name": "Product Variant", - "x-resourceId": "product_variant" + "name": "Tax Rate", + "description": "Tax Rate endpoints that allow handling tax rates in Medusa.", + "x-resourceId": "tax_rate" }, { - "name": "OAuth", - "x-resourceId": "OAuth" + "name": "Upload", + "description": "Upload endpoints that allow handling uploads in Medusa." + }, + { + "name": "User", + "description": "User endpoints that allow handling users in Medusa.", + "x-resourceId": "user" } ], "servers": [ diff --git a/docs/api/admin-spec3.json b/docs/api/admin-spec3.json index 782008c052..a494f08980 100644 --- a/docs/api/admin-spec3.json +++ b/docs/api/admin-spec3.json @@ -3,70 +3,165 @@ "info": { "version": "1.0.0", "title": "Medusa Admin API", + "description": "API reference for Medusa's Admin endpoints. All endpoints are prefixed with `/admin`.", "license": { - "name": "MIT" + "name": "MIT", + "url": "https://github.com/medusajs/medusa/blob/master/LICENSE" } }, "tags": [ { "name": "Auth", - "description": "Auth endpoints allows authorization of admin Users and manages their sessions." + "description": "Auth endpoints that allow authorization of admin Users and manages their sessions." + }, + { + "name": "App", + "description": "App endpoints that allow handling apps in Medusa.", + "x-resourceId": "OAuth" + }, + { + "name": "Batch Job", + "description": "Batch Job endpoints that allow handling batch jobs in Medusa.", + "x-resourceId": "batch_job" + }, + { + "name": "Claim", + "description": "Claim endpoints that allow handling claims in Medusa.", + "x-resourceId": "claim_order" }, { "name": "Collection", + "description": "Collection endpoints that allow handling collections in Medusa.", "x-resourceId": "product_collection" }, { "name": "Customer", + "description": "Customer endpoints that allow handling customers in Medusa.", "x-resourceId": "customer" }, + { + "name": "Customer Group", + "description": "Customer Group endpoints that allow handling customer groups in Medusa.", + "x-resourceId": "customer_group" + }, { "name": "Discount", + "description": "Discount endpoints that allow handling discounts in Medusa.", "x-resourceId": "discount" }, + { + "name": "Discount Condition", + "description": "Discount Condition endpoints that allow handling discount conditions in Medusa.", + "x-resourceId": "discount_condition" + }, + { + "name": "Draft Order", + "description": "Draft Order endpoints that allow handling draft orders in Medusa.", + "x-resourceId": "draft-order" + }, { "name": "Gift Card", + "description": "Gift Card endpoints that allow handling gift cards in Medusa.", "x-resourceId": "gift_card" }, + { + "name": "Invite", + "description": "Invite endpoints that allow handling invites in Medusa.", + "x-resourceId": "invite" + }, + { + "name": "Note", + "description": "Note endpoints that allow handling notes in Medusa.", + "x-resourceId": "note" + }, { "name": "Notification", + "description": "Notification endpoints that allow handling notifications in Medusa.", "x-resourceId": "notification" }, { "name": "Order", + "description": "Order endpoints that allow handling orders in Medusa.", "x-resourceId": "order" }, + { + "name": "Price List", + "description": "Price List endpoints that allow handling price lists in Medusa.", + "x-resourceId": "price_list" + }, { "name": "Product", + "description": "Product endpoints that allow handling products in Medusa.", "x-resourceId": "product" }, + { + "name": "Product Tag", + "description": "Product Tag endpoints that allow handling product tags in Medusa.", + "x-resourceId": "product_tag" + }, + { + "name": "Product Types", + "description": "Product Types endpoints that allow handling product types in Medusa.", + "x-resourceId": "product_type" + }, + { + "name": "Product Variant", + "description": "Product Variant endpoints that allow handling product variants in Medusa.", + "x-resourceId": "product_variant" + }, { "name": "Region", + "description": "Region endpoints that allow handling regions in Medusa.", "x-resourceId": "region" }, + { + "name": "Return Reason", + "description": "Return Reason endpoints that allow handling return reasons in Medusa.", + "x-resourceId": "return_reason" + }, { "name": "Return", + "description": "Return endpoints that allow handling returns in Medusa.", "x-resourceId": "return" }, + { + "name": "Sales Channel", + "description": "Sales Channel endpoints that allow handling sales channels in Medusa.", + "x-resourceId": "sales_channel" + }, { "name": "Shipping Option", + "description": "Shipping Option endpoints that allow handling shipping options in Medusa.", "x-resourceId": "shipping_option" }, { "name": "Shipping Profile", + "description": "Shipping Profile endpoints that allow handling shipping profiles in Medusa.", "x-resourceId": "shipping_profile" }, + { + "name": "Store", + "description": "Store endpoints that allow handling stores in Medusa.", + "x-resourceId": "store" + }, { "name": "Swap", + "description": "Swap endpoints that allow handling swaps in Medusa.", "x-resourceId": "swap" }, { - "name": "Product Variant", - "x-resourceId": "product_variant" + "name": "Tax Rate", + "description": "Tax Rate endpoints that allow handling tax rates in Medusa.", + "x-resourceId": "tax_rate" }, { - "name": "OAuth", - "x-resourceId": "OAuth" + "name": "Upload", + "description": "Upload endpoints that allow handling uploads in Medusa." + }, + { + "name": "User", + "description": "User endpoints that allow handling users in Medusa.", + "x-resourceId": "user" } ], "servers": [ @@ -75,7 +170,7 @@ } ], "paths": { - "/apps": { + "/apps/authorizations": { "post": { "operationId": "PostApps", "summary": "Generates a token for an application.", @@ -109,7 +204,7 @@ } }, "tags": [ - "Apps" + "App" ], "responses": { "200": { @@ -127,14 +222,16 @@ } } } - }, + } + }, + "/apps": { "get": { "operationId": "GetApps", "summary": "List applications", "description": "Retrieve a list of applications.", "x-authenticated": true, "tags": [ - "Apps" + "App" ], "responses": { "200": { @@ -143,84 +240,11 @@ "application/json": { "schema": { "properties": { - "collection": { - "$ref": "#/components/schemas/OAuth" - } - } - } - } - } - } - } - } - }, - "/auth": { - "post": { - "operationId": "PostAuth", - "summary": "Authenticate a User", - "x-authenticated": false, - "description": "Logs a User in and authorizes them to manage Store settings.", - "parameters": [], - "tags": [ - "Auth" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "user": { - "$ref": "#/components/schemas/user" - } - } - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "email", - "password" - ], - "properties": { - "email": { - "type": "string", - "description": "The User's email." - }, - "password": { - "type": "string", - "description": "The User's password." - } - } - } - } - } - } - }, - "get": { - "operationId": "GetAuth", - "summary": "Get Session", - "x-authenticated": true, - "description": "Gets the currently logged in User.", - "tags": [ - "Auth" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "user": { - "$ref": "#/components/schemas/user" + "apps": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OAuth" + } } } } @@ -241,7 +265,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the batch job.", + "description": "The ID of the batch job.", "schema": { "type": "string" } @@ -279,7 +303,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the batch job.", + "description": "The ID of the batch job.", "schema": { "type": "string" } @@ -312,7 +336,58 @@ "summary": "Create a Batch Job", "description": "Creates a Batch Job.", "x-authenticated": true, - "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "type", + "context" + ], + "properties": { + "type": { + "type": "string", + "description": "The type of batch job to start.", + "example": "product-export" + }, + "context": { + "type": "object", + "description": "Additional infomration regarding the batch to be used for processing.", + "example": { + "shape": { + "prices": [ + { + "region": null, + "currency_code": "eur" + } + ], + "dynamicImageColumnCount": 4, + "dynamicOptionColumnCount": 2 + }, + "list_config": { + "skip": 0, + "take": 50, + "order": { + "created_at": "DESC" + }, + "relations": [ + "variants", + "variant.prices", + "images" + ] + } + } + }, + "dry_run": { + "type": "boolean", + "description": "Set a batch job in dry_run mode to get some information on what will be done without applying any modifications.", + "default": false + } + } + } + } + } + }, "tags": [ "Batch Job" ], @@ -331,34 +406,6 @@ } } } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "type", - "context", - "dry_run" - ], - "properties": { - "type": { - "type": "string", - "description": "The type of batch job to start." - }, - "context": { - "type": "string", - "description": "Additional infomration regarding the batch to be used for processing." - }, - "dry_run": { - "type": "boolean", - "description": "Set a batch job in dry_run mode to get some information on what will be done without applying any modifications." - } - } - } - } - } } }, "get": { @@ -370,17 +417,41 @@ { "in": "query", "name": "limit", - "description": "The number of collections to return.", + "description": "The number of batch jobs to return.", "schema": { - "type": "string" + "type": "integer", + "default": 10 } }, { "in": "query", "name": "offset", - "description": "The offset of collections to return.", + "description": "The number of batch jobs to skip before results.", "schema": { - "type": "string" + "type": "integer", + "default": 0 + } + }, + { + "in": "query", + "name": "id", + "style": "form", + "explode": false, + "description": "Filter by the batch ID", + "schema": { + "oneOf": [ + { + "type": "string", + "description": "batch job ID" + }, + { + "type": "array", + "description": "multiple batch job IDs", + "items": { + "type": "string" + } + } + ] } }, { @@ -404,7 +475,28 @@ "description": "Date comparison for when resulting collections was confirmed, i.e. less than, greater than etc.", "schema": { "type": "object", - "nullable": true + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { @@ -415,7 +507,28 @@ "description": "Date comparison for when resulting collections was pre processed, i.e. less than, greater than etc.", "schema": { "type": "object", - "nullable": true + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { @@ -426,7 +539,28 @@ "description": "Date comparison for when resulting collections was completed, i.e. less than, greater than etc.", "schema": { "type": "object", - "nullable": true + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { @@ -437,7 +571,28 @@ "description": "Date comparison for when resulting collections was failed, i.e. less than, greater than etc.", "schema": { "type": "object", - "nullable": true + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { @@ -448,26 +603,52 @@ "description": "Date comparison for when resulting collections was canceled, i.e. less than, greater than etc.", "schema": { "type": "object", - "nullable": true + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { "in": "query", "name": "order", - "description": "Order used when retrieving batch jobs", + "description": "Field used to order retrieved batch jobs", "schema": { "type": "string" } }, { "in": "query", - "name": "deleted_at", - "style": "form", - "explode": false, - "description": "Date comparison for when resulting collections was deleted, i.e. less than, greater than etc.", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in each order of the result.", "schema": { - "type": "object", - "nullable": true + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "(Comma separated) Which fields should be included in each order of the result.", + "schema": { + "type": "string" } }, { @@ -478,7 +659,28 @@ "description": "Date comparison for when resulting collections was created, i.e. less than, greater than etc.", "schema": { "type": "object", - "nullable": true + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { @@ -489,7 +691,28 @@ "description": "Date comparison for when resulting collections was updated, i.e. less than, greater than etc.", "schema": { "type": "object", - "nullable": true + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } } ], @@ -503,8 +726,23 @@ "application/json": { "schema": { "properties": { - "batch_job": { - "$ref": "#/components/schemas/batch_job" + "batch_jobs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/batch_job" + } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -525,7 +763,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Batch Job", + "description": "The ID of the Batch Job", "schema": { "type": "string" } @@ -552,6 +790,102 @@ } } }, + "/auth": { + "post": { + "operationId": "PostAuth", + "summary": "Authenticate a User", + "x-authenticated": false, + "description": "Logs a User in and authorizes them to manage Store settings.", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "email", + "password" + ], + "properties": { + "email": { + "type": "string", + "description": "The User's email." + }, + "password": { + "type": "string", + "description": "The User's password." + } + } + } + } + } + }, + "tags": [ + "Auth" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "user": { + "$ref": "#/components/schemas/user" + } + } + } + } + } + }, + "401": { + "description": "The user doesn't exist or the credentials are incorrect." + } + } + }, + "delete": { + "operationId": "DeleteAuth", + "summary": "Delete Session", + "x-authenticated": true, + "description": "Deletes the current session for the logged in user.", + "tags": [ + "Auth" + ], + "responses": { + "200": { + "description": "OK" + } + } + }, + "get": { + "operationId": "GetAuth", + "summary": "Get Session", + "x-authenticated": true, + "description": "Gets the currently logged in User.", + "tags": [ + "Auth" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "user": { + "$ref": "#/components/schemas/user" + } + } + } + } + } + }, + "400": { + "description": "An error occurred." + } + } + } + }, "/collections/{id}/products/batch": { "post": { "operationId": "PostProductsToCollection", @@ -563,7 +897,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Collection.", + "description": "The ID of the Collection.", "schema": { "type": "string" } @@ -573,17 +907,16 @@ "content": { "application/json": { "schema": { + "required": [ + "product_ids" + ], "properties": { "product_ids": { "description": "An array of Product IDs to add to the Product Collection.", "type": "array", "items": { - "properties": { - "id": { - "description": "The ID of a Product to add to the Product Collection.", - "type": "string" - } - } + "description": "The ID of a Product to add to the Product Collection.", + "type": "string" } } } @@ -596,7 +929,18 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "collection": { + "$ref": "#/components/schemas/product_collection" + } + } + } + } + } } } }, @@ -610,7 +954,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Collection.", + "description": "The ID of the Collection.", "schema": { "type": "string" } @@ -620,17 +964,16 @@ "content": { "application/json": { "schema": { + "required": [ + "product_ids" + ], "properties": { "product_ids": { "description": "An array of Product IDs to remove from the Product Collection.", "type": "array", "items": { - "properties": { - "id": { - "description": "The ID of a Product to remove from the Product Collection.", - "type": "string" - } - } + "description": "The ID of a Product to add to the Product Collection.", + "type": "string" } } } @@ -643,7 +986,32 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "string", + "description": "The ID of the collection" + }, + "object": { + "type": "string", + "description": "The type of object the removal was executed on", + "default": "product-collection" + }, + "removed_products": { + "description": "The IDs of the products removed from the collection", + "type": "array", + "items": { + "description": "The ID of a Product to add to the Product Collection.", + "type": "string" + } + } + } + } + } + } } } } @@ -710,15 +1078,17 @@ "name": "limit", "description": "The number of collections to return.", "schema": { - "type": "string" + "type": "integer", + "default": 10 } }, { "in": "query", "name": "offset", - "description": "The offset of collections to return.", + "description": "The number of collections to skip before the results.", "schema": { - "type": "string" + "type": "integer", + "default": 0 } }, { @@ -739,26 +1109,100 @@ }, { "in": "query", - "name": "deleted_at", - "description": "Date comparison for when resulting collections was deleted, i.e. less than, greater than etc.", + "name": "q", + "description": "a search term to search titles and handles.", "schema": { - "type": "object" + "type": "string" } }, { "in": "query", "name": "created_at", - "description": "Date comparison for when resulting collections was created, i.e. less than, greater than etc.", + "description": "Date comparison for when resulting collections were created.", "schema": { - "type": "object" + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { "in": "query", "name": "updated_at", - "description": "Date comparison for when resulting collections was updated, i.e. less than, greater than etc.", + "description": "Date comparison for when resulting collections were updated.", "schema": { - "type": "object" + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "deleted_at", + "description": "Date comparison for when resulting collections were deleted.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } } ], @@ -772,8 +1216,23 @@ "application/json": { "schema": { "properties": { - "collection": { - "$ref": "#/components/schemas/product_collection" + "collections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/product_collection" + } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -794,7 +1253,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Collection.", + "description": "The ID of the Collection.", "schema": { "type": "string" } @@ -812,14 +1271,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Collection" + "description": "The ID of the deleted Collection" }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "product-collection" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether the collection was deleted successfully or not.", + "default": true } } } @@ -838,7 +1300,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product Collection", + "description": "The ID of the Product Collection", "schema": { "type": "string" } @@ -874,7 +1336,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Collection.", + "description": "The ID of the Collection.", "schema": { "type": "string" } @@ -929,12 +1391,53 @@ "summary": "Create a Customer", "description": "Creates a Customer.", "x-authenticated": true, - "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "email", + "first_name", + "last_name", + "password" + ], + "properties": { + "email": { + "type": "string", + "description": "The customer's email.", + "format": "email" + }, + "first_name": { + "type": "string", + "description": "The customer's first name." + }, + "last_name": { + "type": "string", + "description": "The customer's last name." + }, + "password": { + "type": "string", + "description": "The customer's password.", + "format": "password" + }, + "phone": { + "type": "string", + "description": "The customer's phone number." + }, + "metadata": { + "description": "An optional set of key-value pairs to hold additional information.", + "type": "object" + } + } + } + } + } + }, "tags": [ "Customer" ], "responses": { - "200": { + "201": { "description": "OK", "content": { "application/json": { @@ -948,42 +1451,6 @@ } } } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "email", - "first_name", - "last_name" - ], - "properties": { - "email": { - "type": "string", - "description": "The Customer's email address." - }, - "first_name": { - "type": "string", - "description": "The Customer's first name." - }, - "last_name": { - "type": "string", - "description": "The Customer's last name." - }, - "phone": { - "type": "string", - "description": "The Customer's phone number." - }, - "metadata": { - "type": "object", - "description": "Metadata for the customer." - } - } - } - } - } } }, "get": { @@ -991,6 +1458,42 @@ "summary": "List Customers", "description": "Retrieves a list of Customers.", "x-authenticated": true, + "parameters": [ + { + "in": "query", + "name": "limit", + "description": "The number of items to return.", + "schema": { + "type": "integer", + "default": 50 + } + }, + { + "in": "query", + "name": "offset", + "description": "The items to skip before result.", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "in": "query", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in each customer.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "q", + "description": "a search term to search email, first_name, and last_name.", + "schema": { + "type": "string" + } + } + ], "tags": [ "Customer" ], @@ -1001,8 +1504,23 @@ "application/json": { "schema": { "properties": { - "customer": { - "$ref": "#/components/schemas/customer" + "customers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/customer" + } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -1023,7 +1541,23 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Customer.", + "description": "The ID of the Customer.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in the customer.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "(Comma separated) Which fields should be included in the customer.", "schema": { "type": "string" } @@ -1059,7 +1593,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Customer.", + "description": "The ID of the Customer.", "schema": { "type": "string" } @@ -1067,13 +1601,17 @@ { "in": "query", "name": "expand", - "style": "form", - "explode": false, + "description": "(Comma separated) Which fields should be expanded in each customer.", "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "(Comma separated) Which fields should be retrieved in each customer.", + "schema": { + "type": "string" } } ], @@ -1084,7 +1622,8 @@ "properties": { "email": { "type": "string", - "description": "The Customer's email. Only providable if user not registered." + "description": "The Customer's email.", + "format": "email" }, "first_name": { "type": "string", @@ -1100,7 +1639,8 @@ }, "password": { "type": "string", - "description": "The Customer's password." + "description": "The Customer's password.", + "format": "password" }, "groups": { "type": "array", @@ -1110,7 +1650,7 @@ ], "properties": { "id": { - "description": "The id of a customer group", + "description": "The ID of a customer group", "type": "string" } } @@ -1118,8 +1658,8 @@ "description": "A list of customer groups to which the customer belongs." }, "metadata": { - "type": "object", - "description": "Metadata for the customer." + "description": "An optional set of key-value pairs to hold additional information.", + "type": "object" } } } @@ -1147,6 +1687,596 @@ } } }, + "/customer-groups/{id}/customers/batch": { + "post": { + "operationId": "PostCustomerGroupsGroupCustomersBatch", + "summary": "Add a list of customers to a customer group ", + "description": "Adds a list of customers, represented by id's, to a customer group.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the customer group.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "customer_ids" + ], + "properties": { + "customer_ids": { + "description": "The ids of the customers to add", + "type": "array", + "items": { + "required": [ + "id" + ], + "properties": { + "id": { + "description": "ID of the customer", + "type": "string" + } + } + } + } + } + } + } + } + }, + "tags": [ + "Customer Group" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "customer_group": { + "$ref": "#/components/schemas/customer_group" + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "DeleteCustomerGroupsGroupCustomerBatch", + "summary": "Remove a list of customers from a customer group ", + "description": "Removes a list of customers, represented by id's, from a customer group.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the customer group.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "customer_ids" + ], + "properties": { + "customer_ids": { + "description": "The ids of the customers to remove", + "type": "array", + "items": { + "required": [ + "id" + ], + "properties": { + "id": { + "description": "ID of the customer", + "type": "string" + } + } + } + } + } + } + } + } + }, + "tags": [ + "Customer Group" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "customer_group": { + "$ref": "#/components/schemas/customer_group" + } + } + } + } + } + } + } + } + }, + "/customer-groups": { + "post": { + "operationId": "PostCustomerGroups", + "summary": "Create a CustomerGroup", + "description": "Creates a CustomerGroup.", + "x-authenticated": true, + "parameters": [], + "tags": [ + "Customer Group" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "customer_group": { + "$ref": "#/components/schemas/customer_group" + } + } + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the customer group" + }, + "metadata": { + "type": "object", + "description": "Metadata for the customer." + } + } + } + } + } + } + }, + "get": { + "operationId": "GetCustomerGroups", + "summary": "Retrieve a list of customer groups", + "description": "Retrieve a list of customer groups.", + "x-authenticated": true, + "parameters": [ + { + "in": "query", + "name": "q", + "description": "Query used for searching customer group names.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "offset", + "description": "How many groups to skip in the result.", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "in": "query", + "name": "order", + "description": "the field used to order the customer groups.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "id", + "style": "form", + "explode": false, + "description": "Filter by the customer group ID", + "schema": { + "oneOf": [ + { + "type": "string", + "description": "customer group ID" + }, + { + "type": "array", + "description": "multiple customer group IDs", + "items": { + "type": "string" + } + }, + { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by IDs less than this ID" + }, + "gt": { + "type": "string", + "description": "filter by IDs greater than this ID" + }, + "lte": { + "type": "string", + "description": "filter by IDs less than or equal to this ID" + }, + "gte": { + "type": "string", + "description": "filter by IDs greater than or equal to this ID" + } + } + } + ] + } + }, + { + "in": "query", + "name": "name", + "style": "form", + "explode": false, + "description": "Filter by the customer group name", + "schema": { + "type": "array", + "description": "multiple customer group names", + "items": { + "type": "string", + "description": "customer group name" + } + } + }, + { + "in": "query", + "name": "created_at", + "description": "Date comparison for when resulting customer groups were created.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "updated_at", + "description": "Date comparison for when resulting customer groups were updated.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "limit", + "description": "Limit the number of customer groups returned.", + "schema": { + "type": "integer", + "default": 10 + } + }, + { + "in": "query", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in each customer groups of the result.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Customer Group" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "customer_groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/customer_group" + } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" + } + } + } + } + } + } + } + } + }, + "/customer-groups/{id}": { + "delete": { + "operationId": "DeleteCustomerGroupsCustomerGroup", + "summary": "Delete a CustomerGroup", + "description": "Deletes a CustomerGroup.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Customer Group", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Customer Group" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "string", + "description": "The ID of the deleted customer group." + }, + "object": { + "type": "string", + "description": "The type of the object that was deleted.", + "default": "customer_group" + }, + "deleted": { + "type": "boolean", + "description": "Whether the customer group was deleted successfully or not.", + "default": true + } + } + } + } + } + } + } + }, + "get": { + "operationId": "GetCustomerGroupsGroup", + "summary": "Retrieve a CustomerGroup", + "description": "Retrieves a Customer Group.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Customer Group.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in the customer group.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "(Comma separated) Which fields should be included in the customer group.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Customer Group" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "customer_group": { + "$ref": "#/components/schemas/customer_group" + } + } + } + } + } + } + } + }, + "post": { + "operationId": "PostCustomerGroupsGroup", + "summary": "Update a CustomerGroup", + "description": "Update a CustomerGroup.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the customer group.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "description": "Name of the customer group", + "type": "string" + }, + "metadata": { + "description": "Metadata for the customer.", + "type": "object" + } + } + } + } + } + }, + "tags": [ + "Customer Group" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "customer_group": { + "$ref": "#/components/schemas/customer_group" + } + } + } + } + } + } + } + } + }, + "/customer-groups/{id}/customers": { + "get": { + "operationId": "GetCustomerGroupsGroupCustomers", + "summary": "List Customers", + "description": "Retrieves a list of customers in a customer group", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the customer group.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Customer Group" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "customers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/customer" + } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" + } + } + } + } + } + } + } + } + }, "/discounts/{id}/regions/{region_id}": { "post": { "operationId": "PostDiscountsDiscountRegionsRegion", @@ -1158,7 +2288,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Discount.", + "description": "The ID of the Discount.", "schema": { "type": "string" } @@ -1167,7 +2297,7 @@ "in": "path", "name": "region_id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -1203,7 +2333,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Discount.", + "description": "The ID of the Discount.", "schema": { "type": "string" } @@ -1212,7 +2342,7 @@ "in": "path", "name": "region_id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -1242,14 +2372,14 @@ "/discounts/{discount_id}/conditions": { "post": { "operationId": "PostDiscountsDiscountConditions", - "summary": "Creates a DiscountCondition", + "summary": "Creates a DiscountCondition. Only one of `products`, `product_types`, `product_collections`, `product_tags`, and `customer_groups` should be provided.", "x-authenticated": true, "parameters": [ { "in": "path", "name": "discount_id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -1276,33 +2406,51 @@ "content": { "application/json": { "schema": { + "required": [ + "operator" + ], "properties": { "operator": { "description": "Operator of the condition", - "type": "string" + "type": "string", + "enum": [ + "in", + "not_in" + ] }, - "items": { - "properties": { - "products": { - "type": "array", - "description": "list of products" - }, - "product_types": { - "type": "array", - "description": "list of product types" - }, - "product_collections": { - "type": "array", - "description": "list of product collections" - }, - "product_tags": { - "type": "array", - "description": "list of product tags" - }, - "customer_groups": { - "type": "array", - "description": "list of customer_groups" - } + "products": { + "type": "array", + "description": "list of product IDs if the condition is applied on products.", + "items": { + "type": "string" + } + }, + "product_types": { + "type": "array", + "description": "list of product type IDs if the condition is applied on product types.", + "items": { + "type": "string" + } + }, + "product_collections": { + "type": "array", + "description": "list of product collection IDs if the condition is applied on product collections.", + "items": { + "type": "string" + } + }, + "product_tags": { + "type": "array", + "description": "list of product tag IDs if the condition is applied on product tags.", + "items": { + "type": "string" + } + }, + "customer_groups": { + "type": "array", + "description": "list of customer group IDs if the condition is applied on customer groups.", + "items": { + "type": "string" } } } @@ -1311,7 +2459,7 @@ } }, "tags": [ - "Discount" + "Discount Condition" ], "responses": { "200": { @@ -1337,6 +2485,24 @@ "summary": "Creates a Discount", "x-authenticated": true, "description": "Creates a Discount with a given set of rules that define how the Discount behaves.", + "parameters": [ + { + "in": "query", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in each customer.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "(Comma separated) Which fields should be retrieved in each customer.", + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { @@ -1351,20 +2517,105 @@ "description": "A unique code that will be used to redeem the Discount" }, "is_dynamic": { - "type": "string", - "description": "Whether the Discount should have multiple instances of itself, each with a different code. This can be useful for automatically generated codes that all have to follow a common set of rules." + "type": "boolean", + "description": "Whether the Discount should have multiple instances of itself, each with a different code. This can be useful for automatically generated codes that all have to follow a common set of rules.", + "default": false }, "rule": { "description": "The Discount Rule that defines how Discounts are calculated", - "oneOf": [ - { - "$ref": "#/components/schemas/discount_rule" + "type": "object", + "required": [ + "type", + "value", + "allocation" + ], + "properties": { + "description": { + "type": "string", + "description": "A short description of the discount" + }, + "type": { + "type": "string", + "description": "The type of the Discount, can be `fixed` for discounts that reduce the price by a fixed amount, `percentage` for percentage reductions or `free_shipping` for shipping vouchers.", + "enum": [ + "fixed", + "percentage", + "free_shipping" + ] + }, + "value": { + "type": "number", + "description": "The value that the discount represents; this will depend on the type of the discount" + }, + "allocation": { + "type": "string", + "description": "The scope that the discount should apply to.", + "enum": [ + "total", + "item" + ] + }, + "conditions": { + "type": "array", + "description": "A set of conditions that can be used to limit when the discount can be used. Only one of `products`, `product_types`, `product_collections`, `product_tags`, and `customer_groups` should be provided.", + "items": { + "type": "object", + "required": [ + "operator" + ], + "properties": { + "operator": { + "type": "string", + "description": "Operator of the condition", + "enum": [ + "in", + "not_in" + ] + }, + "products": { + "type": "array", + "description": "list of product IDs if the condition is applied on products.", + "items": { + "type": "string" + } + }, + "product_types": { + "type": "array", + "description": "list of product type IDs if the condition is applied on product types.", + "items": { + "type": "string" + } + }, + "product_collections": { + "type": "array", + "description": "list of product collection IDs if the condition is applied on product collections.", + "items": { + "type": "string" + } + }, + "product_tags": { + "type": "array", + "description": "list of product tag IDs if the condition is applied on product tags.", + "items": { + "type": "string" + } + }, + "customer_groups": { + "type": "array", + "description": "list of customer group IDs if the condition is applied on customer groups.", + "items": { + "type": "string" + } + } + } + } } - ] + } }, "is_disabled": { "type": "boolean", - "description": "Whether the Discount code is disabled on creation. You will have to enable it later to make it available to Customers." + "description": "Whether the Discount code is disabled on creation. You will have to enable it later to make it available to Customers.", + "default": false }, "starts_at": { "type": "string", @@ -1376,6 +2627,11 @@ "format": "date-time", "description": "The time at which the Discount should no longer be available." }, + "valid_duration": { + "type": "string", + "description": "Duration the discount runs between", + "example": "P3Y6M4DT12H30M5S" + }, "regions": { "description": "A list of Region ids representing the Regions in which the Discount can be used.", "type": "array", @@ -1425,11 +2681,38 @@ { "in": "query", "name": "q", - "description": "Search query applied on results.", + "description": "Search query applied on the code field.", "schema": { "type": "string" } }, + { + "in": "query", + "name": "rule", + "description": "Discount Rules filters to apply on the search", + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "fixed", + "percentage", + "free_shipping" + ], + "description": "The type of the Discount, can be `fixed` for discounts that reduce the price by a fixed amount, `percentage` for percentage reductions or `free_shipping` for shipping vouchers." + }, + "allocation": { + "type": "string", + "enum": [ + "total", + "item" + ], + "description": "The value that the discount represents; this will depend on the type of the discount" + } + } + } + }, { "in": "query", "name": "is_dynamic", @@ -1451,7 +2734,8 @@ "name": "limit", "description": "The number of items in the response", "schema": { - "type": "number" + "type": "number", + "default": "20" } }, { @@ -1459,7 +2743,8 @@ "name": "offset", "description": "The offset of items in response", "schema": { - "type": "number" + "type": "number", + "default": "0" } }, { @@ -1481,8 +2766,23 @@ "application/json": { "schema": { "properties": { - "discount": { - "$ref": "#/components/schemas/discount" + "discounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/discount" + } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -1503,7 +2803,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Discount to create the dynamic code from.\"", + "description": "The ID of the Discount to create the dynamic code from.\"", "schema": { "type": "string" } @@ -1534,8 +2834,7 @@ "schema": { "type": "object", "required": [ - "code", - "usage_limit" + "code" ], "properties": { "code": { @@ -1544,7 +2843,8 @@ }, "usage_limit": { "type": "number", - "description": "amount of times the discount can be applied" + "default": "1", + "description": "amount of times the discount can be applied." }, "metadata": { "type": "object", @@ -1566,9 +2866,9 @@ "parameters": [ { "in": "path", - "name": "id", + "name": "discount_id", "required": true, - "description": "The id of the Discount", + "description": "The ID of the Discount", "schema": { "type": "string" } @@ -1577,14 +2877,30 @@ "in": "path", "name": "condition_id", "required": true, - "description": "The id of the DiscountCondition", + "description": "The ID of the DiscountCondition", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "expand", + "description": "Comma separated list of relations to include in the results.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "Comma separated list of fields to include in the results.", "schema": { "type": "string" } } ], "tags": [ - "Discount" + "Discount Condition" ], "responses": { "200": { @@ -1595,18 +2911,21 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted DiscountCondition" + "description": "The ID of the deleted DiscountCondition" }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "discount-condition" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether the discount condition was deleted successfully or not.", + "default": true }, "discount": { - "type": "object", - "description": "The Discount to which the condition used to belong" + "description": "The Discount to which the condition used to belong", + "$ref": "#/components/schemas/discount" } } } @@ -1624,7 +2943,7 @@ "in": "path", "name": "discount_id", "required": true, - "description": "The id of the Discount.", + "description": "The ID of the Discount.", "schema": { "type": "string" } @@ -1633,7 +2952,7 @@ "in": "path", "name": "condition_id", "required": true, - "description": "The id of the DiscountCondition.", + "description": "The ID of the DiscountCondition.", "schema": { "type": "string" } @@ -1657,7 +2976,7 @@ ], "description": "Gets a DiscountCondition", "tags": [ - "DiscountCondition" + "Discount Condition" ], "responses": { "200": { @@ -1678,14 +2997,23 @@ }, "post": { "operationId": "PostDiscountsDiscountConditionsCondition", - "summary": "Updates a DiscountCondition", + "summary": "Updates a DiscountCondition. Only one of `products`, `product_types`, `product_collections`, `product_tags`, and `customer_groups` should be provided.", "x-authenticated": true, "parameters": [ { "in": "path", "name": "discount_id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "condition_id", + "required": true, + "description": "The ID of the DiscountCondition.", "schema": { "type": "string" } @@ -1693,7 +3021,7 @@ { "in": "query", "name": "expand", - "description": "(Comma separated) Which fields should be expanded in each product of the result.", + "description": "(Comma separated) Which fields should be expanded in each item of the result.", "schema": { "type": "string" } @@ -1701,7 +3029,7 @@ { "in": "query", "name": "fields", - "description": "(Comma separated) Which fields should be included in each product of the result.", + "description": "(Comma separated) Which fields should be included in each item of the result.", "schema": { "type": "string" } @@ -1712,32 +3040,40 @@ "content": { "application/json": { "schema": { - "required": [ - "id" - ], "properties": { - "items": { - "properties": { - "products": { - "type": "array", - "description": "list of products" - }, - "product_types": { - "type": "array", - "description": "list of product types" - }, - "product_collections": { - "type": "array", - "description": "list of product collections" - }, - "product_tags": { - "type": "array", - "description": "list of product tags" - }, - "customer_groups": { - "type": "array", - "description": "list of customer_groups" - } + "products": { + "type": "array", + "description": "list of product IDs if the condition is applied on products.", + "items": { + "type": "string" + } + }, + "product_types": { + "type": "array", + "description": "list of product type IDs if the condition is applied on product types.", + "items": { + "type": "string" + } + }, + "product_collections": { + "type": "array", + "description": "list of product collection IDs if the condition is applied on product collections.", + "items": { + "type": "string" + } + }, + "product_tags": { + "type": "array", + "description": "list of product tag IDs if the condition is applied on product tags.", + "items": { + "type": "string" + } + }, + "customer_groups": { + "type": "array", + "description": "list of customer group IDs if the condition is applied on customer groups.", + "items": { + "type": "string" } } } @@ -1777,7 +3113,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Discount", + "description": "The ID of the Discount", "schema": { "type": "string" } @@ -1795,14 +3131,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Discount" + "description": "The ID of the deleted Discount" }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "discount" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether the discount was deleted successfully or not.", + "default": true } } } @@ -1821,7 +3160,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Discount", + "description": "The ID of the Discount", "schema": { "type": "string" } @@ -1873,7 +3212,23 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Discount.", + "description": "The ID of the Discount.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in each item of the result.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "(Comma separated) Which fields should be included in each item of the result.", "schema": { "type": "string" } @@ -1890,11 +3245,91 @@ }, "rule": { "description": "The Discount Rule that defines how Discounts are calculated", - "oneOf": [ - { - "$ref": "#/components/schemas/discount_rule" + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "description": "The ID of the Rule" + }, + "description": { + "type": "string", + "description": "A short description of the discount" + }, + "value": { + "type": "number", + "description": "The value that the discount represents; this will depend on the type of the discount" + }, + "allocation": { + "type": "string", + "description": "The scope that the discount should apply to.", + "enum": [ + "total", + "item" + ] + }, + "conditions": { + "type": "array", + "description": "A set of conditions that can be used to limit when the discount can be used. Only one of `products`, `product_types`, `product_collections`, `product_tags`, and `customer_groups` should be provided.", + "items": { + "type": "object", + "required": [ + "operator" + ], + "properties": { + "id": { + "type": "string", + "description": "The ID of the Rule" + }, + "operator": { + "type": "string", + "description": "Operator of the condition", + "enum": [ + "in", + "not_in" + ] + }, + "products": { + "type": "array", + "description": "list of product IDs if the condition is applied on products.", + "items": { + "type": "string" + } + }, + "product_types": { + "type": "array", + "description": "list of product type IDs if the condition is applied on product types.", + "items": { + "type": "string" + } + }, + "product_collections": { + "type": "array", + "description": "list of product collection IDs if the condition is applied on product collections.", + "items": { + "type": "string" + } + }, + "product_tags": { + "type": "array", + "description": "list of product tag IDs if the condition is applied on product tags.", + "items": { + "type": "string" + } + }, + "customer_groups": { + "type": "array", + "description": "list of customer group IDs if the condition is applied on customer groups.", + "items": { + "type": "string" + } + } + } + } } - ] + } }, "is_disabled": { "type": "boolean", @@ -1910,6 +3345,15 @@ "format": "date-time", "description": "The time at which the Discount should no longer be available." }, + "valid_duration": { + "type": "string", + "description": "Duration the discount runs between", + "example": "P3Y6M4DT12H30M5S" + }, + "usage_limit": { + "type": "number", + "description": "Maximum times the discount can be used" + }, "regions": { "description": "A list of Region ids representing the Regions in which the Discount can be used.", "type": "array", @@ -1958,7 +3402,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Discount", + "description": "The ID of the Discount", "schema": { "type": "string" } @@ -1967,7 +3411,7 @@ "in": "path", "name": "code", "required": true, - "description": "The id of the Discount", + "description": "The ID of the Discount", "schema": { "type": "string" } @@ -2009,6 +3453,22 @@ "schema": { "type": "string" } + }, + { + "in": "query", + "name": "expand", + "description": "Comma separated list of relations to include in the results.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "Comma separated list of fields to include in the results.", + "schema": { + "type": "string" + } } ], "tags": [ @@ -2032,449 +3492,6 @@ } } }, - "/customer-groups/{id}/customers/batch": { - "post": { - "operationId": "PostCustomerGroupsGroupCustomersBatch", - "summary": "Add a list of customers to a customer group ", - "description": "Adds a list of customers, represented by id's, to a customer group.", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the customer group.", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "customers": { - "description": "The ids of the customers to add", - "type": "array", - "items": { - "required": [ - "id" - ], - "properties": { - "id": { - "description": "Id of the customer", - "type": "string" - } - } - } - } - } - } - } - } - }, - "tags": [ - "CustomerGroup" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "customerGroup": { - "$ref": "#/components/schemas/customer_group" - } - } - } - } - } - } - } - }, - "delete": { - "operationId": "DeleteCustomerGroupsGroupCustomerBatch", - "summary": "Remove a list of customers from a customer group ", - "description": "Removes a list of customers, represented by id's, from a customer group.", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the customer group.", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "customers": { - "description": "The ids of the customers to remove", - "type": "array", - "items": { - "required": [ - "id" - ], - "properties": { - "id": { - "description": "Id of the customer", - "type": "string" - } - } - } - } - } - } - } - } - }, - "tags": [ - "CustomerGroup" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "customerGroup": { - "$ref": "#/components/schemas/customer_group" - } - } - } - } - } - } - } - } - }, - "/customer-groups": { - "post": { - "operationId": "PostCustomerGroups", - "summary": "Create a CustomerGroup", - "description": "Creates a CustomerGroup.", - "x-authenticated": true, - "parameters": [], - "tags": [ - "CustomerGroup" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "customer_group": { - "$ref": "#/components/schemas/customer_group" - } - } - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string", - "description": "Name of the customer group" - }, - "metadata": { - "type": "object", - "description": "Metadata for the customer." - } - } - } - } - } - } - }, - "get": { - "operationId": "GetCustomerGroups", - "summary": "Retrieve a list of customer groups", - "description": "Retrieve a list of customer groups.", - "x-authenticated": true, - "parameters": [ - { - "in": "query", - "name": "q", - "description": "Query used for searching user group names.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "offset", - "description": "How many groups to skip in the result.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "id", - "description": "Ids of the groups to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "order", - "description": "to retrieve customer groups in.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "created_at", - "description": "Date comparison for when resulting customer group was created, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - }, - { - "in": "query", - "name": "updated_at", - "description": "Date comparison for when resulting ustomer group was updated, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - }, - { - "in": "query", - "name": "limit", - "description": "Limit the number of customer groups returned.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "expand", - "description": "(Comma separated) Which fields should be expanded in each customer groups of the result.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "CustomerGroup" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "customerGroup": { - "$ref": "#/components/schemas/customer_group" - } - } - } - } - } - } - } - } - }, - "/customer-groups/{id}": { - "delete": { - "operationId": "DeleteCustomerGroupsCustomerGroup", - "summary": "Delete a CustomerGroup", - "description": "Deletes a CustomerGroup.", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the Customer Group", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "CustomerGroup" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "id": { - "type": "string", - "description": "The id of the deleted customer group." - }, - "object": { - "type": "string", - "description": "The type of the object that was deleted." - }, - "deleted": { - "type": "boolean" - } - } - } - } - } - } - } - }, - "get": { - "operationId": "GetCustomerGroupsGroup", - "summary": "Retrieve a CustomerGroup", - "description": "Retrieves a Customer Group.", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the Customer Group.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "CustomerGroup" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "customer_group": { - "$ref": "#/components/schemas/customer_group" - } - } - } - } - } - } - } - }, - "post": { - "operationId": "PostCustomerGroupsGroup", - "summary": "Update a CustomerGroup", - "description": "Update a CustomerGroup.", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the customer group.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "CustomerGroup" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "customer_group": { - "$ref": "#/components/schemas/customer_group" - } - } - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string", - "description": "Name of the customer group" - }, - "metadata": { - "type": "object", - "description": "Metadata for the customer." - } - } - } - } - } - } - } - }, - "/customer-groups/{id}/customers": { - "get": { - "operationId": "GetCustomerGroupsGroupCustomers", - "summary": "List Customers", - "description": "Retrieves a list of Customers.", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the customer group.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "Customer" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "customer": { - "$ref": "#/components/schemas/customer" - } - } - } - } - } - } - } - } - }, "/draft-orders": { "post": { "operationId": "PostDraftOrders", @@ -2494,35 +3511,36 @@ "properties": { "status": { "description": "The status of the draft order", - "type": "string" + "type": "string", + "enum": [ + "open", + "completed" + ] }, "email": { "description": "The email of the customer of the draft order", - "type": "string" + "type": "string", + "format": "email" }, "billing_address": { "description": "The Address to be used for billing purposes.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "$ref": "#/components/schemas/address" }, "shipping_address": { "description": "The Address to be used for shipping.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "$ref": "#/components/schemas/address" }, "items": { "description": "The Line Items that have been received.", "type": "array", "items": { + "type": "object", + "required": [ + "quantity" + ], "properties": { "variant_id": { - "description": "The id of the Product Variant to generate the Line Item from.", + "description": "The ID of the Product Variant to generate the Line Item from.", "type": "string" }, "unit_price": { @@ -2545,13 +3563,17 @@ } }, "region_id": { - "description": "The id of the region for the draft order", + "description": "The ID of the region for the draft order", "type": "string" }, "discounts": { "description": "The discounts to add on the draft order", "type": "array", "items": { + "type": "object", + "required": [ + "code" + ], "properties": { "code": { "description": "The code of the discount to apply", @@ -2561,7 +3583,7 @@ } }, "customer_id": { - "description": "The id of the customer to add on the draft order", + "description": "The ID of the customer to add on the draft order", "type": "string" }, "no_notification_order": { @@ -2572,9 +3594,13 @@ "description": "The shipping methods for the draft order", "type": "array", "items": { + "type": "object", + "required": [ + "option_id" + ], "properties": { "option_id": { - "description": "The id of the shipping option in use", + "description": "The ID of the shipping option in use", "type": "string" }, "data": { @@ -2622,6 +3648,34 @@ "summary": "List Draft Orders", "description": "Retrieves an list of Draft Orders", "x-authenticated": true, + "parameters": [ + { + "in": "query", + "name": "offset", + "description": "The number of items to skip before the results.", + "schema": { + "type": "number", + "default": "0" + } + }, + { + "in": "query", + "name": "limit", + "description": "Limit the number of items returned.", + "schema": { + "type": "number", + "default": "50" + } + }, + { + "in": "query", + "name": "q", + "description": "a search term to search emails in carts associated with draft orders and display IDs of draft orders", + "schema": { + "type": "string" + } + } + ], "tags": [ "Draft Order" ], @@ -2632,8 +3686,23 @@ "application/json": { "schema": { "properties": { - "draft_order": { - "$ref": "#/components/schemas/draft-order" + "draft_orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/draft-order" + } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -2654,7 +3723,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Draft Order.", + "description": "The ID of the Draft Order.", "schema": { "type": "string" } @@ -2669,7 +3738,7 @@ ], "properties": { "variant_id": { - "description": "The id of the Product Variant to generate the Line Item from.", + "description": "The ID of the Product Variant to generate the Line Item from.", "type": "string" }, "unit_price": { @@ -2678,7 +3747,8 @@ }, "title": { "description": "The potential custom title of the item.", - "type": "string" + "type": "string", + "default": "Custom item" }, "quantity": { "description": "The quantity of the Line Item.", @@ -2725,7 +3795,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Draft Order.", + "description": "The ID of the Draft Order.", "schema": { "type": "string" } @@ -2743,14 +3813,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Draft Order." + "description": "The ID of the deleted Draft Order." }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "draft-order" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether the draft order was deleted successfully or not.", + "default": true } } } @@ -2769,7 +3842,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Draft Order.", + "description": "The ID of the Draft Order.", "schema": { "type": "string" } @@ -2807,7 +3880,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Draft Order.", + "description": "The ID of the Draft Order.", "schema": { "type": "string" } @@ -2816,7 +3889,7 @@ "in": "path", "name": "line_id", "required": true, - "description": "The id of the Draft Order.", + "description": "The ID of the Draft Order.", "schema": { "type": "string" } @@ -2852,7 +3925,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Draft Order.", + "description": "The ID of the Draft Order.", "schema": { "type": "string" } @@ -2861,7 +3934,7 @@ "in": "path", "name": "line_id", "required": true, - "description": "The id of the Line Item.", + "description": "The ID of the Line Item.", "schema": { "type": "string" } @@ -2914,7 +3987,7 @@ } } }, - "/draft-orders/{id}/register-payment": { + "/draft-orders/{id}/pay": { "post": { "summary": "Registers a payment for a Draft Order", "operationId": "PostDraftOrdersDraftOrderRegisterPayment", @@ -2941,7 +4014,7 @@ "application/json": { "schema": { "properties": { - "draft_order": { + "order": { "$ref": "#/components/schemas/draft-order" } } @@ -2963,7 +4036,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Draft Order.", + "description": "The ID of the Draft Order.", "schema": { "type": "string" } @@ -2976,32 +4049,37 @@ "properties": { "region_id": { "type": "string", - "description": "The id of the Region to create the Draft Order in." + "description": "The ID of the Region to create the Draft Order in." + }, + "country_code": { + "type": "string", + "description": "The 2 character ISO code for the Country.", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements", + "description": "See a list of codes." + } }, "email": { "type": "string", - "description": "An email to be used on the Draft Order." + "description": "An email to be used on the Draft Order.", + "format": "email" }, "billing_address": { "description": "The Address to be used for billing purposes.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "$ref": "#/components/schemas/address" }, "shipping_address": { "description": "The Address to be used for shipping.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "$ref": "#/components/schemas/address" }, "discounts": { "description": "An array of Discount codes to add to the Draft Order.", "type": "array", "items": { + "type": "object", + "required": [ + "code" + ], "properties": { "code": { "description": "The code that a Discount is identifed by.", @@ -3015,7 +4093,7 @@ "type": "boolean" }, "customer_id": { - "description": "The id of the Customer to associate the Draft Order with.", + "description": "The ID of the Customer to associate the Draft Order with.", "type": "string" } } @@ -3054,6 +4132,9 @@ "content": { "application/json": { "schema": { + "required": [ + "region_id" + ], "properties": { "value": { "type": "integer", @@ -3069,11 +4150,8 @@ "description": "The time at which the Gift Card should no longer be available." }, "region_id": { - "description": "The id of the Region in which the Gift Card can be used.", - "type": "array", - "items": { - "type": "string" - } + "description": "The ID of the Region in which the Gift Card can be used.", + "type": "string" }, "metadata": { "description": "An optional set of key-value pairs to hold additional information.", @@ -3109,6 +4187,34 @@ "summary": "List Gift Cards", "description": "Retrieves a list of Gift Cards.", "x-authenticated": true, + "parameters": [ + { + "in": "query", + "name": "offset", + "description": "The number of items to skip before the results.", + "schema": { + "type": "number", + "default": "0" + } + }, + { + "in": "query", + "name": "limit", + "description": "Limit the number of items returned.", + "schema": { + "type": "number", + "default": "50" + } + }, + { + "in": "query", + "name": "q", + "description": "a search term to search by code or display ID", + "schema": { + "type": "string" + } + } + ], "tags": [ "Gift Card" ], @@ -3124,6 +4230,18 @@ "items": { "$ref": "#/components/schemas/gift_card" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -3144,7 +4262,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Gift Card to delete.", + "description": "The ID of the Gift Card to delete.", "schema": { "type": "string" } @@ -3162,14 +4280,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Gift Card" + "description": "The ID of the deleted Gift Card" }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "gift-card" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether the gift card was deleted successfully or not.", + "default": true } } } @@ -3188,7 +4309,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Gift Card.", + "description": "The ID of the Gift Card.", "schema": { "type": "string" } @@ -3224,7 +4345,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Gift Card.", + "description": "The ID of the Gift Card.", "schema": { "type": "string" } @@ -3249,11 +4370,8 @@ "description": "The time at which the Gift Card should no longer be available." }, "region_id": { - "description": "The id of the Region in which the Gift Card can be used.", - "type": "array", - "items": { - "type": "string" - } + "description": "The ID of the Region in which the Gift Card can be used.", + "type": "string" }, "metadata": { "description": "An optional set of key-value pairs to hold additional information.", @@ -3322,7 +4440,8 @@ }, "password": { "description": "The desired password for the User", - "type": "string" + "type": "string", + "format": "password" } } } @@ -3332,7 +4451,7 @@ } }, "tags": [ - "Invites" + "Invite" ], "responses": { "200": { @@ -3358,11 +4477,17 @@ "properties": { "user": { "description": "The email for the user to be created.", - "type": "string" + "type": "string", + "format": "email" }, "role": { "description": "The role of the user to be created.", - "type": "string" + "type": "string", + "enum": [ + "admin", + "member", + "developer" + ] } } } @@ -3370,7 +4495,7 @@ } }, "tags": [ - "Invites" + "Invite" ], "responses": { "200": { @@ -3384,7 +4509,7 @@ "description": "Lists all Invites", "x-authenticated": true, "tags": [ - "Invites" + "Invite" ], "responses": { "200": { @@ -3418,18 +4543,40 @@ "in": "path", "name": "invite_id", "required": true, - "description": "The id of the Invite", + "description": "The ID of the Invite", "schema": { "type": "string" } } ], "tags": [ - "Invites" + "Invite" ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "string", + "description": "The ID of the deleted Invite." + }, + "object": { + "type": "string", + "description": "The type of the object that was deleted.", + "format": "invite" + }, + "deleted": { + "type": "boolean", + "description": "Whether or not the Invite was deleted.", + "default": true + } + } + } + } + } } } } @@ -3445,14 +4592,14 @@ "in": "path", "name": "invite_id", "required": true, - "description": "The id of the Invite", + "description": "The ID of the Invite", "schema": { "type": "string" } } ], "tags": [ - "Invites" + "Invite" ], "responses": { "200": { @@ -3461,6 +4608,164 @@ } } }, + "/notifications": { + "get": { + "operationId": "GetNotifications", + "summary": "List Notifications", + "description": "Retrieves a list of Notifications.", + "x-authenticated": true, + "parameters": [ + { + "in": "query", + "name": "offset", + "description": "The number of notifications to skip before starting to collect the notifications set", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "in": "query", + "name": "limit", + "description": "The number of notifications to return", + "schema": { + "type": "integer", + "default": 50 + } + }, + { + "in": "query", + "name": "fields", + "description": "Comma separated fields to include in the result set", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "expand", + "description": "Comma separated fields to populate", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "event_name", + "description": "The name of the event that the notification was sent for.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "resource_type", + "description": "The type of resource that the Notification refers to.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "resource_id", + "description": "The ID of the resource that the Notification refers to.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "to", + "description": "The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "include_resends", + "description": "A boolean indicating whether the result set should include resent notifications or not", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Notification" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "notifications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/notification" + } + } + } + } + } + } + } + } + } + }, + "/notifications/{id}/resend": { + "post": { + "operationId": "PostNotificationsNotificationResend", + "summary": "Resend Notification", + "description": "Resends a previously sent notifications, with the same data but optionally to a different address", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Notification", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "to": { + "description": "A new address or user identifier that the Notification should be sent to", + "type": "string" + } + } + } + } + } + }, + "tags": [ + "Notification" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "notification": { + "$ref": "#/components/schemas/notification" + } + } + } + } + } + } + } + } + }, "/notes": { "post": { "operationId": "PostNotes", @@ -3471,10 +4776,15 @@ "content": { "application/json": { "schema": { + "required": [ + "resource_id", + "resource_type", + "value" + ], "properties": { "resource_id": { "type": "string", - "description": "The id of the resource which the Note relates to." + "description": "The ID of the resource which the Note relates to." }, "resource_type": { "type": "string", @@ -3516,33 +4826,29 @@ "description": "Retrieves a list of notes", "parameters": [ { - "in": "path", + "in": "query", "name": "limit", - "required": true, "description": "The number of notes to get", "schema": { "type": "number", - "default": "" + "default": "50" } }, { - "in": "path", + "in": "query", "name": "offset", - "required": true, "description": "The offset at which to get notes", "schema": { "type": "number", - "default": "" + "default": "0" } }, { - "in": "path", + "in": "query", "name": "resource_id", - "required": true, - "description": "The id which the notes belongs to", + "description": "The ID which the notes belongs to", "schema": { - "type": "string", - "default": "" + "type": "string" } } ], @@ -3561,6 +4867,18 @@ "items": { "$ref": "#/components/schemas/note" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -3581,7 +4899,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Note to delete.", + "description": "The ID of the Note to delete.", "schema": { "type": "string" } @@ -3599,11 +4917,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Note." + "description": "The ID of the deleted Note." + }, + "object": { + "type": "string", + "description": "The type of the object that was deleted.", + "default": "note" }, "deleted": { "type": "boolean", - "description": "Whether or not the Note was deleted." + "description": "Whether or not the Note was deleted.", + "default": true } } } @@ -3622,7 +4946,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the note to retrieve.", + "description": "The ID of the note to retrieve.", "schema": { "type": "string" } @@ -3658,7 +4982,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Note to update", + "description": "The ID of the Note to update", "schema": { "type": "string" } @@ -3702,160 +5026,6 @@ } } }, - "/notifications": { - "get": { - "operationId": "GetNotifications", - "summary": "List Notifications", - "description": "Retrieves a list of Notifications.", - "x-authenticated": true, - "parameters": [ - { - "in": "query", - "name": "offset", - "description": "The number of notifications to skip before starting to collect the notifications set", - "schema": { - "type": "integer", - "default": 0 - } - }, - { - "in": "query", - "name": "limit", - "description": "The number of notifications to return", - "schema": { - "type": "integer", - "default": 50 - } - }, - { - "in": "query", - "name": "fields", - "description": "The fields to include in the result set", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "expand", - "description": "The fields to populate", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "event_name", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "resource_type", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "resource_id", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "to", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "include_resends", - "description": "Whether the result set should include resent notifications or not", - "schema": { - "type": "boolean" - } - } - ], - "tags": [ - "Notification" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "notifications": { - "type": "array", - "items": { - "$ref": "#/components/schemas/notification" - } - } - } - } - } - } - } - } - } - }, - "/notifications/{id}/resend": { - "post": { - "operationId": "PostNotificationsNotificationResend", - "summary": "Resend Notification", - "description": "Resends a previously sent notifications, with the same data but optionally to a different address", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the Notification", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "to": { - "description": "The address or user identifier that the Notification was sent to", - "type": "string" - } - } - } - } - } - }, - "tags": [ - "Notification" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "notification": { - "$ref": "#/components/schemas/notification" - } - } - } - } - } - } - } - } - }, "/orders/{id}/shipping-methods": { "post": { "operationId": "PostOrdersOrderShippingMethods", @@ -3867,7 +5037,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -3899,8 +5069,7 @@ "type": "object", "required": [ "price", - "option_id", - "data" + "option_id" ], "properties": { "price": { @@ -3909,7 +5078,7 @@ }, "option_id": { "type": "string", - "description": "The id of the Shipping Option to create the Shipping Method from." + "description": "The ID of the Shipping Option to create the Shipping Method from." }, "data": { "type": "object", @@ -3933,7 +5102,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -3971,7 +5140,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -3980,7 +5149,7 @@ "in": "path", "name": "claim_id", "required": true, - "description": "The id of the Claim.", + "description": "The ID of the Claim.", "schema": { "type": "string" } @@ -3997,7 +5166,7 @@ "schema": { "properties": { "order": { - "$ref": "#/components/schemas/claim_order" + "$ref": "#/components/schemas/order" } } } @@ -4018,7 +5187,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order which the Claim relates to.", + "description": "The ID of the Order which the Claim relates to.", "schema": { "type": "string" } @@ -4027,7 +5196,7 @@ "in": "path", "name": "claim_id", "required": true, - "description": "The id of the Claim which the Fulfillment relates to.", + "description": "The ID of the Claim which the Fulfillment relates to.", "schema": { "type": "string" } @@ -4036,7 +5205,7 @@ "in": "path", "name": "fulfillment_id", "required": true, - "description": "The id of the Fulfillment.", + "description": "The ID of the Fulfillment.", "schema": { "type": "string" } @@ -4052,8 +5221,8 @@ "application/json": { "schema": { "properties": { - "fulfillment": { - "$ref": "#/components/schemas/fulfillment" + "order": { + "$ref": "#/components/schemas/order" } } } @@ -4074,7 +5243,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order which the Swap relates to.", + "description": "The ID of the Order which the Swap relates to.", "schema": { "type": "string" } @@ -4083,7 +5252,7 @@ "in": "path", "name": "swap_id", "required": true, - "description": "The id of the Swap which the Fulfillment relates to.", + "description": "The ID of the Swap which the Fulfillment relates to.", "schema": { "type": "string" } @@ -4092,7 +5261,7 @@ "in": "path", "name": "fulfillment_id", "required": true, - "description": "The id of the Fulfillment.", + "description": "The ID of the Fulfillment.", "schema": { "type": "string" } @@ -4108,8 +5277,8 @@ "application/json": { "schema": { "properties": { - "fulfillment": { - "$ref": "#/components/schemas/fulfillment" + "order": { + "$ref": "#/components/schemas/order" } } } @@ -4130,7 +5299,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order which the Fulfillment relates to.", + "description": "The ID of the Order which the Fulfillment relates to.", "schema": { "type": "string" } @@ -4139,7 +5308,7 @@ "in": "path", "name": "fulfillment_id", "required": true, - "description": "The id of the Fulfillment", + "description": "The ID of the Fulfillment", "schema": { "type": "string" } @@ -4155,8 +5324,8 @@ "application/json": { "schema": { "properties": { - "fulfillment": { - "$ref": "#/components/schemas/fulfillment" + "order": { + "$ref": "#/components/schemas/order" } } } @@ -4177,7 +5346,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -4215,7 +5384,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -4224,7 +5393,7 @@ "in": "path", "name": "swap_id", "required": true, - "description": "The id of the Swap.", + "description": "The ID of the Swap.", "schema": { "type": "string" } @@ -4241,7 +5410,7 @@ "schema": { "properties": { "order": { - "$ref": "#/components/schemas/swap" + "$ref": "#/components/schemas/order" } } } @@ -4262,7 +5431,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -4300,7 +5469,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -4338,7 +5507,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -4347,7 +5516,7 @@ "in": "path", "name": "claim_id", "required": true, - "description": "The id of the Claim.", + "description": "The ID of the Claim.", "schema": { "type": "string" } @@ -4362,7 +5531,7 @@ ], "properties": { "fulfillment_id": { - "description": "The id of the Fulfillment.", + "description": "The ID of the Fulfillment.", "type": "string" }, "tracking_numbers": { @@ -4378,7 +5547,7 @@ } }, "tags": [ - "Order" + "Claim" ], "responses": { "200": { @@ -4409,7 +5578,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -4436,9 +5605,13 @@ "description": "The Claim Items that the Claim will consist of.", "type": "array", "items": { + "required": [ + "item_id", + "quantity" + ], "properties": { "item_id": { - "description": "The id of the Line Item that will be claimed.", + "description": "The ID of the Line Item that will be claimed.", "type": "string" }, "quantity": { @@ -4481,7 +5654,7 @@ "properties": { "option_id": { "type": "string", - "description": "The id of the Shipping Option to create the Shipping Method from." + "description": "The ID of the Shipping Option to create the Shipping Method from." }, "price": { "type": "integer", @@ -4493,9 +5666,13 @@ "description": "The new items to send to the Customer when the Claim type is Replace.", "type": "array", "items": { + "required": [ + "variant_id", + "quantity" + ], "properties": { "variant_id": { - "description": "The id of the Product Variant to ship.", + "description": "The ID of the Product Variant to ship.", "type": "string" }, "quantity": { @@ -4511,11 +5688,11 @@ "items": { "properties": { "id": { - "description": "The id of an existing Shipping Method", + "description": "The ID of an existing Shipping Method", "type": "string" }, "option_id": { - "description": "The id of the Shipping Option to create a Shipping Method from", + "description": "The ID of the Shipping Option to create a Shipping Method from", "type": "string" }, "price": { @@ -4527,7 +5704,8 @@ }, "shipping_address": { "type": "object", - "description": "An optional shipping address to send the claim to. Defaults to the parent order's shipping address" + "description": "An optional shipping address to send the claim to. Defaults to the parent order's shipping address", + "$ref": "#/components/schemas/address" }, "refund_amount": { "description": "The amount to refund the Customer when the Claim type is `refund`.", @@ -4547,7 +5725,7 @@ } }, "tags": [ - "Order" + "Claim" ], "responses": { "200": { @@ -4567,7 +5745,7 @@ } } }, - "/orders/{id}/fulfillments": { + "/orders/{id}/fulfillment": { "post": { "operationId": "PostOrdersOrderFulfillments", "summary": "Create a Fulfillment", @@ -4578,7 +5756,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -4596,9 +5774,13 @@ "description": "The Line Items to include in the Fulfillment.", "type": "array", "items": { + "required": [ + "item_id", + "quantity" + ], "properties": { "item_id": { - "description": "The id of Line Item to fulfill.", + "description": "The ID of Line Item to fulfill.", "type": "string" }, "quantity": { @@ -4622,7 +5804,7 @@ } }, "tags": [ - "Order" + "Fulfillment" ], "responses": { "200": { @@ -4642,341 +5824,6 @@ } } }, - "/orders": { - "post": { - "operationId": "PostOrders", - "summary": "Create an order", - "description": "Creates and order", - "x-authenticated": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "required": [ - "email", - "billing_address", - "shipping_address", - "items", - "region", - "customer_id", - "payment_method", - "shipping_method" - ], - "properties": { - "status": { - "description": "status of the order", - "type": "string" - }, - "email": { - "description": "the email for the order", - "type": "string" - }, - "billing_address": { - "description": "Billing address", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] - }, - "shipping_address": { - "description": "Shipping address", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] - }, - "items": { - "description": "The Line Items for the order", - "type": "array", - "items": { - "$ref": "#/components/schemas/line_item" - } - }, - "region": { - "description": "Region where the order belongs", - "type": "string" - }, - "discounts": { - "description": "Discounts applied to the order", - "type": "array", - "items": { - "$ref": "#/components/schemas/line_item" - } - }, - "customer_id": { - "description": "id of the customer", - "type": "string" - }, - "payment_method": { - "description": "payment method chosen for the order", - "type": "object", - "required": [ - "provider_id" - ], - "properties": { - "provider_id": { - "type": "string", - "description": "id of the payment provider" - }, - "data": { - "description": "Data relevant for the given payment method", - "type": "object" - } - } - }, - "shipping_method": { - "description": "The Shipping Method used for shipping the order.", - "type": "object", - "required": [ - "provider_id", - "profile_id", - "price" - ], - "properties": { - "provider_id": { - "type": "string", - "description": "The id of the shipping provider." - }, - "profile_id": { - "type": "string", - "description": "The id of the shipping profile." - }, - "price": { - "type": "integer", - "description": "The price of the shipping." - }, - "data": { - "type": "object", - "description": "Data relevant to the specific shipping method." - }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/line_item" - }, - "description": "Items to ship" - } - } - }, - "no_notification": { - "description": "A flag to indicate if no notifications should be emitted related to the updated order.", - "type": "boolean" - } - } - } - } - } - }, - "tags": [ - "Order" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "order": { - "$ref": "#/components/schemas/order" - } - } - } - } - } - } - } - }, - "get": { - "operationId": "GetOrders", - "summary": "List Orders", - "description": "Retrieves a list of Orders", - "x-authenticated": true, - "parameters": [ - { - "in": "query", - "name": "q", - "description": "Query used for searching orders.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "id", - "description": "Id of the order to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "status", - "style": "form", - "explode": false, - "description": "Status to search for", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "in": "query", - "name": "fulfillment_status", - "description": "Fulfillment status to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "payment_status", - "description": "Payment status to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "display_id", - "description": "Display id to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "cart_id", - "description": "to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "customer_id", - "description": "to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "email", - "description": "to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "region_id", - "description": "to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "currency_code", - "description": "to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "tax_rate", - "description": "to search for.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "cancelled_at", - "description": "Date comparison for when resulting orders was cancelled, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - }, - { - "in": "query", - "name": "created_at", - "description": "Date comparison for when resulting orders was created, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - }, - { - "in": "query", - "name": "updated_at", - "description": "Date comparison for when resulting orders was updated, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - }, - { - "in": "query", - "name": "offset", - "description": "How many orders to skip in the result.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "limit", - "description": "Limit the number of orders returned.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "expand", - "description": "(Comma separated) Which fields should be expanded in each order of the result.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "fields", - "description": "(Comma separated) Which fields should be included in each order of the result.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "Order" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "orders": { - "type": "array", - "items": { - "$ref": "#/components/schemas/order" - } - } - } - } - } - } - } - } - } - }, "/orders/{id}/shipment": { "post": { "operationId": "PostOrdersOrderShipment", @@ -4988,7 +5835,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5003,7 +5850,7 @@ ], "properties": { "fulfillment_id": { - "description": "The id of the Fulfillment.", + "description": "The ID of the Fulfillment.", "type": "string" }, "tracking_numbers": { @@ -5054,7 +5901,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5063,7 +5910,7 @@ "in": "path", "name": "swap_id", "required": true, - "description": "The id of the Swap.", + "description": "The ID of the Swap.", "schema": { "type": "string" } @@ -5078,7 +5925,7 @@ ], "properties": { "fulfillment_id": { - "description": "The id of the Fulfillment.", + "description": "The ID of the Fulfillment.", "type": "string" }, "tracking_numbers": { @@ -5098,7 +5945,7 @@ } }, "tags": [ - "Order" + "Swap" ], "responses": { "200": { @@ -5129,7 +5976,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5153,12 +6000,20 @@ ], "properties": { "item_id": { - "description": "The id of the Line Item that will be claimed.", + "description": "The ID of the Line Item that will be claimed.", "type": "string" }, "quantity": { "description": "The number of items that will be returned", "type": "integer" + }, + "reason_id": { + "description": "The ID of the Return Reason to use.", + "type": "string" + }, + "note": { + "description": "An optional note with information about the Return.", + "type": "string" } } } @@ -5166,10 +6021,13 @@ "return_shipping": { "description": "How the Swap will be returned.", "type": "object", + "required": [ + "option_id" + ], "properties": { "option_id": { "type": "string", - "description": "The id of the Shipping Option to create the Shipping Method from." + "description": "The ID of the Shipping Option to create the Shipping Method from." }, "price": { "type": "integer", @@ -5187,7 +6045,7 @@ ], "properties": { "variant_id": { - "description": "The id of the Product Variant to ship.", + "description": "The ID of the Product Variant to ship.", "type": "string" }, "quantity": { @@ -5207,7 +6065,7 @@ ], "properties": { "option_id": { - "description": "The id of the Shipping Option to override with a custom price.", + "description": "The ID of the Shipping Option to override with a custom price.", "type": "string" }, "price": { @@ -5223,7 +6081,8 @@ }, "allow_backorder": { "description": "If true, swaps can be completed with items out of stock", - "type": "boolean" + "type": "boolean", + "default": true } } } @@ -5231,54 +6090,7 @@ } }, "tags": [ - "Order" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "order": { - "$ref": "#/components/schemas/order" - } - } - } - } - } - } - } - } - }, - "/order/{id}/metadata/{key}": { - "delete": { - "operationId": "DeleteOrdersOrderMetadataKey", - "summary": "Delete Metadata", - "description": "Deletes a metadata key.", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the Order.", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "key", - "required": true, - "description": "The metadata key.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "Order" + "Swap" ], "responses": { "200": { @@ -5309,7 +6121,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5318,7 +6130,7 @@ "in": "path", "name": "claim_id", "required": true, - "description": "The id of the Claim.", + "description": "The ID of the Claim.", "schema": { "type": "string" } @@ -5343,7 +6155,7 @@ } }, "tags": [ - "Order" + "Fulfillment" ], "responses": { "200": { @@ -5374,7 +6186,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5383,7 +6195,7 @@ "in": "path", "name": "swap_id", "required": true, - "description": "The id of the Swap.", + "description": "The ID of the Swap.", "schema": { "type": "string" } @@ -5408,7 +6220,7 @@ } }, "tags": [ - "Order" + "Fulfillment" ], "responses": { "200": { @@ -5439,7 +6251,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5475,7 +6287,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5514,18 +6326,18 @@ } }, "region": { - "description": "Region where the order belongs", + "description": "ID of the region where the order belongs", "type": "string" }, "discounts": { "description": "Discounts applied to the order", "type": "array", "items": { - "$ref": "#/components/schemas/line_item" + "$ref": "#/components/schemas/discount" } }, "customer_id": { - "description": "id of the customer", + "description": "ID of the customer", "type": "string" }, "payment_method": { @@ -5534,7 +6346,7 @@ "properties": { "provider_id": { "type": "string", - "description": "id of the payment provider" + "description": "ID of the payment provider" }, "data": { "description": "Data relevant for the given payment method", @@ -5548,11 +6360,11 @@ "properties": { "provider_id": { "type": "string", - "description": "The id of the shipping provider." + "description": "The ID of the shipping provider." }, "profile_id": { "type": "string", - "description": "The id of the shipping profile." + "description": "The ID of the shipping profile." }, "price": { "type": "integer", @@ -5601,6 +6413,346 @@ } } }, + "/orders": { + "get": { + "operationId": "GetOrders", + "summary": "List Orders", + "description": "Retrieves a list of Orders", + "x-authenticated": true, + "parameters": [ + { + "in": "query", + "name": "q", + "description": "Query used for searching orders by shipping address first name, orders' email, and orders' display ID", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "id", + "description": "ID of the order to search for.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "status", + "style": "form", + "explode": false, + "description": "Status to search for", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "pending", + "completed", + "archived", + "canceled", + "requires_action" + ] + } + } + }, + { + "in": "query", + "name": "fulfillment_status", + "style": "form", + "explode": false, + "description": "Fulfillment status to search for.", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "not_fulfilled", + "fulfilled", + "partially_fulfilled", + "shipped", + "partially_shipped", + "canceled", + "returned", + "partially_returned", + "requires_action" + ] + } + } + }, + { + "in": "query", + "name": "payment_status", + "style": "form", + "explode": false, + "description": "Payment status to search for.", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "captured", + "awaiting", + "not_paid", + "refunded", + "partially_refunded", + "canceled", + "requires_action" + ] + } + } + }, + { + "in": "query", + "name": "display_id", + "description": "Display ID to search for.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "cart_id", + "description": "to search for.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "customer_id", + "description": "to search for.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "email", + "description": "to search for.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "region_id", + "style": "form", + "explode": false, + "description": "Regions to search orders by", + "schema": { + "oneOf": [ + { + "type": "string", + "description": "ID of a Region." + }, + { + "type": "array", + "items": { + "type": "string", + "description": "ID of a Region." + } + } + ] + } + }, + { + "in": "query", + "name": "currency_code", + "style": "form", + "explode": false, + "description": "Currency code to search for", + "schema": { + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + } + }, + { + "in": "query", + "name": "tax_rate", + "description": "to search for.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "created_at", + "description": "Date comparison for when resulting orders were created.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "updated_at", + "description": "Date comparison for when resulting orders were updated.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "canceled_at", + "description": "Date comparison for when resulting orders were canceled.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "sales_channel_id", + "style": "form", + "explode": false, + "description": "Filter by Sales Channels", + "schema": { + "type": "array", + "items": { + "type": "string", + "description": "The ID of a Sales Channel" + } + } + }, + { + "in": "query", + "name": "offset", + "description": "How many orders to skip before the results.", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "in": "query", + "name": "limit", + "description": "Limit the number of orders returned.", + "schema": { + "type": "integer", + "default": 50 + } + }, + { + "in": "query", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in each order of the result.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "(Comma separated) Which fields should be included in each order of the result.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Order" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/order" + } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" + } + } + } + } + } + } + } + } + }, "/orders/{id}/swaps/{swap_id}/process-payment": { "post": { "operationId": "PostOrdersOrderSwapsSwapProcessPayment", @@ -5612,7 +6764,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5621,14 +6773,14 @@ "in": "path", "name": "swap_id", "required": true, - "description": "The id of the Swap.", + "description": "The ID of the Swap.", "schema": { "type": "string" } } ], "tags": [ - "Order" + "Swap" ], "responses": { "200": { @@ -5648,7 +6800,7 @@ } } }, - "/orders/{id}/refunds": { + "/orders/{id}/refund": { "post": { "operationId": "PostOrdersOrderRefunds", "summary": "Create a Refund", @@ -5659,7 +6811,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5683,7 +6835,7 @@ "type": "string" }, "note": { - "description": "A not with additional details about the Refund.", + "description": "A note with additional details about the Refund.", "type": "string" }, "no_notification": { @@ -5716,7 +6868,7 @@ } } }, - "/orders/{id}/returns": { + "/orders/{id}/return": { "post": { "operationId": "PostOrdersOrderReturns", "summary": "Request a Return", @@ -5727,7 +6879,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5745,13 +6897,17 @@ "description": "The Line Items that will be returned.", "type": "array", "items": { + "required": [ + "item_id", + "quantity" + ], "properties": { "item_id": { - "description": "The id of the Line Item.", + "description": "The ID of the Line Item.", "type": "string" }, "reason_id": { - "description": "The id of the Return Reason to use.", + "description": "The ID of the Return Reason to use.", "type": "string" }, "note": { @@ -5771,7 +6927,7 @@ "properties": { "option_id": { "type": "string", - "description": "The id of the Shipping Option to create the Shipping Method from." + "description": "The ID of the Shipping Option to create the Shipping Method from." }, "price": { "type": "integer", @@ -5779,9 +6935,14 @@ } } }, + "note": { + "description": "An optional note with information about the Return.", + "type": "string" + }, "receive_now": { "description": "A flag to indicate if the Return should be registerd as received immediately.", - "type": "boolean" + "type": "boolean", + "default": false }, "no_notification": { "description": "A flag to indicate if no notifications should be emitted related to the requested Return.", @@ -5797,6 +6958,7 @@ } }, "tags": [ + "Return", "Order" ], "responses": { @@ -5828,7 +6990,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Order.", + "description": "The ID of the Order.", "schema": { "type": "string" } @@ -5837,7 +6999,7 @@ "in": "path", "name": "claim_id", "required": true, - "description": "The id of the Claim.", + "description": "The ID of the Claim.", "schema": { "type": "string" } @@ -5852,13 +7014,18 @@ "description": "The Claim Items that the Claim will consist of.", "type": "array", "items": { + "required": [ + "id", + "images", + "tags" + ], "properties": { "id": { - "description": "The id of the Claim Item.", + "description": "The ID of the Claim Item.", "type": "string" }, "item_id": { - "description": "The id of the Line Item that will be claimed.", + "description": "The ID of the Line Item that will be claimed.", "type": "string" }, "quantity": { @@ -5883,14 +7050,39 @@ "description": "A list o tags to add to the Claim Item", "type": "array", "items": { - "type": "string" + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Tag ID" + }, + "value": { + "type": "string", + "description": "Tag value" + } + } } }, "images": { "description": "A list of image URL's that will be associated with the Claim", + "type": "array", "items": { - "type": "string" + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Image ID" + }, + "url": { + "type": "string", + "description": "Image URL" + } + } } + }, + "metadata": { + "description": "An optional set of key-value pairs to hold additional information.", + "type": "object" } } } @@ -5901,11 +7093,11 @@ "items": { "properties": { "id": { - "description": "The id of an existing Shipping Method", + "description": "The ID of an existing Shipping Method", "type": "string" }, "option_id": { - "description": "The id of the Shipping Option to create a Shipping Method from", + "description": "The ID of the Shipping Option to create a Shipping Method from", "type": "string" }, "price": { @@ -5929,7 +7121,7 @@ } }, "tags": [ - "Order" + "Claim" ], "responses": { "200": { @@ -5949,6 +7141,328 @@ } } }, + "/product-tags": { + "get": { + "operationId": "GetProductTags", + "summary": "List Product Tags", + "description": "Retrieve a list of Product Tags.", + "x-authenticated": true, + "parameters": [ + { + "in": "query", + "name": "limit", + "description": "The number of tags to return.", + "schema": { + "type": "integer", + "default": 10 + } + }, + { + "in": "query", + "name": "offset", + "description": "The number of items to skip before the results.", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "in": "query", + "name": "order", + "description": "The field to sort items by.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "value", + "style": "form", + "explode": false, + "description": "The tag values to search for", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "q", + "description": "A query string to search values for", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "id", + "style": "form", + "explode": false, + "description": "The tag IDs to search for", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "created_at", + "description": "Date comparison for when resulting product tags were created.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "updated_at", + "description": "Date comparison for when resulting product tags were updated.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + } + ], + "tags": [ + "Product Tag" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "product_tags": { + "$ref": "#/components/schemas/product_tag" + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" + } + } + } + } + } + } + } + } + }, + "/product-types": { + "get": { + "operationId": "GetProductTypes", + "summary": "List Product Types", + "description": "Retrieve a list of Product Types.", + "x-authenticated": true, + "parameters": [ + { + "in": "query", + "name": "limit", + "description": "The number of types to return.", + "schema": { + "type": "integer", + "default": 10 + } + }, + { + "in": "query", + "name": "offset", + "description": "The number of items to skip before the results.", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "in": "query", + "name": "order", + "description": "The field to sort items by.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "value", + "style": "form", + "explode": false, + "description": "The type values to search for", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "id", + "style": "form", + "explode": false, + "description": "The type IDs to search for", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "q", + "description": "A query string to search values for", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "created_at", + "description": "Date comparison for when resulting product types were created.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "updated_at", + "description": "Date comparison for when resulting product types were updated.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + } + ], + "tags": [ + "Product Type" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "product_types": { + "$ref": "#/components/schemas/product_type" + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" + } + } + } + } + } + } + } + } + }, "/price-lists/{id}/prices/batch": { "post": { "operationId": "PostPriceListsPriceListPricesBatch", @@ -5960,7 +7474,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Price List to update prices for.", + "description": "The ID of the Price List to update prices for.", "schema": { "type": "string" } @@ -5975,38 +7489,42 @@ "description": "The prices to update or add.", "type": "array", "items": { + "required": [ + "amount", + "variant_id" + ], "properties": { "id": { - "description": "The id of the price.", + "description": "The ID of the price.", "type": "string" }, - "status": { - "description": "The status of the Price List.", - "type": "string", - "enum": [ - "active", - "draft" - ] - }, "region_id": { - "description": "The id of the Region for which the price is used.", + "description": "The ID of the Region for which the price is used. Only required if currecny_code is not provided.", "type": "string" }, "currency_code": { - "description": "The 3 character ISO currency code for which the price will be used.", + "description": "The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided.", + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "variant_id": { + "description": "The ID of the Variant for which the price is used.", "type": "string" }, "amount": { - "description": "The amount of the price.", - "type": "number" + "description": "The amount to charge for the Product Variant.", + "type": "integer" }, "min_quantity": { "description": "The minimum quantity for which the price will be used.", - "type": "number" + "type": "integer" }, "max_quantity": { "description": "The maximum quantity for which the price will be used.", - "type": "number" + "type": "integer" } } } @@ -6030,16 +7548,8 @@ "application/json": { "schema": { "properties": { - "id": { - "type": "string", - "description": "The id of the deleted Price List." - }, - "object": { - "type": "string", - "description": "The type of the object that was deleted." - }, - "deleted": { - "type": "boolean" + "price_list": { + "$ref": "#/components/schemas/price_list" } } } @@ -6050,15 +7560,15 @@ }, "delete": { "operationId": "DeletePriceListsPriceListPricesBatch", - "summary": "Batch delete prices that belongs to a Price List", - "description": "Batch delete prices that belongs to a Price List", + "summary": "Batch delete prices that belong to a Price List", + "description": "Batch delete prices that belong to a Price List", "x-authenticated": true, "parameters": [ { "in": "path", "name": "id", "required": true, - "description": "The id of the Price List that the Money Amounts that will be deleted belongs to.", + "description": "The ID of the Price List that the Money Amounts (Prices) that will be deleted belongs to.", "schema": { "type": "string" } @@ -6095,15 +7605,18 @@ "type": "array", "items": { "type": "string", - "description": "The id of the deleted Money Amount." + "description": "The IDs of the deleted Money Amounts (Prices)." } }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "money-amount" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true } } } @@ -6113,7 +7626,7 @@ } } }, - "/price_lists": { + "/price-lists": { "post": { "operationId": "PostPriceListsPriceList", "summary": "Creates a Price List", @@ -6123,6 +7636,12 @@ "content": { "application/json": { "schema": { + "required": [ + "name", + "description", + "type", + "prices" + ], "properties": { "name": { "description": "The name of the Price List", @@ -6132,6 +7651,16 @@ "description": "A description of the Price List.", "type": "string" }, + "starts_at": { + "description": "The date with timezone that the Price List starts being valid.", + "type": "string", + "format": "date" + }, + "ends_at": { + "description": "The date with timezone that the Price List ends being valid.", + "type": "string", + "format": "date" + }, "type": { "description": "The type of the Price List.", "type": "string", @@ -6152,13 +7681,486 @@ "description": "The prices of the Price List.", "type": "array", "items": { + "required": [ + "amount", + "variant_id" + ], "properties": { "region_id": { - "description": "The id of the Region for which the price is used.", + "description": "The ID of the Region for which the price is used. Only required if currecny_code is not provided.", "type": "string" }, "currency_code": { - "description": "The 3 character ISO currency code for which the price will be used.", + "description": "The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided.", + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "amount": { + "description": "The amount to charge for the Product Variant.", + "type": "integer" + }, + "variant_id": { + "description": "The ID of the Variant for which the price is used.", + "type": "string" + }, + "min_quantity": { + "description": "The minimum quantity for which the price will be used.", + "type": "integer" + }, + "max_quantity": { + "description": "The maximum quantity for which the price will be used.", + "type": "integer" + } + } + } + }, + "customer_groups": { + "type": "array", + "description": "A list of customer groups that the Price List applies to.", + "items": { + "required": [ + "id" + ], + "properties": { + "id": { + "description": "The ID of a customer group", + "type": "string" + } + } + } + } + } + } + } + } + }, + "tags": [ + "Price List" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "price_list": { + "$ref": "#/components/schemas/price_list" + } + } + } + } + } + } + } + }, + "get": { + "operationId": "GetPriceLists", + "summary": "List Price Lists", + "description": "Retrieves a list of Price Lists.", + "x-authenticated": true, + "parameters": [ + { + "in": "query", + "name": "limit", + "description": "The number of items to get", + "schema": { + "type": "number", + "default": "10" + } + }, + { + "in": "query", + "name": "offset", + "description": "The offset at which to get items", + "schema": { + "type": "number", + "default": "0" + } + }, + { + "in": "query", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in each item of the result.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "order", + "description": "field to order results by.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "id", + "description": "ID to search for.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "q", + "description": "query to search in price list description, price list name, and customer group name fields.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "status", + "style": "form", + "explode": false, + "description": "Status to search for.", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "active", + "draft" + ] + } + } + }, + { + "in": "query", + "name": "name", + "description": "price list name to search for.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "customer_groups", + "style": "form", + "explode": false, + "description": "Customer Group IDs to search for.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "type", + "style": "form", + "explode": false, + "description": "Type to search for.", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "sale", + "override" + ] + } + } + }, + { + "in": "query", + "name": "created_at", + "description": "Date comparison for when resulting price lists were created.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "updated_at", + "description": "Date comparison for when resulting price lists were updated.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "deleted_at", + "description": "Date comparison for when resulting price lists were deleted.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + } + ], + "tags": [ + "Price List" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "price_lists": { + "type": "array", + "items": { + "$ref": "#/components/schemas/price_list" + } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" + } + } + } + } + } + } + } + } + }, + "/price-lists/{id}": { + "delete": { + "operationId": "DeletePriceListsPriceList", + "summary": "Delete a Price List", + "description": "Deletes a Price List", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Price List to delete.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Price List" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "string", + "description": "The ID of the deleted Price List." + }, + "object": { + "type": "string", + "description": "The type of the object that was deleted.", + "default": "price-list" + }, + "deleted": { + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true + } + } + } + } + } + } + } + }, + "get": { + "operationId": "GetPriceListsPriceList", + "summary": "Retrieve a Price List", + "description": "Retrieves a Price List.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Price List.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Price List" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "price_list": { + "$ref": "#/components/schemas/price_list" + } + } + } + } + } + } + } + }, + "post": { + "operationId": "PostPriceListsPriceListPriceList", + "summary": "Update a Price List", + "description": "Updates a Price List", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Price List.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "description": "The name of the Price List", + "type": "string" + }, + "description": { + "description": "A description of the Price List.", + "type": "string" + }, + "starts_at": { + "description": "The date with timezone that the Price List starts being valid.", + "type": "string", + "format": "date" + }, + "ends_at": { + "description": "The date with timezone that the Price List ends being valid.", + "type": "string", + "format": "date" + }, + "type": { + "description": "The type of the Price List.", + "type": "string", + "enum": [ + "sale", + "override" + ] + }, + "status": { + "description": "The status of the Price List.", + "type": "string", + "enum": [ + "active", + "draft" + ] + }, + "prices": { + "description": "The prices of the Price List.", + "type": "array", + "items": { + "required": [ + "amount", + "variant_id" + ], + "properties": { + "id": { + "description": "The ID of the price.", + "type": "string" + }, + "region_id": { + "description": "The ID of the Region for which the price is used. Only required if currecny_code is not provided.", + "type": "string" + }, + "currency_code": { + "description": "The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided.", + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "variant_id": { + "description": "The ID of the Variant for which the price is used.", "type": "string" }, "amount": { @@ -6185,7 +8187,7 @@ ], "properties": { "id": { - "description": "The id of a customer group", + "description": "The ID of a customer group", "type": "string" } } @@ -6199,88 +8201,6 @@ "tags": [ "Price List" ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "product": { - "$ref": "#/components/schemas/price_list" - } - } - } - } - } - } - } - } - }, - "/price-lists/{id}": { - "delete": { - "operationId": "DeletePriceListsPriceList", - "summary": "Delete a Price List", - "description": "Deletes a Price List", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the Price List to delete.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "Price List" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "id": { - "type": "string", - "description": "The id of the deleted Price List." - }, - "object": { - "type": "string", - "description": "The type of the object that was deleted." - }, - "deleted": { - "type": "boolean" - } - } - } - } - } - } - } - }, - "get": { - "operationId": "GetPriceListsPriceList", - "summary": "Retrieve a Price List", - "description": "Retrieves a Price List.", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the Price List.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "Price List" - ], "responses": { "200": { "description": "OK", @@ -6310,7 +8230,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Price List that the Money Amounts that will be deleted belongs to.", + "description": "The ID of the Price List that the Money Amounts that will be deleted belongs to.", "schema": { "type": "string" } @@ -6319,7 +8239,7 @@ "in": "path", "name": "product_id", "required": true, - "description": "The id of the product from which the money amount will be deleted.", + "description": "The ID of the product from which the money amount will be deleted.", "schema": { "type": "string" } @@ -6336,19 +8256,21 @@ "schema": { "properties": { "ids": { - "type": "number", - "description": "The price ids that have been deleted." - }, - "count": { - "type": "number", - "description": "The number of prices that have been deleted." + "type": "array", + "description": "The price ids that have been deleted.", + "items": { + "type": "string" + } }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "money-amount" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true } } } @@ -6369,7 +8291,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Price List that the Money Amounts that will be deleted belongs to.", + "description": "The ID of the Price List that the Money Amounts that will be deleted belongs to.", "schema": { "type": "string" } @@ -6378,7 +8300,7 @@ "in": "path", "name": "variant_id", "required": true, - "description": "The id of the variant from which the money amount will be deleted.", + "description": "The ID of the variant from which the money amount will be deleted.", "schema": { "type": "string" } @@ -6395,19 +8317,21 @@ "schema": { "properties": { "ids": { - "type": "number", - "description": "The price ids that have been deleted." - }, - "count": { - "type": "number", - "description": "The number of prices that have been deleted." + "type": "array", + "description": "The price ids that have been deleted.", + "items": { + "type": "string" + } }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "money-amount" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true } } } @@ -6427,7 +8351,7 @@ { "in": "query", "name": "q", - "description": "Query used for searching products.", + "description": "Query used for searching product title and description, variant title and sku, and collection title.", "schema": { "type": "string" } @@ -6435,7 +8359,7 @@ { "in": "query", "name": "id", - "description": "Id of the product to search for.", + "description": "ID of the product to search for.", "schema": { "type": "string" } @@ -6443,20 +8367,26 @@ { "in": "query", "name": "status", - "description": "Status to search for", + "description": "Product status to search for", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string" + "type": "string", + "enum": [ + "draft", + "proposed", + "published", + "rejected" + ] } } }, { "in": "query", "name": "collection_id", - "description": "Collection ids to search for", + "description": "Collection IDs to search for", "style": "form", "explode": false, "schema": { @@ -6469,7 +8399,7 @@ { "in": "query", "name": "tags", - "description": "Tags to search for", + "description": "Tag IDs to search for", "style": "form", "explode": false, "schema": { @@ -6482,7 +8412,7 @@ { "in": "query", "name": "title", - "description": "to search for.", + "description": "product title to search for.", "schema": { "type": "string" } @@ -6490,7 +8420,7 @@ { "in": "query", "name": "description", - "description": "to search for.", + "description": "product description to search for.", "schema": { "type": "string" } @@ -6498,7 +8428,7 @@ { "in": "query", "name": "handle", - "description": "to search for.", + "description": "product handle to search for.", "schema": { "type": "string" } @@ -6522,15 +8452,7 @@ { "in": "query", "name": "order", - "description": "to retrieve products in.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "deleted_at", - "description": "Date comparison for when resulting products was deleted, i.e. less than, greater than etc.", + "description": "field to sort results by.", "schema": { "type": "string" } @@ -6538,17 +8460,91 @@ { "in": "query", "name": "created_at", - "description": "Date comparison for when resulting products was created, i.e. less than, greater than etc.", + "description": "Date comparison for when resulting products were created.", "schema": { - "type": "string" + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { "in": "query", "name": "updated_at", - "description": "Date comparison for when resulting products was updated, i.e. less than, greater than etc.", + "description": "Date comparison for when resulting products were updated.", "schema": { - "type": "string" + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "deleted_at", + "description": "Date comparison for when resulting products were deleted.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { @@ -6556,7 +8552,8 @@ "name": "offset", "description": "How many products to skip in the result.", "schema": { - "type": "string" + "type": "integer", + "default": 0 } }, { @@ -6564,7 +8561,8 @@ "name": "limit", "description": "Limit the number of products returned.", "schema": { - "type": "string" + "type": "integer", + "default": 50 } }, { @@ -6594,338 +8592,23 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The number of Products.", - "type": "integer" - }, - "offset": { - "description": "The offset of the Product query.", - "type": "integer" - }, - "limit": { - "description": "The limit of the Product query.", - "type": "integer" - }, "products": { "type": "array", "items": { "$ref": "#/components/schemas/product" } - } - } - } - } - } - } - } - } - }, - "/price-lists": { - "get": { - "operationId": "GetPriceLists", - "summary": "List Price Lists", - "description": "Retrieves a list of Price Lists.", - "x-authenticated": true, - "tags": [ - "Price List" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "price_lists": { - "type": "array", - "items": { - "$ref": "#/components/schemas/price_list" - } }, "count": { - "description": "The number of Price Lists.", - "type": "integer" + "type": "integer", + "description": "The total number of items available" }, "offset": { - "description": "The offset of the Price List query.", - "type": "integer" + "type": "integer", + "description": "The number of items skipped before these items" }, "limit": { - "description": "The limit of the Price List query.", - "type": "integer" - } - } - } - } - } - } - } - } - }, - "/price_lists/{id}": { - "post": { - "operationId": "PostPriceListsPriceListPriceList", - "summary": "Update a Price List", - "description": "Updates a Price List", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the Price List.", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "name": { - "description": "The name of the Price List", - "type": "string" - }, - "description": { - "description": "A description of the Price List.", - "type": "string" - }, - "type": { - "description": "The type of the Price List.", - "type": "string", - "enum": [ - "sale", - "override" - ] - }, - "status": { - "description": "The status of the Price List.", - "type": "string", - "enum": [ - "active", - "draft" - ] - }, - "prices": { - "description": "The prices of the Price List.", - "type": "array", - "items": { - "properties": { - "id": { - "description": "The id of the price.", - "type": "string" - }, - "region_id": { - "description": "The id of the Region for which the price is used.", - "type": "string" - }, - "currency_code": { - "description": "The 3 character ISO currency code for which the price will be used.", - "type": "string" - }, - "amount": { - "description": "The amount to charge for the Product Variant.", - "type": "integer" - }, - "min_quantity": { - "description": "The minimum quantity for which the price will be used.", - "type": "integer" - }, - "max_quantity": { - "description": "The maximum quantity for which the price will be used.", - "type": "integer" - } - } - } - }, - "customer_groups": { - "type": "array", - "description": "A list of customer groups that the Price List applies to.", - "items": { - "required": [ - "id" - ], - "properties": { - "id": { - "description": "The id of a customer group", - "type": "string" - } - } - } - } - } - } - } - } - }, - "tags": [ - "Price List" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "product": { - "$ref": "#/components/schemas/price_list" - } - } - } - } - } - } - } - } - }, - "/product-tags": { - "get": { - "operationId": "GetProductTags", - "summary": "List Product Tags", - "description": "Retrieve a list of Product Tags.", - "x-authenticated": true, - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "The number of tags to return.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "offset", - "description": "The offset of tags to return.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "value", - "description": "The value of tags to return.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "id", - "description": "The id of tags to return.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "created_at", - "description": "Date comparison for when resulting tas was created, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - }, - { - "in": "query", - "name": "updated_at", - "description": "Date comparison for when resulting tas was updated, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - } - ], - "tags": [ - "Product Tag" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "tags": { - "$ref": "#/components/schemas/product_tag" - } - } - } - } - } - } - } - } - }, - "/product-types": { - "get": { - "operationId": "GetProductTypes", - "summary": "List Product Types", - "description": "Retrieve a list of Product Types.", - "x-authenticated": true, - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "The number of types to return.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "offset", - "description": "The offset of types to return.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "value", - "description": "The value of types to return.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "id", - "description": "The id of types to return.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "created_at", - "description": "Date comparison for when resulting tas was created, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - }, - { - "in": "query", - "name": "updated_at", - "description": "Date comparison for when resulting tas was updated, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - } - ], - "tags": [ - "Product Tag" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "types": { - "$ref": "#/components/schemas/product_tag" + "type": "integer", + "description": "The number of items per page" } } } @@ -6946,7 +8629,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -7001,9 +8684,7 @@ "application/json": { "schema": { "required": [ - "title", - "subtitle", - "description" + "title" ], "properties": { "title": { @@ -7020,11 +8701,13 @@ }, "is_giftcard": { "description": "A flag to indicate if the Product represents a Gift Card. Purchasing Products with this flag set to `true` will result in a Gift Card being created.", - "type": "boolean" + "type": "boolean", + "default": false }, "discountable": { "description": "A flag to indicate if discounts can be applied to the LineItems generated from this Product", - "type": "boolean" + "type": "boolean", + "default": true }, "images": { "description": "Images of the Product.", @@ -7041,10 +8724,28 @@ "description": "A unique handle to identify the Product by.", "type": "string" }, + "status": { + "description": "The status of the product.", + "type": "string", + "enum": [ + "draft", + "proposed", + "published", + "rejected" + ], + "default": "draft" + }, "type": { "description": "The Product Type to associate the Product with.", "type": "object", + "required": [ + "value" + ], "properties": { + "id": { + "description": "The ID of the Product Type.", + "type": "string" + }, "value": { "description": "The value of the Product Type.", "type": "string" @@ -7052,16 +8753,19 @@ } }, "collection_id": { - "description": "The id of the Collection the Product should belong to.", + "description": "The ID of the Collection the Product should belong to.", "type": "string" }, "tags": { "description": "Tags to associate the Product with.", "type": "array", "items": { + "required": [ + "value" + ], "properties": { "id": { - "description": "The id of an existing Tag.", + "description": "The ID of an existing Tag.", "type": "string" }, "value": { @@ -7071,10 +8775,28 @@ } } }, + "sales_channels": { + "description": "[EXPERIMENTAL] Sales channels to associate the Product with.", + "type": "array", + "items": { + "required": [ + "id" + ], + "properties": { + "id": { + "description": "The ID of an existing Sales channel.", + "type": "string" + } + } + } + }, "options": { "description": "The Options that the Product should have. These define on which properties the Product's Product Variants will differ.", "type": "array", "items": { + "required": [ + "title" + ], "properties": { "title": { "description": "The title to identify the Product Option by.", @@ -7087,6 +8809,9 @@ "description": "A list of Product Variants to create with the Product.", "type": "array", "items": { + "required": [ + "title" + ], "properties": { "title": { "description": "The title to identify the Product Variant by.", @@ -7114,7 +8839,8 @@ }, "inventory_quantity": { "description": "The amount of stock kept for the Product Variant.", - "type": "integer" + "type": "integer", + "default": 0 }, "allow_backorder": { "description": "Whether the Product Variant can be purchased when out of stock.", @@ -7126,19 +8852,19 @@ }, "weight": { "description": "The wieght of the Product Variant.", - "type": "string" + "type": "number" }, "length": { "description": "The length of the Product Variant.", - "type": "string" + "type": "number" }, "height": { "description": "The height of the Product Variant.", - "type": "string" + "type": "number" }, "width": { "description": "The width of the Product Variant.", - "type": "string" + "type": "number" }, "origin_country": { "description": "The country of origin of the Product Variant.", @@ -7159,21 +8885,32 @@ "prices": { "type": "array", "items": { + "required": [ + "amount" + ], "properties": { "region_id": { - "description": "The id of the Region for which the price is used.", + "description": "The ID of the Region for which the price is used. Only required if currency_code is not provided.", "type": "string" }, "currency_code": { - "description": "The 3 character ISO currency code for which the price will be used.", - "type": "string" + "description": "The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided.", + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } }, "amount": { "description": "The amount to charge for the Product Variant.", "type": "integer" }, - "sale_amount": { - "description": "The sale amount to charge for the Product Variant.", + "min_quantity": { + "description": "The minimum quantity for which the price will be used.", + "type": "integer" + }, + "max_quantity": { + "description": "The maximum quantity for which the price will be used.", "type": "integer" } } @@ -7182,6 +8919,9 @@ "options": { "type": "array", "items": { + "required": [ + "value" + ], "properties": { "value": { "description": "The value to give for the Product Option at the same index in the Product's `options` field.", @@ -7195,18 +8935,22 @@ }, "weight": { "description": "The wieght of the Product.", - "type": "string" + "type": "number" }, "length": { "description": "The length of the Product.", - "type": "string" + "type": "number" }, "height": { "description": "The height of the Product.", - "type": "string" + "type": "number" }, "width": { "description": "The width of the Product.", + "type": "number" + }, + "hs_code": { + "description": "The Harmonized System code for the Product Variant.", "type": "string" }, "origin_country": { @@ -7259,7 +9003,7 @@ { "in": "query", "name": "q", - "description": "Query used for searching products.", + "description": "Query used for searching product title and description, variant title and sku, and collection title.", "schema": { "type": "string" } @@ -7267,9 +9011,23 @@ { "in": "query", "name": "id", - "description": "Id of the product to search for.", + "style": "form", + "explode": false, + "description": "Filter by product IDs.", "schema": { - "type": "string" + "oneOf": [ + { + "type": "string", + "description": "ID of the product to search for." + }, + { + "type": "array", + "items": { + "type": "string", + "description": "ID of a product." + } + } + ] } }, { @@ -7281,7 +9039,13 @@ "schema": { "type": "array", "items": { - "type": "string" + "type": "string", + "enum": [ + "draft", + "proposed", + "published", + "rejected" + ] } } }, @@ -7303,7 +9067,33 @@ "name": "tags", "style": "form", "explode": false, - "description": "Tags to search for", + "description": "Tag IDs to search for", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "price_list_id", + "style": "form", + "explode": false, + "description": "Price List IDs to search for", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "sales_channel_id", + "style": "form", + "explode": false, + "description": "Sales Channel IDs to filter products by", "schema": { "type": "array", "items": { @@ -7314,7 +9104,7 @@ { "in": "query", "name": "title", - "description": "to search for.", + "description": "title to search for.", "schema": { "type": "string" } @@ -7322,7 +9112,7 @@ { "in": "query", "name": "description", - "description": "to search for.", + "description": "description to search for.", "schema": { "type": "string" } @@ -7330,7 +9120,7 @@ { "in": "query", "name": "handle", - "description": "to search for.", + "description": "handle to search for.", "schema": { "type": "string" } @@ -7340,47 +9130,105 @@ "name": "is_giftcard", "description": "Search for giftcards using is_giftcard=true.", "schema": { - "type": "string" + "type": "boolean" } }, { "in": "query", "name": "type", - "description": "to search for.", + "description": "type ID to search for.", "schema": { "type": "string" } }, - { - "in": "query", - "name": "order", - "description": "to retrieve products in.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "deleted_at", - "description": "Date comparison for when resulting products was deleted, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - }, { "in": "query", "name": "created_at", - "description": "Date comparison for when resulting products was created, i.e. less than, greater than etc.", + "description": "Date comparison for when resulting products were created.", "schema": { - "type": "object" + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { "in": "query", "name": "updated_at", - "description": "Date comparison for when resulting products was updated, i.e. less than, greater than etc.", + "description": "Date comparison for when resulting products were updated.", "schema": { - "type": "object" + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "deleted_at", + "description": "Date comparison for when resulting products were deleted.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { @@ -7388,7 +9236,8 @@ "name": "offset", "description": "How many products to skip in the result.", "schema": { - "type": "string" + "type": "integer", + "default": 0 } }, { @@ -7396,7 +9245,8 @@ "name": "limit", "description": "Limit the number of products returned.", "schema": { - "type": "string" + "type": "integer", + "default": 50 } }, { @@ -7426,23 +9276,23 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The number of Products.", - "type": "integer" - }, - "offset": { - "description": "The offset of the Product query.", - "type": "integer" - }, - "limit": { - "description": "The limit of the Product query.", - "type": "integer" - }, "products": { "type": "array", "items": { "$ref": "#/components/schemas/product" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -7463,7 +9313,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -7505,7 +9355,8 @@ }, "inventory_quantity": { "description": "The amount of stock kept for the Product Variant.", - "type": "integer" + "type": "integer", + "default": 0 }, "allow_backorder": { "description": "Whether the Product Variant can be purchased when out of stock.", @@ -7517,19 +9368,19 @@ }, "weight": { "description": "The wieght of the Product Variant.", - "type": "string" + "type": "number" }, "length": { "description": "The length of the Product Variant.", - "type": "string" + "type": "number" }, "height": { "description": "The height of the Product Variant.", - "type": "string" + "type": "number" }, "width": { "description": "The width of the Product Variant.", - "type": "string" + "type": "number" }, "origin_country": { "description": "The country of origin of the Product Variant.", @@ -7550,14 +9401,25 @@ "prices": { "type": "array", "items": { + "required": [ + "amount" + ], "properties": { + "id": { + "description": "The ID of the price.", + "type": "string" + }, "region_id": { - "description": "The id of the Region for which the price is used.", + "description": "The ID of the Region for which the price is used. Only required if currency_code is not provided.", "type": "string" }, "currency_code": { - "description": "The 3 character ISO currency code for which the price will be used.", - "type": "string" + "description": "The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided.", + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } }, "amount": { "description": "The amount to charge for the Product Variant.", @@ -7577,9 +9439,13 @@ "options": { "type": "array", "items": { + "required": [ + "option_id", + "value" + ], "properties": { "option_id": { - "description": "The id of the Product Option to set the value for.", + "description": "The ID of the Product Option to set the value for.", "type": "string" }, "value": { @@ -7624,7 +9490,7 @@ "in": "path", "name": "id", "required": true, - "description": "Id of the product to search for the variants.", + "description": "ID of the product to search for the variants.", "schema": { "type": "string" } @@ -7648,17 +9514,19 @@ { "in": "query", "name": "offset", - "description": "How many products to skip in the result.", + "description": "How many items to skip before the results.", "schema": { - "type": "string" + "type": "integer", + "default": 0 } }, { "in": "query", "name": "limit", - "description": "Limit the number of products returned.", + "description": "Limit the number of items returned.", "schema": { - "type": "string" + "type": "integer", + "default": 100 } } ], @@ -7677,6 +9545,18 @@ "items": { "$ref": "#/components/schemas/product_variant" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -7697,7 +9577,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -7706,7 +9586,7 @@ "in": "path", "name": "option_id", "required": true, - "description": "The id of the Product Option.", + "description": "The ID of the Product Option.", "schema": { "type": "string" } @@ -7722,16 +9602,19 @@ "application/json": { "schema": { "properties": { - "id": { + "option_id": { "type": "string", - "description": "The id of the deleted Product Option" + "description": "The ID of the deleted Product Option" }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "option" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true }, "product": { "$ref": "#/components/schemas/product" @@ -7753,7 +9636,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -7762,7 +9645,7 @@ "in": "path", "name": "option_id", "required": true, - "description": "The id of the Product Option.", + "description": "The ID of the Product Option.", "schema": { "type": "string" } @@ -7817,7 +9700,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -7835,14 +9718,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Product." + "description": "The ID of the deleted Product." }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "product" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true } } } @@ -7861,7 +9747,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -7897,7 +9783,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -7920,10 +9806,6 @@ "description": "A description of the Product.", "type": "string" }, - "is_giftcard": { - "description": "A flag to indicate if the Product represents a Gift Card. Purchasing Products with this flag set to `true` will result in a Gift Card being created.", - "type": "boolean" - }, "discountable": { "description": "A flag to indicate if discounts can be applied to the LineItems generated from this Product", "type": "boolean" @@ -7943,10 +9825,27 @@ "description": "A unique handle to identify the Product by.", "type": "string" }, + "status": { + "description": "The status of the product.", + "type": "string", + "enum": [ + "draft", + "proposed", + "published", + "rejected" + ] + }, "type": { "description": "The Product Type to associate the Product with.", "type": "object", + "required": [ + "value" + ], "properties": { + "id": { + "description": "The ID of the Product Type.", + "type": "string" + }, "value": { "description": "The value of the Product Type.", "type": "string" @@ -7954,16 +9853,19 @@ } }, "collection_id": { - "description": "The id of the Collection the Product should belong to.", + "description": "The ID of the Collection the Product should belong to.", "type": "string" }, "tags": { "description": "Tags to associate the Product with.", "type": "array", "items": { + "required": [ + "value" + ], "properties": { "id": { - "description": "The id of an existing Tag.", + "description": "The ID of an existing Tag.", "type": "string" }, "value": { @@ -7973,13 +9875,16 @@ } } }, - "options": { - "description": "The Options that the Product should have. These define on which properties the Product's Product Variants will differ.", + "sales_channels": { + "description": "[EXPERIMENTAL] Sales channels to associate the Product with.", "type": "array", "items": { + "required": [ + "id" + ], "properties": { - "title": { - "description": "The title to identify the Product Option by.", + "id": { + "description": "The ID of an existing Sales channel.", "type": "string" } } @@ -7990,6 +9895,10 @@ "type": "array", "items": { "properties": { + "id": { + "description": "The ID of the Product Variant.", + "type": "string" + }, "title": { "description": "The title to identify the Product Variant by.", "type": "string" @@ -8028,19 +9937,19 @@ }, "weight": { "description": "The wieght of the Product Variant.", - "type": "string" + "type": "number" }, "length": { "description": "The length of the Product Variant.", - "type": "string" + "type": "number" }, "height": { "description": "The height of the Product Variant.", - "type": "string" + "type": "number" }, "width": { "description": "The width of the Product Variant.", - "type": "string" + "type": "number" }, "origin_country": { "description": "The country of origin of the Product Variant.", @@ -8061,21 +9970,36 @@ "prices": { "type": "array", "items": { + "required": [ + "amount" + ], "properties": { + "id": { + "description": "The ID of the Price.", + "type": "string" + }, "region_id": { - "description": "The id of the Region for which the price is used.", + "description": "The ID of the Region for which the price is used. Only required if currency_code is not provided.", "type": "string" }, "currency_code": { - "description": "The 3 character ISO currency code for which the price will be used.", - "type": "string" + "description": "The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided.", + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } }, "amount": { "description": "The amount to charge for the Product Variant.", "type": "integer" }, - "sale_amount": { - "description": "The sale amount to charge for the Product Variant.", + "min_quantity": { + "description": "The minimum quantity for which the price will be used.", + "type": "integer" + }, + "max_quantity": { + "description": "The maximum quantity for which the price will be used.", "type": "integer" } } @@ -8084,7 +10008,15 @@ "options": { "type": "array", "items": { + "required": [ + "option_id", + "value" + ], "properties": { + "option_id": { + "description": "The ID of the Option.", + "type": "string" + }, "value": { "description": "The value to give for the Product Option at the same index in the Product's `options` field.", "type": "string" @@ -8097,19 +10029,19 @@ }, "weight": { "description": "The wieght of the Product.", - "type": "string" + "type": "number" }, "length": { "description": "The length of the Product.", - "type": "string" + "type": "number" }, "height": { "description": "The height of the Product.", - "type": "string" + "type": "number" }, "width": { "description": "The width of the Product.", - "type": "string" + "type": "number" }, "origin_country": { "description": "The country of origin of the Product.", @@ -8164,7 +10096,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -8173,7 +10105,7 @@ "in": "path", "name": "variant_id", "required": true, - "description": "The id of the Product Variant.", + "description": "The ID of the Product Variant.", "schema": { "type": "string" } @@ -8189,16 +10121,22 @@ "application/json": { "schema": { "properties": { - "id": { + "variant_id": { "type": "string", - "description": "The id of the deleted Product Variant." + "description": "The ID of the deleted Product Variant." }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "variant" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true + }, + "product": { + "$ref": "#/components/schemas/product" } } } @@ -8217,7 +10155,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -8226,7 +10164,7 @@ "in": "path", "name": "variant_id", "required": true, - "description": "The id of the Product Variant.", + "description": "The ID of the Product Variant.", "schema": { "type": "string" } @@ -8275,19 +10213,19 @@ }, "weight": { "description": "The wieght of the Product Variant.", - "type": "string" + "type": "number" }, "length": { "description": "The length of the Product Variant.", - "type": "string" + "type": "number" }, "height": { "description": "The height of the Product Variant.", - "type": "string" + "type": "number" }, "width": { "description": "The width of the Product Variant.", - "type": "string" + "type": "number" }, "origin_country": { "description": "The country of origin of the Product Variant.", @@ -8308,18 +10246,25 @@ "prices": { "type": "array", "items": { + "required": [ + "amount" + ], "properties": { "id": { - "description": "The id of the price.", + "description": "The ID of the price.", "type": "string" }, "region_id": { - "description": "The id of the Region for which the price is used.", + "description": "The ID of the Region for which the price is used. Only required if currency_code is not provided.", "type": "string" }, "currency_code": { - "description": "The 3 character ISO currency code for which the price will be used.", - "type": "string" + "description": "The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided.", + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } }, "amount": { "description": "The amount to charge for the Product Variant.", @@ -8339,9 +10284,13 @@ "options": { "type": "array", "items": { + "required": [ + "option_id", + "value" + ], "properties": { "option_id": { - "description": "The id of the Product Option to set the value for.", + "description": "The ID of the Product Option to set the value for.", "type": "string" }, "value": { @@ -8377,6 +10326,49 @@ } } }, + "/products/tag-usage": { + "get": { + "operationId": "GetProductsTagUsage", + "summary": "List Product Tags Usage Number", + "description": "Retrieves a list of Product Tags with how many times each is used.", + "x-authenticated": true, + "tags": [ + "Product Tag" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "tags": { + "type": "array", + "items": { + "properties": { + "id": { + "description": "The ID of the tag.", + "type": "string" + }, + "usage_count": { + "description": "The number of products that use this tag.", + "type": "string" + }, + "value": { + "description": "The value of the tag.", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, "/products/types": { "get": { "operationId": "GetProductsTypes", @@ -8418,7 +10410,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Product.", + "description": "The ID of the Product.", "schema": { "type": "string" } @@ -8478,7 +10470,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -8494,7 +10486,11 @@ "properties": { "country_code": { "description": "The 2 character ISO code for the Country.", - "type": "string" + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements", + "description": "See a list of codes." + } } } } @@ -8533,7 +10529,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -8548,7 +10544,7 @@ ], "properties": { "provider_id": { - "description": "The id of the Fulfillment Provider to add.", + "description": "The ID of the Fulfillment Provider to add.", "type": "string" } } @@ -8588,7 +10584,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -8603,7 +10599,7 @@ ], "properties": { "provider_id": { - "description": "The id of the Payment Provider to add.", + "description": "The ID of the Payment Provider to add.", "type": "string" } } @@ -8645,7 +10641,10 @@ "required": [ "name", "currency_code", - "tax_rate" + "tax_rate", + "payment_providers", + "fulfillment_providers", + "countries" ], "properties": { "name": { @@ -8654,7 +10653,11 @@ }, "currency_code": { "description": "The 3 character ISO currency code to use for the Region.", - "type": "string" + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } }, "tax_code": { "description": "An optional tax code the Region.", @@ -8665,21 +10668,24 @@ "type": "number" }, "payment_providers": { - "description": "A list of Payment Providers that should be enabled for the Region", + "description": "A list of Payment Provider IDs that should be enabled for the Region", "type": "array", "items": { "type": "string" } }, "fulfillment_providers": { - "description": "A list of Fulfillment Providers that should be enabled for the Region", + "description": "A list of Fulfillment Provider IDs that should be enabled for the Region", "type": "array", "items": { "type": "string" } }, "countries": { - "description": "A list of countries that should be included in the Region.", + "description": "A list of countries' 2 ISO Characters that should be included in the Region.", + "example": [ + "US" + ], "type": "array", "items": { "type": "string" @@ -8720,7 +10726,8 @@ "in": "query", "name": "limit", "schema": { - "type": "integer" + "type": "integer", + "default": 50 }, "required": false, "description": "limit the number of regions in response" @@ -8729,7 +10736,8 @@ "in": "query", "name": "offset", "schema": { - "type": "integer" + "type": "integer", + "default": 0 }, "required": false, "description": "Offset of regions in response (used for pagination)" @@ -8777,53 +10785,18 @@ "items": { "$ref": "#/components/schemas/region" } - } - } - } - } - } - } - } - } - }, - "/regions/{id}/metadata/{key}": { - "delete": { - "operationId": "DeleteRegionsRegionMetadataKey", - "summary": "Delete Metadata", - "description": "Deletes a metadata key.", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the Region.", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "key", - "required": true, - "description": "The metadata key.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "Region" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "region": { - "$ref": "#/components/schemas/region" + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -8844,7 +10817,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -8862,14 +10835,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Region." + "description": "The ID of the deleted Region." }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "region" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true } } } @@ -8888,7 +10864,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -8924,7 +10900,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -8941,7 +10917,11 @@ }, "currency_code": { "description": "The 3 character ISO currency code to use for the Region.", - "type": "string" + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } }, "automatic_taxes": { "description": "If true Medusa will automatically calculate taxes for carts in this region. If false you have to manually call POST /carts/:id/taxes.", @@ -8952,7 +10932,7 @@ "type": "boolean" }, "tax_provider_id": { - "description": "The id of the tax provider to use; if null the system tax provider is used", + "description": "The ID of the tax provider to use; if null the system tax provider is used", "type": "string" }, "tax_code": { @@ -8964,21 +10944,21 @@ "type": "number" }, "payment_providers": { - "description": "A list of Payment Providers that should be enabled for the Region", + "description": "A list of Payment Provider IDs that should be enabled for the Region", "type": "array", "items": { "type": "string" } }, "fulfillment_providers": { - "description": "A list of Fulfillment Providers that should be enabled for the Region", + "description": "A list of Fulfillment Provider IDs that should be enabled for the Region", "type": "array", "items": { "type": "string" } }, "countries": { - "description": "A list of countries that should be included in the Region.", + "description": "A list of countries' 2 ISO Characters that should be included in the Region.", "type": "array", "items": { "type": "string" @@ -9021,7 +11001,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -9043,11 +11023,20 @@ "properties": { "provider_id": { "type": "string", - "description": "id of the fulfillment provider" + "description": "ID of the fulfillment provider" }, "options": { - "type": "object", - "description": "fulfillment provider options" + "type": "array", + "description": "fulfillment provider options", + "example": [ + { + "id": "manual-fulfillment" + }, + { + "id": "manual-fulfillment-return", + "is_return": true + } + ] } } } @@ -9071,7 +11060,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -9079,10 +11068,14 @@ { "in": "path", "name": "country_code", - "required": true, "description": "The 2 character ISO code for the Country.", + "required": true, "schema": { - "type": "string" + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } } } ], @@ -9118,7 +11111,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -9127,7 +11120,7 @@ "in": "path", "name": "provider_id", "required": true, - "description": "The id of the Fulfillment Provider.", + "description": "The ID of the Fulfillment Provider.", "schema": { "type": "string" } @@ -9165,7 +11158,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Region.", + "description": "The ID of the Region.", "schema": { "type": "string" } @@ -9174,7 +11167,7 @@ "in": "path", "name": "provider_id", "required": true, - "description": "The id of the Payment Provider.", + "description": "The ID of the Payment Provider.", "schema": { "type": "string" } @@ -9201,67 +11194,6 @@ } } }, - "/regions/{id}/metadata": { - "post": { - "operationId": "PostRegionsRegionMetadata", - "summary": "Set the metadata of a Region", - "description": "Sets the metadata of a Region", - "x-authenticated": true, - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the Region.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "Region" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "region": { - "$ref": "#/components/schemas/region" - } - } - } - } - } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "key", - "value" - ], - "properties": { - "key": { - "type": "string", - "description": "Key for the metadata value." - }, - "value": { - "type": "string", - "description": "The value that the key relates to." - } - } - } - } - } - } - } - }, "/return-reasons": { "post": { "operationId": "PostReturnReasons", @@ -9286,7 +11218,7 @@ "type": "string" }, "parent_return_reason_id": { - "description": "The id of the parent return reason.", + "description": "The ID of the parent return reason.", "type": "string" }, "description": { @@ -9362,7 +11294,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the return reason", + "description": "The ID of the return reason", "schema": { "type": "string" } @@ -9380,14 +11312,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted return reason" + "description": "The ID of the deleted return reason" }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "return_reason" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true } } } @@ -9406,7 +11341,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Return Reason.", + "description": "The ID of the Return Reason.", "schema": { "type": "string" } @@ -9442,7 +11377,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Return Reason.", + "description": "The ID of the Return Reason.", "schema": { "type": "string" } @@ -9457,6 +11392,10 @@ "description": "The label to display to the Customer.", "type": "string" }, + "value": { + "description": "The value that the Return Reason will be identified by. Must be unique.", + "type": "string" + }, "description": { "description": "An optional description to for the Reason.", "type": "string" @@ -9501,7 +11440,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Return.", + "description": "The ID of the Return.", "schema": { "type": "string" } @@ -9517,7 +11456,7 @@ "application/json": { "schema": { "properties": { - "return": { + "order": { "$ref": "#/components/schemas/order" } } @@ -9535,21 +11474,21 @@ "description": "Retrieves a list of Returns", "parameters": [ { - "in": "path", + "in": "query", "name": "limit", - "required": true, "description": "The upper limit for the amount of responses returned.", "schema": { - "type": "number" + "type": "number", + "default": "50" } }, { - "in": "path", + "in": "query", "name": "offset", - "required": true, "description": "The offset of the list returned.", "schema": { - "type": "number" + "type": "number", + "default": "0" } } ], @@ -9568,6 +11507,18 @@ "items": { "$ref": "#/components/schemas/return" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -9587,7 +11538,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Return.", + "description": "The ID of the Return.", "schema": { "type": "string" } @@ -9605,9 +11556,13 @@ "description": "The Line Items that have been received.", "type": "array", "items": { + "required": [ + "item_id", + "quantity" + ], "properties": { "item_id": { - "description": "The id of the Line Item.", + "description": "The ID of the Line Item.", "type": "string" }, "quantity": { @@ -9619,7 +11574,7 @@ }, "refund": { "description": "The amount to refund.", - "type": "integer" + "type": "number" } } } @@ -9647,6 +11602,539 @@ } } }, + "/sales-channels/{id}/products/batch": { + "post": { + "operationId": "PostSalesChannelsChannelProductsBatch", + "summary": "Assign a batch of product to a sales channel", + "description": "Assign a batch of product to a sales channel.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Sales channel.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "product_ids" + ], + "properties": { + "product_ids": { + "description": "The IDs of the products to add to the Sales Channel", + "type": "array", + "items": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "description": "The ID of the product" + } + } + } + } + } + } + } + } + }, + "tags": [ + "Sales Channel" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "sales_channel": { + "$ref": "#/components/schemas/sales_channel" + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "DeleteSalesChannelsChannelProductsBatch", + "summary": "Remove a list of products from a sales channel", + "description": "Remove a list of products from a sales channel.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Sales Channel", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "product_ids" + ], + "properties": { + "product_ids": { + "description": "The IDs of the products to delete from the Sales Channel.", + "type": "array", + "items": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "The ID of a product", + "type": "string" + } + } + } + } + } + } + } + } + }, + "tags": [ + "Sales Channel" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "sales_channel": { + "$ref": "#/components/schemas/sales_channel" + } + } + } + } + } + } + } + } + }, + "/sales-channels": { + "post": { + "operationId": "PostSalesChannels", + "summary": "Create a Sales Channel", + "description": "Creates a Sales Channel.", + "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "name" + ], + "properties": { + "name": { + "description": "The name of the Sales Channel", + "type": "string" + }, + "description": { + "description": "The description of the Sales Channel", + "type": "string" + }, + "is_disabled": { + "description": "Whether the Sales Channel is disabled or not.", + "type": "boolean" + } + } + } + } + } + }, + "tags": [ + "Sales Channel" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "sales_channel": { + "$ref": "#/components/schemas/sales_channel" + } + } + } + } + } + } + } + }, + "get": { + "operationId": "GetSalesChannels", + "summary": "List sales channels", + "description": "Retrieves a list of sales channels", + "x-authenticated": true, + "parameters": [ + { + "in": "query", + "name": "id", + "description": "ID of the sales channel", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "name", + "description": "Name of the sales channel", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "description", + "description": "Description of the sales channel", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "q", + "description": "Query used for searching sales channels' names and descriptions.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "order", + "description": "The field to order the results by.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "created_at", + "description": "Date comparison for when resulting collections were created.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "updated_at", + "description": "Date comparison for when resulting collections were updated.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "deleted_at", + "description": "Date comparison for when resulting collections were deleted.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "offset", + "description": "How many sales channels to skip in the result.", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "in": "query", + "name": "limit", + "description": "Limit the number of sales channels returned.", + "schema": { + "type": "integer", + "default": 20 + } + }, + { + "in": "query", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in each sales channel of the result.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "(Comma separated) Which fields should be included in each sales channel of the result.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Sales Channel" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "sales_channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/sales_channel" + } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" + } + } + } + } + } + } + } + } + }, + "/sales-channels/{id}": { + "delete": { + "operationId": "DeleteSalesChannelsSalesChannel", + "summary": "Delete a sales channel", + "description": "Deletes the sales channel.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Sales channel.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Sales Channel" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "string", + "description": "The ID of the deleted sales channel" + }, + "object": { + "type": "string", + "description": "The type of the object that was deleted.", + "default": "sales-channel" + }, + "deleted": { + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true + } + } + } + } + } + } + } + }, + "get": { + "operationId": "GetSalesChannelsSalesChannel", + "summary": "Retrieve a sales channel", + "description": "Retrieves the sales channel.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Sales channel.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Sales Channel" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "sales_channel": { + "$ref": "#/components/schemas/sales_channel" + } + } + } + } + } + } + } + }, + "post": { + "operationId": "PostSalesChannelsSalesChannel", + "summary": "Update a Sales Channel", + "description": "Updates a Sales Channel.", + "x-authenticated": true, + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The ID of the Sales Channel.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string", + "description": "Name of the sales channel." + }, + "description": { + "type": "string", + "description": "Sales Channel description." + }, + "is_disabled": { + "type": "boolean", + "description": "Indication of if the sales channel is active." + } + } + } + } + } + }, + "tags": [ + "Sales Channel" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "sales_channel": { + "$ref": "#/components/schemas/sales_channel" + } + } + } + } + } + } + } + } + }, "/shipping-options": { "post": { "operationId": "PostShippingOptions", @@ -9657,21 +12145,28 @@ "content": { "application/json": { "schema": { + "required": [ + "name", + "region_id", + "provider_id", + "data", + "price_type" + ], "properties": { "name": { "description": "The name of the Shipping Option", "type": "string" }, "region_id": { - "description": "The id of the Region in which the Shipping Option will be available.", + "description": "The ID of the Region in which the Shipping Option will be available.", "type": "string" }, "provider_id": { - "description": "The id of the Fulfillment Provider that handles the Shipping Option.", + "description": "The ID of the Fulfillment Provider that handles the Shipping Option.", "type": "string" }, "profile_id": { - "description": "The id of the Shipping Profile to add the Shipping Option to.", + "description": "The ID of the Shipping Profile to add the Shipping Option to.", "type": "number" }, "data": { @@ -9694,6 +12189,10 @@ "description": "The requirements that must be satisfied for the Shipping Option to be available.", "type": "array", "items": { + "required": [ + "type", + "amount" + ], "properties": { "type": { "description": "The type of the requirement", @@ -9712,11 +12211,13 @@ }, "is_return": { "description": "Whether the Shipping Option defines a return shipment.", - "type": "boolean" + "type": "boolean", + "default": false }, "admin_only": { "description": "If true, the option can be used for draft orders", - "type": "boolean" + "type": "boolean", + "default": false }, "metadata": { "description": "An optional set of key-value pairs with additional information.", @@ -9759,7 +12260,7 @@ "schema": { "type": "string" }, - "description": "Region to fetch options from" + "description": "Region ID to fetch options from" }, { "in": "query", @@ -9767,7 +12268,7 @@ "schema": { "type": "boolean" }, - "description": "Flag for fetching return options" + "description": "Flag for fetching return options only" }, { "in": "query", @@ -9793,6 +12294,10 @@ "items": { "$ref": "#/components/schemas/shipping_option" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" } } } @@ -9813,7 +12318,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Shipping Option.", + "description": "The ID of the Shipping Option.", "schema": { "type": "string" } @@ -9831,14 +12336,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Shipping Option." + "description": "The ID of the deleted Shipping Option." }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "shipping-option" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true } } } @@ -9857,7 +12365,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Shipping Option.", + "description": "The ID of the Shipping Option.", "schema": { "type": "string" } @@ -9893,7 +12401,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Shipping Option.", + "description": "The ID of the Shipping Option.", "schema": { "type": "string" } @@ -9903,6 +12411,9 @@ "content": { "application/json": { "schema": { + "required": [ + "requirements" + ], "properties": { "name": { "description": "The name of the Shipping Option", @@ -9924,7 +12435,15 @@ "description": "The requirements that must be satisfied for the Shipping Option to be available.", "type": "array", "items": { + "required": [ + "type", + "amount" + ], "properties": { + "id": { + "description": "The ID of the requirement", + "type": "string" + }, "type": { "description": "The type of the requirement", "type": "string", @@ -10049,7 +12568,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Shipping Profile.", + "description": "The ID of the Shipping Profile.", "schema": { "type": "string" } @@ -10067,14 +12586,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Shipping Profile." + "description": "The ID of the deleted Shipping Profile." }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "shipping_profile" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true } } } @@ -10093,7 +12615,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Shipping Profile.", + "description": "The ID of the Shipping Profile.", "schema": { "type": "string" } @@ -10128,7 +12650,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Shipping Profile.", + "description": "The ID of the Shipping Profile.", "schema": { "type": "string" } @@ -10158,7 +12680,7 @@ "application/json": { "schema": { "properties": { - "shipping_profiles": { + "shipping_profile": { "$ref": "#/components/schemas/shipping_profile" } } @@ -10182,7 +12704,11 @@ "required": true, "description": "The 3 character ISO currency code.", "schema": { - "type": "string" + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } } } ], @@ -10218,7 +12744,11 @@ "required": true, "description": "The 3 character ISO currency code.", "schema": { - "type": "string" + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } } } ], @@ -10297,7 +12827,22 @@ }, "default_currency_code": { "description": "The default currency code for the Store.", - "type": "string" + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "currencies": { + "description": "Array of currencies in 2 character ISO code format.", + "type": "array", + "items": { + "type": "string" + } + }, + "metadata": { + "description": "An optional set of key-value pairs with additional information.", + "type": "object" } } } @@ -10344,7 +12889,7 @@ "payment_providers": { "type": "array", "items": { - "$ref": "#/components/schemas/store" + "$ref": "#/components/schemas/payment_provider" } } } @@ -10374,7 +12919,7 @@ "tax_providers": { "type": "array", "items": { - "$ref": "#/components/schemas/store" + "$ref": "#/components/schemas/tax_provider" } } } @@ -10396,7 +12941,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Swap.", + "description": "The ID of the Swap.", "schema": { "type": "string" } @@ -10428,6 +12973,26 @@ "operationId": "GetSwaps", "summary": "List Swaps", "description": "Retrieves a list of Swaps.", + "parameters": [ + { + "in": "query", + "name": "limit", + "description": "The upper limit for the amount of responses returned.", + "schema": { + "type": "number", + "default": "50" + } + }, + { + "in": "query", + "name": "offset", + "description": "The offset of the list returned.", + "schema": { + "type": "number", + "default": "0" + } + } + ], "x-authenticated": true, "tags": [ "Swap" @@ -10444,6 +13009,18 @@ "items": { "$ref": "#/components/schemas/swap" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -10458,9 +13035,57 @@ "operationId": "PostTaxRatesTaxRateProductTypes", "summary": "Add Tax Rate to Product Types", "description": "Associates a Tax Rate with a list of Product Types", + "parameters": [ + { + "in": "query", + "name": "fields", + "description": "Which fields should be included in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "expand", + "description": "Which fields should be expanded and retrieved in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "product_types" + ], + "properties": { + "product_types": { + "type": "array", + "description": "The IDs of the types of products to associate with this tax rate", + "items": { + "type": "string" + } + } + } + } + } + } + }, "tags": [ - "Tax Rates" + "Tax Rate" ], "responses": { "200": { @@ -10470,10 +13095,7 @@ "schema": { "properties": { "tax_rate": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tax_rate" - } + "$ref": "#/components/schemas/tax_rate" } } } @@ -10486,9 +13108,57 @@ "operationId": "DeleteTaxRatesTaxRateProductTypes", "summary": "Remove Tax Rate from Product Types", "description": "Removes a Tax Rate from a list of Product Types", + "parameters": [ + { + "in": "query", + "name": "fields", + "description": "Which fields should be included in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "expand", + "description": "Which fields should be expanded and retrieved in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "product_types" + ], + "properties": { + "product_types": { + "type": "array", + "description": "The IDs of the types of products to remove association with this tax rate", + "items": { + "type": "string" + } + } + } + } + } + } + }, "tags": [ - "Tax Rates" + "Tax Rate" ], "responses": { "200": { @@ -10498,10 +13168,7 @@ "schema": { "properties": { "tax_rate": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tax_rate" - } + "$ref": "#/components/schemas/tax_rate" } } } @@ -10516,9 +13183,57 @@ "operationId": "PostTaxRatesTaxRateProducts", "summary": "Add Tax Rate to Products", "description": "Associates a Tax Rate with a list of Products", + "parameters": [ + { + "in": "query", + "name": "fields", + "description": "Which fields should be included in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "expand", + "description": "Which fields should be expanded and retrieved in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "products" + ], + "properties": { + "products": { + "type": "array", + "description": "The IDs of the products to associate with this tax rate", + "items": { + "type": "string" + } + } + } + } + } + } + }, "tags": [ - "Tax Rates" + "Tax Rate" ], "responses": { "200": { @@ -10528,10 +13243,7 @@ "schema": { "properties": { "tax_rate": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tax_rate" - } + "$ref": "#/components/schemas/tax_rate" } } } @@ -10544,9 +13256,57 @@ "operationId": "DeleteTaxRatesTaxRateProducts", "summary": "Removes Tax Rate from Products", "description": "Removes a Tax Rate from a list of Products", + "parameters": [ + { + "in": "query", + "name": "fields", + "description": "Which fields should be included in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "expand", + "description": "Which fields should be expanded and retrieved in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "products" + ], + "properties": { + "products": { + "type": "array", + "description": "The IDs of the products to remove association with this tax rate", + "items": { + "type": "string" + } + } + } + } + } + } + }, "tags": [ - "Tax Rates" + "Tax Rate" ], "responses": { "200": { @@ -10556,10 +13316,7 @@ "schema": { "properties": { "tax_rate": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tax_rate" - } + "$ref": "#/components/schemas/tax_rate" } } } @@ -10573,10 +13330,58 @@ "post": { "operationId": "PostTaxRatesTaxRateShippingOptions", "summary": "Add Tax Rate to Product Types", - "description": "Associates a Tax Rate with a list of Product Types", + "description": "Associates a Tax Rate with a list of Shipping Options", + "parameters": [ + { + "in": "query", + "name": "fields", + "description": "Which fields should be included in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "expand", + "description": "Which fields should be expanded and retrieved in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "shipping_options" + ], + "properties": { + "shipping_options": { + "type": "array", + "description": "The IDs of the shipping options to associate with this tax rate", + "items": { + "type": "string" + } + } + } + } + } + } + }, "tags": [ - "Tax Rates" + "Tax Rate" ], "responses": { "200": { @@ -10586,10 +13391,7 @@ "schema": { "properties": { "tax_rate": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tax_rate" - } + "$ref": "#/components/schemas/tax_rate" } } } @@ -10602,9 +13404,57 @@ "operationId": "DeleteTaxRatesTaxRateShippingOptions", "summary": "Removes a Tax Rate from Product Types", "description": "Removes a Tax Rate from a list of Product Types", + "parameters": [ + { + "in": "query", + "name": "fields", + "description": "Which fields should be included in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "expand", + "description": "Which fields should be expanded and retrieved in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "shipping_options" + ], + "properties": { + "shipping_options": { + "type": "array", + "description": "The IDs of the shipping options to remove association with this tax rate", + "items": { + "type": "string" + } + } + } + } + } + } + }, "tags": [ - "Tax Rates" + "Tax Rate" ], "responses": { "200": { @@ -10614,10 +13464,7 @@ "schema": { "properties": { "tax_rate": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tax_rate" - } + "$ref": "#/components/schemas/tax_rate" } } } @@ -10632,9 +13479,89 @@ "operationId": "PostTaxRates", "summary": "Create a Tax Rate", "description": "Creates a Tax Rate", + "parameters": [ + { + "in": "query", + "name": "fields", + "description": "Which fields should be included in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "expand", + "description": "Which fields should be expanded and retrieved in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "code", + "name", + "region_id" + ], + "properties": { + "code": { + "type": "string", + "description": "A code to identify the tax type by" + }, + "name": { + "type": "string", + "description": "A human friendly name for the tax" + }, + "region_id": { + "type": "string", + "description": "The ID of the Region that the rate belongs to" + }, + "rate": { + "type": "number", + "description": "The numeric rate to charge" + }, + "products": { + "type": "array", + "description": "The IDs of the products associated with this tax rate", + "items": { + "type": "string" + } + }, + "shipping_options": { + "type": "array", + "description": "The IDs of the shipping options associated with this tax rate", + "items": { + "type": "string" + } + }, + "product_types": { + "type": "array", + "description": "The IDs of the types of products associated with this tax rate", + "items": { + "type": "string" + } + } + } + } + } + } + }, "tags": [ - "Tax Rates" + "Tax Rate" ], "responses": { "200": { @@ -10644,10 +13571,7 @@ "schema": { "properties": { "tax_rate": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tax_rate" - } + "$ref": "#/components/schemas/tax_rate" } } } @@ -10664,16 +13588,8 @@ "parameters": [ { "in": "query", - "name": "q", - "description": "Query used for searching orders.", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "id", - "description": "Id of the order to search for.", + "name": "name", + "description": "Name of tax rate to retrieve", "schema": { "type": "string" } @@ -10681,15 +13597,27 @@ { "in": "query", "name": "region_id", - "description": "to search for.", + "style": "form", + "explode": false, + "description": "Filter by Region ID", "schema": { - "type": "string" + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] } }, { "in": "query", "name": "code", - "description": "to search for.", + "description": "code to search for.", "schema": { "type": "string" } @@ -10697,54 +13625,85 @@ { "in": "query", "name": "rate", - "description": "to search for.", + "style": "form", + "explode": false, + "description": "Filter by Rate", "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "created_at", - "description": "Date comparison for when resulting orders was created, i.e. less than, greater than etc.", - "schema": { - "type": "object" - } - }, - { - "in": "query", - "name": "updated_at", - "description": "Date comparison for when resulting orders was updated, i.e. less than, greater than etc.", - "schema": { - "type": "object" + "oneOf": [ + { + "type": "number" + }, + { + "type": "object", + "properties": { + "lt": { + "type": "number", + "description": "filter by rates less than this number" + }, + "gt": { + "type": "number", + "description": "filter by rates greater than this number" + }, + "lte": { + "type": "number", + "description": "filter by rates less than or equal to this number" + }, + "gte": { + "type": "number", + "description": "filter by rates greater than or equal to this number" + } + } + } + ] } }, { "in": "query", "name": "offset", - "description": "How many orders to skip in the result.", + "description": "How many tax rates to skip before retrieving the result.", "schema": { - "type": "string" + "type": "integer", + "default": 0 } }, { "in": "query", "name": "limit", - "description": "Limit the number of orders returned.", + "description": "Limit the number of tax rates returned.", "schema": { - "type": "string" + "type": "integer", + "default": 50 } }, { "in": "query", "name": "fields", - "description": "(Comma separated) Which fields should be included in each order of the result.", + "description": "Which fields should be included in each item.", + "style": "form", + "explode": false, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "expand", + "description": "Which fields should be expanded and retrieved for each item.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } } } ], "tags": [ - "Order" + "Tax Rate" ], "responses": { "200": { @@ -10753,11 +13712,23 @@ "application/json": { "schema": { "properties": { - "orders": { + "tax_rates": { "type": "array", "items": { - "$ref": "#/components/schemas/order" + "$ref": "#/components/schemas/tax_rate" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -10778,14 +13749,14 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Shipping Option.", + "description": "The ID of the Shipping Option.", "schema": { "type": "string" } } ], "tags": [ - "Tax Rates" + "Tax Rate" ], "responses": { "200": { @@ -10796,14 +13767,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Shipping Option." + "description": "The ID of the deleted Shipping Option." }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "tax-rate" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true } } } @@ -10818,9 +13792,37 @@ "operationId": "GetTaxRatesTaxRate", "summary": "Get Tax Rate", "description": "Retrieves a TaxRate", + "parameters": [ + { + "in": "query", + "name": "fields", + "description": "Which fields should be included in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "expand", + "description": "Which fields should be expanded and retrieved in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "x-authenticated": true, "tags": [ - "Tax Rates" + "Tax Rate" ], "responses": { "200": { @@ -10830,10 +13832,7 @@ "schema": { "properties": { "tax_rate": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tax_rate" - } + "$ref": "#/components/schemas/tax_rate" } } } @@ -10846,9 +13845,84 @@ "operationId": "PostTaxRatesTaxRate", "summary": "Update a Tax Rate", "description": "Updates a Tax Rate", + "parameters": [ + { + "in": "query", + "name": "fields", + "description": "Which fields should be included in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "expand", + "description": "Which fields should be expanded and retrieved in the result.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "type": "string", + "description": "A code to identify the tax type by" + }, + "name": { + "type": "string", + "description": "A human friendly name for the tax" + }, + "region_id": { + "type": "string", + "description": "The ID of the Region that the rate belongs to" + }, + "rate": { + "type": "number", + "description": "The numeric rate to charge" + }, + "products": { + "type": "array", + "description": "The IDs of the products associated with this tax rate", + "items": { + "type": "string" + } + }, + "shipping_options": { + "type": "array", + "description": "The IDs of the shipping options associated with this tax rate", + "items": { + "type": "string" + } + }, + "product_types": { + "type": "array", + "description": "The IDs of the types of products associated with this tax rate", + "items": { + "type": "string" + } + } + } + } + } + } + }, "tags": [ - "Tax Rates" + "Tax Rate" ], "responses": { "200": { @@ -10858,10 +13932,7 @@ "schema": { "properties": { "tax_rate": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tax_rate" - } + "$ref": "#/components/schemas/tax_rate" } } } @@ -10871,14 +13942,14 @@ } } }, - "/": { + "/uploads": { "post": { "operationId": "PostUploads", - "summary": "Uploads an array of files", - "description": "Uploads an array of files to the specific fileservice that is installed in medusa.", + "summary": "Uploads a file", + "description": "Uploads a file to the specific fileservice that is installed in Medusa.", "x-authenticated": true, "tags": [ - "Uploads" + "Upload" ], "requestBody": { "content": { @@ -10887,11 +13958,8 @@ "type": "object", "properties": { "files": { - "type": "array", - "items": { - "type": "string", - "format": "binary" - } + "type": "string", + "format": "binary" } } } @@ -10908,7 +13976,14 @@ "uploads": { "type": "array", "items": { - "type": "string" + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The URL of the uploaded file.", + "format": "uri" + } + } } } } @@ -10936,7 +14011,8 @@ "properties": { "email": { "description": "The Users email.", - "type": "string" + "type": "string", + "format": "email" }, "first_name": { "description": "The name of the User.", @@ -10948,11 +14024,17 @@ }, "role": { "description": "Userrole assigned to the user.", - "type": "string" + "type": "string", + "enum": [ + "admin", + "member", + "developer" + ] }, "password": { "description": "The Users password.", - "type": "string" + "type": "string", + "format": "password" } } } @@ -10960,7 +14042,7 @@ } }, "tags": [ - "Users" + "User" ], "responses": { "200": { @@ -10985,7 +14067,7 @@ "description": "Retrieves all users.", "x-authenticated": true, "tags": [ - "Users" + "User" ], "responses": { "200": { @@ -11008,7 +14090,7 @@ } } }, - "/users/{user_id}": { + "/users/{id}": { "delete": { "operationId": "DeleteUsersUser", "summary": "Delete a User", @@ -11017,9 +14099,9 @@ "parameters": [ { "in": "path", - "name": "user_id", + "name": "id", "required": true, - "description": "The id of the User.", + "description": "The ID of the User.", "schema": { "type": "string" } @@ -11037,14 +14119,17 @@ "properties": { "id": { "type": "string", - "description": "The id of the deleted Shipping Profile." + "description": "The ID of the deleted user." }, "object": { "type": "string", - "description": "The type of the object that was deleted." + "description": "The type of the object that was deleted.", + "default": "user" }, "deleted": { - "type": "boolean" + "type": "boolean", + "description": "Whether or not the items were deleted.", + "default": true } } } @@ -11053,24 +14138,24 @@ } } }, - "post": { - "operationId": "PostUsersUser", - "summary": "Update a User", - "description": "Updates a User", + "get": { + "operationId": "GetUsersUser", + "summary": "Retrieve a User", + "description": "Retrieves a User.", "x-authenticated": true, "parameters": [ { "in": "path", - "name": "user_id", + "name": "id", "required": true, - "description": "The id of the User.", + "description": "The ID of the User.", "schema": { "type": "string" } } ], "tags": [ - "Users" + "User" ], "responses": { "200": { @@ -11087,61 +14172,61 @@ } } } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "first_name", - "last_name", - "role", - "api_token" - ], - "properties": { - "first_name": { - "type": "string", - "description": "The name of the User." - }, - "last_name": { - "type": "string", - "description": "The name of the User." - }, - "role": { - "type": "string", - "description": "The role of the User(admin, member, developer)." - }, - "api_token": { - "type": "string", - "description": "The api_token of the User." - } - } - } - } - } } - } - }, - "/users/{id}": { - "get": { - "operationId": "GetUsersUser", - "summary": "Retrieve a User", - "description": "Retrieves a User.", - "x-authenticated": true, + }, + "post": { + "operationId": "PostUsersUser", + "summary": "Update a User", + "description": "Updates a User", "parameters": [ { "in": "path", "name": "id", "required": true, - "description": "The id of the User.", + "description": "The ID of the User.", "schema": { "type": "string" } } ], + "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "first_name": { + "description": "The name of the User.", + "type": "string" + }, + "last_name": { + "description": "The name of the User.", + "type": "string" + }, + "role": { + "description": "Userrole assigned to the user.", + "type": "string", + "enum": [ + "admin", + "member", + "developer" + ] + }, + "api_token": { + "description": "The api token of the User.", + "type": "string" + }, + "metadata": { + "description": "An optional set of key-value pairs with additional information.", + "type": "object" + } + } + } + } + } + }, "tags": [ - "Users" + "User" ], "responses": { "200": { @@ -11162,6 +14247,40 @@ } }, "/users/password-token": { + "post": { + "operationId": "PostUsersUserPasswordToken", + "summary": "Generate a password token for a User.", + "description": "Generates a password token for a User with a given email.", + "x-authenticated": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "email" + ], + "properties": { + "email": { + "description": "The Users email.", + "type": "string", + "format": "email" + } + } + } + } + } + }, + "tags": [ + "User" + ], + "responses": { + "204": { + "description": "OK" + } + } + } + }, + "/users/reset-password": { "post": { "operationId": "PostUsersUserPassword", "summary": "Set the password for a User.", @@ -11172,14 +14291,14 @@ "application/json": { "schema": { "required": [ - "email", "token", "password" ], "properties": { "email": { "description": "The Users email.", - "type": "string" + "type": "string", + "format": "email" }, "token": { "description": "The token generated from the 'password-token' endpoint.", @@ -11187,7 +14306,8 @@ }, "password": { "description": "The Users new password.", - "type": "string" + "type": "string", + "format": "password" } } } @@ -11195,7 +14315,7 @@ } }, "tags": [ - "Users" + "User" ], "responses": { "200": { @@ -11235,7 +14355,8 @@ "name": "offset", "description": "How many variants to skip in the result.", "schema": { - "type": "string" + "type": "integer", + "default": 0 } }, { @@ -11243,7 +14364,8 @@ "name": "limit", "description": "Limit the number of variants returned.", "schema": { - "type": "string" + "type": "integer", + "default": 20 } } ], @@ -11262,6 +14384,18 @@ "items": { "$ref": "#/components/schemas/product_variant" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -11280,34 +14414,102 @@ "x-resourceId": "address", "properties": { "id": { - "type": "string" + "type": "string", + "description": "ID of the address", + "example": "addr_01G8ZC9VS1XVE149MGH2J7QSSH" }, "customer_id": { - "type": "string" + "type": "string", + "description": "ID of the customer this address belongs to", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" + }, + "customer": { + "description": "Available if the relation `customer` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A customer object." + } }, "company": { - "type": "string" + "type": "string", + "description": "Company name", + "example": "Acme" }, "first_name": { - "type": "string" + "type": "string", + "description": "First name", + "example": "Arno" }, "last_name": { - "type": "string" + "type": "string", + "description": "Last name", + "example": "Willms" }, "address_1": { - "type": "string" + "type": "string", + "description": "Address line 1", + "example": "14433 Kemmer Court" }, "address_2": { - "type": "string" + "type": "string", + "description": "Address line 2", + "example": "Suite 369" }, "city": { - "type": "string" + "type": "string", + "description": "City", + "example": "South Geoffreyview" }, "country_code": { - "type": "string" + "type": "string", + "description": "The 2 character ISO code of the country in lower case", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements", + "description": "See a list of codes." + }, + "example": "st" }, "country": { - "$ref": "#/components/schemas/country" + "description": "A country object. Available if the relation `country` is expanded.", + "type": "object" + }, + "province": { + "type": "string", + "description": "Province", + "example": "Kentucky" + }, + "postal_code": { + "type": "string", + "description": "Postal Code", + "example": 72093 + }, + "phone": { + "type": "string", + "description": "Phone Number", + "example": 16128234334802 + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", + "format": "date-time" + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -11315,81 +14517,194 @@ "title": "Batch Job", "description": "A Batch Job.", "x-resourceId": "batch_job", + "required": [ + "type" + ], "properties": { "id": { + "type": "string", "description": "The unique identifier for the batch job.", - "type": "string" + "example": "batch_01G8T782965PYFG0751G0Z38B4" }, "type": { - "description": "The type of batch job.", "type": "string", + "description": "The type of batch job.", "enum": [ - "product_import", - "product_export" + "product-import", + "product-export" ] }, "status": { - "description": "The status of the batch job.", "type": "string", + "description": "The status of the batch job.", "enum": [ "created", "pre_processed", + "confirmed", "processing", "completed", "canceled", "failed" - ] + ], + "default": "created" }, "created_by": { + "type": "string", "description": "The unique identifier of the user that created the batch job.", - "type": "string" + "example": "usr_01G1G5V26F5TB3GPAPNJ8X1S3V" }, - "context": { - "description": "The context of the batch job, the type of the batch job determines what the context should contain.", + "created_by_user": { + "description": "A user object. Available if the relation `created_by_user` is expanded.", "type": "object" }, + "context": { + "type": "object", + "description": "The context of the batch job, the type of the batch job determines what the context should contain.", + "example": { + "shape": { + "prices": [ + { + "region": null, + "currency_code": "eur" + } + ], + "dynamicImageColumnCount": 4, + "dynamicOptionColumnCount": 2 + }, + "list_config": { + "skip": 0, + "take": 50, + "order": { + "created_at": "DESC" + }, + "relations": [ + "variants", + "variant.prices", + "images" + ] + } + } + }, "dry_run": { - "description": "Specify if the job must apply the modifications or not.", "type": "boolean", + "description": "Specify if the job must apply the modifications or not.", "default": false }, "result": { + "type": "object", "description": "The result of the batch job.", - "type": "object" + "properties": { + "count": { + "type": "number" + }, + "advancement_count": { + "type": "number" + }, + "progress": { + "type": "number" + }, + "errors": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "code": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "err": { + "type": "array" + } + } + }, + "stat_descriptors": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "file_key": { + "type": "string" + }, + "file_size": { + "type": "number" + } + }, + "example": { + "errors": [ + { + "err": [], + "code": "unknown", + "message": "Method not implemented." + } + ], + "stat_descriptors": [ + { + "key": "product-export-count", + "name": "Product count to export", + "message": "There will be 8 products exported by this action" + } + ] + } }, "pre_processed_at": { - "description": "The date from which the job has been pre processed.", "type": "string", + "description": "The date from which the job has been pre processed.", + "format": "date-time" + }, + "processing_at": { + "type": "string", + "description": "The date the job is processing at.", "format": "date-time" }, "confirmed_at": { - "description": "The date when the confirmation has been done.", "type": "string", + "description": "The date when the confirmation has been done.", "format": "date-time" }, "completed_at": { - "description": "The date of the completion.", "type": "string", + "description": "The date of the completion.", "format": "date-time" }, "canceled_at": { - "description": "The date of the concellation.", "type": "string", + "description": "The date of the concellation.", + "format": "date-time" + }, + "failed_at": { + "type": "string", + "description": "The date when the job failed.", "format": "date-time" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was last updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" } } @@ -11400,115 +14715,214 @@ "x-resourceId": "cart", "properties": { "id": { - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" }, "email": { - "type": "string" + "type": "string", + "description": "The email associated with the cart", + "format": "email" }, "billing_address_id": { - "type": "string" + "type": "string", + "description": "The billing address's ID", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" }, "billing_address": { + "description": "Available if the relation `billing_address` is expanded.", "$ref": "#/components/schemas/address" }, "shipping_address_id": { - "type": "string" + "type": "string", + "description": "The shipping address's ID", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" }, "shipping_address": { + "description": "Available if the relation `shipping_address` is expanded.", "$ref": "#/components/schemas/address" }, "items": { + "description": "Available if the relation `items` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/line_item" } }, "region_id": { - "type": "string" + "type": "string", + "description": "The region's ID", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" }, "region": { - "$ref": "#/components/schemas/region" + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" }, "discounts": { "type": "array", + "description": "Available if the relation `discounts` is expanded.", "items": { - "$ref": "#/components/schemas/region" + "type": "object", + "description": "A discount object." } }, "gift_cards": { "type": "array", + "description": "Available if the relation `gift_cards` is expanded.", "items": { - "$ref": "#/components/schemas/gift_card" + "type": "object", + "description": "A gift card object." } }, "customer_id": { - "type": "string" + "type": "string", + "description": "The customer's ID", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" }, "customer": { - "$ref": "#/components/schemas/customer" + "description": "A customer object. Available if the relation `customer` is expanded.", + "type": "object" }, "payment_session": { + "description": "The selected payment session in the cart.", "$ref": "#/components/schemas/payment_session" }, "payment_sessions": { "type": "array", + "description": "The payment sessions created on the cart.", "items": { "$ref": "#/components/schemas/payment_session" } }, + "payment_id": { + "type": "string", + "description": "The payment's ID if available", + "example": "pay_01G8ZCC5W42ZNY842124G7P5R9" + }, "payment": { + "description": "Available if the relation `payment` is expanded.", "$ref": "#/components/schemas/payment" }, "shipping_methods": { "type": "array", + "description": "The shipping methods added to the cart.", "items": { "$ref": "#/components/schemas/shipping_method" } }, "type": { "type": "string", + "description": "The cart's type.", "enum": [ "default", "swap", - "payment_link" - ] + "draft_order", + "payment_link", + "claim" + ], + "default": "default" }, "completed_at": { "type": "string", + "description": "The date with timezone at which the cart was completed.", "format": "date-time" }, + "payment_authorized_at": { + "type": "string", + "description": "The date with timezone at which the payment was authorized.", + "format": "date-time" + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of a cart in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "context": { + "type": "object", + "description": "The context of the cart which can include info like IP or user agent.", + "example": { + "ip": "::1", + "user_agent": "PostmanRuntime/7.29.2" + } + }, + "sales_channel_id": { + "type": "string", + "description": "The sales channel ID the cart is associated with.", + "example": null + }, + "sales_channel": { + "description": "A sales channel object. Available if the relation `sales_channel` is expanded.", + "type": "object" + }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } }, "shipping_total": { - "type": "integer" + "type": "integer", + "description": "The total of shipping", + "example": 1000 }, "discount_total": { - "type": "integer" + "type": "integer", + "description": "The total of discount", + "example": 800 }, "tax_total": { - "type": "integer" + "type": "integer", + "description": "The total of tax", + "example": 0 + }, + "refunded_total": { + "type": "integer", + "description": "The total amount refunded if the order associated with this cart is returned.", + "example": 0 + }, + "total": { + "type": "integer", + "description": "The total amount of the cart", + "example": 8200 }, "subtotal": { - "type": "integer" + "type": "integer", + "description": "The subtotal of the cart", + "example": 8000 }, "refundable_amount": { - "type": "integer" + "type": "integer", + "description": "The amount that can be refunded", + "example": 8200 }, "gift_card_total": { - "type": "integer" + "type": "integer", + "description": "The total of gift cards", + "example": 0 + }, + "gift_card_tax_total": { + "type": "integer", + "description": "The total of gift cards with taxes", + "example": 0 } } }, @@ -11516,30 +14930,50 @@ "title": "Claim Image", "description": "Represents photo documentation of a claim.", "x-resourceId": "claim_image", + "required": [ + "claim_item_id", + "url" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The claim image's ID", + "example": "cimg_01G8ZH853Y6TFXWPG5EYE81X63" }, "claim_item_id": { - "type": "string" + "type": "string", + "description": "The ID of the claim item associated with the image" + }, + "claim_item": { + "description": "A claim item object. Available if the relation `claim_item` is expanded.", + "type": "object" }, "url": { - "type": "string" + "type": "string", + "description": "The URL of the image", + "format": "uri" }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -11547,32 +14981,51 @@ "title": "Claim Item", "description": "Represents a claimed item along with information about the reasons for the claim.", "x-resourceId": "claim_item", + "required": [ + "claim_order_id", + "item_id", + "variant_id", + "reason", + "quantity" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The claim item's ID", + "example": "citm_01G8ZH853Y6TFXWPG5EYE81X63" }, "images": { "type": "array", + "description": "Available if the relation `images` is expanded.", "items": { "$ref": "#/components/schemas/claim_image" } }, "claim_order_id": { + "description": "The ID of the claim this item is associated with.", "type": "string" }, + "claim_order": { + "description": "A claim order object. Available if the relation `claim_order` is expanded.", + "type": "object" + }, "item_id": { - "type": "string" + "description": "The ID of the line item that the claim item refers to.", + "type": "string", + "example": "item_01G8ZM25TN49YV9EQBE2NC27KC" }, "item": { - "description": "The Line Item that the claim refers to", + "description": "Available if the relation `item` is expanded.", "$ref": "#/components/schemas/line_item" }, "variant_id": { - "type": "string" + "description": "The ID of the product variant that is claimed.", + "type": "string", + "example": "variant_01G1G5V2MRX2V3PVSR2WXYPFB6" }, "variant": { - "description": "The Product Variant that is claimed.", - "$ref": "#/components/schemas/product_variant" + "description": "A variant object. Available if the relation `variant` is expanded.", + "type": "object" }, "reason": { "description": "The reason for the claim", @@ -11586,14 +15039,16 @@ }, "note": { "description": "An optional note about the claim, for additional information", - "type": "string" + "type": "string", + "example": "I don't like it." }, "quantity": { "description": "The quantity of the item that is being claimed; must be less than or equal to the amount purchased in the original order.", - "type": "integer" + "type": "integer", + "example": 1 }, "tags": { - "description": "User defined tags for easy filtering and grouping.", + "description": "User defined tags for easy filtering and grouping. Available if the relation 'tags' is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/claim_tag" @@ -11601,18 +15056,25 @@ }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -11620,9 +15082,15 @@ "title": "Claim Order", "description": "Claim Orders represent a group of faulty or missing items. Each claim order consists of a subset of items associated with an original order, and can contain additional information about fulfillments and returns.", "x-resourceId": "claim_order", + "required": [ + "type", + "order_id" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The claim's ID", + "example": "claim_01G8ZH853Y6TFXWPG5EYE81X63" }, "type": { "type": "string", @@ -11633,11 +15101,13 @@ }, "payment_status": { "type": "string", + "description": "The status of the claim's payment", "enum": [ "na", "not_refunded", "refunded" - ] + ], + "default": "na" }, "fulfillment_status": { "type": "string", @@ -11651,7 +15121,8 @@ "returned", "canceled", "requires_action" - ] + ], + "default": "not_fulfilled" }, "claim_items": { "description": "The items that have been claimed", @@ -11668,19 +15139,25 @@ } }, "order_id": { - "description": "The id of the order that the claim comes from.", - "type": "string" + "description": "The ID of the order that the claim comes from.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "return_order": { - "description": "Holds information about the return if the claim is to be returned", - "$ref": "#/components/schemas/return" + "description": "A return object. Holds information about the return if the claim is to be returned. Available if the relation 'return_order' is expanded", + "type": "object" }, "shipping_address_id": { - "description": "The id of the address that the new items should be shipped to", - "type": "string" + "description": "The ID of the address that the new items should be shipped to", + "type": "string", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" }, "shipping_address": { - "description": "The address that the new items should be shipped to", + "description": "Available if the relation `shipping_address` is expanded.", "$ref": "#/components/schemas/address" }, "shipping_methods": { @@ -11699,31 +15176,48 @@ }, "refund_amount": { "description": "The amount that will be refunded in conjunction with the claim", - "type": "integer" + "type": "integer", + "example": 1000 }, "canceled_at": { - "description": "The date with timezone at which the Swap was canceled.", + "description": "The date with timezone at which the claim was canceled.", "type": "string", "format": "date-time" }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + }, "no_notification": { "description": "Flag for describing whether or not notifications related to this should be send.", - "type": "boolean" + "type": "boolean", + "example": false }, - "metadata": { - "type": "object" + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of the cart associated with the claim in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } } } }, @@ -11731,33 +15225,41 @@ "title": "Claim Tag", "description": "Claim Tags are user defined tags that can be assigned to claim items for easy filtering and grouping.", "x-resourceId": "claim_tag", + "required": [ + "value" + ], "properties": { "id": { - "description": "The id of the claim tag. Will be prefixed by `ctag_`.", - "type": "string" + "type": "string", + "description": "The claim tag's ID", + "example": "ctag_01G8ZCC5Y63B95V6B5SHBZ91S4" }, "value": { "description": "The value that the claim tag holds", - "type": "string" + "type": "string", + "example": "Damaged" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, - "update_at": { - "description": "The date with timezone at which the resource was last updated.", + "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -11765,30 +15267,64 @@ "title": "Country", "description": "Country details", "x-resourceId": "country", + "required": [ + "iso_2", + "iso_3", + "num_code", + "name", + "display_name" + ], "properties": { "id": { - "description": "The database id of the country", - "type": "integer" + "type": "string", + "description": "The country's ID", + "example": 109 }, "iso_2": { - "description": "The 2 character ISO code for the country.", - "type": "string" + "type": "string", + "description": "The 2 character ISO code of the country in lower case", + "example": "it", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements", + "description": "See a list of codes." + } }, "iso_3": { - "description": "The 3 character ISO code for the country.", - "type": "string" + "type": "string", + "description": "The 2 character ISO code of the country in lower case", + "example": "ita", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements", + "description": "See a list of codes." + } }, "num_code": { "description": "The numerical ISO code for the country.", - "type": "string" + "type": "string", + "example": 380, + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_numeric#Officially_assigned_code_elements", + "description": "See a list of codes." + } }, "name": { - "description": "The normalized country name; in upper case.", - "type": "string" + "description": "The normalized country name in upper case.", + "type": "string", + "example": "ITALY" }, "display_name": { "description": "The country name appropriate for display.", - "type": "string" + "type": "string", + "example": "Italy" + }, + "region_id": { + "type": "string", + "description": "The region ID this country is associated with.", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" + }, + "region": { + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" } } }, @@ -11796,22 +15332,36 @@ "title": "Currency", "description": "Currency", "x-resourceId": "currency", + "required": [ + "code", + "symbol", + "symbol_native", + "name" + ], "properties": { "code": { "description": "The 3 character ISO code for the currency.", - "type": "string" + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } }, "symbol": { "description": "The symbol used to indicate the currency.", - "type": "string" + "type": "string", + "example": "$" }, "symbol_native": { "description": "The native symbol used to indicate the currency.", - "type": "string" + "type": "string", + "example": "$" }, "name": { "description": "The written name of the currency", - "type": "string" + "type": "string", + "example": "US Dollar" } } }, @@ -11819,49 +15369,60 @@ "title": "Custom Shipping Option", "description": "Custom Shipping Options are 'overriden' Shipping Options. Store managers can attach a Custom Shipping Option to a cart in order to set a custom price for a particular Shipping Option", "x-resourceId": "custom_shipping_option", + "required": [ + "price", + "shipping_option_id" + ], "properties": { "id": { - "description": "The id of the Custom Shipping Option. This value will be prefixed with `cso_`.", - "type": "string" + "type": "string", + "description": "The custom shipping option's ID", + "example": "cso_01G8X99XNB77DMFBJFWX6DN9V9" }, "price": { "description": "The custom price set that will override the shipping option's original price", - "type": "integer" + "type": "integer", + "example": 1000 }, "shipping_option_id": { - "description": "The id of the Shipping Option that the custom shipping option overrides", - "anyOf": [ - { - "$ref": "#/components/schemas/shipping_option" - } - ] + "description": "The ID of the Shipping Option that the custom shipping option overrides", + "type": "string", + "example": "so_01G1G5V27GYX4QXNARRQCW1N8T" + }, + "shipping_option": { + "description": "A shipping option object. Available if the relation `shipping_option` is expanded.", + "type": "object" }, "cart_id": { - "description": "The id of the Cart that the custom shipping option is attached to", - "anyOf": [ - { - "$ref": "#/components/schemas/cart" - } - ] + "description": "The ID of the Cart that the custom shipping option is attached to", + "type": "string", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -11869,33 +15430,56 @@ "title": "Customer Group", "description": "Represents a customer group", "x-resourceId": "customer_group", + "required": [ + "name" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The customer group's ID", + "example": "cgrp_01G8ZH853Y6TFXWPG5EYE81X63" }, "name": { - "type": "string" + "type": "string", + "description": "The name of the customer group", + "example": "VIP" }, "customers": { "type": "array", + "description": "The customers that belong to the customer group. Available if the relation `customers` is expanded.", "items": { - "$ref": "#/components/schemas/customer" + "type": "object", + "description": "A customer object." + } + }, + "price_lists": { + "type": "array", + "description": "The price lists that are associated with the customer group. Available if the relation `price_lists` is expanded.", + "items": { + "$ref": "#/components/schemas/price_list" } }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -11903,56 +15487,92 @@ "title": "Customer", "description": "Represents a customer", "x-resourceId": "customer", + "required": [ + "email" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The customer's ID", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" }, "email": { - "type": "string" + "type": "string", + "description": "The customer's email", + "format": "email" + }, + "first_name": { + "type": "string", + "description": "The customer's first name", + "example": "Arno" + }, + "last_name": { + "type": "string", + "description": "The customer's first name", + "example": "Willms" }, "billing_address_id": { - "type": "string" + "type": "string", + "description": "The customer's billing address ID", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" }, "billing_address": { - "description": "The Customer's billing address.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "description": "Available if the relation `billing_address` is expanded.", + "$ref": "#/components/schemas/address" }, "shipping_addresses": { + "description": "Available if the relation `shipping_addresses` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/address" } }, - "first_name": { - "type": "string" - }, - "last_name": { - "type": "string" - }, "phone": { - "type": "string" + "type": "string", + "description": "The customer's phone number", + "example": 16128234334802 }, "has_account": { - "type": "boolean" + "type": "boolean", + "description": "Whether the customer has an account or not", + "default": false + }, + "orders": { + "description": "Available if the relation `orders` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "An order object." + } + }, + "groups": { + "description": "The customer groups the customer belongs to. Available if the relation `groups` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/customer_group" + } }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -11960,33 +15580,45 @@ "title": "Product Tag Discount Condition", "description": "Associates a discount condition with a customer group", "x-resourceId": "discount_condition_customer_group", + "required": [ + "customer_group_id", + "condition_id" + ], "properties": { "customer_group_id": { - "description": "The id of the Product Tag", - "type": "string" + "description": "The ID of the Product Tag", + "type": "string", + "example": "cgrp_01G8ZH853Y6TFXWPG5EYE81X63" }, "condition_id": { - "description": "The id of the Discount Condition", - "type": "string" + "description": "The ID of the Discount Condition", + "type": "string", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "customer_group": { + "description": "Available if the relation `customer_group` is expanded.", + "$ref": "#/components/schemas/customer_group" + }, + "discount_condition": { + "description": "Available if the relation `discount_condition` is expanded.", + "$ref": "#/components/schemas/discount_condition" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -11994,33 +15626,45 @@ "title": "Product Collection Discount Condition", "description": "Associates a discount condition with a product collection", "x-resourceId": "discount_condition_product_collection", + "required": [ + "product_collection_id", + "condition_id" + ], "properties": { "product_collection_id": { - "description": "The id of the Product Collection", - "type": "string" + "description": "The ID of the Product Collection", + "type": "string", + "example": "pcol_01F0YESBFAZ0DV6V831JXWH0BG" }, "condition_id": { - "description": "The id of the Discount Condition", - "type": "string" + "description": "The ID of the Discount Condition", + "type": "string", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "product_collection": { + "description": "Available if the relation `product_collection` is expanded.", + "$ref": "#/components/schemas/product_collection" + }, + "discount_condition": { + "description": "Available if the relation `discount_condition` is expanded.", + "$ref": "#/components/schemas/discount_condition" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12028,33 +15672,45 @@ "title": "Product Tag Discount Condition", "description": "Associates a discount condition with a product tag", "x-resourceId": "discount_condition_product_tag", + "required": [ + "product_tag_id", + "condition_id" + ], "properties": { "product_tag_id": { - "description": "The id of the Product Tag", - "type": "string" + "description": "The ID of the Product Tag", + "type": "string", + "example": "ptag_01F0YESHPZYY3H4SJ3A5918SBN" }, "condition_id": { - "description": "The id of the Discount Condition", - "type": "string" + "description": "The ID of the Discount Condition", + "type": "string", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "product_tag": { + "description": "Available if the relation `product_tag` is expanded.", + "$ref": "#/components/schemas/product_tag" + }, + "discount_condition": { + "description": "Available if the relation `discount_condition` is expanded.", + "$ref": "#/components/schemas/discount_condition" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12062,33 +15718,45 @@ "title": "Product Type Discount Condition", "description": "Associates a discount condition with a product type", "x-resourceId": "discount_condition_product", + "required": [ + "product_type_id", + "condition_id" + ], "properties": { "product_type_id": { - "description": "The id of the Product Type", - "type": "string" + "description": "The ID of the Product Tag", + "type": "string", + "example": "ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A" }, "condition_id": { - "description": "The id of the Discount Condition", - "type": "string" + "description": "The ID of the Discount Condition", + "type": "string", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "product_type": { + "description": "Available if the relation `product_type` is expanded.", + "$ref": "#/components/schemas/product_type" + }, + "discount_condition": { + "description": "Available if the relation `discount_condition` is expanded.", + "$ref": "#/components/schemas/discount_condition" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12096,33 +15764,45 @@ "title": "Product Discount Condition", "description": "Associates a discount condition with a product", "x-resourceId": "discount_condition_product", + "required": [ + "product_id", + "condition_id" + ], "properties": { "product_id": { - "description": "The id of the Product", - "type": "string" + "description": "The ID of the Product Tag", + "type": "string", + "example": "prod_01G1G5V2MBA328390B5AXJ610F" }, "condition_id": { - "description": "The id of the Discount Condition", - "type": "string" + "description": "The ID of the Discount Condition", + "type": "string", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "product": { + "description": "Available if the relation `product` is expanded.", + "$ref": "#/components/schemas/product" + }, + "discount_condition": { + "description": "Available if the relation `discount_condition` is expanded.", + "$ref": "#/components/schemas/discount_condition" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12130,10 +15810,16 @@ "title": "Discount Condition", "description": "Holds rule conditions for when a discount is applicable", "x-resourceId": "discount_condition", + "required": [ + "type", + "operator", + "discount_rule_id" + ], "properties": { "id": { - "description": "The id of the Discount Condition. Will be prefixed by `discon_`.", - "type": "string" + "type": "string", + "description": "The discount condition's ID", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" }, "type": { "description": "The type of the Condition", @@ -12146,24 +15832,84 @@ "customer_groups" ] }, - "created_at": { - "description": "The date with timezone at which the resource was created.", + "operator": { + "description": "The operator of the Condition", "type": "string", + "enum": [ + "in", + "not_in" + ] + }, + "discount_rule_id": { + "type": "string", + "description": "The ID of the discount rule associated with the condition", + "example": "dru_01F0YESMVK96HVX7N419E3CJ7C" + }, + "discount_rule": { + "description": "Available if the relation `discount_rule` is expanded.", + "$ref": "#/components/schemas/discount_rule" + }, + "products": { + "description": "products associated with this condition if type = products. Available if the relation `products` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A product object." + } + }, + "product_types": { + "description": "product types associated with this condition if type = product_types. Available if the relation `product_types` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A product type object." + } + }, + "product_tags": { + "description": "product tags associated with this condition if type = product_tags. Available if the relation `product_tags` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A product tag object." + } + }, + "product_collections": { + "description": "product collections associated with this condition if type = product_collections. Available if the relation `product_collections` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A product collection object." + } + }, + "customer_groups": { + "description": "customer groups associated with this condition if type = customer_groups. Available if the relation `customer_groups` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A customer group object." + } + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, - "update_at": { - "description": "The date with timezone at which the resource was last updated.", + "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12171,10 +15917,15 @@ "title": "Discount Rule", "description": "Holds the rules that governs how a Discount is calculated when applied to a Cart.", "x-resourceId": "discount_rule", + "required": [ + "type", + "value" + ], "properties": { "id": { - "description": "The id of the Discount Rule. Will be prefixed by `dru_`.", - "type": "string" + "type": "string", + "description": "The discount rule's ID", + "example": "dru_01F0YESMVK96HVX7N419E3CJ7C" }, "type": { "description": "The type of the Discount, can be `fixed` for discounts that reduce the price by a fixed amount, `percentage` for percentage reductions or `free_shipping` for shipping vouchers.", @@ -12183,15 +15934,18 @@ "fixed", "percentage", "free_shipping" - ] + ], + "example": "percentage" }, "description": { "description": "A short description of the discount", - "type": "string" + "type": "string", + "example": "10 Percent" }, "value": { "description": "The value that the discount represents; this will depend on the type of the discount", - "type": "integer" + "type": "integer", + "example": 10 }, "allocation": { "description": "The scope that the discount should apply to.", @@ -12199,33 +15953,38 @@ "enum": [ "total", "item" - ] + ], + "example": "total" }, "conditions": { - "description": "A set of conditions that can be used to limit when the discount can be used", + "description": "A set of conditions that can be used to limit when the discount can be used. Available if the relation `conditions` is expanded.", "type": "array", "items": { - "$ref": "#/components/schemas/discount_condition" + "type": "object", + "description": "A discount condition object." } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, - "update_at": { - "description": "The date with timezone at which the resource was last updated.", + "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12233,34 +15992,48 @@ "title": "Discount", "description": "Represents a discount that can be applied to a cart for promotional purposes.", "x-resourceId": "discount", + "required": [ + "code", + "is_dynamic" + ], "properties": { "id": { - "description": "The id of the Discount. Will be prefixed by `disc_`.", - "type": "string" + "type": "string", + "description": "The discount's ID", + "example": "disc_01F0YESMW10MGHWJKZSDDMN0VN" }, "code": { "description": "A unique code for the discount - this will be used by the customer to apply the discount", - "type": "string" + "type": "string", + "example": "10DISC" }, "is_dynamic": { "description": "A flag to indicate if multiple instances of the discount can be generated. I.e. for newsletter discounts", - "type": "boolean" + "type": "boolean", + "example": false + }, + "rule_id": { + "type": "string", + "description": "The Discount Rule that governs the behaviour of the Discount", + "example": "dru_01F0YESMVK96HVX7N419E3CJ7C" }, "rule": { - "description": "The Discount Rule that governs the behaviour of the Discount", - "anyOf": [ - { - "$ref": "#/components/schemas/discount_rule" - } - ] + "description": "Available if the relation `rule` is expanded.", + "$ref": "#/components/schemas/discount_rule" }, "is_disabled": { "description": "Whether the Discount has been disabled. Disabled discounts cannot be applied to carts", - "type": "boolean" + "type": "boolean", + "example": false }, "parent_discount_id": { + "type": "string", "description": "The Discount that the discount was created from. This will always be a dynamic discount", - "type": "string" + "example": "disc_01G8ZH853YPY9B94857DY91YGW" + }, + "parent_discount": { + "description": "Available if the relation `parent_discount` is expanded.", + "$ref": "#/components/schemas/discount" }, "starts_at": { "description": "The time at which the discount can be used.", @@ -12272,39 +16045,51 @@ "type": "string", "format": "date-time" }, + "valid_duration": { + "type": "string", + "description": "Duration the discount runs between", + "example": "P3Y6M4DT12H30M5S" + }, "regions": { - "description": "The Regions in which the Discount can be used", + "description": "The Regions in which the Discount can be used. Available if the relation `regions` is expanded.", "type": "array", "items": { - "$ref": "#/components/schemas/region" + "type": "object", + "description": "A region object." } }, "usage_limit": { "description": "The maximum number of times that a discount can be used.", - "type": "integer" + "type": "integer", + "example": 100 }, "usage_count": { "description": "The number of times a discount has been used.", - "type": "integer" + "type": "integer", + "example": 50, + "default": 0 }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12314,66 +16099,86 @@ "x-resourceId": "draft-order", "properties": { "id": { - "type": "string" + "type": "string", + "description": "The draft order's ID", + "example": "dorder_01G8TJFKBG38YYFQ035MSVG03C" }, "status": { "type": "string", + "description": "The status of the draft order", "enum": [ "open", "completed" - ] + ], + "default": "open" }, "display_id": { - "type": "string" + "type": "string", + "description": "The draft order's display ID", + "example": 2 }, "cart_id": { - "type": "string" + "type": "string", + "description": "The ID of the cart associated with the draft order.", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" }, "cart": { - "anyOf": [ - { - "$ref": "#/components/schemas/cart" - } - ] + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "order_id": { - "type": "string" + "type": "string", + "description": "The ID of the order associated with the draft order.", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" }, "order": { - "anyOf": [ - { - "$ref": "#/components/schemas/order" - } - ] + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "canceled_at": { "type": "string", - "format": "date-time" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "update_at": { - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "type": "string", + "description": "The date the draft order was canceled at.", "format": "date-time" }, "completed_at": { "type": "string", + "description": "The date the draft order was completed at.", "format": "date-time" }, "no_notification_order": { - "type": "boolean" - }, - "metadata": { - "type": "object" + "type": "boolean", + "description": "Whether to send the customer notifications regarding order updates.", + "example": false }, "idempotency_key": { - "type": "string" + "type": "string", + "description": "Randomly generated key used to continue the completion of the cart associated with the draft order in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", + "format": "date-time" + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12381,26 +16186,34 @@ "title": "Fulfillment Item", "description": "Correlates a Line Item with a Fulfillment, keeping track of the quantity of the Line Item.", "x-resourceId": "fulfillment_item", + "required": [ + "fulfillment_id", + "item_id", + "quantity" + ], "properties": { "fulfillment_id": { "description": "The id of the Fulfillment that the Fulfillment Item belongs to.", - "type": "string" + "type": "string", + "example": "ful_01G8ZRTMQCA76TXNAT81KPJZRF" }, "item_id": { "description": "The id of the Line Item that the Fulfillment Item references.", - "type": "string" + "type": "string", + "example": "item_01G8ZC9GWT6B2GP5FSXRXNFNGN" + }, + "fulfillment": { + "description": "A fulfillment object. Available if the relation `fulfillment` is expanded.", + "type": "object" }, "item": { - "description": "The Line Item that the Fulfillment Item references.", - "anyOf": [ - { - "$ref": "#/components/schemas/line_item" - } - ] + "description": "Available if the relation `item` is expanded.", + "$ref": "#/components/schemas/line_item" }, "quantity": { "description": "The quantity of the Line Item that is included in the Fulfillment.", - "type": "integer" + "type": "integer", + "example": 1 } } }, @@ -12411,11 +16224,13 @@ "properties": { "id": { "description": "The id of the fulfillment provider as given by the plugin.", - "type": "string" + "type": "string", + "example": "manual" }, "is_installed": { "description": "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`.", - "type": "boolean" + "type": "boolean", + "example": true } } }, @@ -12423,36 +16238,60 @@ "title": "Fulfillment", "description": "Fulfillments are created once store operators can prepare the purchased goods. Fulfillments will eventually be shipped and hold information about how to track shipments. Fulfillments are created through a provider, which is typically an external shipping aggregator, shipping partner og 3PL, most plugins will have asynchronous communications with these providers through webhooks in order to automatically update and synchronize the state of Fulfillments.", "x-resourceId": "fulfillment", + "required": [ + "provider_id" + ], "properties": { "id": { - "description": "The id of the Fulfillment. This value will be prefixed by `ful_`.", - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "ful_01G8ZRTMQCA76TXNAT81KPJZRF" }, "claim_order_id": { "description": "The id of the Claim that the Fulfillment belongs to.", - "type": "string" + "type": "string", + "example": null + }, + "claim_order": { + "description": "A claim order object. Available if the relation `claim_order` is expanded.", + "type": "object" }, "swap_id": { "description": "The id of the Swap that the Fulfillment belongs to.", - "type": "string" + "type": "string", + "example": null + }, + "swap": { + "description": "A swap object. Available if the relation `swap` is expanded.", + "type": "object" }, "order_id": { "description": "The id of the Order that the Fulfillment belongs to.", - "type": "string" + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "provider_id": { "description": "The id of the Fulfillment Provider responsible for handling the fulfillment", - "type": "string" + "type": "string", + "example": "manual" + }, + "provider": { + "description": "Available if the relation `provider` is expanded.", + "$ref": "#/components/schemas/fulfillment_provider" }, "items": { - "description": "The Fulfillment Items in the Fulfillment - these hold information about how many of each Line Item has been fulfilled.", + "description": "The Fulfillment Items in the Fulfillment - these hold information about how many of each Line Item has been fulfilled. Available if the relation `items` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/fulfillment_item" } }, "tracking_links": { - "description": "The Tracking Links that can be used to track the status of the Fulfillment, these will usually be provided by the Fulfillment Provider.", + "description": "The Tracking Links that can be used to track the status of the Fulfillment, these will usually be provided by the Fulfillment Provider. Available if the relation `tracking_links` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/tracking_link" @@ -12466,6 +16305,11 @@ "type": "string" } }, + "data": { + "description": "This contains all the data necessary for the Fulfillment provider to handle the fulfillment.", + "type": "object", + "example": {} + }, "shipped_at": { "description": "The date with timezone at which the Fulfillment was shipped.", "type": "string", @@ -12473,26 +16317,43 @@ }, "no_notification": { "description": "Flag for describing whether or not notifications related to this should be send.", - "type": "boolean" + "type": "boolean", + "example": false }, "canceled_at": { "description": "The date with timezone at which the Fulfillment was canceled.", "type": "string", "format": "date-time" }, - "created_at": { - "description": "The date with timezone at which the resource was created.", + "idempotency_key": { "type": "string", + "description": "Randomly generated key used to continue the completion of the fulfillment in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12500,35 +16361,53 @@ "title": "Gift Card Transaction", "description": "Gift Card Transactions are created once a Customer uses a Gift Card to pay for their Order", "x-resourceId": "gift_card_transaction", + "required": [ + "gift_card_id", + "amount" + ], "properties": { "id": { - "description": "The id of the Gift Card Transaction. This value will be prefixed by `gct_`.", - "type": "string" + "type": "string", + "description": "The gift card transaction's ID", + "example": "gct_01G8X9A7ESKAJXG2H0E6F1MW7A" }, "gift_card_id": { - "description": "The id of the Gift Card that was used in the transaction.", - "type": "string" + "description": "The ID of the Gift Card that was used in the transaction.", + "type": "string", + "example": "gift_01G8XKBPBQY2R7RBET4J7E0XQZ" }, "gift_card": { - "description": "The Gift Card that was used in the transaction.", - "anyOf": [ - { - "$ref": "#/components/schemas/gift_card" - } - ] + "description": "A gift card object. Available if the relation `gift_card` is expanded.", + "type": "object" }, "order_id": { - "description": "The id of the Order that the Gift Card was used to pay for.", - "type": "string" + "description": "The ID of the Order that the Gift Card was used to pay for.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "amount": { "description": "The amount that was used from the Gift Card.", - "type": "integer" + "type": "integer", + "example": 10 }, "created_at": { "description": "The date with timezone at which the resource was created.", "type": "string", "format": "date-time" + }, + "is_taxable": { + "description": "Whether the transaction is taxable or not.", + "type": "boolean", + "example": false + }, + "tax_rate": { + "description": "The tax rate of the transaction", + "type": "number", + "example": 0 } } }, @@ -12536,42 +16415,55 @@ "title": "Gift Card", "description": "Gift Cards are redeemable and represent a value that can be used towards the payment of an Order.", "x-resourceId": "gift_card", + "required": [ + "code", + "value", + "balance", + "region_id" + ], "properties": { "id": { - "description": "The id of the Gift Card. This value will be prefixed by `gift_`.", - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "gift_01G8XKBPBQY2R7RBET4J7E0XQZ" }, "code": { "description": "The unique code that identifies the Gift Card. This is used by the Customer to redeem the value of the Gift Card.", - "type": "string" + "type": "string", + "example": "3RFT-MH2C-Y4YZ-XMN4" }, "value": { "description": "The value that the Gift Card represents.", - "type": "integer" + "type": "integer", + "example": 10 }, "balance": { "description": "The remaining value on the Gift Card.", - "type": "integer" + "type": "integer", + "example": 10 }, "region_id": { + "type": "string", "description": "The id of the Region in which the Gift Card is available.", - "type": "string" + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" }, "region": { - "description": "The Region in which the Gift Card is available.", - "anyOf": [ - { - "$ref": "#/components/schemas/region" - } - ] + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" }, "order_id": { + "type": "string", "description": "The id of the Order that the Gift Card was purchased in.", - "type": "string" + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "is_disabled": { "description": "Whether the Gift Card has been disabled. Disabled Gift Cards cannot be applied to carts.", - "type": "boolean" + "type": "boolean", + "example": false }, "ends_at": { "description": "The time at which the Gift Card can no longer be used.", @@ -12579,23 +16471,93 @@ "format": "date-time" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + } + } + }, + "idempotency_key": { + "title": "Idempotency Key", + "description": "Idempotency Key is used to continue a process in case of any failure that might occur.", + "x-resourceId": "idempotency_key", + "required": [ + "idempotency_key" + ], + "properties": { + "id": { + "type": "string", + "description": "The idempotency key's ID", + "example": "ikey_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "idempotency_key": { + "description": "The unique randomly generated key used to determine the state of a process.", + "type": "string", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "created_at": { + "description": "Date which the idempotency key was locked.", + "type": "string", + "format": "date-time" + }, + "locked_at": { + "description": "Date which the idempotency key was locked.", + "type": "string", + "format": "date-time" + }, + "request_method": { + "description": "The method of the request", + "type": "string", + "example": "POST" + }, + "request_params": { + "type": "object", + "description": "The parameters passed to the request", + "example": { + "id": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + } + }, + "request_path": { + "description": "The request's path", + "type": "string", + "example": "/store/carts/cart_01G8ZH853Y6TFXWPG5EYE81X63/complete" + }, + "response_code": { + "type": "string", + "description": "The response's code.", + "example": 200 + }, + "response_body": { + "type": "object", + "description": "The response's body", + "example": { + "id": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + } + }, + "recovery_point": { + "type": "string", + "description": "Where to continue from.", + "default": "started" } } }, @@ -12603,33 +16565,41 @@ "title": "Image", "description": "Images holds a reference to a URL at which the image file can be found.", "x-resourceId": "image", + "required": [ + "url" + ], "properties": { "id": { - "description": "The id of the Image. This value will be prefixed by `img_`.", - "type": "string" + "type": "string", + "description": "The image's ID", + "example": "img_01G749BFYR6T8JTVW6SGW3K3E6" }, "url": { "description": "The URL at which the image file can be found.", - "type": "string" + "type": "string", + "format": "uri" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, - "update_at": { - "description": "The date with timezone at which the resource was last updated.", + "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12637,45 +16607,175 @@ "title": "Invite", "description": "Represents an invite", "x-resourceId": "invite", + "required": [ + "user_email" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The invite's ID", + "example": "invite_01G8TKE4XYCTHSCK2GDEP47RE1" }, "user_email": { - "type": "string" + "type": "string", + "description": "The email of the user being invited.", + "format": "email" }, "role": { "type": "string", + "description": "The user's role.", "enum": [ "admin", "member", "developer" - ] + ], + "default": "member" }, "accepted": { - "type": "boolean" + "type": "boolean", + "description": "Whether the invite was accepted or not.", + "example": false }, "token": { - "type": "string" + "type": "string", + "description": "The token used to accept the invite." }, "expores_at": { "type": "string", + "description": "The date the invite expires at.", "format": "date-time" }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + } + } + }, + "line_item_adjustment": { + "title": "Line Item Adjustment", + "description": "Represents an Line Item Adjustment", + "x-resourceId": "line_item_adjustment", + "required": [ + "item_id", + "description", + "amount" + ], + "properties": { + "id": { + "type": "string", + "description": "The invite's ID", + "example": "lia_01G8TKE4XYCTHSCK2GDEP47RE1" + }, + "item_id": { + "type": "string", + "description": "The ID of the line item", + "example": "item_01G8ZC9GWT6B2GP5FSXRXNFNGN" + }, + "item": { + "description": "Available if the relation `item` is expanded.", + "$ref": "#/components/schemas/line_item" + }, + "description": { + "type": "string", + "description": "The line item's adjustment description", + "example": "Adjusted item's price." + }, + "discount_id": { + "type": "string", + "description": "The ID of the discount associated with the adjustment", + "example": "disc_01F0YESMW10MGHWJKZSDDMN0VN" + }, + "discount": { + "description": "Available if the relation `discount` is expanded.", + "$ref": "#/components/schemas/discount" + }, + "amount": { + "type": "number", + "description": "The adjustment amount", + "example": 1000 + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + } + } + }, + "line_item_tax_line": { + "title": "Line Item Tax Line", + "description": "Represents an Line Item Tax Line", + "x-resourceId": "line_item_tax_line", + "required": [ + "item_id", + "rate", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The line item tax line's ID", + "example": "litl_01G1G5V2DRX1SK6NQQ8VVX4HQ8" + }, + "item_id": { + "type": "string", + "description": "The ID of the line item", + "example": "item_01G8ZC9GWT6B2GP5FSXRXNFNGN" + }, + "item": { + "description": "Available if the relation `item` is expanded.", + "$ref": "#/components/schemas/line_item" + }, + "code": { + "description": "A code to identify the tax type by", + "type": "string", + "example": "tax01" + }, + "name": { + "description": "A human friendly name for the tax", + "type": "string", + "example": "Tax Example" + }, + "rate": { + "description": "The numeric rate to charge tax by", + "type": "number", + "example": 10 + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12683,100 +16783,198 @@ "title": "Line Item", "description": "Line Items represent purchasable units that can be added to a Cart for checkout. When Line Items are purchased they will get copied to the resulting order and can eventually be referenced in Fulfillments and Returns. Line Items may also be created when processing Swaps and Claims.", "x-resourceId": "line_item", + "required": [ + "title", + "unit_price", + "quantity" + ], "properties": { "id": { - "description": "The id of the Line Item. This value will be prefixed by `item_`.", - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "item_01G8ZC9GWT6B2GP5FSXRXNFNGN" }, "cart_id": { - "description": "The id of the Cart that the Line Item belongs to.", - "type": "string" + "description": "The ID of the Cart that the Line Item belongs to.", + "type": "string", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "order_id": { - "description": "The id of the Order that the Line Item belongs to.", - "type": "string" + "description": "The ID of the Order that the Line Item belongs to.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "swap_id": { "description": "The id of the Swap that the Line Item belongs to.", - "type": "string" + "type": "string", + "example": null + }, + "swap": { + "description": "A swap object. Available if the relation `swap` is expanded.", + "type": "object" }, "claim_order_id": { "description": "The id of the Claim that the Line Item belongs to.", - "type": "string" + "type": "string", + "example": null + }, + "claim_order": { + "description": "A claim order object. Available if the relation `claim_order` is expanded.", + "type": "object" + }, + "tax_lines": { + "description": "Available if the relation `tax_lines` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/line_item_tax_line" + } + }, + "adjustments": { + "description": "Available if the relation `adjustments` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/line_item_adjustment" + } }, "title": { "description": "The title of the Line Item, this should be easily identifiable by the Customer.", - "type": "string" + "type": "string", + "example": "Medusa Coffee Mug" }, "description": { "description": "A more detailed description of the contents of the Line Item.", - "type": "string" + "type": "string", + "example": "One Size" }, "thumbnail": { "description": "A URL string to a small image of the contents of the Line Item.", - "type": "string" + "type": "string", + "format": "uri", + "example": "https://medusa-public-images.s3.eu-west-1.amazonaws.com/coffee-mug.png" + }, + "is_return": { + "description": "Is the item being returned", + "type": "boolean", + "example": false }, "is_giftcard": { "description": "Flag to indicate if the Line Item is a Gift Card.", - "type": "boolean" + "type": "boolean", + "example": false }, "should_merge": { "description": "Flag to indicate if new Line Items with the same variant should be merged or added as an additional Line Item.", - "type": "boolean" + "type": "boolean", + "example": false }, "allow_discounts": { "description": "Flag to indicate if the Line Item should be included when doing discount calculations.", - "type": "boolean" + "type": "boolean", + "example": false + }, + "has_shipping": { + "description": "Flag to indicate if the Line Item has fulfillment associated with it.", + "type": "boolean", + "example": false }, "unit_price": { "description": "The price of one unit of the content in the Line Item. This should be in the currency defined by the Cart/Order/Swap/Claim that the Line Item belongs to.", - "type": "boolean" + "type": "boolean", + "example": 8000 }, "variant_id": { "description": "The id of the Product Variant contained in the Line Item.", - "type": "string" + "type": "string", + "example": "variant_01G1G5V2MRX2V3PVSR2WXYPFB6" }, "variant": { - "description": "The Product Variant contained in the Line Item.", - "anyOf": [ - { - "$ref": "#/components/schemas/product_variant" - } - ] + "description": "A product variant object. The Product Variant contained in the Line Item. Available if the relation `variant` is expanded.", + "type": "object" }, "quantity": { "description": "The quantity of the content in the Line Item.", - "type": "integer" + "type": "integer", + "example": 1 }, "fulfilled_quantity": { "description": "The quantity of the Line Item that has been fulfilled.", - "type": "integer" + "type": "integer", + "example": 0 }, "returned_quantity": { "description": "The quantity of the Line Item that has been returned.", - "type": "integer" + "type": "integer", + "example": 0 }, "shipped_quantity": { "description": "The quantity of the Line Item that has been shipped.", - "type": "integer" - }, - "created_at": { - "description": "The date with timezone at which the resource was created.", - "type": "string", - "format": "date-time" - }, - "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "integer", + "example": 0 }, "refundable": { "description": "The amount that can be refunded from the given Line Item. Takes taxes and discounts into consideration.", - "type": "integer" + "type": "integer", + "example": 0 + }, + "subtotal": { + "type": "integer", + "description": "The subtotal of the line item", + "example": 8000 + }, + "tax_total": { + "type": "integer", + "description": "The total of tax of the line item", + "example": 0 + }, + "total": { + "type": "integer", + "description": "The total amount of the line item", + "example": 8000 + }, + "original_total": { + "type": "integer", + "description": "The original total amount of the line item", + "example": 8000 + }, + "original_tax_total": { + "type": "integer", + "description": "The original tax total amount of the line item", + "example": 0 + }, + "discount_total": { + "type": "integer", + "description": "The total of discount of the line item", + "example": 0 + }, + "gift_card_total": { + "type": "integer", + "description": "The total of the gift card of the line item", + "example": 0 + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12784,57 +16982,92 @@ "title": "Money Amount", "description": "Money Amounts represents an amount that a given Product Variant can be purcased for. Each Money Amount either has a Currency or Region associated with it to indicate the pricing in a given Currency or, for fully region-based pricing, the given price in a specific Region. If region-based pricing is used the amount will be in the currency defined for the Reigon.", "x-resourceId": "money_amount", + "required": [ + "currency_code", + "amount" + ], "properties": { "id": { - "description": "The id of the Money Amount. This value will be prefixed by `ma_`.", - "type": "string" + "type": "string", + "description": "The money amount's ID", + "example": "ma_01F0YESHRFQNH5S8Q0PK84YYZN" }, "currency_code": { "description": "The 3 character currency code that the Money Amount is given in.", - "type": "string" + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "currency": { + "description": "Available if the relation `currency` is expanded.", + "$ref": "#/components/schemas/currency" }, "amount": { "description": "The amount in the smallest currecny unit (e.g. cents 100 cents to charge $1) that the Product Variant will cost.", - "type": "integer" + "type": "integer", + "example": 100 }, "min_quantity": { "description": "The minimum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities.", - "type": "integer" + "type": "integer", + "example": 1 }, "max_quantity": { "description": "The maximum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities.", - "type": "integer" + "type": "integer", + "example": 1 + }, + "price_list_id": { + "type": "string", + "description": "The ID of the price list associated with the money amount", + "example": "pl_01G8X3CKJXCG5VXVZ87H9KC09W" + }, + "price_list": { + "description": "Available if the relation `price_list` is expanded.", + "$ref": "#/components/schemas/price_list" }, "variant_id": { - "description": "The id of the Product Variant that the Money Amount belongs to.", - "type": "string" + "description": "The id of the Product Variant contained in the Line Item.", + "type": "string", + "example": "variant_01G1G5V2MRX2V3PVSR2WXYPFB6" + }, + "variant": { + "description": "The Product Variant contained in the Line Item. Available if the relation `variant` is expanded.", + "type": "object" }, "region_id": { - "description": "The id of the Region that the Money Amount is defined for.", - "type": "string" + "type": "string", + "description": "The region's ID", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" }, "region": { - "description": "The Region that the Money Amount is defined for.", - "anyOf": [ - { - "$ref": "#/components/schemas/region" - } - ] + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12842,49 +17075,62 @@ "title": "Note", "description": "Notes are elements which we can use in association with different resources to allow users to describe additional information in relation to these.", "x-resourceId": "note", + "required": [ + "value", + "resource_type", + "resource_id" + ], "properties": { "id": { - "description": "The id of the Note. This value will be prefixed by `note_`.", - "type": "string" + "type": "string", + "description": "The note's ID", + "example": "note_01G8TM8ENBMC7R90XRR1G6H26Q" }, "resource_type": { "description": "The type of resource that the Note refers to.", - "type": "string" + "type": "string", + "example": "order" }, "resource_id": { - "description": "The id of the resource that the Note refers to.", - "type": "string" + "description": "The ID of the resource that the Note refers to.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" }, "value": { "description": "The contents of the note.", - "type": "string" + "type": "string", + "example": "This order must be fulfilled on Monday" + }, + "author_id": { + "type": "string", + "description": "The ID of the author (user)", + "example": "usr_01G1G5V26F5TB3GPAPNJ8X1S3V" }, "author": { - "description": "The author of the note.", - "anyOf": [ - { - "$ref": "#/components/schemas/user" - } - ] + "description": "Available if the relation `author` is expanded.", + "$ref": "#/components/schemas/user" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -12892,14 +17138,19 @@ "title": "Notification Provider", "description": "Represents a notification provider plugin and holds its installation status.", "x-resourceId": "notification_provider", + "required": [ + "id" + ], "properties": { "id": { "description": "The id of the notification provider as given by the plugin.", - "type": "string" + "type": "string", + "example": "sendgrid" }, "is_installed": { "description": "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`.", - "type": "boolean" + "type": "boolean", + "default": true } } }, @@ -12907,46 +17158,50 @@ "title": "Notification", "description": "Notifications a communications sent via Notification Providers as a reaction to internal events such as `order.placed`. Notifications can be used to show a chronological timeline for communications sent to a Customer regarding an Order, and enables resends.", "x-resourceId": "notification", + "required": [ + "resource_type", + "resource_id", + "to" + ], "properties": { "id": { - "description": "The id of the Notification. This value will be prefixed by `noti_`.", - "type": "string" + "type": "string", + "description": "The notification's ID", + "example": "noti_01G53V9Y6CKMCGBM1P0X7C28RX" }, "event_name": { "description": "The name of the event that the notification was sent for.", - "type": "string" + "type": "string", + "example": "order.placed" }, "resource_type": { "description": "The type of resource that the Notification refers to.", - "type": "string" + "type": "string", + "example": "order" }, "resource_id": { - "description": "The id of the resource that the Notification refers to.", - "type": "string" + "description": "The ID of the resource that the Notification refers to.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" }, "customer_id": { - "description": "The id of the Customer that the Notification was sent to.", - "type": "string" + "description": "The ID of the Customer that the Notification was sent to.", + "type": "string", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" }, "customer": { - "description": "The Customer that the Notification was sent to.", - "anyOf": [ - { - "$ref": "#/components/schemas/customer" - } - ] + "description": "A customer object. Available if the relation `customer` is expanded.", + "type": "object" }, "to": { "description": "The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id", - "type": "string" + "type": "string", + "example": "user@example.com" }, "data": { "description": "The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend.", - "type": "object" - }, - "parent_id": { - "description": "The id of the Notification that was originally sent.", - "type": "string" + "type": "object", + "example": {} }, "resends": { "description": "The resends that have been completed after the original Notification.", @@ -12957,16 +17212,21 @@ }, "provider_id": { "description": "The id of the Notification Provider that handles the Notification.", - "type": "string" + "type": "string", + "example": "sengrid" + }, + "provider": { + "description": "Available if the relation `provider` is expanded.", + "$ref": "#/components/schemas/notification_provider" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" } } @@ -12977,45 +17237,70 @@ "x-resourceId": "notification_resend", "properties": { "id": { - "description": "The id of the Notification. This value will be prefixed by `noti_`.", - "type": "string" + "description": "The notification resend's ID", + "type": "string", + "example": "noti_01F0YET45G9NHP08Z66CE4QKBS" }, "event_name": { "description": "The name of the event that the notification was sent for.", - "type": "string" + "type": "string", + "example": "order.placed" }, "resource_type": { "description": "The type of resource that the Notification refers to.", - "type": "string" + "type": "string", + "example": "order" }, "resource_id": { - "description": "The id of the resource that the Notification refers to.", - "type": "string" + "description": "The ID of the resource that the Notification refers to.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "customer_id": { + "description": "The ID of the Customer that the Notification was sent to.", + "type": "string", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" + }, + "customer": { + "description": "A customer object. Available if the relation `customer` is expanded.", + "type": "object" }, "to": { "description": "The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id", - "type": "string" + "type": "string", + "example": "user@example.com" }, "data": { "description": "The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend.", - "type": "object" + "type": "object", + "example": {} }, "parent_id": { - "description": "The id of the Notification that was originally sent.", - "type": "string" + "description": "The ID of the Notification that was originally sent.", + "type": "string", + "example": "noti_01G53V9Y6CKMCGBM1P0X7C28RX" + }, + "parent_notification": { + "description": "Available if the relation `parent_notification` is expanded.", + "$ref": "#/components/schemas/notification" }, "provider_id": { - "description": "The id of the Notification Provider that handles the Notification.", - "type": "string" + "description": "The ID of the Notification Provider that handles the Notification.", + "type": "string", + "example": "sengrid" + }, + "provider": { + "description": "Available if the relation `provider` is expanded.", + "$ref": "#/components/schemas/notification_provider" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" } } @@ -13024,24 +17309,41 @@ "title": "OAuth", "description": "Represent an OAuth app", "x-resourceId": "OAuth", + "required": [ + "id", + "display_name", + "application_name" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The app's ID", + "example": "example_app" }, "display_name": { - "type": "string" + "type": "string", + "description": "The app's display name", + "example": "Example app" }, "application_name": { - "type": "string" + "type": "string", + "description": "The app's name", + "example": "example" }, "install_url": { - "type": "string" + "type": "string", + "description": "The URL to install the app", + "format": "uri" }, "uninstall_url": { - "type": "integer" + "type": "string", + "description": "The URL to uninstall the app", + "format": "uri" }, "data": { - "type": "object" + "type": "object", + "description": "Any data necessary to the app.", + "example": {} } } }, @@ -13049,22 +17351,33 @@ "title": "Order", "description": "Represents an order", "x-resourceId": "order", + "required": [ + "customer_id", + "email", + "region_id", + "currency_code" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The order's ID", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" }, "status": { "type": "string", + "description": "The order's status", "enum": [ "pending", "completed", "archived", "canceled", "requires_action" - ] + ], + "default": "pending" }, "fulfillment_status": { "type": "string", + "description": "The order's fulfillment status", "enum": [ "not_fulfilled", "partially_fulfilled", @@ -13075,10 +17388,12 @@ "returned", "canceled", "requires_action" - ] + ], + "default": "not_fulfilled" }, "payment_status": { "type": "string", + "description": "The order's payment status", "enum": [ "not_paid", "awaiting", @@ -13087,185 +17402,255 @@ "refuneded", "canceled", "requires_action" - ] + ], + "default": "not_paid" }, "display_id": { - "type": "integer" + "type": "integer", + "description": "The order's display ID", + "example": 2 }, "cart_id": { - "type": "string" + "type": "string", + "description": "The ID of the cart associated with the order", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" + }, + "customer_id": { + "type": "string", + "description": "The ID of the customer associated with the order", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" + }, + "customer": { + "description": "A customer object. Available if the relation `customer` is expanded.", + "type": "object" + }, + "email": { + "description": "The email associated with the order", + "type": "string", + "format": "email" + }, + "billing_address_id": { + "type": "string", + "description": "The ID of the billing address associated with the order", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" + }, + "billing_address": { + "description": "Available if the relation `billing_address` is expanded.", + "$ref": "#/components/schemas/address" + }, + "shipping_address_id": { + "type": "string", + "description": "The ID of the shipping address associated with the order", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" + }, + "shipping_address": { + "description": "Available if the relation `shipping_address` is expanded.", + "$ref": "#/components/schemas/address" + }, + "region_id": { + "type": "string", + "description": "The region's ID", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" + }, + "region": { + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" }, "currency_code": { - "type": "string" + "description": "The 3 character currency code that is used in the order", + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "currency": { + "description": "Available if the relation `currency` is expanded.", + "$ref": "#/components/schemas/currency" }, "tax_rate": { - "type": "number" + "description": "The order's tax rate", + "type": "number", + "example": 0 }, "discounts": { "type": "array", + "description": "The discounts used in the order. Available if the relation `discounts` is expanded.", "items": { - "$ref": "#/components/schemas/discount" + "type": "object", + "description": "A discount object." } }, - "email": { - "type": "string" - }, - "billing_address_id": { - "type": "string" - }, - "billing_address": { - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] - }, - "shipping_address_id": { - "type": "string" - }, - "shipping_address": { - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] - }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/line_item" - } - }, - "region_id": { - "type": "string" - }, - "region": { - "anyOf": [ - { - "$ref": "#/components/schemas/region" - } - ] - }, "gift_cards": { "type": "array", + "description": "The gift cards used in the order. Available if the relation `gift_cards` is expanded.", "items": { - "$ref": "#/components/schemas/gift_card" - } - }, - "customer_id": { - "type": "string" - }, - "customer": { - "anyOf": [ - { - "$ref": "#/components/schemas/customer" - } - ] - }, - "payment_session": { - "anyOf": [ - { - "$ref": "#/components/schemas/payment_session" - } - ] - }, - "payment_sessions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/payment_session" - } - }, - "payments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/payment" + "type": "object", + "description": "A gift card object." } }, "shipping_methods": { "type": "array", + "description": "The shipping methods used in the order. Available if the relation `shipping_methods` is expanded.", "items": { "$ref": "#/components/schemas/shipping_method" } }, + "payments": { + "type": "array", + "description": "The payments used in the order. Available if the relation `payments` is expanded.", + "items": { + "$ref": "#/components/schemas/payment" + } + }, "fulfillments": { "type": "array", + "description": "The fulfillments used in the order. Available if the relation `fulfillments` is expanded.", "items": { "$ref": "#/components/schemas/fulfillment" } }, "returns": { "type": "array", + "description": "The returns associated with the order. Available if the relation `returns` is expanded.", "items": { - "$ref": "#/components/schemas/return" + "type": "object", + "description": "A return object." } }, "claims": { "type": "array", + "description": "The claims associated with the order. Available if the relation `claims` is expanded.", "items": { - "$ref": "#/components/schemas/claim_order" + "type": "object", + "description": "A claim order object." } }, "refunds": { "type": "array", + "description": "The refunds associated with the order. Available if the relation `refunds` is expanded.", "items": { - "$ref": "#/components/schemas/refund" + "type": "object", + "description": "A refund object." } }, "swaps": { "type": "array", + "description": "The swaps associated with the order. Available if the relation `swaps` is expanded.", "items": { - "$ref": "#/components/schemas/refund" + "type": "object", + "description": "A swap object." + } + }, + "draft_order_id": { + "type": "string", + "description": "The ID of the draft order this order is associated with.", + "example": null + }, + "draft_order": { + "description": "A draft order object. Available if the relation `draft_order` is expanded.", + "type": "object" + }, + "items": { + "type": "array", + "description": "The line items that belong to the order. Available if the relation `items` is expanded.", + "items": { + "$ref": "#/components/schemas/line_item" } }, "gift_card_transactions": { "type": "array", + "description": "The gift card transactions used in the order. Available if the relation `gift_card_transactions` is expanded.", "items": { "$ref": "#/components/schemas/gift_card_transaction" } }, "canceled_at": { "type": "string", + "description": "The date the order was canceled on.", "format": "date-time" }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "update_at": { - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "type": "string", - "format": "date-time" - }, - "metadata": { - "type": "object" - }, - "shipping_total": { - "type": "integer" - }, - "discount_total": { - "type": "integer" - }, - "tax_total": { - "type": "integer" - }, - "subtotal": { - "type": "integer" - }, - "refundable_amount": { - "type": "integer" - }, - "gift_card_total": { - "type": "integer" - }, - "paid_total": { - "type": "integer" - }, "no_notification": { "description": "Flag for describing whether or not notifications related to this should be send.", - "type": "boolean" + "type": "boolean", + "example": false + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the processing of the order in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "external_id": { + "description": "The ID of an external order.", + "type": "string", + "example": null + }, + "sales_channel_id": { + "type": "string", + "description": "The ID of the sales channel this order is associated with.", + "example": null + }, + "sales_channel": { + "description": "A sales channel object. Available if the relation `sales_channel` is expanded.", + "type": "object" + }, + "shipping_total": { + "type": "integer", + "description": "The total of shipping", + "example": 1000 + }, + "discount_total": { + "type": "integer", + "description": "The total of discount", + "example": 800 + }, + "tax_total": { + "type": "integer", + "description": "The total of tax", + "example": 0 + }, + "refunded_total": { + "type": "integer", + "description": "The total amount refunded if the order is returned.", + "example": 0 + }, + "total": { + "type": "integer", + "description": "The total amount of the order", + "example": 8200 + }, + "subtotal": { + "type": "integer", + "description": "The subtotal of the order", + "example": 8000 + }, + "paid_total": { + "type": "integer", + "description": "The total amount paid", + "example": 8000 + }, + "refundable_amount": { + "type": "integer", + "description": "The amount that can be refunded", + "example": 8200 + }, + "gift_card_total": { + "type": "integer", + "description": "The total of gift cards", + "example": 0 + }, + "gift_card_tax_total": { + "type": "integer", + "description": "The total of gift cards with taxes", + "example": 0 } } }, @@ -13273,14 +17658,19 @@ "title": "Payment Provider", "description": "Represents a Payment Provider plugin and holds its installation status.", "x-resourceId": "payment_provider", + "required": [ + "id" + ], "properties": { "id": { "description": "The id of the payment provider as given by the plugin.", - "type": "string" + "type": "string", + "example": "manual" }, "is_installed": { "description": "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`.", - "type": "boolean" + "type": "boolean", + "default": true } } }, @@ -13288,22 +17678,35 @@ "title": "Payment Session", "description": "Payment Sessions are created when a Customer initilizes the checkout flow, and can be used to hold the state of a payment flow. Each Payment Session is controlled by a Payment Provider, who is responsible for the communication with external payment services. Authorized Payment Sessions will eventually get promoted to Payments to indicate that they are authorized for capture/refunds/etc.", "x-resourceId": "payment_session", + "required": [ + "cart_id", + "provider_id", + "status" + ], "properties": { "id": { - "description": "The id of the Payment Session. This value will be prefixed with `ps_`.", - "type": "string" + "type": "string", + "description": "The payment session's ID", + "example": "ps_01G901XNSRM2YS3ASN9H5KG3FZ" }, "cart_id": { "description": "The id of the Cart that the Payment Session is created for.", - "type": "string" + "type": "string", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "provider_id": { "description": "The id of the Payment Provider that is responsible for the Payment Session", - "type": "string" + "type": "string", + "example": "manual" }, "is_selected": { "description": "A flag to indicate if the Payment Session has been selected as the method that will be used to complete the purchase.", - "type": "boolean" + "type": "boolean", + "example": true }, "status": { "description": "Indicates the status of the Payment Session. Will default to `pending`, and will eventually become `authorized`. Payment Sessions may have the status of `requires_more` to indicate that further actions are to be completed by the Customer.", @@ -13314,20 +17717,30 @@ "requires_more", "error", "canceled" - ] + ], + "example": "pending" }, "data": { "description": "The data required for the Payment Provider to identify, modify and process the Payment Session. Typically this will be an object that holds an id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state.", - "type": "object" + "type": "object", + "example": {} + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of a cart in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" } } @@ -13336,42 +17749,75 @@ "title": "Payment", "description": "Payments represent an amount authorized with a given payment method, Payments can be captured, canceled or refunded.", "x-resourceId": "payment", + "required": [ + "amount", + "currency_code", + "provider_id" + ], "properties": { "id": { - "description": "The id of the Payment. This value will be prefixed with `pay_`.", - "type": "string" + "type": "string", + "description": "The payment's ID", + "example": "pay_01G2SJNT6DEEWDFNAJ4XWDTHKE" }, "swap_id": { - "description": "The id of the Swap that the Payment is used for.", - "type": "string" + "description": "The ID of the Swap that the Payment is used for.", + "type": "string", + "example": null }, - "order_id": { - "description": "The id of the Order that the Payment is used for.", - "type": "string" + "swap": { + "description": "A swap object. Available if the relation `swap` is expanded.", + "type": "object" }, "cart_id": { "description": "The id of the Cart that the Payment Session is created for.", "type": "string" }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" + }, + "order_id": { + "description": "The ID of the Order that the Payment is used for.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" + }, "amount": { "description": "The amount that the Payment has been authorized for.", - "type": "integer" + "type": "integer", + "example": 100 }, "currency_code": { "description": "The 3 character ISO currency code that the Payment is completed in.", - "type": "string" + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "currency": { + "description": "Available if the relation `currency` is expanded.", + "$ref": "#/components/schemas/currency" }, "amount_refunded": { "description": "The amount of the original Payment amount that has been refunded back to the Customer.", - "type": "integer" + "type": "integer", + "example": 0 }, "provider_id": { "description": "The id of the Payment Provider that is responsible for the Payment", - "type": "string" + "type": "string", + "example": "manual" }, "data": { "description": "The data required for the Payment Provider to identify, modify and process the Payment. Typically this will be an object that holds an id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state.", - "type": "object" + "type": "object", + "example": {} }, "captured_at": { "description": "The date with timezone at which the Payment was captured.", @@ -13383,19 +17829,30 @@ "type": "string", "format": "date-time" }, - "created_at": { - "description": "The date with timezone at which the resource was created.", + "idempotency_key": { "type": "string", + "description": "Randomly generated key used to continue the completion of a payment in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -13403,10 +17860,25 @@ "title": "Price List", "description": "Price Lists represents a set of prices that overrides the default price for one or more product variants.", "x-resourceId": "price_list", + "required": [ + "name", + "description" + ], "properties": { "id": { - "description": "The id of the Price List. This value will be prefixed by `pl_`.", - "type": "string" + "type": "string", + "description": "The price list's ID", + "example": "pl_01G8X3CKJXCG5VXVZ87H9KC09W" + }, + "name": { + "type": "string", + "description": "The price list's name", + "example": "VIP Prices" + }, + "description": { + "type": "string", + "description": "The price list's description", + "example": "Prices for VIP customers" }, "type": { "description": "The type of Price List. This can be one of either `sale` or `override`.", @@ -13414,7 +17886,17 @@ "enum": [ "sale", "override" - ] + ], + "default": "sale" + }, + "status": { + "description": "The status of the Price List", + "type": "string", + "enum": [ + "active", + "draft" + ], + "default": "draft" }, "starts_at": { "description": "The date with timezone that the Price List starts being valid.", @@ -13427,25 +17909,33 @@ "format": "date-time" }, "customer_groups": { - "description": "The Customer Groups that the Price List applies to.", + "description": "The Customer Groups that the Price List applies to. Available if the relation `customer_groups` is expanded.", "type": "array", "items": { - "$ref": "#/components/schemas/customer_group" + "type": "object", + "description": "A customer group object." + } + }, + "prices": { + "description": "The Money Amounts that are associated with the Price List. Available if the relation `prices` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/money_amount" } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" } } @@ -13454,44 +17944,54 @@ "title": "Product Collection", "description": "Product Collections represents a group of Products that are related.", "x-resourceId": "product_collection", + "required": [ + "title" + ], "properties": { "id": { - "description": "The id of the Product Collection. This value will be prefixed with `pcol_`.", - "type": "string" + "type": "string", + "description": "The product collection's ID", + "example": "pcol_01F0YESBFAZ0DV6V831JXWH0BG" }, "title": { "description": "The title that the Product Collection is identified by.", - "type": "string" + "type": "string", + "example": "Summer Collection" }, "handle": { "description": "A unique string that identifies the Product Collection - can for example be used in slug structures.", - "type": "string" + "type": "string", + "example": "summer-collection" }, "products": { - "description": "The Products contained in the Product Collection.", + "description": "The Products contained in the Product Collection. Available if the relation `products` is expanded.", "type": "array", "items": { - "$ref": "#/components/schemas/product" + "type": "object", + "description": "A product collection object." } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -13499,41 +17999,61 @@ "title": "Product Option Value", "description": "A value given to a Product Variant's option set. Product Variant have a Product Option Value for each of the Product Options defined on the Product.", "x-resourceId": "product_option_value", + "required": [ + "value", + "option_id", + "variant_id" + ], "properties": { "id": { - "description": "The id of the Product Option Value. This value will be prefixed with `optval_`.", - "type": "string" + "type": "string", + "description": "The product option value's ID", + "example": "optval_01F0YESHR7S6ECD03RF6W12DSJ" }, "value": { "description": "The value that the Product Variant has defined for the specific Product Option (e.g. if the Product Option is \"Size\" this value could be \"Small\", \"Medium\" or \"Large\").", - "type": "string" + "type": "string", + "example": "large" }, "option_id": { - "description": "The id of the Product Option that the Product Option Value is defined for.", - "type": "string" + "description": "The ID of the Product Option that the Product Option Value is defined for.", + "type": "string", + "example": "opt_01F0YESHQBZVKCEXJ24BS6PCX3" + }, + "option": { + "description": "Available if the relation `option` is expanded.", + "$ref": "#/components/schemas/product_option" }, "variant_id": { - "description": "The id of the Product Variant that the Product Option Value is defined for.", - "type": "string" + "description": "The ID of the Product Variant that the Product Option Value is defined for.", + "type": "string", + "example": "variant_01G1G5V2MRX2V3PVSR2WXYPFB6" + }, + "variant": { + "description": "Available if the relation `variant` is expanded.", + "$ref": "#/components/schemas/product_variant" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -13541,44 +18061,58 @@ "title": "Product Option", "description": "Product Options define properties that may vary between different variants of a Product. Common Product Options are \"Size\" and \"Color\", but Medusa doesn't limit what Product Options that can be defined.", "x-resourceId": "product_option", + "required": [ + "title", + "product_id" + ], "properties": { "id": { - "description": "The id of the Product Option. This value will be prefixed with `opt_`.", - "type": "string" + "type": "string", + "description": "The product option's ID", + "example": "opt_01F0YESHQBZVKCEXJ24BS6PCX3" }, "title": { "description": "The title that the Product Option is defined by (e.g. \"Size\").", - "type": "string" + "type": "string", + "example": "Size" }, "values": { - "description": "The Product Option Values that are defined for the Product Option.", + "description": "The Product Option Values that are defined for the Product Option. Available if the relation `values` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/product_option_value" } }, "product_id": { - "description": "The id of the Product that the Product Option is defined for.", - "type": "string" + "description": "The ID of the Product that the Product Option is defined for.", + "type": "string", + "example": "prod_01G1G5V2MBA328390B5AXJ610F" + }, + "product": { + "description": "A product object. Available if the relation `product` is expanded.", + "type": "object" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -13586,33 +18120,41 @@ "title": "Product Tag", "description": "Product Tags can be added to Products for easy filtering and grouping.", "x-resourceId": "product_tag", + "required": [ + "value" + ], "properties": { "id": { - "description": "The id of the Product Tag. This value will be prefixed with `ptag_`.", - "type": "string" + "type": "string", + "description": "The product tag's ID", + "example": "ptag_01G8K2MTMG9168F2B70S1TAVK3" }, "value": { - "description": "The value that the Product Tag represents (e.g. \"Pants\").", - "type": "string" + "description": "The value that the Product Tag represents", + "type": "string", + "example": "Pants" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -13620,33 +18162,45 @@ "title": "Product Tax Rate", "description": "Associates a tax rate with a product to indicate that the product is taxed in a certain way", "x-resourceId": "product_tax_rate", + "required": [ + "product_id", + "rate_id" + ], "properties": { "product_id": { - "description": "The id of the Product", - "type": "string" + "description": "The ID of the Product", + "type": "string", + "example": "prod_01G1G5V2MBA328390B5AXJ610F" + }, + "product": { + "description": "Available if the relation `product` is expanded.", + "$ref": "#/components/schemas/product" }, "rate_id": { - "description": "The id of the Tax Rate", - "type": "string" + "description": "The ID of the Tax Rate", + "type": "string", + "example": "txr_01G8XDBAWKBHHJRKH0AV02KXBR" + }, + "tax_rate": { + "description": "Available if the relation `tax_rate` is expanded.", + "$ref": "#/components/schemas/tax_rate" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -13654,33 +18208,45 @@ "title": "Product Type Tax Rate", "description": "Associates a tax rate with a product type to indicate that the product type is taxed in a certain way", "x-resourceId": "product_type_tax_rate", + "required": [ + "product_type_id", + "rate_id" + ], "properties": { "product_type_id": { - "description": "The id of the Product type", - "type": "string" + "description": "The ID of the Product type", + "type": "string", + "example": "ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "product_type": { + "description": "Available if the relation `product_type` is expanded.", + "$ref": "#/components/schemas/product_type" }, "rate_id": { "description": "The id of the Tax Rate", - "type": "string" + "type": "string", + "example": "txr_01G8XDBAWKBHHJRKH0AV02KXBR" + }, + "tax_rate": { + "description": "Available if the relation `tax_rate` is expanded.", + "$ref": "#/components/schemas/tax_rate" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -13688,33 +18254,41 @@ "title": "Product Type", "description": "Product Type can be added to Products for filtering and reporting purposes.", "x-resourceId": "product_type", + "required": [ + "value" + ], "properties": { "id": { - "description": "The id of the Product Type. This value will be prefixed with `ptyp_`.", - "type": "string" + "type": "string", + "description": "The product type's ID", + "example": "ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A" }, "value": { - "description": "The value that the Product Type represents (e.g. \"Clothing\").", - "type": "string" + "description": "The value that the Product Type represents.", + "type": "string", + "example": "Clothing" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -13722,21 +18296,33 @@ "title": "Product Variant", "description": "Product Variants represent a Product with a specific set of Product Option configurations. The maximum number of Product Variants that a Product can have is given by the number of available Product Option combinations.", "x-resourceId": "product_variant", + "required": [ + "title", + "product_id", + "inventory_quantity" + ], "properties": { "id": { - "description": "The id of the Product Variant. This value will be prefixed with `variant_`.", - "type": "string" + "type": "string", + "description": "The product variant's ID", + "example": "variant_01G1G5V2MRX2V3PVSR2WXYPFB6" }, "title": { "description": "A title that can be displayed for easy identification of the Product Variant.", - "type": "string" + "type": "string", + "example": "Small" }, "product_id": { - "description": "The id of the Product that the Product Variant belongs to.", - "type": "string" + "description": "The ID of the Product that the Product Variant belongs to.", + "type": "string", + "example": "prod_01G1G5V2MBA328390B5AXJ610F" + }, + "product": { + "description": "A product object. Available if the relation `product` is expanded.", + "type": "object" }, "prices": { - "description": "The Money Amounts defined for the Product Variant. Each Money Amount represents a price in a given currency or a price in a specific Region.", + "description": "The Money Amounts defined for the Product Variant. Each Money Amount represents a price in a given currency or a price in a specific Region. Available if the relation `prices` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/money_amount" @@ -13744,89 +18330,112 @@ }, "sku": { "description": "The unique stock keeping unit used to identify the Product Variant. This will usually be a unqiue identifer for the item that is to be shipped, and can be referenced across multiple systems.", - "type": "string" + "type": "string", + "example": "shirt-123" }, "barcode": { "description": "A generic field for a GTIN number that can be used to identify the Product Variant.", - "type": "string" + "type": "string", + "example": null }, "ean": { "description": "An EAN barcode number that can be used to identify the Product Variant.", - "type": "string" + "type": "string", + "example": null }, "upc": { "description": "A UPC barcode number that can be used to identify the Product Variant.", - "type": "string" + "type": "string", + "example": null + }, + "variant_rank": { + "description": "The ranking of this variant", + "type": "number", + "default": 0 }, "inventory_quantity": { "description": "The current quantity of the item that is stocked.", - "type": "integer" + "type": "integer", + "example": 100 }, "allow_backorder": { "description": "Whether the Product Variant should be purchasable when `inventory_quantity` is 0.", - "type": "boolean" + "type": "boolean", + "default": false }, "manage_inventory": { "description": "Whether Medusa should manage inventory for the Product Variant.", - "type": "boolean" + "type": "boolean", + "default": true }, "hs_code": { "description": "The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" + "type": "string", + "example": null }, "origin_country": { "description": "The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" + "type": "string", + "example": null }, "mid_code": { "description": "The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" + "type": "string", + "example": null }, "material": { "description": "The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" + "type": "string", + "example": null }, "weight": { "description": "The weight of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "height": { "description": "The height of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "width": { "description": "The width of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "length": { "description": "The length of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "options": { - "description": "The Product Option Values specified for the Product Variant.", + "description": "The Product Option Values specified for the Product Variant. Available if the relation `options` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/product_option_value" } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -13834,14 +18443,20 @@ "title": "Product", "description": "Products are a grouping of Product Variants that have common properties such as images and descriptions. Products can have multiple options which define the properties that Product Variants differ by.", "x-resourceId": "product", + "required": [ + "title", + "profile_id" + ], "properties": { "id": { - "description": "The id of the Product. This value will be prefixed with `prod_`.", - "type": "string" + "type": "string", + "description": "The product's ID", + "example": "prod_01G1G5V2MBA328390B5AXJ610F" }, "title": { "description": "A title that can be displayed for easy identification of the Product.", - "type": "string" + "type": "string", + "example": "Medusa Coffee Mug" }, "subtitle": { "description": "An optional subtitle that can be used to further specify the Product.", @@ -13849,22 +18464,32 @@ }, "description": { "description": "A short description of the Product.", - "type": "string" + "type": "string", + "example": "Every programmer's best friend." }, "handle": { "description": "A unique identifier for the Product (e.g. for slug structure).", - "type": "string" + "type": "string", + "example": "coffee-mug" }, "is_giftcard": { "description": "Whether the Product represents a Gift Card. Products that represent Gift Cards will automatically generate a redeemable Gift Card code once they are purchased.", - "type": "boolean" + "type": "boolean", + "default": false }, - "discountable": { - "description": "Whether the Product can be discounted. Discounts will not apply to Line Items of this Product when this flag is set to `false`.", - "type": "boolean" + "status": { + "description": "The status of the product", + "type": "string", + "enum": [ + "draft", + "proposed", + "published", + "rejected" + ], + "default": "draft" }, "images": { - "description": "Images of the Product", + "description": "Images of the Product. Available if the relation `images` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/image" @@ -13872,99 +18497,136 @@ }, "thumbnail": { "description": "A URL to an image file that can be used to identify the Product.", - "type": "string" + "type": "string", + "format": "uri" }, "options": { - "description": "The Product Options that are defined for the Product. Product Variants of the Product will have a unique combination of Product Option Values.", + "description": "The Product Options that are defined for the Product. Product Variants of the Product will have a unique combination of Product Option Values. Available if the relation `options` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/product_option" } }, "variants": { - "description": "The Product Variants that belong to the Product. Each will have a unique combination of Product Option Values.", + "description": "The Product Variants that belong to the Product. Each will have a unique combination of Product Option Values. Available if the relation `variants` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/product_variant" } }, "profile_id": { - "description": "The id of the Shipping Profile that the Product belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products.", - "type": "string" + "description": "The ID of the Shipping Profile that the Product belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products.", + "type": "string", + "example": "sp_01G1G5V239ENSZ5MV4JAR737BM" }, - "hs_code": { - "description": "The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" - }, - "origin_country": { - "description": "The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" - }, - "mid_code": { - "description": "The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" - }, - "material": { - "description": "The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" + "profile": { + "description": "Available if the relation `profile` is expanded.", + "$ref": "#/components/schemas/shipping_profile" }, "weight": { "description": "The weight of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "height": { "description": "The height of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "width": { "description": "The width of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "length": { "description": "The length of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, - "type": { - "description": "The Product Type of the Product (e.g. \"Clothing\")", - "anyOf": [ - { - "$ref": "#/components/schemas/product_type" - } - ] + "hs_code": { + "description": "The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", + "type": "string", + "example": null + }, + "origin_country": { + "description": "The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers.", + "type": "string", + "example": null + }, + "mid_code": { + "description": "The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", + "type": "string", + "example": null + }, + "material": { + "description": "The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers.", + "type": "string", + "example": null + }, + "collection_id": { + "type": "string", + "description": "The Product Collection that the Product belongs to", + "example": "pcol_01F0YESBFAZ0DV6V831JXWH0BG" }, "collection": { - "description": "The Product Collection that the Product belongs to (e.g. \"SS20\")", - "anyOf": [ - { - "$ref": "#/components/schemas/product_collection" - } - ] + "description": "A product collection object. Available if the relation `collection` is expanded.", + "type": "object" + }, + "type_id": { + "type": "string", + "description": "The Product type that the Product belongs to", + "example": "ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "type": { + "description": "Available if the relation `type` is expanded.", + "$ref": "#/components/schemas/product_type" }, "tags": { - "description": "The Product Tags assigned to the Product.", + "description": "The Product Tags assigned to the Product. Available if the relation `tags` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/product_tag" } }, - "created_at": { - "description": "The date with timezone at which the resource was created.", + "discountable": { + "description": "Whether the Product can be discounted. Discounts will not apply to Line Items of this Product when this flag is set to `false`.", + "type": "boolean", + "default": true + }, + "external_id": { + "description": "The external ID of the product", "type": "string", + "example": null + }, + "sales_channels": { + "description": "The sales channels the product is associated with. Available if the relation `sales_channels` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A sales channel object." + } + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -13972,22 +18634,30 @@ "title": "Refund", "description": "Refund represent an amount of money transfered back to the Customer for a given reason. Refunds may occur in relation to Returns, Swaps and Claims, but can also be initiated by a store operator.", "x-resourceId": "refund", + "required": [ + "order_id", + "amount" + ], "properties": { "id": { - "description": "The id of the Refund. This value will be prefixed with `ref_`.", - "type": "string" + "type": "string", + "description": "The refund's ID", + "example": "ref_01G1G5V27GYX4QXNARRQCW1N8T" }, "order_id": { "description": "The id of the Order that the Refund is related to.", - "type": "string" + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" }, "amount": { "description": "The amount that has be refunded to the Customer.", - "type": "integer" + "type": "integer", + "example": 1000 }, "note": { "description": "An optional note explaining why the amount was refunded.", - "type": "string" + "type": "string", + "example": "I didn't like it" }, "reason": { "description": "The reason given for the Refund, will automatically be set when processed as part of a Swap, Claim or Return.", @@ -13998,21 +18668,38 @@ "swap", "claim", "other" - ] + ], + "example": "return" + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of the refund in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14020,66 +18707,113 @@ "title": "Region", "description": "Regions hold settings for how Customers in a given geographical location shop. The is, for example, where currencies and tax rates are defined. A Region can consist of multiple countries to accomodate common shopping settings across countries.", "x-resourceId": "region", + "required": [ + "name", + "currency_code", + "tax_rate" + ], "properties": { "id": { - "description": "The id of the Region. This value will be prefixed with `reg_`.", - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" }, "name": { "description": "The name of the region as displayed to the customer. If the Region only has one country it is recommended to write the country name.", - "type": "string" + "type": "string", + "example": "EU" }, "currency_code": { - "description": "The 3 character ISO currency code that Customers will shop in in the Region.", - "type": "string" + "description": "The 3 character currency code that the Region uses.", + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "currency": { + "description": "Available if the relation `currency` is expanded.", + "$ref": "#/components/schemas/currency" }, "tax_rate": { "description": "The tax rate that should be charged on purchases in the Region.", - "type": "number" + "type": "number", + "example": 0 + }, + "tax_rates": { + "description": "The tax rates that are included in the Region. Available if the relation `tax_rates` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/tax_rate" + } }, "tax_code": { "description": "The tax code used on purchases in the Region. This may be used by other systems for accounting purposes.", - "type": "string" + "type": "string", + "example": null + }, + "gift_cards_taxable": { + "description": "Whether the gift cards are taxable or not in this region.", + "type": "boolean", + "default": true + }, + "automatic_taxes": { + "description": "Whether taxes should be automated in this region.", + "type": "boolean", + "default": true }, "countries": { - "description": "The countries that are included in the Region.", + "description": "The countries that are included in the Region. Available if the relation `countries` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/country" } }, + "tax_provider_id": { + "type": "string", + "description": "The ID of the tax provider used in this region", + "example": null + }, + "tax_provider": { + "description": "Available if the relation `tax_provider` is expanded.", + "$ref": "#/components/schemas/tax_provider" + }, "payment_providers": { - "description": "The Payment Providers that can be used to process Payments in the Region.", + "description": "The Payment Providers that can be used to process Payments in the Region. Available if the relation `payment_providers` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/payment_provider" } }, "fulfillment_providers": { - "description": "The Fulfillment Providers that can be used to fulfill orders in the Region.", + "description": "The Fulfillment Providers that can be used to fulfill orders in the Region. Available if the relation `payment_providers` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/fulfillment_provider" } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14087,54 +18821,69 @@ "title": "Return Item", "description": "Correlates a Line Item with a Return, keeping track of the quantity of the Line Item that will be returned.", "x-resourceId": "return_item", + "required": [ + "return_id", + "item_id" + ], "properties": { "return_id": { "description": "The id of the Return that the Return Item belongs to.", - "type": "string" + "type": "string", + "example": "ret_01F0YET7XPCMF8RZ0Y151NZV2V" + }, + "return_order": { + "description": "Available if the relation `return_order` is expanded.", + "$ref": "#/components/schemas/return" }, "item_id": { "description": "The id of the Line Item that the Return Item references.", - "type": "string" + "type": "string", + "example": "item_01G8ZC9GWT6B2GP5FSXRXNFNGN" }, "item": { - "description": "The Line Item that the Return Item references.", - "anyOf": [ - { - "$ref": "#/components/schemas/line_item" - } - ] + "description": "Available if the relation `item` is expanded.", + "$ref": "#/components/schemas/line_item" }, "quantity": { "description": "The quantity of the Line Item that is included in the Return.", - "type": "integer" + "type": "integer", + "example": 1 }, "is_requested": { "description": "Whether the Return Item was requested initially or received unexpectedly in the warehouse.", - "type": "boolean" + "type": "boolean", + "default": true }, "requested_quantity": { "description": "The quantity that was originally requested to be returned.", - "type": "integer" + "type": "integer", + "example": 1 }, "recieved_quantity": { "description": "The quantity that was received in the warehouse.", - "type": "integer" + "type": "integer", + "example": 1 + }, + "reason_id": { + "description": "The ID of the reason for returning the item.", + "type": "string", + "example": "rr_01G8X82GCCV2KSQHDBHSSAH5TQ" }, "reason": { - "description": "The reason for returning the item.", - "anyOf": [ - { - "$ref": "#/components/schemas/return_reason" - } - ] + "description": "Available if the relation `reason` is expanded.", + "$ref": "#/components/schemas/return_reason" }, "note": { "description": "An optional note with additional details about the Return.", - "type": "string" + "type": "string", + "example": "I didn't like it." }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14142,41 +18891,65 @@ "title": "Return Reason", "description": "A Reason for why a given product is returned. A Return Reason can be used on Return Items in order to indicate why a Line Item was returned.", "x-resourceId": "return_reason", + "required": [ + "value", + "label" + ], "properties": { "id": { - "description": "The id of the Return Reason will start with `rr_`.", - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "rr_01G8X82GCCV2KSQHDBHSSAH5TQ" }, "description": { "description": "A description of the Reason.", - "type": "string" + "type": "string", + "example": "Items that are damaged" }, "label": { "description": "A text that can be displayed to the Customer as a reason.", - "type": "string" + "type": "string", + "example": "Damaged goods" }, "value": { "description": "The value to identify the reason by.", - "type": "string" + "type": "string", + "example": "damaged" + }, + "parent_return_reason_id": { + "type": "string", + "description": "The ID of the parent reason.", + "example": null + }, + "parent_return_reason": { + "description": "Available if the relation `parent_return_reason` is expanded.", + "$ref": "#/components/schemas/return_reason" + }, + "return_reason_children": { + "description": "Available if the relation `return_reason_children` is expanded.", + "$ref": "#/components/schemas/return_reason" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14184,10 +18957,14 @@ "title": "Return", "description": "Return orders hold information about Line Items that a Customer wishes to send back, along with how the items will be returned. Returns can be used as part of a Swap.", "x-resourceId": "return", + "required": [ + "refund_amount" + ], "properties": { "id": { - "description": "The id of the Return. This value will be prefixed with `ret_`.", - "type": "string" + "type": "string", + "description": "The return's ID", + "example": "ret_01F0YET7XPCMF8RZ0Y151NZV2V" }, "status": { "description": "Status of the Return.", @@ -14195,39 +18972,74 @@ "enum": [ "requested", "received", - "requires_action" - ] + "requires_action", + "canceled" + ], + "default": "requested" }, "items": { - "description": "The Return Items that will be shipped back to the warehouse. type: array items: $ref: " + "description": "The Return Items that will be shipped back to the warehouse. Available if the relation `items` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/return_item" + } }, "swap_id": { - "description": "The id of the Swap that the Return is a part of.", - "type": "string" + "description": "The ID of the Swap that the Return is a part of.", + "type": "string", + "example": null + }, + "swap": { + "description": "A swap object. Available if the relation `swap` is expanded.", + "type": "object" }, "order_id": { - "description": "The id of the Order that the Return is made from.", - "type": "string" + "description": "The ID of the Order that the Return is made from.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "claim_order_id": { - "description": "The id of the Claim that the Return is a part of.", - "type": "string" + "description": "The ID of the Claim that the Return is a part of.", + "type": "string", + "example": null + }, + "claim_order": { + "description": "A claim order object. Available if the relation `claim_order` is expanded.", + "type": "object" }, "shipping_method": { - "description": "The Shipping Method that will be used to send the Return back. Can be null if the Customer facilitates the return shipment themselves.", - "anyOf": [ - { - "$ref": "#/components/schemas/shipping_method" - } - ] + "description": "The Shipping Method that will be used to send the Return back. Can be null if the Customer facilitates the return shipment themselves. Available if the relation `shipping_method` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/shipping_method" + } }, "shipping_data": { "description": "Data about the return shipment as provided by the Fulfilment Provider that handles the return shipment.", - "type": "object" + "type": "object", + "example": {} }, "refund_amount": { "description": "The amount that should be refunded as a result of the return.", - "type": "integer" + "type": "integer", + "example": 1000 + }, + "no_notification": { + "description": "When set to true, no notification will be sent related to this return.", + "type": "boolean", + "example": false + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of the return in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } }, "received_at": { "description": "The date with timezone at which the return was received.", @@ -14235,22 +19047,124 @@ "format": "date-time" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, - "no_notification": { - "description": "When set to true, no notification will be sent related to this return.", - "type": "boolean" + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + } + } + }, + "sales_channel": { + "title": "Sales Channel", + "description": "A Sales Channel", + "x-resourceId": "sales_channel", + "required": [ + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The sales channel's ID", + "example": "sc_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "name": { + "description": "The name of the sales channel.", + "type": "string", + "example": "Market" + }, + "description": { + "description": "The description of the sales channel.", + "type": "string", + "example": "Multi-vendor market" + }, + "is_disabled": { + "description": "Specify if the sales channel is enabled or disabled.", + "type": "boolean", + "default": false + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", + "format": "date-time" + } + } + }, + "sales_channel_tax_line": { + "title": "Sales Channel", + "description": "A Sales Channel", + "x-resourceId": "sales_channel_tax_line", + "required": [ + "shipping_method_id", + "rate", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The line item tax line's ID", + "example": "smtl_01G1G5V2DRX1SK6NQQ8VVX4HQ8" + }, + "shipping_method_id": { + "type": "string", + "description": "The ID of the line item", + "example": "sm_01F0YET7DR2E7CYVSDHM593QG2" + }, + "shipping_method": { + "description": "Available if the relation `shipping_method` is expanded.", + "$ref": "#/components/schemas/shipping_method" + }, + "code": { + "description": "A code to identify the tax type by", + "type": "string", + "example": "tax01" + }, + "name": { + "description": "A human friendly name for the tax", + "type": "string", + "example": "Tax Example" + }, + "rate": { + "description": "The numeric rate to charge tax by", + "type": "number", + "example": 10 + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14258,50 +19172,86 @@ "title": "Shipping Method", "description": "Shipping Methods represent a way in which an Order or Return can be shipped. Shipping Methods are built from a Shipping Option, but may contain additional details, that can be necessary for the Fulfillment Provider to handle the shipment.", "x-resourceId": "shipping_method", + "required": [ + "shipping_option_id", + "price" + ], "properties": { "id": { - "description": "The id of the Shipping Method. This value will be prefixed with `sm_`.", - "type": "string" + "type": "string", + "description": "The shipping method's ID", + "example": "sm_01F0YET7DR2E7CYVSDHM593QG2" }, "shipping_option_id": { "description": "The id of the Shipping Option that the Shipping Method is built from.", - "type": "string" + "type": "string", + "example": "so_01G1G5V27GYX4QXNARRQCW1N8T" }, "shipping_option": { - "description": "The Shipping Option that the Shipping Method is built from.", - "anyOf": [ - { - "$ref": "#/components/schemas/shipping_option" - } - ] + "description": "Available if the relation `shipping_option` is expanded.", + "$ref": "#/components/schemas/shipping_option" }, "order_id": { "description": "The id of the Order that the Shipping Method is used on.", - "type": "string" + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "return_id": { "description": "The id of the Return that the Shipping Method is used on.", - "type": "string" + "type": "string", + "example": null + }, + "return_order": { + "description": "A return object. Available if the relation `return_order` is expanded.", + "type": "object" }, "swap_id": { "description": "The id of the Swap that the Shipping Method is used on.", - "type": "string" + "type": "string", + "example": null + }, + "swap": { + "description": "A swap object. Available if the relation `swap` is expanded.", + "type": "object" }, "cart_id": { "description": "The id of the Cart that the Shipping Method is used on.", - "type": "string" + "type": "string", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "claim_order_id": { "description": "The id of the Claim that the Shipping Method is used on.", - "type": "string" + "type": "string", + "example": null + }, + "claim_order": { + "description": "A claim order object. Available if the relation `claim_order` is expanded.", + "type": "object" + }, + "tax_lines": { + "type": "array", + "description": "Available if the relation `tax_lines` is expanded.", + "items": { + "$ref": "#/components/schemas/tax_line" + } }, "price": { "description": "The amount to charge for the Shipping Method. The currency of the price is defined by the Region that the Order that the Shipping Method belongs to is a part of.", - "type": "integer" + "type": "integer", + "example": 200 }, "data": { "description": "Additional data that the Fulfillment Provider needs to fulfill the shipment. This is used in combination with the Shipping Options data, and may contain information such as a drop point id.", - "type": "object" + "type": "object", + "example": {} } } }, @@ -14309,14 +19259,25 @@ "title": "Shipping Option Requirement", "description": "A requirement that a Cart must satisfy for the Shipping Option to be available to the Cart.", "x-resourceId": "shipping_option_requirement", + "required": [ + "shipping_option_id", + "type", + "amount" + ], "properties": { "id": { - "description": "The id of the Shipping Option Requirement. This value will be prefixed with `sor_`.", - "type": "string" + "type": "string", + "description": "The shipping option requirement's ID", + "example": "sor_01G1G5V29AB4CTNDRFSRWSRKWD" }, "shipping_option_id": { - "description": "The id of the Shipping Option that the Shipping Option Requirement belongs to.", - "type": "string" + "description": "The id of the Shipping Option that the hipping option requirement belongs to", + "type": "string", + "example": "so_01G1G5V27GYX4QXNARRQCW1N8T" + }, + "shipping_option": { + "description": "Available if the relation `shipping_option` is expanded.", + "$ref": "#/components/schemas/shipping_option" }, "type": { "description": "The type of the requirement, this defines how the value will be compared to the Cart's total. `min_subtotal` requirements define the minimum subtotal that is needed for the Shipping Option to be available, while the `max_subtotal` defines the maximum subtotal that the Cart can have for the Shipping Option to be available.", @@ -14324,11 +19285,18 @@ "enum": [ "min_subtotal", "max_subtotal" - ] + ], + "example": "min_subtotal" }, "amount": { "description": "The amount to compare the Cart subtotal to.", - "type": "integer" + "type": "integer", + "example": 100 + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", + "format": "date-time" } } }, @@ -14336,34 +19304,50 @@ "title": "Shipping Option", "description": "Shipping Options represent a way in which an Order or Return can be shipped. Shipping Options have an associated Fulfillment Provider that will be used when the fulfillment of an Order is initiated. Shipping Options themselves cannot be added to Carts, but serve as a template for Shipping Methods. This distinction makes it possible to customize individual Shipping Methods with additional information.", "x-resourceId": "shipping_option", + "required": [ + "name", + "region_id", + "profile_id", + "provider_id", + "price_type" + ], "properties": { "id": { - "description": "The id of the Shipping Option. This value will be prefixed with `so_`.", - "type": "string" + "type": "string", + "description": "The shipping option's ID", + "example": "so_01G1G5V27GYX4QXNARRQCW1N8T" }, "name": { "description": "The name given to the Shipping Option - this may be displayed to the Customer.", - "type": "string" + "type": "string", + "example": "PostFake Standard" }, "region_id": { - "description": "The id of the Region that the Shipping Option belongs to.", - "type": "string" + "type": "string", + "description": "The region's ID", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" }, "region": { - "description": "The id of the Region that the Shipping Option belongs to.", - "anyOf": [ - { - "$ref": "#/components/schemas/region" - } - ] + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" }, "profile_id": { - "description": "The id of the Shipping Profile that the Shipping Option belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products.", - "type": "string" + "description": "The ID of the Shipping Profile that the shipping option belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products.", + "type": "string", + "example": "sp_01G1G5V239ENSZ5MV4JAR737BM" + }, + "profile": { + "description": "Available if the relation `profile` is expanded.", + "$ref": "#/components/schemas/shipping_profile" }, "provider_id": { "description": "The id of the Fulfillment Provider, that will be used to process Fulfillments from the Shipping Option.", - "type": "string" + "type": "string", + "example": "manual" + }, + "provider": { + "description": "Available if the relation `provider` is expanded.", + "$ref": "#/components/schemas/fulfillment_provider" }, "price_type": { "description": "The type of pricing calculation that is used when creatin Shipping Methods from the Shipping Option. Can be `flat_rate` for fixed prices or `calculated` if the Fulfillment Provider can provide price calulations.", @@ -14371,18 +19355,21 @@ "enum": [ "flat_rate", "calculated" - ] + ], + "example": "flat_rate" }, "amount": { "description": "The amount to charge for shipping when the Shipping Option price type is `flat_rate`.", - "type": "integer" + "type": "integer", + "example": 200 }, "is_return": { "description": "Flag to indicate if the Shipping Option can be used for Return shipments.", - "type": "boolean" + "type": "boolean", + "default": false }, "requirements": { - "description": "The requirements that must be satisfied for the Shipping Option to be available for a Cart.", + "description": "The requirements that must be satisfied for the Shipping Option to be available for a Cart. Available if the relation `requirements` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/shipping_option_requirement" @@ -14390,26 +19377,30 @@ }, "data": { "description": "The data needed for the Fulfillment Provider to identify the Shipping Option.", - "type": "object" + "type": "object", + "example": {} }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14417,14 +19408,20 @@ "title": "Shipping Profile", "description": "Shipping Profiles have a set of defined Shipping Options that can be used to fulfill a given set of Products.", "x-resourceId": "shipping_profile", + "required": [ + "name", + "type" + ], "properties": { "id": { - "description": "The id of the Shipping Profile. This value will be prefixed with `sp_`.", - "type": "string" + "type": "string", + "description": "The shipping profile's ID", + "example": "sp_01G1G5V239ENSZ5MV4JAR737BM" }, "name": { "description": "The name given to the Shipping profile - this may be displayed to the Customer.", - "type": "string" + "type": "string", + "example": "Default Shipping Profile" }, "type": { "description": "The type of the Shipping Profile, may be `default`, `gift_card` or `custom`.", @@ -14433,44 +19430,45 @@ "default", "gift_card", "custom" - ] + ], + "example": "default" }, "products": { - "description": "The Products that the Shipping Profile defines Shipping Options for.", + "description": "The Products that the Shipping Profile defines Shipping Options for. Available if the relation `products` is expanded.", "type": "array", "items": { - "$ref": "#/components/schemas/product" + "type": "object", + "description": "A product object." } }, "shipping_options": { - "description": "The Shipping Options that can be used to fulfill the Products in the Shipping Profile.", + "description": "The Shipping Options that can be used to fulfill the Products in the Shipping Profile. Available if the relation `shipping_options` is expanded.", "type": "array", "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/shipping_option" - } - ] + "$ref": "#/components/schemas/shipping_option" } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14478,33 +19476,70 @@ "title": "Shipping Tax Rate", "description": "Associates a tax rate with a shipping option to indicate that the shipping option is taxed in a certain way", "x-resourceId": "shipping_tax_rate", + "required": [ + "shipping_option_id", + "rate_id" + ], "properties": { "shipping_option_id": { - "description": "The id of the Shipping Option", - "type": "string" + "description": "The ID of the Shipping Option", + "type": "string", + "example": "so_01G1G5V27GYX4QXNARRQCW1N8T" + }, + "shipping_option": { + "description": "Available if the relation `shipping_option` is expanded.", + "$ref": "#/components/schemas/shipping_option" }, "rate_id": { - "description": "The id of the Tax Rate", - "type": "string" + "description": "The ID of the Tax Rate", + "type": "string", + "example": "txr_01G8XDBAWKBHHJRKH0AV02KXBR" + }, + "tax_rate": { + "description": "Available if the relation `tax_rate` is expanded.", + "$ref": "#/components/schemas/tax_rate" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + } + } + }, + "staged_job": { + "title": "Staged Job", + "description": "A staged job resource", + "x-resourceId": "staged_job", + "required": [ + "event_name" + ], + "properties": { + "id": { + "type": "string", + "description": "The staged job's ID", + "example": "job_01F0YET7BZTARY9MKN1SJ7AAXF" + }, + "event_name": { + "description": "The name of the event", + "type": "string", + "example": "order.placed" + }, + "data": { + "description": "Data necessary for the job", + "type": "object", + "example": {} } } }, @@ -14514,41 +19549,65 @@ "x-resourceId": "store", "properties": { "id": { - "description": "The id of the Store. This value will be prefixed with `store_`.", - "type": "string" + "type": "string", + "description": "The store's ID", + "example": "store_01G1G5V21KADXNGH29BJMAJ4B4" }, "name": { "description": "The name of the Store - this may be displayed to the Customer.", - "type": "string" + "type": "string", + "example": "Medusa Store" }, "default_currency_code": { - "description": "The default currency code used when no other currency code is specified.", - "type": "string" + "description": "The 3 character currency code that is the default of the store.", + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "default_currency": { + "description": "Available if the relation `default_currency` is expanded.", + "$ref": "#/components/schemas/currency" }, "currencies": { - "description": "The currencies that are enabled for the Store.", + "description": "The currencies that are enabled for the Store. Available if the relation `currencies` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/currency" } }, "swap_link_template": { - "description": "A template to generate Swap links from use {{cart_id}} to include the Swap's `cart_id` in the link.", - "type": "string" - }, - "created_at": { - "description": "The date with timezone at which the resource was created.", + "description": "A template to generate Swap links from. Use {{cart_id}} to include the Swap's `cart_id` in the link.", "type": "string", - "format": "date-time" + "example": null }, - "updated_at": { - "description": "The date with timezone at which the resource was last updated.", + "payment_link_template": { + "description": "A template to generate Payment links from. Use {{cart_id}} to include the payment's `cart_id` in the link.", "type": "string", - "format": "date-time" + "example": null + }, + "invite_link_template": { + "description": "A template to generate Invite links from", + "type": "string", + "example": null + }, + "default_sales_channel_id": { + "type": "string", + "description": "The sales channel ID the cart is associated with.", + "example": null + }, + "default_sales_channel": { + "description": "A sales channel object. Available if the relation `default_sales_channel` is expanded.", + "type": "object" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14556,25 +19615,28 @@ "title": "Swap", "description": "Swaps can be created when a Customer wishes to exchange Products that they have purchased to different Products. Swaps consist of a Return of previously purchased Products and a Fulfillment of new Products, the amount paid for the Products being returned will be used towards payment for the new Products. In the case where the amount paid for the the Products being returned exceed the amount to be paid for the new Products, a Refund will be issued for the difference.", "x-resourceId": "swap", + "required": [ + "fulfillment_status", + "payment_status", + "order_id" + ], "properties": { "id": { - "description": "The id of the Swap. This value will be prefixed with `swap_`.", - "type": "string" + "type": "string", + "description": "The swap's ID", + "example": "swap_01F0YET86Y9G92D3YDR9Y6V676" }, "fulfillment_status": { "description": "The status of the Fulfillment of the Swap.", "type": "string", "enum": [ "not_fulfilled", - "partially_fulfilled", "fulfilled", - "partially_shipped", "shipped", - "partially_returned", - "returned", "canceled", "requires_action" - ] + ], + "example": "not_fulfilled" }, "payment_status": { "description": "The status of the Payment of the Swap. The payment may either refer to the refund of an amount or the authorization of a new amount.", @@ -14583,59 +19645,62 @@ "not_paid", "awaiting", "captured", + "confirmed", "canceled", "difference_refunded", + "partially_refunded", + "refunded", "requires_action" - ] + ], + "example": "not_paid" }, "order_id": { - "description": "The id of the Order where the Line Items to be returned where purchased.", - "type": "string" + "description": "The ID of the Order where the Line Items to be returned where purchased.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "additional_items": { - "description": "The new Line Items to ship to the Customer.", + "description": "The new Line Items to ship to the Customer. Available if the relation `additional_items` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/line_item" } }, "return_order": { - "description": "The Return that is issued for the return part of the Swap.", - "anyOf": [ - { - "$ref": "#/components/schemas/return" - } - ] + "description": "A return order object. The Return that is issued for the return part of the Swap. Available if the relation `return_order` is expanded.", + "type": "object" }, "fulfillments": { - "description": "The Fulfillments used to send the new Line Items.", + "description": "The Fulfillments used to send the new Line Items. Available if the relation `fulfillments` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/fulfillment" } }, "payment": { - "description": "The Payment authorized when the Swap requires an additional amount to be charged from the Customer.", - "anyOf": [ - { - "$ref": "#/components/schemas/payment" - } - ] + "description": "The Payment authorized when the Swap requires an additional amount to be charged from the Customer. Available if the relation `payment` is expanded.", + "$ref": "#/components/schemas/payment" }, "difference_due": { "description": "The difference that is paid or refunded as a result of the Swap. May be negative when the amount paid for the returned items exceed the total of the new Products.", - "type": "integer" + "type": "integer", + "example": 0 + }, + "shipping_address_id": { + "description": "The Address to send the new Line Items to - in most cases this will be the same as the shipping address on the Order.", + "type": "string", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" }, "shipping_address": { - "description": "The Address to send the new Line Items to - in most cases this will be the same as the shipping address on the Order.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "description": "Available if the relation `shipping_address` is expanded.", + "$ref": "#/components/schemas/address" }, "shipping_methods": { - "description": "The Shipping Methods used to fulfill the addtional items purchased.", + "description": "The Shipping Methods used to fulfill the addtional items purchased. Available if the relation `shipping_methods` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/shipping_method" @@ -14643,27 +19708,31 @@ }, "cart_id": { "description": "The id of the Cart that the Customer will use to confirm the Swap.", - "type": "string" + "type": "string", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "allow_backorder": { "description": "If true, swaps can be completed with items out of stock", - "type": "boolean" + "type": "boolean", + "default": false + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of the swap in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } }, "confirmed_at": { "description": "The date with timezone at which the Swap was confirmed by the Customer.", "type": "string", "format": "date-time" }, - "created_at": { - "description": "The date with timezone at which the resource was created.", - "type": "string", - "format": "date-time" - }, - "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, "canceled_at": { "description": "The date with timezone at which the Swap was canceled.", "type": "string", @@ -14671,11 +19740,30 @@ }, "no_notification": { "description": "If set to true, no notification will be sent related to this swap", - "type": "boolean" + "type": "boolean", + "example": false + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", + "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14683,36 +19771,47 @@ "title": "Tax Line", "description": "Line item that specifies an amount of tax to add to a line item.", "x-resourceId": "tax_line", + "required": [ + "rate", + "name" + ], "properties": { "id": { - "description": "The id of the Tax Line. This value will be prefixed by `tl_`.", - "type": "string" + "type": "string", + "description": "The tax line's ID", + "example": "tl_01G1G5V2DRX1SK6NQQ8VVX4HQ8" }, "code": { "description": "A code to identify the tax type by", - "type": "string" + "type": "string", + "example": "tax01" }, "name": { "description": "A human friendly name for the tax", - "type": "string" + "type": "string", + "example": "Tax Example" }, "rate": { "description": "The numeric rate to charge tax by", - "type": "number" + "type": "number", + "example": 10 }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14723,11 +19822,13 @@ "properties": { "id": { "description": "The id of the tax provider as given by the plugin.", - "type": "string" + "type": "string", + "example": "manual" }, "is_installed": { "description": "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`.", - "type": "boolean" + "type": "boolean", + "default": true } } }, @@ -14735,44 +19836,95 @@ "title": "Tax Rate", "description": "A Tax Rate can be used to associate a certain rate to charge on products within a given Region", "x-resourceId": "line_item", + "required": [ + "name", + "region_id" + ], "properties": { "id": { - "description": "The id of the Tax Rate. This value will be prefixed by `txr_`.", - "type": "string" + "type": "string", + "description": "The tax rate's ID", + "example": "txr_01G8XDBAWKBHHJRKH0AV02KXBR" }, "rate": { "description": "The numeric rate to charge", - "type": "number" + "type": "number", + "example": 10 }, "code": { "description": "A code to identify the tax type by", - "type": "string" + "type": "string", + "example": "tax01" }, "name": { "description": "A human friendly name for the tax", - "type": "string" + "type": "string", + "example": "Tax Example" }, "region_id": { + "type": "string", "description": "The id of the Region that the rate belongs to", - "type": "string" + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" + }, + "region": { + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" + }, + "products": { + "type": "array", + "description": "The products that belong to this tax rate. Available if the relation `products` is expanded.", + "items": { + "type": "object", + "description": "A product object." + } + }, + "product_types": { + "type": "array", + "description": "The product types that belong to this tax rate. Available if the relation `product_types` is expanded.", + "items": { + "type": "object", + "description": "A product type object." + } + }, + "shipping_options": { + "type": "array", + "description": "The shipping options that belong to this tax rate. Available if the relation `shipping_options` is expanded.", + "items": { + "type": "object", + "description": "A shipping option object." + } + }, + "product_count": { + "description": "The count of products", + "type": "integer", + "example": null + }, + "product_type_count": { + "description": "The count of product types", + "type": "integer", + "example": null + }, + "shipping_option_count": { + "description": "The count of shipping options", + "type": "integer", + "example": null }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" - }, - "refundable": { - "description": "The amount that can be refunded from the given Line Item. Takes taxes and discounts into consideration.", - "type": "integer" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14780,41 +19932,64 @@ "title": "Tracking Link", "description": "Tracking Link holds information about tracking numbers for a Fulfillment. Tracking Links can optionally contain a URL that can be visited to see the status of the shipment.", "x-resourceId": "tracking_link", + "required": [ + "tracking_number", + "fulfillment_id" + ], "properties": { "id": { - "description": "The id of the Tracking Link. This value will be prefixed with `tlink_`.", - "type": "string" + "type": "string", + "description": "The tracking link's ID", + "example": "tlink_01G8ZH853Y6TFXWPG5EYE81X63" }, "url": { "description": "The URL at which the status of the shipment can be tracked.", - "type": "string" + "type": "string", + "format": "uri" }, "tracking_number": { "description": "The tracking number given by the shipping carrier.", - "type": "string" + "type": "string", + "format": "RH370168054CN" }, "fulfillment_id": { + "type": "string", "description": "The id of the Fulfillment that the Tracking Link references.", - "type": "string" + "example": "ful_01G8ZRTMQCA76TXNAT81KPJZRF" + }, + "fulfillment": { + "description": "Available if the relation `fulfillment` is expanded.", + "$ref": "#/components/schemas/fulfillment" + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of a process in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -14822,40 +19997,56 @@ "title": "User", "description": "Represents a User who can manage store settings.", "x-resourceId": "user", + "required": [ + "email" + ], "properties": { "id": { - "description": "The unique id of the User. This will be prefixed with `usr_`", - "type": "string" + "type": "string", + "description": "The user's ID", + "example": "usr_01G1G5V26F5TB3GPAPNJ8X1S3V" }, "email": { "description": "The email of the User", - "type": "string" + "type": "string", + "format": "email" }, "first_name": { - "type": "string" + "description": "The first name of the User", + "type": "string", + "example": "Levi" }, "last_name": { - "description": "The Customer's billing address.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "description": "The last name of the User", + "type": "string", + "example": "Bogan" + }, + "api_token": { + "description": "An API token associated with the user.", + "type": "string", + "example": null }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } } diff --git a/docs/api/admin-spec3.yaml b/docs/api/admin-spec3.yaml index d0b8b87f7d..70b30f6aa6 100644 --- a/docs/api/admin-spec3.yaml +++ b/docs/api/admin-spec3.yaml @@ -2,95 +2,113 @@ openapi: 3.0.0 info: version: 1.0.0 title: Medusa Admin API + description: >- + API reference for Medusa's Admin endpoints. All endpoints are prefixed with + `/admin`. license: name: MIT + url: 'https://github.com/medusajs/medusa/blob/master/LICENSE' tags: - name: Auth description: >- - Auth endpoints allows authorization of admin Users and manages their + Auth endpoints that allow authorization of admin Users and manages their sessions. + - name: App + description: App endpoints that allow handling apps in Medusa. + x-resourceId: OAuth + - name: Batch Job + description: Batch Job endpoints that allow handling batch jobs in Medusa. + x-resourceId: batch_job + - name: Claim + description: Claim endpoints that allow handling claims in Medusa. + x-resourceId: claim_order - name: Collection + description: Collection endpoints that allow handling collections in Medusa. x-resourceId: product_collection - name: Customer + description: Customer endpoints that allow handling customers in Medusa. x-resourceId: customer + - name: Customer Group + description: Customer Group endpoints that allow handling customer groups in Medusa. + x-resourceId: customer_group - name: Discount + description: Discount endpoints that allow handling discounts in Medusa. x-resourceId: discount + - name: Discount Condition + description: >- + Discount Condition endpoints that allow handling discount conditions in + Medusa. + x-resourceId: discount_condition + - name: Draft Order + description: Draft Order endpoints that allow handling draft orders in Medusa. + x-resourceId: draft-order - name: Gift Card + description: Gift Card endpoints that allow handling gift cards in Medusa. x-resourceId: gift_card + - name: Invite + description: Invite endpoints that allow handling invites in Medusa. + x-resourceId: invite + - name: Note + description: Note endpoints that allow handling notes in Medusa. + x-resourceId: note - name: Notification + description: Notification endpoints that allow handling notifications in Medusa. x-resourceId: notification - name: Order + description: Order endpoints that allow handling orders in Medusa. x-resourceId: order + - name: Price List + description: Price List endpoints that allow handling price lists in Medusa. + x-resourceId: price_list - name: Product + description: Product endpoints that allow handling products in Medusa. x-resourceId: product + - name: Product Tag + description: Product Tag endpoints that allow handling product tags in Medusa. + x-resourceId: product_tag + - name: Product Types + description: Product Types endpoints that allow handling product types in Medusa. + x-resourceId: product_type + - name: Product Variant + description: Product Variant endpoints that allow handling product variants in Medusa. + x-resourceId: product_variant - name: Region + description: Region endpoints that allow handling regions in Medusa. x-resourceId: region + - name: Return Reason + description: Return Reason endpoints that allow handling return reasons in Medusa. + x-resourceId: return_reason - name: Return + description: Return endpoints that allow handling returns in Medusa. x-resourceId: return + - name: Sales Channel + description: Sales Channel endpoints that allow handling sales channels in Medusa. + x-resourceId: sales_channel - name: Shipping Option + description: Shipping Option endpoints that allow handling shipping options in Medusa. x-resourceId: shipping_option - name: Shipping Profile + description: >- + Shipping Profile endpoints that allow handling shipping profiles in + Medusa. x-resourceId: shipping_profile + - name: Store + description: Store endpoints that allow handling stores in Medusa. + x-resourceId: store - name: Swap + description: Swap endpoints that allow handling swaps in Medusa. x-resourceId: swap - - name: Product Variant - x-resourceId: product_variant - - name: OAuth - x-resourceId: OAuth + - name: Tax Rate + description: Tax Rate endpoints that allow handling tax rates in Medusa. + x-resourceId: tax_rate + - name: Upload + description: Upload endpoints that allow handling uploads in Medusa. + - name: User + description: User endpoints that allow handling users in Medusa. + x-resourceId: user servers: - url: 'https://api.medusa-commerce.com/admin' paths: - /apps: - post: - operationId: PostApps - summary: Generates a token for an application. - description: Generates a token for an application. - x-authenticated: true - requestBody: - content: - application/json: - schema: - required: - - application_name - - state - - code - properties: - application_name: - type: string - description: Name of the application for the token to be generated for. - state: - type: string - description: State of the application. - code: - type: string - description: The code for the generated token. - tags: - - Apps - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - apps: - $ref: '#/components/schemas/OAuth' - get: - operationId: GetApps - summary: List applications - description: Retrieve a list of applications. - x-authenticated: true - tags: - - Apps - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - collection: - $ref: '#/components/schemas/OAuth' /auth: post: operationId: PostAuth @@ -98,17 +116,6 @@ paths: x-authenticated: false description: Logs a User in and authorizes them to manage Store settings. parameters: [] - tags: - - Auth - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - user: - $ref: '#/components/schemas/user' requestBody: content: application/json: @@ -124,6 +131,29 @@ paths: password: type: string description: The User's password. + tags: + - Auth + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + user: + $ref: '#/components/schemas/user' + '401': + description: The user doesn't exist or the credentials are incorrect. + delete: + operationId: DeleteAuth + summary: Delete Session + x-authenticated: true + description: Deletes the current session for the logged in user. + tags: + - Auth + responses: + '200': + description: OK get: operationId: GetAuth summary: Get Session @@ -140,6 +170,8 @@ paths: properties: user: $ref: '#/components/schemas/user' + '400': + description: An error occurred. '/batch-jobs/{id}/cancel': post: operationId: PostBatchJobsBatchJobCancel @@ -150,7 +182,7 @@ paths: - in: path name: id required: true - description: The id of the batch job. + description: The ID of the batch job. schema: type: string tags: @@ -174,7 +206,7 @@ paths: - in: path name: id required: true - description: The id of the batch job. + description: The ID of the batch job. schema: type: string tags: @@ -194,7 +226,45 @@ paths: summary: Create a Batch Job description: Creates a Batch Job. x-authenticated: true - parameters: [] + requestBody: + content: + application/json: + schema: + required: + - type + - context + properties: + type: + type: string + description: The type of batch job to start. + example: product-export + context: + type: object + description: >- + Additional infomration regarding the batch to be used for + processing. + example: + shape: + prices: + - region: null + currency_code: eur + dynamicImageColumnCount: 4 + dynamicOptionColumnCount: 2 + list_config: + skip: 0 + take: 50 + order: + created_at: DESC + relations: + - variants + - variant.prices + - images + dry_run: + type: boolean + description: >- + Set a batch job in dry_run mode to get some information on + what will be done without applying any modifications. + default: false tags: - Batch Job responses: @@ -206,29 +276,6 @@ paths: properties: batch_job: $ref: '#/components/schemas/batch_job' - requestBody: - content: - application/json: - schema: - type: object - required: - - type - - context - - dry_run - properties: - type: - type: string - description: The type of batch job to start. - context: - type: string - description: >- - Additional infomration regarding the batch to be used for - processing. - dry_run: - type: boolean - description: >- - Set a batch job in dry_run mode to get some information on - what will be done without applying any modifications. get: operationId: GetBatchJobs summary: List Batch Jobs @@ -237,14 +284,29 @@ paths: parameters: - in: query name: limit - description: The number of collections to return. + description: The number of batch jobs to return. schema: - type: string + type: integer + default: 10 - in: query name: offset - description: The offset of collections to return. + description: The number of batch jobs to skip before results. schema: - type: string + type: integer + default: 0 + - in: query + name: id + style: form + explode: false + description: Filter by the batch ID + schema: + oneOf: + - type: string + description: batch job ID + - type: array + description: multiple batch job IDs + items: + type: string - in: query name: type style: form @@ -263,7 +325,23 @@ paths: less than, greater than etc. schema: type: object - nullable: true + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: pre_processed_at style: form @@ -273,7 +351,23 @@ paths: i.e. less than, greater than etc. schema: type: object - nullable: true + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: completed_at style: form @@ -283,7 +377,23 @@ paths: less than, greater than etc. schema: type: object - nullable: true + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: failed_at style: form @@ -293,7 +403,23 @@ paths: than, greater than etc. schema: type: object - nullable: true + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: canceled_at style: form @@ -303,22 +429,42 @@ paths: less than, greater than etc. schema: type: object - nullable: true + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: order - description: Order used when retrieving batch jobs + description: Field used to order retrieved batch jobs schema: type: string - in: query - name: deleted_at - style: form - explode: false + name: expand description: >- - Date comparison for when resulting collections was deleted, i.e. - less than, greater than etc. + (Comma separated) Which fields should be expanded in each order of + the result. schema: - type: object - nullable: true + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each order of + the result. + schema: + type: string - in: query name: created_at style: form @@ -328,7 +474,23 @@ paths: less than, greater than etc. schema: type: object - nullable: true + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: updated_at style: form @@ -338,7 +500,23 @@ paths: less than, greater than etc. schema: type: object - nullable: true + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date tags: - Batch Job responses: @@ -348,8 +526,19 @@ paths: application/json: schema: properties: - batch_job: - $ref: '#/components/schemas/batch_job' + batch_jobs: + type: array + items: + $ref: '#/components/schemas/batch_job' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/batch-jobs/{id}': get: operationId: GetBatchJobsBatchJob @@ -360,7 +549,7 @@ paths: - in: path name: id required: true - description: The id of the Batch Job + description: The ID of the Batch Job schema: type: string tags: @@ -384,27 +573,33 @@ paths: - in: path name: id required: true - description: The id of the Collection. + description: The ID of the Collection. schema: type: string requestBody: content: application/json: schema: + required: + - product_ids properties: product_ids: description: An array of Product IDs to add to the Product Collection. type: array items: - properties: - id: - description: The ID of a Product to add to the Product Collection. - type: string + description: The ID of a Product to add to the Product Collection. + type: string tags: - Collection responses: '200': description: OK + content: + application/json: + schema: + properties: + collection: + $ref: '#/components/schemas/product_collection' delete: operationId: DeleteProductsFromCollection summary: Removes products associated with a Product Collection @@ -414,13 +609,15 @@ paths: - in: path name: id required: true - description: The id of the Collection. + description: The ID of the Collection. schema: type: string requestBody: content: application/json: schema: + required: + - product_ids properties: product_ids: description: >- @@ -428,17 +625,30 @@ paths: Collection. type: array items: - properties: - id: - description: >- - The ID of a Product to remove from the Product - Collection. - type: string + description: The ID of a Product to add to the Product Collection. + type: string tags: - Collection responses: '200': description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the collection + object: + type: string + description: The type of object the removal was executed on + default: product-collection + removed_products: + description: The IDs of the products removed from the collection + type: array + items: + description: The ID of a Product to add to the Product Collection. + type: string /collections: post: operationId: PostCollections @@ -486,12 +696,14 @@ paths: name: limit description: The number of collections to return. schema: - type: string + type: integer + default: 10 - in: query name: offset - description: The offset of collections to return. + description: The number of collections to skip before the results. schema: - type: string + type: integer + default: 0 - in: query name: title description: The title of collections to return. @@ -503,26 +715,76 @@ paths: schema: type: string - in: query - name: deleted_at - description: >- - Date comparison for when resulting collections was deleted, i.e. - less than, greater than etc. + name: q + description: a search term to search titles and handles. schema: - type: object + type: string - in: query name: created_at - description: >- - Date comparison for when resulting collections was created, i.e. - less than, greater than etc. + description: Date comparison for when resulting collections were created. schema: type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: updated_at - description: >- - Date comparison for when resulting collections was updated, i.e. - less than, greater than etc. + description: Date comparison for when resulting collections were updated. schema: type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: deleted_at + description: Date comparison for when resulting collections were deleted. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date tags: - Collection responses: @@ -532,8 +794,19 @@ paths: application/json: schema: properties: - collection: - $ref: '#/components/schemas/product_collection' + collections: + type: array + items: + $ref: '#/components/schemas/product_collection' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/collections/{id}': delete: operationId: DeleteCollectionsCollection @@ -544,7 +817,7 @@ paths: - in: path name: id required: true - description: The id of the Collection. + description: The ID of the Collection. schema: type: string tags: @@ -558,12 +831,15 @@ paths: properties: id: type: string - description: The id of the deleted Collection + description: The ID of the deleted Collection object: type: string description: The type of the object that was deleted. + default: product-collection deleted: type: boolean + description: Whether the collection was deleted successfully or not. + default: true get: operationId: GetCollectionsCollection summary: Retrieve a Product Collection @@ -573,7 +849,7 @@ paths: - in: path name: id required: true - description: The id of the Product Collection + description: The ID of the Product Collection schema: type: string tags: @@ -596,7 +872,7 @@ paths: - in: path name: id required: true - description: The id of the Collection. + description: The ID of the Collection. schema: type: string requestBody: @@ -638,15 +914,17 @@ paths: - in: path name: id required: true - description: The id of the customer group. + description: The ID of the customer group. schema: type: string requestBody: content: application/json: schema: + required: + - customer_ids properties: - customers: + customer_ids: description: The ids of the customers to add type: array items: @@ -654,10 +932,10 @@ paths: - id properties: id: - description: Id of the customer + description: ID of the customer type: string tags: - - CustomerGroup + - Customer Group responses: '200': description: OK @@ -665,7 +943,7 @@ paths: application/json: schema: properties: - customerGroup: + customer_group: $ref: '#/components/schemas/customer_group' delete: operationId: DeleteCustomerGroupsGroupCustomerBatch @@ -676,15 +954,17 @@ paths: - in: path name: id required: true - description: The id of the customer group. + description: The ID of the customer group. schema: type: string requestBody: content: application/json: schema: + required: + - customer_ids properties: - customers: + customer_ids: description: The ids of the customers to remove type: array items: @@ -692,10 +972,10 @@ paths: - id properties: id: - description: Id of the customer + description: ID of the customer type: string tags: - - CustomerGroup + - Customer Group responses: '200': description: OK @@ -703,7 +983,7 @@ paths: application/json: schema: properties: - customerGroup: + customer_group: $ref: '#/components/schemas/customer_group' /customer-groups: post: @@ -713,7 +993,7 @@ paths: x-authenticated: true parameters: [] tags: - - CustomerGroup + - Customer Group responses: '200': description: OK @@ -745,43 +1025,108 @@ paths: parameters: - in: query name: q - description: Query used for searching user group names. + description: Query used for searching customer group names. schema: type: string - in: query name: offset description: How many groups to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: order + description: the field used to order the customer groups. schema: type: string - in: query name: id - description: Ids of the groups to search for. + style: form + explode: false + description: Filter by the customer group ID schema: - type: string + oneOf: + - type: string + description: customer group ID + - type: array + description: multiple customer group IDs + items: + type: string + - type: object + properties: + lt: + type: string + description: filter by IDs less than this ID + gt: + type: string + description: filter by IDs greater than this ID + lte: + type: string + description: filter by IDs less than or equal to this ID + gte: + type: string + description: filter by IDs greater than or equal to this ID - in: query - name: order - description: to retrieve customer groups in. + name: name + style: form + explode: false + description: Filter by the customer group name schema: - type: string + type: array + description: multiple customer group names + items: + type: string + description: customer group name - in: query name: created_at - description: >- - Date comparison for when resulting customer group was created, i.e. - less than, greater than etc. + description: Date comparison for when resulting customer groups were created. schema: type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: updated_at - description: >- - Date comparison for when resulting ustomer group was updated, i.e. - less than, greater than etc. + description: Date comparison for when resulting customer groups were updated. schema: type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: limit description: Limit the number of customer groups returned. schema: - type: string + type: integer + default: 10 - in: query name: expand description: >- @@ -790,7 +1135,7 @@ paths: schema: type: string tags: - - CustomerGroup + - Customer Group responses: '200': description: OK @@ -798,8 +1143,19 @@ paths: application/json: schema: properties: - customerGroup: - $ref: '#/components/schemas/customer_group' + customer_groups: + type: array + items: + $ref: '#/components/schemas/customer_group' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/customer-groups/{id}': delete: operationId: DeleteCustomerGroupsCustomerGroup @@ -810,11 +1166,11 @@ paths: - in: path name: id required: true - description: The id of the Customer Group + description: The ID of the Customer Group schema: type: string tags: - - CustomerGroup + - Customer Group responses: '200': description: OK @@ -824,12 +1180,17 @@ paths: properties: id: type: string - description: The id of the deleted customer group. + description: The ID of the deleted customer group. object: type: string description: The type of the object that was deleted. + default: customer_group deleted: type: boolean + description: >- + Whether the customer group was deleted successfully or + not. + default: true get: operationId: GetCustomerGroupsGroup summary: Retrieve a CustomerGroup @@ -839,11 +1200,25 @@ paths: - in: path name: id required: true - description: The id of the Customer Group. + description: The ID of the Customer Group. + schema: + type: string + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in the customer + group. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in the customer + group. schema: type: string tags: - - CustomerGroup + - Customer Group responses: '200': description: OK @@ -862,11 +1237,22 @@ paths: - in: path name: id required: true - description: The id of the customer group. + description: The ID of the customer group. schema: type: string + requestBody: + content: + application/json: + schema: + properties: + name: + description: Name of the customer group + type: string + metadata: + description: Metadata for the customer. + type: object tags: - - CustomerGroup + - Customer Group responses: '200': description: OK @@ -876,31 +1262,116 @@ paths: properties: customer_group: $ref: '#/components/schemas/customer_group' - requestBody: - content: - application/json: - schema: - type: object - required: - - name - properties: - name: - type: string - description: Name of the customer group - metadata: - type: object - description: Metadata for the customer. '/customer-groups/{id}/customers': get: operationId: GetCustomerGroupsGroupCustomers summary: List Customers - description: Retrieves a list of Customers. + description: Retrieves a list of customers in a customer group x-authenticated: true parameters: - in: path name: id required: true - description: The id of the customer group. + description: The ID of the customer group. + schema: + type: string + tags: + - Customer Group + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customers: + type: array + items: + $ref: '#/components/schemas/customer' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page + /customers: + post: + operationId: PostCustomers + summary: Create a Customer + description: Creates a Customer. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - email + - first_name + - last_name + - password + properties: + email: + type: string + description: The customer's email. + format: email + first_name: + type: string + description: The customer's first name. + last_name: + type: string + description: The customer's last name. + password: + type: string + description: The customer's password. + format: password + phone: + type: string + description: The customer's phone number. + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Customer + responses: + '201': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: '#/components/schemas/customer' + get: + operationId: GetCustomers + summary: List Customers + description: Retrieves a list of Customers. + x-authenticated: true + parameters: + - in: query + name: limit + description: The number of items to return. + schema: + type: integer + default: 50 + - in: query + name: offset + description: The items to skip before result. + schema: + type: integer + default: 0 + - in: query + name: expand + description: (Comma separated) Which fields should be expanded in each customer. + schema: + type: string + - in: query + name: q + description: 'a search term to search email, first_name, and last_name.' schema: type: string tags: @@ -912,67 +1383,19 @@ paths: application/json: schema: properties: - customer: - $ref: '#/components/schemas/customer' - /customers: - post: - operationId: PostCustomers - summary: Create a Customer - description: Creates a Customer. - x-authenticated: true - parameters: [] - tags: - - Customer - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - customer: - $ref: '#/components/schemas/customer' - requestBody: - content: - application/json: - schema: - type: object - required: - - email - - first_name - - last_name - properties: - email: - type: string - description: The Customer's email address. - first_name: - type: string - description: The Customer's first name. - last_name: - type: string - description: The Customer's last name. - phone: - type: string - description: The Customer's phone number. - metadata: - type: object - description: Metadata for the customer. - get: - operationId: GetCustomers - summary: List Customers - description: Retrieves a list of Customers. - x-authenticated: true - tags: - - Customer - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - customer: - $ref: '#/components/schemas/customer' + customers: + type: array + items: + $ref: '#/components/schemas/customer' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/customers/{id}': get: operationId: GetCustomersCustomer @@ -983,7 +1406,17 @@ paths: - in: path name: id required: true - description: The id of the Customer. + description: The ID of the Customer. + schema: + type: string + - in: query + name: expand + description: (Comma separated) Which fields should be expanded in the customer. + schema: + type: string + - in: query + name: fields + description: (Comma separated) Which fields should be included in the customer. schema: type: string tags: @@ -1006,17 +1439,19 @@ paths: - in: path name: id required: true - description: The id of the Customer. + description: The ID of the Customer. schema: type: string - in: query name: expand - style: form - explode: false + description: (Comma separated) Which fields should be expanded in each customer. schema: - type: array - items: - type: string + type: string + - in: query + name: fields + description: (Comma separated) Which fields should be retrieved in each customer. + schema: + type: string requestBody: content: application/json: @@ -1024,9 +1459,8 @@ paths: properties: email: type: string - description: >- - The Customer's email. Only providable if user not - registered. + description: The Customer's email. + format: email first_name: type: string description: The Customer's first name. @@ -1039,6 +1473,7 @@ paths: password: type: string description: The Customer's password. + format: password groups: type: array items: @@ -1046,12 +1481,14 @@ paths: - id properties: id: - description: The id of a customer group + description: The ID of a customer group type: string description: A list of customer groups to which the customer belongs. metadata: + description: >- + An optional set of key-value pairs to hold additional + information. type: object - description: Metadata for the customer. tags: - Customer responses: @@ -1073,13 +1510,13 @@ paths: - in: path name: id required: true - description: The id of the Discount. + description: The ID of the Discount. schema: type: string - in: path name: region_id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string tags: @@ -1104,13 +1541,13 @@ paths: - in: path name: id required: true - description: The id of the Discount. + description: The ID of the Discount. schema: type: string - in: path name: region_id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string tags: @@ -1127,13 +1564,16 @@ paths: '/discounts/{discount_id}/conditions': post: operationId: PostDiscountsDiscountConditions - summary: Creates a DiscountCondition + summary: >- + Creates a DiscountCondition. Only one of `products`, `product_types`, + `product_collections`, `product_tags`, and `customer_groups` should be + provided. x-authenticated: true parameters: - in: path name: discount_id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string - in: query @@ -1155,29 +1595,50 @@ paths: content: application/json: schema: + required: + - operator properties: operator: description: Operator of the condition type: string - items: - properties: - products: - type: array - description: list of products - product_types: - type: array - description: list of product types - product_collections: - type: array - description: list of product collections - product_tags: - type: array - description: list of product tags - customer_groups: - type: array - description: list of customer_groups + enum: + - in + - not_in + products: + type: array + description: list of product IDs if the condition is applied on products. + items: + type: string + product_types: + type: array + description: >- + list of product type IDs if the condition is applied on + product types. + items: + type: string + product_collections: + type: array + description: >- + list of product collection IDs if the condition is applied + on product collections. + items: + type: string + product_tags: + type: array + description: >- + list of product tag IDs if the condition is applied on + product tags. + items: + type: string + customer_groups: + type: array + description: >- + list of customer group IDs if the condition is applied on + customer groups. + items: + type: string tags: - - Discount + - Discount Condition responses: '200': description: OK @@ -1195,6 +1656,17 @@ paths: description: >- Creates a Discount with a given set of rules that define how the Discount behaves. + parameters: + - in: query + name: expand + description: (Comma separated) Which fields should be expanded in each customer. + schema: + type: string + - in: query + name: fields + description: (Comma separated) Which fields should be retrieved in each customer. + schema: + type: string requestBody: content: application/json: @@ -1207,21 +1679,105 @@ paths: type: string description: A unique code that will be used to redeem the Discount is_dynamic: - type: string + type: boolean description: >- Whether the Discount should have multiple instances of itself, each with a different code. This can be useful for automatically generated codes that all have to follow a common set of rules. + default: false rule: description: The Discount Rule that defines how Discounts are calculated - oneOf: - - $ref: '#/components/schemas/discount_rule' + type: object + required: + - type + - value + - allocation + properties: + description: + type: string + description: A short description of the discount + type: + type: string + description: >- + The type of the Discount, can be `fixed` for discounts + that reduce the price by a fixed amount, `percentage` + for percentage reductions or `free_shipping` for + shipping vouchers. + enum: + - fixed + - percentage + - free_shipping + value: + type: number + description: >- + The value that the discount represents; this will depend + on the type of the discount + allocation: + type: string + description: The scope that the discount should apply to. + enum: + - total + - item + conditions: + type: array + description: >- + A set of conditions that can be used to limit when the + discount can be used. Only one of `products`, + `product_types`, `product_collections`, `product_tags`, + and `customer_groups` should be provided. + items: + type: object + required: + - operator + properties: + operator: + type: string + description: Operator of the condition + enum: + - in + - not_in + products: + type: array + description: >- + list of product IDs if the condition is applied on + products. + items: + type: string + product_types: + type: array + description: >- + list of product type IDs if the condition is + applied on product types. + items: + type: string + product_collections: + type: array + description: >- + list of product collection IDs if the condition is + applied on product collections. + items: + type: string + product_tags: + type: array + description: >- + list of product tag IDs if the condition is + applied on product tags. + items: + type: string + customer_groups: + type: array + description: >- + list of customer group IDs if the condition is + applied on customer groups. + items: + type: string is_disabled: type: boolean description: >- Whether the Discount code is disabled on creation. You will have to enable it later to make it available to Customers. + default: false starts_at: type: string format: date-time @@ -1232,6 +1788,10 @@ paths: description: >- The time at which the Discount should no longer be available. + valid_duration: + type: string + description: Duration the discount runs between + example: P3Y6M4DT12H30M5S regions: description: >- A list of Region ids representing the Regions in which the @@ -1266,9 +1826,34 @@ paths: parameters: - in: query name: q - description: Search query applied on results. + description: Search query applied on the code field. schema: type: string + - in: query + name: rule + description: Discount Rules filters to apply on the search + schema: + type: object + properties: + type: + type: string + enum: + - fixed + - percentage + - free_shipping + description: >- + The type of the Discount, can be `fixed` for discounts that + reduce the price by a fixed amount, `percentage` for + percentage reductions or `free_shipping` for shipping + vouchers. + allocation: + type: string + enum: + - total + - item + description: >- + The value that the discount represents; this will depend on + the type of the discount - in: query name: is_dynamic description: Return only dynamic discounts. @@ -1284,11 +1869,13 @@ paths: description: The number of items in the response schema: type: number + default: '20' - in: query name: offset description: The offset of items in response schema: type: number + default: '0' - in: query name: expand description: Comma separated list of relations to include in the results. @@ -1303,8 +1890,19 @@ paths: application/json: schema: properties: - discount: - $ref: '#/components/schemas/discount' + discounts: + type: array + items: + $ref: '#/components/schemas/discount' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/discounts/{id}/dynamic-codes': post: operationId: PostDiscountsDiscountDynamicCodes @@ -1317,7 +1915,7 @@ paths: - in: path name: id required: true - description: The id of the Discount to create the dynamic code from." + description: The ID of the Discount to create the dynamic code from." schema: type: string tags: @@ -1338,14 +1936,14 @@ paths: type: object required: - code - - usage_limit properties: code: type: string description: The unique code that will be used to redeem the Discount. usage_limit: type: number - description: amount of times the discount can be applied + default: '1' + description: amount of times the discount can be applied. metadata: type: object description: >- @@ -1359,19 +1957,29 @@ paths: x-authenticated: true parameters: - in: path - name: id + name: discount_id required: true - description: The id of the Discount + description: The ID of the Discount schema: type: string - in: path name: condition_id required: true - description: The id of the DiscountCondition + description: The ID of the DiscountCondition + schema: + type: string + - in: query + name: expand + description: Comma separated list of relations to include in the results. + schema: + type: string + - in: query + name: fields + description: Comma separated list of fields to include in the results. schema: type: string tags: - - Discount + - Discount Condition responses: '200': description: OK @@ -1381,15 +1989,20 @@ paths: properties: id: type: string - description: The id of the deleted DiscountCondition + description: The ID of the deleted DiscountCondition object: type: string description: The type of the object that was deleted. + default: discount-condition deleted: type: boolean + description: >- + Whether the discount condition was deleted successfully or + not. + default: true discount: - type: object description: The Discount to which the condition used to belong + $ref: '#/components/schemas/discount' get: operationId: GetDiscountsDiscountConditionsCondition summary: Gets a DiscountCondition @@ -1398,13 +2011,13 @@ paths: - in: path name: discount_id required: true - description: The id of the Discount. + description: The ID of the Discount. schema: type: string - in: path name: condition_id required: true - description: The id of the DiscountCondition. + description: The ID of the DiscountCondition. schema: type: string - in: query @@ -1419,7 +2032,7 @@ paths: type: string description: Gets a DiscountCondition tags: - - DiscountCondition + - Discount Condition responses: '200': description: OK @@ -1431,26 +2044,35 @@ paths: $ref: '#/components/schemas/discount_condition' post: operationId: PostDiscountsDiscountConditionsCondition - summary: Updates a DiscountCondition + summary: >- + Updates a DiscountCondition. Only one of `products`, `product_types`, + `product_collections`, `product_tags`, and `customer_groups` should be + provided. x-authenticated: true parameters: - in: path name: discount_id required: true - description: The id of the Product. + description: The ID of the Product. + schema: + type: string + - in: path + name: condition_id + required: true + description: The ID of the DiscountCondition. schema: type: string - in: query name: expand description: >- - (Comma separated) Which fields should be expanded in each product of + (Comma separated) Which fields should be expanded in each item of the result. schema: type: string - in: query name: fields description: >- - (Comma separated) Which fields should be included in each product of + (Comma separated) Which fields should be included in each item of the result. schema: type: string @@ -1459,26 +2081,40 @@ paths: content: application/json: schema: - required: - - id properties: - items: - properties: - products: - type: array - description: list of products - product_types: - type: array - description: list of product types - product_collections: - type: array - description: list of product collections - product_tags: - type: array - description: list of product tags - customer_groups: - type: array - description: list of customer_groups + products: + type: array + description: list of product IDs if the condition is applied on products. + items: + type: string + product_types: + type: array + description: >- + list of product type IDs if the condition is applied on + product types. + items: + type: string + product_collections: + type: array + description: >- + list of product collection IDs if the condition is applied + on product collections. + items: + type: string + product_tags: + type: array + description: >- + list of product tag IDs if the condition is applied on + product tags. + items: + type: string + customer_groups: + type: array + description: >- + list of customer group IDs if the condition is applied on + customer groups. + items: + type: string tags: - Discount responses: @@ -1500,7 +2136,7 @@ paths: - in: path name: id required: true - description: The id of the Discount + description: The ID of the Discount schema: type: string tags: @@ -1514,12 +2150,15 @@ paths: properties: id: type: string - description: The id of the deleted Discount + description: The ID of the deleted Discount object: type: string description: The type of the object that was deleted. + default: discount deleted: type: boolean + description: Whether the discount was deleted successfully or not. + default: true get: operationId: GetDiscountsDiscount summary: Retrieve a Discount @@ -1529,7 +2168,7 @@ paths: - in: path name: id required: true - description: The id of the Discount + description: The ID of the Discount schema: type: string - in: query @@ -1564,7 +2203,21 @@ paths: - in: path name: id required: true - description: The id of the Discount. + description: The ID of the Discount. + schema: + type: string + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each item of + the result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each item of + the result. schema: type: string requestBody: @@ -1577,8 +2230,83 @@ paths: description: A unique code that will be used to redeem the Discount rule: description: The Discount Rule that defines how Discounts are calculated - oneOf: - - $ref: '#/components/schemas/discount_rule' + type: object + required: + - id + properties: + id: + type: string + description: The ID of the Rule + description: + type: string + description: A short description of the discount + value: + type: number + description: >- + The value that the discount represents; this will depend + on the type of the discount + allocation: + type: string + description: The scope that the discount should apply to. + enum: + - total + - item + conditions: + type: array + description: >- + A set of conditions that can be used to limit when the + discount can be used. Only one of `products`, + `product_types`, `product_collections`, `product_tags`, + and `customer_groups` should be provided. + items: + type: object + required: + - operator + properties: + id: + type: string + description: The ID of the Rule + operator: + type: string + description: Operator of the condition + enum: + - in + - not_in + products: + type: array + description: >- + list of product IDs if the condition is applied on + products. + items: + type: string + product_types: + type: array + description: >- + list of product type IDs if the condition is + applied on product types. + items: + type: string + product_collections: + type: array + description: >- + list of product collection IDs if the condition is + applied on product collections. + items: + type: string + product_tags: + type: array + description: >- + list of product tag IDs if the condition is + applied on product tags. + items: + type: string + customer_groups: + type: array + description: >- + list of customer group IDs if the condition is + applied on customer groups. + items: + type: string is_disabled: type: boolean description: >- @@ -1594,6 +2322,13 @@ paths: description: >- The time at which the Discount should no longer be available. + valid_duration: + type: string + description: Duration the discount runs between + example: P3Y6M4DT12H30M5S + usage_limit: + type: number + description: Maximum times the discount can be used regions: description: >- A list of Region ids representing the Regions in which the @@ -1625,13 +2360,13 @@ paths: - in: path name: id required: true - description: The id of the Discount + description: The ID of the Discount schema: type: string - in: path name: code required: true - description: The id of the Discount + description: The ID of the Discount schema: type: string tags: @@ -1658,6 +2393,16 @@ paths: description: The code of the Discount schema: type: string + - in: query + name: expand + description: Comma separated list of relations to include in the results. + schema: + type: string + - in: query + name: fields + description: Comma separated list of fields to include in the results. + schema: + type: string tags: - Discount responses: @@ -1669,6 +2414,60 @@ paths: properties: discount: $ref: '#/components/schemas/discount' + /apps/authorizations: + post: + operationId: PostApps + summary: Generates a token for an application. + description: Generates a token for an application. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - application_name + - state + - code + properties: + application_name: + type: string + description: Name of the application for the token to be generated for. + state: + type: string + description: State of the application. + code: + type: string + description: The code for the generated token. + tags: + - App + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + apps: + $ref: '#/components/schemas/OAuth' + /apps: + get: + operationId: GetApps + summary: List applications + description: Retrieve a list of applications. + x-authenticated: true + tags: + - App + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + apps: + type: array + items: + $ref: '#/components/schemas/OAuth' /draft-orders: post: operationId: PostDraftOrders @@ -1688,25 +2487,30 @@ paths: status: description: The status of the draft order type: string + enum: + - open + - completed email: description: The email of the customer of the draft order type: string + format: email billing_address: description: The Address to be used for billing purposes. - anyOf: - - $ref: '#/components/schemas/address' + $ref: '#/components/schemas/address' shipping_address: description: The Address to be used for shipping. - anyOf: - - $ref: '#/components/schemas/address' + $ref: '#/components/schemas/address' items: description: The Line Items that have been received. type: array items: + type: object + required: + - quantity properties: variant_id: description: >- - The id of the Product Variant to generate the Line + The ID of the Product Variant to generate the Line Item from. type: string unit_price: @@ -1724,18 +2528,21 @@ paths: about the Line Item. type: object region_id: - description: The id of the region for the draft order + description: The ID of the region for the draft order type: string discounts: description: The discounts to add on the draft order type: array items: + type: object + required: + - code properties: code: description: The code of the discount to apply type: string customer_id: - description: The id of the customer to add on the draft order + description: The ID of the customer to add on the draft order type: string no_notification_order: description: >- @@ -1746,9 +2553,12 @@ paths: description: The shipping methods for the draft order type: array items: + type: object + required: + - option_id properties: option_id: - description: The id of the shipping option in use + description: The ID of the shipping option in use type: string data: description: >- @@ -1779,6 +2589,26 @@ paths: summary: List Draft Orders description: Retrieves an list of Draft Orders x-authenticated: true + parameters: + - in: query + name: offset + description: The number of items to skip before the results. + schema: + type: number + default: '0' + - in: query + name: limit + description: Limit the number of items returned. + schema: + type: number + default: '50' + - in: query + name: q + description: >- + a search term to search emails in carts associated with draft orders + and display IDs of draft orders + schema: + type: string tags: - Draft Order responses: @@ -1788,8 +2618,19 @@ paths: application/json: schema: properties: - draft_order: - $ref: '#/components/schemas/draft-order' + draft_orders: + type: array + items: + $ref: '#/components/schemas/draft-order' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/draft-orders/{id}/line-items': post: operationId: PostDraftOrdersDraftOrderLineItems @@ -1800,7 +2641,7 @@ paths: - in: path name: id required: true - description: The id of the Draft Order. + description: The ID of the Draft Order. schema: type: string requestBody: @@ -1812,7 +2653,7 @@ paths: properties: variant_id: description: >- - The id of the Product Variant to generate the Line Item + The ID of the Product Variant to generate the Line Item from. type: string unit_price: @@ -1821,6 +2662,7 @@ paths: title: description: The potential custom title of the item. type: string + default: Custom item quantity: description: The quantity of the Line Item. type: integer @@ -1850,7 +2692,7 @@ paths: - in: path name: id required: true - description: The id of the Draft Order. + description: The ID of the Draft Order. schema: type: string tags: @@ -1864,12 +2706,15 @@ paths: properties: id: type: string - description: The id of the deleted Draft Order. + description: The ID of the deleted Draft Order. object: type: string description: The type of the object that was deleted. + default: draft-order deleted: type: boolean + description: Whether the draft order was deleted successfully or not. + default: true get: operationId: GetDraftOrdersDraftOrder summary: Retrieve a Draft Order @@ -1879,7 +2724,7 @@ paths: - in: path name: id required: true - description: The id of the Draft Order. + description: The ID of the Draft Order. schema: type: string tags: @@ -1903,13 +2748,13 @@ paths: - in: path name: id required: true - description: The id of the Draft Order. + description: The ID of the Draft Order. schema: type: string - in: path name: line_id required: true - description: The id of the Draft Order. + description: The ID of the Draft Order. schema: type: string tags: @@ -1932,13 +2777,13 @@ paths: - in: path name: id required: true - description: The id of the Draft Order. + description: The ID of the Draft Order. schema: type: string - in: path name: line_id required: true - description: The id of the Line Item. + description: The ID of the Line Item. schema: type: string requestBody: @@ -1971,7 +2816,7 @@ paths: properties: draft_order: $ref: '#/components/schemas/draft-order' - '/draft-orders/{id}/register-payment': + '/draft-orders/{id}/pay': post: summary: Registers a payment for a Draft Order operationId: PostDraftOrdersDraftOrderRegisterPayment @@ -1993,7 +2838,7 @@ paths: application/json: schema: properties: - draft_order: + order: $ref: '#/components/schemas/draft-order' '/admin/draft-orders/{id}': post: @@ -2005,7 +2850,7 @@ paths: - in: path name: id required: true - description: The id of the Draft Order. + description: The ID of the Draft Order. schema: type: string requestBody: @@ -2015,22 +2860,31 @@ paths: properties: region_id: type: string - description: The id of the Region to create the Draft Order in. + description: The ID of the Region to create the Draft Order in. + country_code: + type: string + description: The 2 character ISO code for the Country. + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. email: type: string description: An email to be used on the Draft Order. + format: email billing_address: description: The Address to be used for billing purposes. - anyOf: - - $ref: '#/components/schemas/address' + $ref: '#/components/schemas/address' shipping_address: description: The Address to be used for shipping. - anyOf: - - $ref: '#/components/schemas/address' + $ref: '#/components/schemas/address' discounts: description: An array of Discount codes to add to the Draft Order. type: array items: + type: object + required: + - code properties: code: description: The code that a Discount is identifed by. @@ -2041,7 +2895,7 @@ paths: use of notifications. type: boolean customer_id: - description: The id of the Customer to associate the Draft Order with. + description: The ID of the Customer to associate the Draft Order with. type: string tags: - Draft Order @@ -2066,6 +2920,8 @@ paths: content: application/json: schema: + required: + - region_id properties: value: type: integer @@ -2084,10 +2940,8 @@ paths: The time at which the Gift Card should no longer be available. region_id: - description: The id of the Region in which the Gift Card can be used. - type: array - items: - type: string + description: The ID of the Region in which the Gift Card can be used. + type: string metadata: description: >- An optional set of key-value pairs to hold additional @@ -2109,6 +2963,24 @@ paths: summary: List Gift Cards description: Retrieves a list of Gift Cards. x-authenticated: true + parameters: + - in: query + name: offset + description: The number of items to skip before the results. + schema: + type: number + default: '0' + - in: query + name: limit + description: Limit the number of items returned. + schema: + type: number + default: '50' + - in: query + name: q + description: a search term to search by code or display ID + schema: + type: string tags: - Gift Card responses: @@ -2122,6 +2994,15 @@ paths: type: array items: $ref: '#/components/schemas/gift_card' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/gift-cards/{id}': delete: operationId: DeleteGiftCardsGiftCard @@ -2132,7 +3013,7 @@ paths: - in: path name: id required: true - description: The id of the Gift Card to delete. + description: The ID of the Gift Card to delete. schema: type: string tags: @@ -2146,12 +3027,15 @@ paths: properties: id: type: string - description: The id of the deleted Gift Card + description: The ID of the deleted Gift Card object: type: string description: The type of the object that was deleted. + default: gift-card deleted: type: boolean + description: Whether the gift card was deleted successfully or not. + default: true get: operationId: GetGiftCardsGiftCard summary: Retrieve a Gift Card @@ -2161,7 +3045,7 @@ paths: - in: path name: id required: true - description: The id of the Gift Card. + description: The ID of the Gift Card. schema: type: string tags: @@ -2186,7 +3070,7 @@ paths: - in: path name: id required: true - description: The id of the Gift Card. + description: The ID of the Gift Card. schema: type: string requestBody: @@ -2211,10 +3095,8 @@ paths: The time at which the Gift Card should no longer be available. region_id: - description: The id of the Region in which the Gift Card can be used. - type: array - items: - type: string + description: The ID of the Region in which the Gift Card can be used. + type: string metadata: description: >- An optional set of key-value pairs to hold additional @@ -2264,8 +3146,9 @@ paths: password: description: The desired password for the User type: string + format: password tags: - - Invites + - Invite responses: '200': description: OK @@ -2286,11 +3169,16 @@ paths: user: description: The email for the user to be created. type: string + format: email role: description: The role of the user to be created. type: string + enum: + - admin + - member + - developer tags: - - Invites + - Invite responses: '200': description: OK @@ -2300,7 +3188,7 @@ paths: description: Lists all Invites x-authenticated: true tags: - - Invites + - Invite responses: '200': description: OK @@ -2322,14 +3210,29 @@ paths: - in: path name: invite_id required: true - description: The id of the Invite + description: The ID of the Invite schema: type: string tags: - - Invites + - Invite responses: '200': description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Invite. + object: + type: string + description: The type of the object that was deleted. + format: invite + deleted: + type: boolean + description: Whether or not the Invite was deleted. + default: true '/invites/{invite_id}/resend': post: operationId: PostInvitesInviteResend @@ -2340,11 +3243,11 @@ paths: - in: path name: invite_id required: true - description: The id of the Invite + description: The ID of the Invite schema: type: string tags: - - Invites + - Invite responses: '200': description: OK @@ -2358,10 +3261,14 @@ paths: content: application/json: schema: + required: + - resource_id + - resource_type + - value properties: resource_id: type: string - description: The id of the resource which the Note relates to. + description: The ID of the resource which the Note relates to. resource_type: type: string description: The type of resource which the Note relates to. @@ -2385,27 +3292,23 @@ paths: x-authenticated: true description: Retrieves a list of notes parameters: - - in: path + - in: query name: limit - required: true description: The number of notes to get schema: type: number - default: '' - - in: path + default: '50' + - in: query name: offset - required: true description: The offset at which to get notes schema: type: number - default: '' - - in: path + default: '0' + - in: query name: resource_id - required: true - description: The id which the notes belongs to + description: The ID which the notes belongs to schema: type: string - default: '' tags: - Note responses: @@ -2419,6 +3322,15 @@ paths: type: array items: $ref: '#/components/schemas/note' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/notes/{id}': delete: operationId: DeleteNotesNote @@ -2429,7 +3341,7 @@ paths: - in: path name: id required: true - description: The id of the Note to delete. + description: The ID of the Note to delete. schema: type: string tags: @@ -2443,10 +3355,15 @@ paths: properties: id: type: string - description: The id of the deleted Note. + description: The ID of the deleted Note. + object: + type: string + description: The type of the object that was deleted. + default: note deleted: type: boolean description: Whether or not the Note was deleted. + default: true get: operationId: GetNotesNote summary: Get Note @@ -2456,7 +3373,7 @@ paths: - in: path name: id required: true - description: The id of the note to retrieve. + description: The ID of the note to retrieve. schema: type: string tags: @@ -2479,7 +3396,7 @@ paths: - in: path name: id required: true - description: The id of the Note to update + description: The ID of the Note to update schema: type: string requestBody: @@ -2526,35 +3443,44 @@ paths: default: 50 - in: query name: fields - description: The fields to include in the result set + description: Comma separated fields to include in the result set schema: type: string - in: query name: expand - description: The fields to populate + description: Comma separated fields to populate schema: type: string - in: query name: event_name + description: The name of the event that the notification was sent for. schema: type: string - in: query name: resource_type + description: The type of resource that the Notification refers to. schema: type: string - in: query name: resource_id + description: The ID of the resource that the Notification refers to. schema: type: string - in: query name: to + description: >- + The address that the Notification was sent to. This will usually be + an email address, but represent other addresses such as a chat bot + user id schema: type: string - in: query name: include_resends - description: Whether the result set should include resent notifications or not + description: >- + A boolean indicating whether the result set should include resent + notifications or not schema: - type: boolean + type: string tags: - Notification responses: @@ -2580,7 +3506,7 @@ paths: - in: path name: id required: true - description: The id of the Notification + description: The ID of the Notification schema: type: string requestBody: @@ -2590,8 +3516,8 @@ paths: properties: to: description: >- - The address or user identifier that the Notification was - sent to + A new address or user identifier that the Notification + should be sent to type: string tags: - Notification @@ -2617,7 +3543,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string tags: @@ -2639,7 +3565,6 @@ paths: required: - price - option_id - - data properties: price: type: integer @@ -2649,7 +3574,7 @@ paths: option_id: type: string description: >- - The id of the Shipping Option to create the Shipping Method + The ID of the Shipping Option to create the Shipping Method from. data: type: object @@ -2667,7 +3592,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string tags: @@ -2691,13 +3616,13 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string - in: path name: claim_id required: true - description: The id of the Claim. + description: The ID of the Claim. schema: type: string tags: @@ -2710,7 +3635,7 @@ paths: schema: properties: order: - $ref: '#/components/schemas/claim_order' + $ref: '#/components/schemas/order' '/orders/{id}/claims/{claim_id}/fulfillments/{fulfillment_id}/cancel': post: operationId: PostOrdersClaimFulfillmentsCancel @@ -2721,19 +3646,19 @@ paths: - in: path name: id required: true - description: The id of the Order which the Claim relates to. + description: The ID of the Order which the Claim relates to. schema: type: string - in: path name: claim_id required: true - description: The id of the Claim which the Fulfillment relates to. + description: The ID of the Claim which the Fulfillment relates to. schema: type: string - in: path name: fulfillment_id required: true - description: The id of the Fulfillment. + description: The ID of the Fulfillment. schema: type: string tags: @@ -2745,8 +3670,8 @@ paths: application/json: schema: properties: - fulfillment: - $ref: '#/components/schemas/fulfillment' + order: + $ref: '#/components/schemas/order' '/orders/{id}/swaps/{swap_id}/fulfillments/{fulfillment_id}/cancel': post: operationId: PostOrdersSwapFulfillmentsCancel @@ -2757,19 +3682,19 @@ paths: - in: path name: id required: true - description: The id of the Order which the Swap relates to. + description: The ID of the Order which the Swap relates to. schema: type: string - in: path name: swap_id required: true - description: The id of the Swap which the Fulfillment relates to. + description: The ID of the Swap which the Fulfillment relates to. schema: type: string - in: path name: fulfillment_id required: true - description: The id of the Fulfillment. + description: The ID of the Fulfillment. schema: type: string tags: @@ -2781,8 +3706,8 @@ paths: application/json: schema: properties: - fulfillment: - $ref: '#/components/schemas/fulfillment' + order: + $ref: '#/components/schemas/order' '/orders/{id}/fulfillments/{fulfillment_id}/cancel': post: operationId: PostOrdersOrderFulfillmentsCancel @@ -2793,13 +3718,13 @@ paths: - in: path name: id required: true - description: The id of the Order which the Fulfillment relates to. + description: The ID of the Order which the Fulfillment relates to. schema: type: string - in: path name: fulfillment_id required: true - description: The id of the Fulfillment + description: The ID of the Fulfillment schema: type: string tags: @@ -2811,8 +3736,8 @@ paths: application/json: schema: properties: - fulfillment: - $ref: '#/components/schemas/fulfillment' + order: + $ref: '#/components/schemas/order' '/orders/{id}/cancel': post: operationId: PostOrdersOrderCancel @@ -2826,7 +3751,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string tags: @@ -2850,13 +3775,13 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string - in: path name: swap_id required: true - description: The id of the Swap. + description: The ID of the Swap. schema: type: string tags: @@ -2869,7 +3794,7 @@ paths: schema: properties: order: - $ref: '#/components/schemas/swap' + $ref: '#/components/schemas/order' '/orders/{id}/capture': post: operationId: PostOrdersOrderCapture @@ -2880,7 +3805,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string tags: @@ -2904,7 +3829,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string tags: @@ -2928,13 +3853,13 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string - in: path name: claim_id required: true - description: The id of the Claim. + description: The ID of the Claim. schema: type: string requestBody: @@ -2945,7 +3870,7 @@ paths: - fulfillment_id properties: fulfillment_id: - description: The id of the Fulfillment. + description: The ID of the Fulfillment. type: string tracking_numbers: description: The tracking numbers for the shipment. @@ -2953,7 +3878,7 @@ paths: items: type: string tags: - - Order + - Claim responses: '200': description: OK @@ -2973,7 +3898,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string requestBody: @@ -2998,9 +3923,12 @@ paths: description: The Claim Items that the Claim will consist of. type: array items: + required: + - item_id + - quantity properties: item_id: - description: The id of the Line Item that will be claimed. + description: The ID of the Line Item that will be claimed. type: string quantity: description: The number of items that will be returned @@ -3038,7 +3966,7 @@ paths: option_id: type: string description: >- - The id of the Shipping Option to create the Shipping + The ID of the Shipping Option to create the Shipping Method from. price: type: integer @@ -3049,9 +3977,12 @@ paths: Replace. type: array items: + required: + - variant_id + - quantity properties: variant_id: - description: The id of the Product Variant to ship. + description: The ID of the Product Variant to ship. type: string quantity: description: The quantity of the Product Variant to ship. @@ -3062,11 +3993,11 @@ paths: items: properties: id: - description: The id of an existing Shipping Method + description: The ID of an existing Shipping Method type: string option_id: description: >- - The id of the Shipping Option to create a Shipping + The ID of the Shipping Option to create a Shipping Method from type: string price: @@ -3077,6 +4008,7 @@ paths: description: >- An optional shipping address to send the claim to. Defaults to the parent order's shipping address + $ref: '#/components/schemas/address' refund_amount: description: >- The amount to refund the Customer when the Claim type is @@ -3093,7 +4025,7 @@ paths: information. type: object tags: - - Order + - Claim responses: '200': description: OK @@ -3103,7 +4035,7 @@ paths: properties: order: $ref: '#/components/schemas/order' - '/orders/{id}/fulfillments': + '/orders/{id}/fulfillment': post: operationId: PostOrdersOrderFulfillments summary: Create a Fulfillment @@ -3115,7 +4047,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string requestBody: @@ -3129,9 +4061,12 @@ paths: description: The Line Items to include in the Fulfillment. type: array items: + required: + - item_id + - quantity properties: item_id: - description: The id of Line Item to fulfill. + description: The ID of Line Item to fulfill. type: string quantity: description: The quantity of the Line Item to fulfill. @@ -3147,7 +4082,7 @@ paths: information. type: object tags: - - Order + - Fulfillment responses: '200': description: OK @@ -3157,237 +4092,6 @@ paths: properties: order: $ref: '#/components/schemas/order' - /orders: - post: - operationId: PostOrders - summary: Create an order - description: Creates and order - x-authenticated: true - requestBody: - content: - application/json: - schema: - required: - - email - - billing_address - - shipping_address - - items - - region - - customer_id - - payment_method - - shipping_method - properties: - status: - description: status of the order - type: string - email: - description: the email for the order - type: string - billing_address: - description: Billing address - anyOf: - - $ref: '#/components/schemas/address' - shipping_address: - description: Shipping address - anyOf: - - $ref: '#/components/schemas/address' - items: - description: The Line Items for the order - type: array - items: - $ref: '#/components/schemas/line_item' - region: - description: Region where the order belongs - type: string - discounts: - description: Discounts applied to the order - type: array - items: - $ref: '#/components/schemas/line_item' - customer_id: - description: id of the customer - type: string - payment_method: - description: payment method chosen for the order - type: object - required: - - provider_id - properties: - provider_id: - type: string - description: id of the payment provider - data: - description: Data relevant for the given payment method - type: object - shipping_method: - description: The Shipping Method used for shipping the order. - type: object - required: - - provider_id - - profile_id - - price - properties: - provider_id: - type: string - description: The id of the shipping provider. - profile_id: - type: string - description: The id of the shipping profile. - price: - type: integer - description: The price of the shipping. - data: - type: object - description: Data relevant to the specific shipping method. - items: - type: array - items: - $ref: '#/components/schemas/line_item' - description: Items to ship - no_notification: - description: >- - A flag to indicate if no notifications should be emitted - related to the updated order. - type: boolean - tags: - - Order - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - order: - $ref: '#/components/schemas/order' - get: - operationId: GetOrders - summary: List Orders - description: Retrieves a list of Orders - x-authenticated: true - parameters: - - in: query - name: q - description: Query used for searching orders. - schema: - type: string - - in: query - name: id - description: Id of the order to search for. - schema: - type: string - - in: query - name: status - style: form - explode: false - description: Status to search for - schema: - type: array - items: - type: string - - in: query - name: fulfillment_status - description: Fulfillment status to search for. - schema: - type: string - - in: query - name: payment_status - description: Payment status to search for. - schema: - type: string - - in: query - name: display_id - description: Display id to search for. - schema: - type: string - - in: query - name: cart_id - description: to search for. - schema: - type: string - - in: query - name: customer_id - description: to search for. - schema: - type: string - - in: query - name: email - description: to search for. - schema: - type: string - - in: query - name: region_id - description: to search for. - schema: - type: string - - in: query - name: currency_code - description: to search for. - schema: - type: string - - in: query - name: tax_rate - description: to search for. - schema: - type: string - - in: query - name: cancelled_at - description: >- - Date comparison for when resulting orders was cancelled, i.e. less - than, greater than etc. - schema: - type: object - - in: query - name: created_at - description: >- - Date comparison for when resulting orders was created, i.e. less - than, greater than etc. - schema: - type: object - - in: query - name: updated_at - description: >- - Date comparison for when resulting orders was updated, i.e. less - than, greater than etc. - schema: - type: object - - in: query - name: offset - description: How many orders to skip in the result. - schema: - type: string - - in: query - name: limit - description: Limit the number of orders returned. - schema: - type: string - - in: query - name: expand - description: >- - (Comma separated) Which fields should be expanded in each order of - the result. - schema: - type: string - - in: query - name: fields - description: >- - (Comma separated) Which fields should be included in each order of - the result. - schema: - type: string - tags: - - Order - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - orders: - type: array - items: - $ref: '#/components/schemas/order' '/orders/{id}/shipment': post: operationId: PostOrdersOrderShipment @@ -3398,7 +4102,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string requestBody: @@ -3409,7 +4113,7 @@ paths: - fulfillment_id properties: fulfillment_id: - description: The id of the Fulfillment. + description: The ID of the Fulfillment. type: string tracking_numbers: description: The tracking numbers for the shipment. @@ -3442,13 +4146,13 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string - in: path name: swap_id required: true - description: The id of the Swap. + description: The ID of the Swap. schema: type: string requestBody: @@ -3459,7 +4163,7 @@ paths: - fulfillment_id properties: fulfillment_id: - description: The id of the Fulfillment. + description: The ID of the Fulfillment. type: string tracking_numbers: description: The tracking numbers for the shipment. @@ -3472,7 +4176,7 @@ paths: Claim. type: boolean tags: - - Order + - Swap responses: '200': description: OK @@ -3494,7 +4198,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string requestBody: @@ -3513,19 +4217,27 @@ paths: - quantity properties: item_id: - description: The id of the Line Item that will be claimed. + description: The ID of the Line Item that will be claimed. type: string quantity: description: The number of items that will be returned type: integer + reason_id: + description: The ID of the Return Reason to use. + type: string + note: + description: An optional note with information about the Return. + type: string return_shipping: description: How the Swap will be returned. type: object + required: + - option_id properties: option_id: type: string description: >- - The id of the Shipping Option to create the Shipping + The ID of the Shipping Option to create the Shipping Method from. price: type: integer @@ -3539,7 +4251,7 @@ paths: - quantity properties: variant_id: - description: The id of the Product Variant to ship. + description: The ID of the Product Variant to ship. type: string quantity: description: The quantity of the Product Variant to ship. @@ -3556,7 +4268,7 @@ paths: properties: option_id: description: >- - The id of the Shipping Option to override with a + The ID of the Shipping Option to override with a custom price. type: string price: @@ -3570,38 +4282,9 @@ paths: allow_backorder: description: 'If true, swaps can be completed with items out of stock' type: boolean + default: true tags: - - Order - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - order: - $ref: '#/components/schemas/order' - '/order/{id}/metadata/{key}': - delete: - operationId: DeleteOrdersOrderMetadataKey - summary: Delete Metadata - description: Deletes a metadata key. - x-authenticated: true - parameters: - - in: path - name: id - required: true - description: The id of the Order. - schema: - type: string - - in: path - name: key - required: true - description: The metadata key. - schema: - type: string - tags: - - Order + - Swap responses: '200': description: OK @@ -3621,13 +4304,13 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string - in: path name: claim_id required: true - description: The id of the Claim. + description: The ID of the Claim. schema: type: string requestBody: @@ -3646,7 +4329,7 @@ paths: Claim. type: boolean tags: - - Order + - Fulfillment responses: '200': description: OK @@ -3666,13 +4349,13 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string - in: path name: swap_id required: true - description: The id of the Swap. + description: The ID of the Swap. schema: type: string requestBody: @@ -3691,7 +4374,7 @@ paths: Claim. type: boolean tags: - - Order + - Fulfillment responses: '200': description: OK @@ -3711,7 +4394,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string tags: @@ -3734,7 +4417,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string requestBody: @@ -3759,15 +4442,15 @@ paths: items: $ref: '#/components/schemas/line_item' region: - description: Region where the order belongs + description: ID of the region where the order belongs type: string discounts: description: Discounts applied to the order type: array items: - $ref: '#/components/schemas/line_item' + $ref: '#/components/schemas/discount' customer_id: - description: id of the customer + description: ID of the customer type: string payment_method: description: payment method chosen for the order @@ -3775,7 +4458,7 @@ paths: properties: provider_id: type: string - description: id of the payment provider + description: ID of the payment provider data: description: Data relevant for the given payment method type: object @@ -3785,10 +4468,10 @@ paths: properties: provider_id: type: string - description: The id of the shipping provider. + description: The ID of the shipping provider. profile_id: type: string - description: The id of the shipping profile. + description: The ID of the shipping profile. price: type: integer description: The price of the shipping. @@ -3816,6 +4499,248 @@ paths: properties: order: $ref: '#/components/schemas/order' + /orders: + get: + operationId: GetOrders + summary: List Orders + description: Retrieves a list of Orders + x-authenticated: true + parameters: + - in: query + name: q + description: >- + Query used for searching orders by shipping address first name, + orders' email, and orders' display ID + schema: + type: string + - in: query + name: id + description: ID of the order to search for. + schema: + type: string + - in: query + name: status + style: form + explode: false + description: Status to search for + schema: + type: array + items: + type: string + enum: + - pending + - completed + - archived + - canceled + - requires_action + - in: query + name: fulfillment_status + style: form + explode: false + description: Fulfillment status to search for. + schema: + type: array + items: + type: string + enum: + - not_fulfilled + - fulfilled + - partially_fulfilled + - shipped + - partially_shipped + - canceled + - returned + - partially_returned + - requires_action + - in: query + name: payment_status + style: form + explode: false + description: Payment status to search for. + schema: + type: array + items: + type: string + enum: + - captured + - awaiting + - not_paid + - refunded + - partially_refunded + - canceled + - requires_action + - in: query + name: display_id + description: Display ID to search for. + schema: + type: string + - in: query + name: cart_id + description: to search for. + schema: + type: string + - in: query + name: customer_id + description: to search for. + schema: + type: string + - in: query + name: email + description: to search for. + schema: + type: string + - in: query + name: region_id + style: form + explode: false + description: Regions to search orders by + schema: + oneOf: + - type: string + description: ID of a Region. + - type: array + items: + type: string + description: ID of a Region. + - in: query + name: currency_code + style: form + explode: false + description: Currency code to search for + schema: + type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + - in: query + name: tax_rate + description: to search for. + schema: + type: string + - in: query + name: created_at + description: Date comparison for when resulting orders were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting orders were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: canceled_at + description: Date comparison for when resulting orders were canceled. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: sales_channel_id + style: form + explode: false + description: Filter by Sales Channels + schema: + type: array + items: + type: string + description: The ID of a Sales Channel + - in: query + name: offset + description: How many orders to skip before the results. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of orders returned. + schema: + type: integer + default: 50 + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each order of + the result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each order of + the result. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + orders: + type: array + items: + $ref: '#/components/schemas/order' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/orders/{id}/swaps/{swap_id}/process-payment': post: operationId: PostOrdersOrderSwapsSwapProcessPayment @@ -3829,17 +4754,17 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string - in: path name: swap_id required: true - description: The id of the Swap. + description: The ID of the Swap. schema: type: string tags: - - Order + - Swap responses: '200': description: OK @@ -3849,7 +4774,7 @@ paths: properties: order: $ref: '#/components/schemas/order' - '/orders/{id}/refunds': + '/orders/{id}/refund': post: operationId: PostOrdersOrderRefunds summary: Create a Refund @@ -3859,7 +4784,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string requestBody: @@ -3877,7 +4802,7 @@ paths: description: The reason for the Refund. type: string note: - description: A not with additional details about the Refund. + description: A note with additional details about the Refund. type: string no_notification: description: >- @@ -3895,7 +4820,7 @@ paths: properties: order: $ref: '#/components/schemas/order' - '/orders/{id}/returns': + '/orders/{id}/return': post: operationId: PostOrdersOrderReturns summary: Request a Return @@ -3907,7 +4832,7 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string requestBody: @@ -3921,12 +4846,15 @@ paths: description: The Line Items that will be returned. type: array items: + required: + - item_id + - quantity properties: item_id: - description: The id of the Line Item. + description: The ID of the Line Item. type: string reason_id: - description: The id of the Return Reason to use. + description: The ID of the Return Reason to use. type: string note: description: An optional note with information about the Return. @@ -3943,16 +4871,20 @@ paths: option_id: type: string description: >- - The id of the Shipping Option to create the Shipping + The ID of the Shipping Option to create the Shipping Method from. price: type: integer description: The price to charge for the Shipping Method. + note: + description: An optional note with information about the Return. + type: string receive_now: description: >- A flag to indicate if the Return should be registerd as received immediately. type: boolean + default: false no_notification: description: >- A flag to indicate if no notifications should be emitted @@ -3962,6 +4894,7 @@ paths: description: The amount to refund. type: integer tags: + - Return - Order responses: '200': @@ -3982,13 +4915,13 @@ paths: - in: path name: id required: true - description: The id of the Order. + description: The ID of the Order. schema: type: string - in: path name: claim_id required: true - description: The id of the Claim. + description: The ID of the Claim. schema: type: string requestBody: @@ -4000,12 +4933,16 @@ paths: description: The Claim Items that the Claim will consist of. type: array items: + required: + - id + - images + - tags properties: id: - description: The id of the Claim Item. + description: The ID of the Claim Item. type: string item_id: - description: The id of the Line Item that will be claimed. + description: The ID of the Line Item that will be claimed. type: string quantity: description: The number of items that will be returned @@ -4027,24 +4964,44 @@ paths: description: A list o tags to add to the Claim Item type: array items: - type: string + type: object + properties: + id: + type: string + description: Tag ID + value: + type: string + description: Tag value images: description: >- A list of image URL's that will be associated with the Claim + type: array items: - type: string + type: object + properties: + id: + type: string + description: Image ID + url: + type: string + description: Image URL + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object shipping_methods: description: The Shipping Methods to send the additional Line Items with. type: array items: properties: id: - description: The id of an existing Shipping Method + description: The ID of an existing Shipping Method type: string option_id: description: >- - The id of the Shipping Option to create a Shipping + The ID of the Shipping Option to create a Shipping Method from type: string price: @@ -4061,7 +5018,7 @@ paths: information. type: object tags: - - Order + - Claim responses: '200': description: OK @@ -4081,7 +5038,7 @@ paths: - in: path name: id required: true - description: The id of the Price List to update prices for. + description: The ID of the Price List to update prices for. schema: type: string requestBody: @@ -4093,33 +5050,39 @@ paths: description: The prices to update or add. type: array items: + required: + - amount + - variant_id properties: id: - description: The id of the price. + description: The ID of the price. type: string - status: - description: The status of the Price List. - type: string - enum: - - active - - draft region_id: - description: The id of the Region for which the price is used. + description: >- + The ID of the Region for which the price is used. Only + required if currecny_code is not provided. type: string currency_code: description: >- The 3 character ISO currency code for which the price - will be used. + will be used. Only required if region_id is not + provided. + type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + variant_id: + description: The ID of the Variant for which the price is used. type: string amount: - description: The amount of the price. - type: number + description: The amount to charge for the Product Variant. + type: integer min_quantity: description: The minimum quantity for which the price will be used. - type: number + type: integer max_quantity: description: The maximum quantity for which the price will be used. - type: number + type: integer override: description: >- If true the prices will replace all existing prices @@ -4134,26 +5097,20 @@ paths: application/json: schema: properties: - id: - type: string - description: The id of the deleted Price List. - object: - type: string - description: The type of the object that was deleted. - deleted: - type: boolean + price_list: + $ref: '#/components/schemas/price_list' delete: operationId: DeletePriceListsPriceListPricesBatch - summary: Batch delete prices that belongs to a Price List - description: Batch delete prices that belongs to a Price List + summary: Batch delete prices that belong to a Price List + description: Batch delete prices that belong to a Price List x-authenticated: true parameters: - in: path name: id required: true description: >- - The id of the Price List that the Money Amounts that will be deleted - belongs to. + The ID of the Price List that the Money Amounts (Prices) that will + be deleted belongs to. schema: type: string requestBody: @@ -4179,13 +5136,16 @@ paths: type: array items: type: string - description: The id of the deleted Money Amount. + description: The IDs of the deleted Money Amounts (Prices). object: type: string description: The type of the object that was deleted. + default: money-amount deleted: type: boolean - /price_lists: + description: Whether or not the items were deleted. + default: true + /price-lists: post: operationId: PostPriceListsPriceList summary: Creates a Price List @@ -4195,6 +5155,11 @@ paths: content: application/json: schema: + required: + - name + - description + - type + - prices properties: name: description: The name of the Price List @@ -4202,6 +5167,16 @@ paths: description: description: A description of the Price List. type: string + starts_at: + description: >- + The date with timezone that the Price List starts being + valid. + type: string + format: date + ends_at: + description: The date with timezone that the Price List ends being valid. + type: string + format: date type: description: The type of the Price List. type: string @@ -4218,14 +5193,353 @@ paths: description: The prices of the Price List. type: array items: + required: + - amount + - variant_id properties: region_id: - description: The id of the Region for which the price is used. + description: >- + The ID of the Region for which the price is used. Only + required if currecny_code is not provided. type: string currency_code: description: >- The 3 character ISO currency code for which the price - will be used. + will be used. Only required if region_id is not + provided. + type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + amount: + description: The amount to charge for the Product Variant. + type: integer + variant_id: + description: The ID of the Variant for which the price is used. + type: string + min_quantity: + description: The minimum quantity for which the price will be used. + type: integer + max_quantity: + description: The maximum quantity for which the price will be used. + type: integer + customer_groups: + type: array + description: A list of customer groups that the Price List applies to. + items: + required: + - id + properties: + id: + description: The ID of a customer group + type: string + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + price_list: + $ref: '#/components/schemas/price_list' + get: + operationId: GetPriceLists + summary: List Price Lists + description: Retrieves a list of Price Lists. + x-authenticated: true + parameters: + - in: query + name: limit + description: The number of items to get + schema: + type: number + default: '10' + - in: query + name: offset + description: The offset at which to get items + schema: + type: number + default: '0' + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each item of + the result. + schema: + type: string + - in: query + name: order + description: field to order results by. + schema: + type: string + - in: query + name: id + description: ID to search for. + schema: + type: string + - in: query + name: q + description: >- + query to search in price list description, price list name, and + customer group name fields. + schema: + type: string + - in: query + name: status + style: form + explode: false + description: Status to search for. + schema: + type: array + items: + type: string + enum: + - active + - draft + - in: query + name: name + description: price list name to search for. + schema: + type: string + - in: query + name: customer_groups + style: form + explode: false + description: Customer Group IDs to search for. + schema: + type: array + items: + type: string + - in: query + name: type + style: form + explode: false + description: Type to search for. + schema: + type: array + items: + type: string + enum: + - sale + - override + - in: query + name: created_at + description: Date comparison for when resulting price lists were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting price lists were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: deleted_at + description: Date comparison for when resulting price lists were deleted. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + price_lists: + type: array + items: + $ref: '#/components/schemas/price_list' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page + '/price-lists/{id}': + delete: + operationId: DeletePriceListsPriceList + summary: Delete a Price List + description: Deletes a Price List + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Price List to delete. + schema: + type: string + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Price List. + object: + type: string + description: The type of the object that was deleted. + default: price-list + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true + get: + operationId: GetPriceListsPriceList + summary: Retrieve a Price List + description: Retrieves a Price List. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Price List. + schema: + type: string + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + price_list: + $ref: '#/components/schemas/price_list' + post: + operationId: PostPriceListsPriceListPriceList + summary: Update a Price List + description: Updates a Price List + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Price List. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + name: + description: The name of the Price List + type: string + description: + description: A description of the Price List. + type: string + starts_at: + description: >- + The date with timezone that the Price List starts being + valid. + type: string + format: date + ends_at: + description: The date with timezone that the Price List ends being valid. + type: string + format: date + type: + description: The type of the Price List. + type: string + enum: + - sale + - override + status: + description: The status of the Price List. + type: string + enum: + - active + - draft + prices: + description: The prices of the Price List. + type: array + items: + required: + - amount + - variant_id + properties: + id: + description: The ID of the price. + type: string + region_id: + description: >- + The ID of the Region for which the price is used. Only + required if currecny_code is not provided. + type: string + currency_code: + description: >- + The 3 character ISO currency code for which the price + will be used. Only required if region_id is not + provided. + type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + variant_id: + description: The ID of the Variant for which the price is used. type: string amount: description: The amount to charge for the Product Variant. @@ -4244,63 +5558,10 @@ paths: - id properties: id: - description: The id of a customer group + description: The ID of a customer group type: string tags: - Price List - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - product: - $ref: '#/components/schemas/price_list' - '/price-lists/{id}': - delete: - operationId: DeletePriceListsPriceList - summary: Delete a Price List - description: Deletes a Price List - x-authenticated: true - parameters: - - in: path - name: id - required: true - description: The id of the Price List to delete. - schema: - type: string - tags: - - Price List - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - id: - type: string - description: The id of the deleted Price List. - object: - type: string - description: The type of the object that was deleted. - deleted: - type: boolean - get: - operationId: GetPriceListsPriceList - summary: Retrieve a Price List - description: Retrieves a Price List. - x-authenticated: true - parameters: - - in: path - name: id - required: true - description: The id of the Price List. - schema: - type: string - tags: - - Price List responses: '200': description: OK @@ -4321,14 +5582,14 @@ paths: name: id required: true description: >- - The id of the Price List that the Money Amounts that will be deleted + The ID of the Price List that the Money Amounts that will be deleted belongs to. schema: type: string - in: path name: product_id required: true - description: The id of the product from which the money amount will be deleted. + description: The ID of the product from which the money amount will be deleted. schema: type: string tags: @@ -4341,16 +5602,18 @@ paths: schema: properties: ids: - type: number + type: array description: The price ids that have been deleted. - count: - type: number - description: The number of prices that have been deleted. + items: + type: string object: type: string description: The type of the object that was deleted. + default: money-amount deleted: type: boolean + description: Whether or not the items were deleted. + default: true '/price-lists/{id}/variants/{variant_id}/prices': delete: operationId: DeletePriceListsPriceListVariantsVariantPrices @@ -4362,14 +5625,14 @@ paths: name: id required: true description: >- - The id of the Price List that the Money Amounts that will be deleted + The ID of the Price List that the Money Amounts that will be deleted belongs to. schema: type: string - in: path name: variant_id required: true - description: The id of the variant from which the money amount will be deleted. + description: The ID of the variant from which the money amount will be deleted. schema: type: string tags: @@ -4382,16 +5645,18 @@ paths: schema: properties: ids: - type: number + type: array description: The price ids that have been deleted. - count: - type: number - description: The number of prices that have been deleted. + items: + type: string object: type: string description: The type of the object that was deleted. + default: money-amount deleted: type: boolean + description: Whether or not the items were deleted. + default: true '/price-lists/:id/products': get: operationId: GetPriceListsPriceListProducts @@ -4401,26 +5666,33 @@ paths: parameters: - in: query name: q - description: Query used for searching products. + description: >- + Query used for searching product title and description, variant + title and sku, and collection title. schema: type: string - in: query name: id - description: Id of the product to search for. + description: ID of the product to search for. schema: type: string - in: query name: status - description: Status to search for + description: Product status to search for style: form explode: false schema: type: array items: type: string + enum: + - draft + - proposed + - published + - rejected - in: query name: collection_id - description: Collection ids to search for + description: Collection IDs to search for style: form explode: false schema: @@ -4429,7 +5701,7 @@ paths: type: string - in: query name: tags - description: Tags to search for + description: Tag IDs to search for style: form explode: false schema: @@ -4438,17 +5710,17 @@ paths: type: string - in: query name: title - description: to search for. + description: product title to search for. schema: type: string - in: query name: description - description: to search for. + description: product description to search for. schema: type: string - in: query name: handle - description: to search for. + description: product handle to search for. schema: type: string - in: query @@ -4463,40 +5735,87 @@ paths: type: string - in: query name: order - description: to retrieve products in. - schema: - type: string - - in: query - name: deleted_at - description: >- - Date comparison for when resulting products was deleted, i.e. less - than, greater than etc. + description: field to sort results by. schema: type: string - in: query name: created_at - description: >- - Date comparison for when resulting products was created, i.e. less - than, greater than etc. + description: Date comparison for when resulting products were created. schema: - type: string + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: updated_at - description: >- - Date comparison for when resulting products was updated, i.e. less - than, greater than etc. + description: Date comparison for when resulting products were updated. schema: - type: string + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: deleted_at + description: Date comparison for when resulting products were deleted. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: offset description: How many products to skip in the result. schema: - type: string + type: integer + default: 0 - in: query name: limit description: Limit the number of products returned. schema: - type: string + type: integer + default: 50 - in: query name: expand description: >- @@ -4520,129 +5839,19 @@ paths: application/json: schema: properties: - count: - description: The number of Products. - type: integer - offset: - description: The offset of the Product query. - type: integer - limit: - description: The limit of the Product query. - type: integer products: type: array items: $ref: '#/components/schemas/product' - /price-lists: - get: - operationId: GetPriceLists - summary: List Price Lists - description: Retrieves a list of Price Lists. - x-authenticated: true - tags: - - Price List - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - price_lists: - type: array - items: - $ref: '#/components/schemas/price_list' count: - description: The number of Price Lists. type: integer + description: The total number of items available offset: - description: The offset of the Price List query. type: integer + description: The number of items skipped before these items limit: - description: The limit of the Price List query. type: integer - '/price_lists/{id}': - post: - operationId: PostPriceListsPriceListPriceList - summary: Update a Price List - description: Updates a Price List - x-authenticated: true - parameters: - - in: path - name: id - required: true - description: The id of the Price List. - schema: - type: string - requestBody: - content: - application/json: - schema: - properties: - name: - description: The name of the Price List - type: string - description: - description: A description of the Price List. - type: string - type: - description: The type of the Price List. - type: string - enum: - - sale - - override - status: - description: The status of the Price List. - type: string - enum: - - active - - draft - prices: - description: The prices of the Price List. - type: array - items: - properties: - id: - description: The id of the price. - type: string - region_id: - description: The id of the Region for which the price is used. - type: string - currency_code: - description: >- - The 3 character ISO currency code for which the price - will be used. - type: string - amount: - description: The amount to charge for the Product Variant. - type: integer - min_quantity: - description: The minimum quantity for which the price will be used. - type: integer - max_quantity: - description: The maximum quantity for which the price will be used. - type: integer - customer_groups: - type: array - description: A list of customer groups that the Price List applies to. - items: - required: - - id - properties: - id: - description: The id of a customer group - type: string - tags: - - Price List - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - product: - $ref: '#/components/schemas/price_list' + description: The number of items per page /product-tags: get: operationId: GetProductTags @@ -4654,36 +5863,86 @@ paths: name: limit description: The number of tags to return. schema: - type: string + type: integer + default: 10 - in: query name: offset - description: The offset of tags to return. + description: The number of items to skip before the results. + schema: + type: integer + default: 0 + - in: query + name: order + description: The field to sort items by. schema: type: string - in: query name: value - description: The value of tags to return. + style: form + explode: false + description: The tag values to search for + schema: + type: array + items: + type: string + - in: query + name: q + description: A query string to search values for schema: type: string - in: query name: id - description: The id of tags to return. + style: form + explode: false + description: The tag IDs to search for schema: - type: string + type: array + items: + type: string - in: query name: created_at - description: >- - Date comparison for when resulting tas was created, i.e. less than, - greater than etc. + description: Date comparison for when resulting product tags were created. schema: type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: updated_at - description: >- - Date comparison for when resulting tas was updated, i.e. less than, - greater than etc. + description: Date comparison for when resulting product tags were updated. schema: type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date tags: - Product Tag responses: @@ -4693,8 +5952,17 @@ paths: application/json: schema: properties: - tags: + product_tags: $ref: '#/components/schemas/product_tag' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page /product-types: get: operationId: GetProductTypes @@ -4706,38 +5974,88 @@ paths: name: limit description: The number of types to return. schema: - type: string + type: integer + default: 10 - in: query name: offset - description: The offset of types to return. + description: The number of items to skip before the results. + schema: + type: integer + default: 0 + - in: query + name: order + description: The field to sort items by. schema: type: string - in: query name: value - description: The value of types to return. + style: form + explode: false + description: The type values to search for schema: - type: string + type: array + items: + type: string - in: query name: id - description: The id of types to return. + style: form + explode: false + description: The type IDs to search for + schema: + type: array + items: + type: string + - in: query + name: q + description: A query string to search values for schema: type: string - in: query name: created_at - description: >- - Date comparison for when resulting tas was created, i.e. less than, - greater than etc. + description: Date comparison for when resulting product types were created. schema: type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: updated_at - description: >- - Date comparison for when resulting tas was updated, i.e. less than, - greater than etc. + description: Date comparison for when resulting product types were updated. schema: type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date tags: - - Product Tag + - Product Type responses: '200': description: OK @@ -4745,8 +6063,17 @@ paths: application/json: schema: properties: - types: - $ref: '#/components/schemas/product_tag' + product_types: + $ref: '#/components/schemas/product_type' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/products/{id}/options': post: operationId: PostProductsProductOptions @@ -4757,7 +6084,7 @@ paths: - in: path name: id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string requestBody: @@ -4795,8 +6122,6 @@ paths: schema: required: - title - - subtitle - - description properties: title: description: The title of the Product @@ -4813,11 +6138,13 @@ paths: Purchasing Products with this flag set to `true` will result in a Gift Card being created. type: boolean + default: false discountable: description: >- A flag to indicate if discounts can be applied to the LineItems generated from this Product type: boolean + default: true images: description: Images of the Product. type: array @@ -4829,33 +6156,61 @@ paths: handle: description: A unique handle to identify the Product by. type: string + status: + description: The status of the product. + type: string + enum: + - draft + - proposed + - published + - rejected + default: draft type: description: The Product Type to associate the Product with. type: object + required: + - value properties: + id: + description: The ID of the Product Type. + type: string value: description: The value of the Product Type. type: string collection_id: - description: The id of the Collection the Product should belong to. + description: The ID of the Collection the Product should belong to. type: string tags: description: Tags to associate the Product with. type: array items: + required: + - value properties: id: - description: The id of an existing Tag. + description: The ID of an existing Tag. type: string value: description: 'The value of the Tag, these will be upserted.' type: string + sales_channels: + description: '[EXPERIMENTAL] Sales channels to associate the Product with.' + type: array + items: + required: + - id + properties: + id: + description: The ID of an existing Sales channel. + type: string options: description: >- The Options that the Product should have. These define on which properties the Product's Product Variants will differ. type: array items: + required: + - title properties: title: description: The title to identify the Product Option by. @@ -4864,6 +6219,8 @@ paths: description: A list of Product Variants to create with the Product. type: array items: + required: + - title properties: title: description: The title to identify the Product Variant by. @@ -4886,6 +6243,7 @@ paths: inventory_quantity: description: The amount of stock kept for the Product Variant. type: integer + default: 0 allow_backorder: description: >- Whether the Product Variant can be purchased when out @@ -4898,16 +6256,16 @@ paths: type: boolean weight: description: The wieght of the Product Variant. - type: string + type: number length: description: The length of the Product Variant. - type: string + type: number height: description: The height of the Product Variant. - type: string + type: number width: description: The width of the Product Variant. - type: string + type: number origin_country: description: The country of origin of the Product Variant. type: string @@ -4927,28 +6285,43 @@ paths: prices: type: array items: + required: + - amount properties: region_id: description: >- - The id of the Region for which the price is - used. + The ID of the Region for which the price is + used. Only required if currency_code is not + provided. type: string currency_code: description: >- The 3 character ISO currency code for which the - price will be used. + price will be used. Only required if region_id + is not provided. type: string + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. amount: description: The amount to charge for the Product Variant. type: integer - sale_amount: + min_quantity: description: >- - The sale amount to charge for the Product - Variant. + The minimum quantity for which the price will be + used. + type: integer + max_quantity: + description: >- + The maximum quantity for which the price will be + used. type: integer options: type: array items: + required: + - value properties: value: description: >- @@ -4957,15 +6330,18 @@ paths: type: string weight: description: The wieght of the Product. - type: string + type: number length: description: The length of the Product. - type: string + type: number height: description: The height of the Product. - type: string + type: number width: description: The width of the Product. + type: number + hs_code: + description: The Harmonized System code for the Product Variant. type: string origin_country: description: The country of origin of the Product. @@ -5000,14 +6376,24 @@ paths: parameters: - in: query name: q - description: Query used for searching products. + description: >- + Query used for searching product title and description, variant + title and sku, and collection title. schema: type: string - in: query name: id - description: Id of the product to search for. + style: form + explode: false + description: Filter by product IDs. schema: - type: string + oneOf: + - type: string + description: ID of the product to search for. + - type: array + items: + type: string + description: ID of a product. - in: query name: status style: form @@ -5017,6 +6403,11 @@ paths: type: array items: type: string + enum: + - draft + - proposed + - published + - rejected - in: query name: collection_id style: form @@ -5030,72 +6421,132 @@ paths: name: tags style: form explode: false - description: Tags to search for + description: Tag IDs to search for + schema: + type: array + items: + type: string + - in: query + name: price_list_id + style: form + explode: false + description: Price List IDs to search for + schema: + type: array + items: + type: string + - in: query + name: sales_channel_id + style: form + explode: false + description: Sales Channel IDs to filter products by schema: type: array items: type: string - in: query name: title - description: to search for. + description: title to search for. schema: type: string - in: query name: description - description: to search for. + description: description to search for. schema: type: string - in: query name: handle - description: to search for. + description: handle to search for. schema: type: string - in: query name: is_giftcard description: Search for giftcards using is_giftcard=true. schema: - type: string + type: boolean - in: query name: type - description: to search for. + description: type ID to search for. schema: type: string - - in: query - name: order - description: to retrieve products in. - schema: - type: string - - in: query - name: deleted_at - description: >- - Date comparison for when resulting products was deleted, i.e. less - than, greater than etc. - schema: - type: object - in: query name: created_at - description: >- - Date comparison for when resulting products was created, i.e. less - than, greater than etc. + description: Date comparison for when resulting products were created. schema: type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: updated_at - description: >- - Date comparison for when resulting products was updated, i.e. less - than, greater than etc. + description: Date comparison for when resulting products were updated. schema: type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: deleted_at + description: Date comparison for when resulting products were deleted. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date - in: query name: offset description: How many products to skip in the result. schema: - type: string + type: integer + default: 0 - in: query name: limit description: Limit the number of products returned. schema: - type: string + type: integer + default: 50 - in: query name: expand description: >- @@ -5119,19 +6570,19 @@ paths: application/json: schema: properties: - count: - description: The number of Products. - type: integer - offset: - description: The offset of the Product query. - type: integer - limit: - description: The limit of the Product query. - type: integer products: type: array items: $ref: '#/components/schemas/product' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/products/{id}/variants': post: operationId: PostProductsProductVariants @@ -5144,7 +6595,7 @@ paths: - in: path name: id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string requestBody: @@ -5177,6 +6628,7 @@ paths: inventory_quantity: description: The amount of stock kept for the Product Variant. type: integer + default: 0 allow_backorder: description: >- Whether the Product Variant can be purchased when out of @@ -5189,16 +6641,16 @@ paths: type: boolean weight: description: The wieght of the Product Variant. - type: string + type: number length: description: The length of the Product Variant. - type: string + type: number height: description: The height of the Product Variant. - type: string + type: number width: description: The width of the Product Variant. - type: string + type: number origin_country: description: The country of origin of the Product Variant. type: string @@ -5218,15 +6670,26 @@ paths: prices: type: array items: + required: + - amount properties: + id: + description: The ID of the price. + type: string region_id: - description: The id of the Region for which the price is used. + description: >- + The ID of the Region for which the price is used. Only + required if currency_code is not provided. type: string currency_code: description: >- The 3 character ISO currency code for which the price - will be used. + will be used. Only required if region_id is not + provided. type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. amount: description: The amount to charge for the Product Variant. type: integer @@ -5239,9 +6702,12 @@ paths: options: type: array items: + required: + - option_id + - value properties: option_id: - description: The id of the Product Option to set the value for. + description: The ID of the Product Option to set the value for. type: string value: description: The value to give for the Product Option. @@ -5266,7 +6732,7 @@ paths: - in: path name: id required: true - description: Id of the product to search for the variants. + description: ID of the product to search for the variants. schema: type: string - in: query @@ -5281,14 +6747,16 @@ paths: type: string - in: query name: offset - description: How many products to skip in the result. + description: How many items to skip before the results. schema: - type: string + type: integer + default: 0 - in: query name: limit - description: Limit the number of products returned. + description: Limit the number of items returned. schema: - type: string + type: integer + default: 100 tags: - Product responses: @@ -5302,6 +6770,15 @@ paths: type: array items: $ref: '#/components/schemas/product_variant' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/products/{id}/options/{option_id}': delete: operationId: DeleteProductsProductOptionsOption @@ -5316,13 +6793,13 @@ paths: - in: path name: id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string - in: path name: option_id required: true - description: The id of the Product Option. + description: The ID of the Product Option. schema: type: string tags: @@ -5334,14 +6811,17 @@ paths: application/json: schema: properties: - id: + option_id: type: string - description: The id of the deleted Product Option + description: The ID of the deleted Product Option object: type: string description: The type of the object that was deleted. + default: option deleted: type: boolean + description: Whether or not the items were deleted. + default: true product: $ref: '#/components/schemas/product' post: @@ -5353,13 +6833,13 @@ paths: - in: path name: id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string - in: path name: option_id required: true - description: The id of the Product Option. + description: The ID of the Product Option. schema: type: string requestBody: @@ -5393,7 +6873,7 @@ paths: - in: path name: id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string tags: @@ -5407,12 +6887,15 @@ paths: properties: id: type: string - description: The id of the deleted Product. + description: The ID of the deleted Product. object: type: string description: The type of the object that was deleted. + default: product deleted: type: boolean + description: Whether or not the items were deleted. + default: true get: operationId: GetProductsProduct summary: Retrieve a Product @@ -5422,7 +6905,7 @@ paths: - in: path name: id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string tags: @@ -5445,7 +6928,7 @@ paths: - in: path name: id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string requestBody: @@ -5462,12 +6945,6 @@ paths: description: description: A description of the Product. type: string - is_giftcard: - description: >- - A flag to indicate if the Product represents a Gift Card. - Purchasing Products with this flag set to `true` will result - in a Gift Card being created. - type: boolean discountable: description: >- A flag to indicate if discounts can be applied to the @@ -5484,42 +6961,60 @@ paths: handle: description: A unique handle to identify the Product by. type: string + status: + description: The status of the product. + type: string + enum: + - draft + - proposed + - published + - rejected type: description: The Product Type to associate the Product with. type: object + required: + - value properties: + id: + description: The ID of the Product Type. + type: string value: description: The value of the Product Type. type: string collection_id: - description: The id of the Collection the Product should belong to. + description: The ID of the Collection the Product should belong to. type: string tags: description: Tags to associate the Product with. type: array items: + required: + - value properties: id: - description: The id of an existing Tag. + description: The ID of an existing Tag. type: string value: description: 'The value of the Tag, these will be upserted.' type: string - options: - description: >- - The Options that the Product should have. These define on - which properties the Product's Product Variants will differ. + sales_channels: + description: '[EXPERIMENTAL] Sales channels to associate the Product with.' type: array items: + required: + - id properties: - title: - description: The title to identify the Product Option by. + id: + description: The ID of an existing Sales channel. type: string variants: description: A list of Product Variants to create with the Product. type: array items: properties: + id: + description: The ID of the Product Variant. + type: string title: description: The title to identify the Product Variant by. type: string @@ -5553,16 +7048,16 @@ paths: type: boolean weight: description: The wieght of the Product Variant. - type: string + type: number length: description: The length of the Product Variant. - type: string + type: number height: description: The height of the Product Variant. - type: string + type: number width: description: The width of the Product Variant. - type: string + type: number origin_country: description: The country of origin of the Product Variant. type: string @@ -5582,29 +7077,51 @@ paths: prices: type: array items: + required: + - amount properties: + id: + description: The ID of the Price. + type: string region_id: description: >- - The id of the Region for which the price is - used. + The ID of the Region for which the price is + used. Only required if currency_code is not + provided. type: string currency_code: description: >- The 3 character ISO currency code for which the - price will be used. + price will be used. Only required if region_id + is not provided. type: string + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. amount: description: The amount to charge for the Product Variant. type: integer - sale_amount: + min_quantity: description: >- - The sale amount to charge for the Product - Variant. + The minimum quantity for which the price will be + used. + type: integer + max_quantity: + description: >- + The maximum quantity for which the price will be + used. type: integer options: type: array items: + required: + - option_id + - value properties: + option_id: + description: The ID of the Option. + type: string value: description: >- The value to give for the Product Option at the @@ -5612,16 +7129,16 @@ paths: type: string weight: description: The wieght of the Product. - type: string + type: number length: description: The length of the Product. - type: string + type: number height: description: The height of the Product. - type: string + type: number width: description: The width of the Product. - type: string + type: number origin_country: description: The country of origin of the Product. type: string @@ -5657,13 +7174,13 @@ paths: - in: path name: id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string - in: path name: variant_id required: true - description: The id of the Product Variant. + description: The ID of the Product Variant. schema: type: string tags: @@ -5675,14 +7192,19 @@ paths: application/json: schema: properties: - id: + variant_id: type: string - description: The id of the deleted Product Variant. + description: The ID of the deleted Product Variant. object: type: string description: The type of the object that was deleted. + default: variant deleted: type: boolean + description: Whether or not the items were deleted. + default: true + product: + $ref: '#/components/schemas/product' post: operationId: PostProductsProductVariantsVariant summary: Update a Product Variant @@ -5692,13 +7214,13 @@ paths: - in: path name: id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string - in: path name: variant_id required: true - description: The id of the Product Variant. + description: The ID of the Product Variant. schema: type: string requestBody: @@ -5739,16 +7261,16 @@ paths: type: boolean weight: description: The wieght of the Product Variant. - type: string + type: number length: description: The length of the Product Variant. - type: string + type: number height: description: The height of the Product Variant. - type: string + type: number width: description: The width of the Product Variant. - type: string + type: number origin_country: description: The country of origin of the Product Variant. type: string @@ -5768,18 +7290,26 @@ paths: prices: type: array items: + required: + - amount properties: id: - description: The id of the price. + description: The ID of the price. type: string region_id: - description: The id of the Region for which the price is used. + description: >- + The ID of the Region for which the price is used. Only + required if currency_code is not provided. type: string currency_code: description: >- The 3 character ISO currency code for which the price - will be used. + will be used. Only required if region_id is not + provided. type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. amount: description: The amount to charge for the Product Variant. type: integer @@ -5792,9 +7322,12 @@ paths: options: type: array items: + required: + - option_id + - value properties: option_id: - description: The id of the Product Option to set the value for. + description: The ID of the Product Option to set the value for. type: string value: description: The value to give for the Product Option. @@ -5810,6 +7343,34 @@ paths: properties: product: $ref: '#/components/schemas/product' + /products/tag-usage: + get: + operationId: GetProductsTagUsage + summary: List Product Tags Usage Number + description: Retrieves a list of Product Tags with how many times each is used. + x-authenticated: true + tags: + - Product Tag + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tags: + type: array + items: + properties: + id: + description: The ID of the tag. + type: string + usage_count: + description: The number of products that use this tag. + type: string + value: + description: The value of the tag. + type: string /products/types: get: operationId: GetProductsTypes @@ -5839,7 +7400,7 @@ paths: - in: path name: id required: true - description: The id of the Product. + description: The ID of the Product. schema: type: string requestBody: @@ -5877,7 +7438,7 @@ paths: - in: path name: id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string requestBody: @@ -5890,6 +7451,10 @@ paths: country_code: description: The 2 character ISO code for the Country. type: string + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. tags: - Region responses: @@ -5911,7 +7476,7 @@ paths: - in: path name: id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string requestBody: @@ -5922,7 +7487,7 @@ paths: - provider_id properties: provider_id: - description: The id of the Fulfillment Provider to add. + description: The ID of the Fulfillment Provider to add. type: string tags: - Region @@ -5945,7 +7510,7 @@ paths: - in: path name: id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string requestBody: @@ -5956,7 +7521,7 @@ paths: - provider_id properties: provider_id: - description: The id of the Payment Provider to add. + description: The ID of the Payment Provider to add. type: string tags: - Region @@ -5983,6 +7548,9 @@ paths: - name - currency_code - tax_rate + - payment_providers + - fulfillment_providers + - countries properties: name: description: The name of the Region @@ -5990,6 +7558,9 @@ paths: currency_code: description: The 3 character ISO currency code to use for the Region. type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. tax_code: description: An optional tax code the Region. type: string @@ -5998,20 +7569,24 @@ paths: type: number payment_providers: description: >- - A list of Payment Providers that should be enabled for the - Region + A list of Payment Provider IDs that should be enabled for + the Region type: array items: type: string fulfillment_providers: description: >- - A list of Fulfillment Providers that should be enabled for - the Region + A list of Fulfillment Provider IDs that should be enabled + for the Region type: array items: type: string countries: - description: A list of countries that should be included in the Region. + description: >- + A list of countries' 2 ISO Characters that should be + included in the Region. + example: + - US type: array items: type: string @@ -6036,12 +7611,14 @@ paths: name: limit schema: type: integer + default: 50 required: false description: limit the number of regions in response - in: query name: offset schema: type: integer + default: 0 required: false description: Offset of regions in response (used for pagination) - in: query @@ -6081,36 +7658,15 @@ paths: type: array items: $ref: '#/components/schemas/region' - '/regions/{id}/metadata/{key}': - delete: - operationId: DeleteRegionsRegionMetadataKey - summary: Delete Metadata - description: Deletes a metadata key. - x-authenticated: true - parameters: - - in: path - name: id - required: true - description: The id of the Region. - schema: - type: string - - in: path - name: key - required: true - description: The metadata key. - schema: - type: string - tags: - - Region - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - region: - $ref: '#/components/schemas/region' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/regions/{id}': delete: operationId: DeleteRegionsRegion @@ -6121,7 +7677,7 @@ paths: - in: path name: id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string tags: @@ -6135,12 +7691,15 @@ paths: properties: id: type: string - description: The id of the deleted Region. + description: The ID of the deleted Region. object: type: string description: The type of the object that was deleted. + default: region deleted: type: boolean + description: Whether or not the items were deleted. + default: true get: operationId: GetRegionsRegion summary: Retrieve a Region @@ -6150,7 +7709,7 @@ paths: - in: path name: id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string tags: @@ -6173,7 +7732,7 @@ paths: - in: path name: id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string requestBody: @@ -6187,6 +7746,9 @@ paths: currency_code: description: The 3 character ISO currency code to use for the Region. type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. automatic_taxes: description: >- If true Medusa will automatically calculate taxes for carts @@ -6200,7 +7762,7 @@ paths: type: boolean tax_provider_id: description: >- - The id of the tax provider to use; if null the system tax + The ID of the tax provider to use; if null the system tax provider is used type: string tax_code: @@ -6211,20 +7773,22 @@ paths: type: number payment_providers: description: >- - A list of Payment Providers that should be enabled for the - Region + A list of Payment Provider IDs that should be enabled for + the Region type: array items: type: string fulfillment_providers: description: >- - A list of Fulfillment Providers that should be enabled for - the Region + A list of Fulfillment Provider IDs that should be enabled + for the Region type: array items: type: string countries: - description: A list of countries that should be included in the Region. + description: >- + A list of countries' 2 ISO Characters that should be + included in the Region. type: array items: type: string @@ -6249,7 +7813,7 @@ paths: - in: path name: id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string tags: @@ -6267,10 +7831,14 @@ paths: properties: provider_id: type: string - description: id of the fulfillment provider + description: ID of the fulfillment provider options: - type: object + type: array description: fulfillment provider options + example: + - id: manual-fulfillment + - id: manual-fulfillment-return + is_return: true '/regions/{id}/countries/{country_code}': delete: operationId: PostRegionsRegionCountriesCountry @@ -6281,15 +7849,18 @@ paths: - in: path name: id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string - in: path name: country_code - required: true description: The 2 character ISO code for the Country. + required: true schema: type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. tags: - Region responses: @@ -6311,13 +7882,13 @@ paths: - in: path name: id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string - in: path name: provider_id required: true - description: The id of the Fulfillment Provider. + description: The ID of the Fulfillment Provider. schema: type: string tags: @@ -6341,13 +7912,13 @@ paths: - in: path name: id required: true - description: The id of the Region. + description: The ID of the Region. schema: type: string - in: path name: provider_id required: true - description: The id of the Payment Provider. + description: The ID of the Payment Provider. schema: type: string tags: @@ -6361,45 +7932,6 @@ paths: properties: region: $ref: '#/components/schemas/region' - '/regions/{id}/metadata': - post: - operationId: PostRegionsRegionMetadata - summary: Set the metadata of a Region - description: Sets the metadata of a Region - x-authenticated: true - parameters: - - in: path - name: id - required: true - description: The id of the Region. - schema: - type: string - tags: - - Region - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - region: - $ref: '#/components/schemas/region' - requestBody: - content: - application/json: - schema: - type: object - required: - - key - - value - properties: - key: - type: string - description: Key for the metadata value. - value: - type: string - description: The value that the key relates to. /return-reasons: post: operationId: PostReturnReasons @@ -6423,7 +7955,7 @@ paths: be unique. type: string parent_return_reason_id: - description: The id of the parent return reason. + description: The ID of the parent return reason. type: string description: description: An optional description to for the Reason. @@ -6472,7 +8004,7 @@ paths: - in: path name: id required: true - description: The id of the return reason + description: The ID of the return reason schema: type: string tags: @@ -6486,12 +8018,15 @@ paths: properties: id: type: string - description: The id of the deleted return reason + description: The ID of the deleted return reason object: type: string description: The type of the object that was deleted. + default: return_reason deleted: type: boolean + description: Whether or not the items were deleted. + default: true get: operationId: GetReturnReasonsReason summary: Retrieve a Return Reason @@ -6501,7 +8036,7 @@ paths: - in: path name: id required: true - description: The id of the Return Reason. + description: The ID of the Return Reason. schema: type: string tags: @@ -6524,7 +8059,7 @@ paths: - in: path name: id required: true - description: The id of the Return Reason. + description: The ID of the Return Reason. schema: type: string requestBody: @@ -6535,6 +8070,11 @@ paths: label: description: The label to display to the Customer. type: string + value: + description: >- + The value that the Return Reason will be identified by. Must + be unique. + type: string description: description: An optional description to for the Reason. type: string @@ -6563,7 +8103,7 @@ paths: - in: path name: id required: true - description: The id of the Return. + description: The ID of the Return. schema: type: string tags: @@ -6575,7 +8115,7 @@ paths: application/json: schema: properties: - return: + order: $ref: '#/components/schemas/order' /returns: get: @@ -6583,18 +8123,18 @@ paths: summary: List Returns description: Retrieves a list of Returns parameters: - - in: path + - in: query name: limit - required: true description: The upper limit for the amount of responses returned. schema: type: number - - in: path + default: '50' + - in: query name: offset - required: true description: The offset of the list returned. schema: type: number + default: '0' tags: - Return responses: @@ -6608,6 +8148,15 @@ paths: type: array items: $ref: '#/components/schemas/return' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/returns/{id}/receive': post: operationId: PostReturnsReturnReceive @@ -6619,7 +8168,7 @@ paths: - in: path name: id required: true - description: The id of the Return. + description: The ID of the Return. schema: type: string requestBody: @@ -6633,16 +8182,19 @@ paths: description: The Line Items that have been received. type: array items: + required: + - item_id + - quantity properties: item_id: - description: The id of the Line Item. + description: The ID of the Line Item. type: string quantity: description: The quantity of the Line Item. type: integer refund: description: The amount to refund. - type: integer + type: number tags: - Return responses: @@ -6654,6 +8206,360 @@ paths: properties: return: $ref: '#/components/schemas/return' + '/sales-channels/{id}/products/batch': + post: + operationId: PostSalesChannelsChannelProductsBatch + summary: Assign a batch of product to a sales channel + description: Assign a batch of product to a sales channel. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Sales channel. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - product_ids + properties: + product_ids: + description: The IDs of the products to add to the Sales Channel + type: array + items: + type: object + required: + - id + properties: + id: + type: string + description: The ID of the product + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channel: + $ref: '#/components/schemas/sales_channel' + delete: + operationId: DeleteSalesChannelsChannelProductsBatch + summary: Remove a list of products from a sales channel + description: Remove a list of products from a sales channel. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Sales Channel + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - product_ids + properties: + product_ids: + description: The IDs of the products to delete from the Sales Channel. + type: array + items: + type: object + required: + - id + properties: + id: + description: The ID of a product + type: string + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channel: + $ref: '#/components/schemas/sales_channel' + /sales-channels: + post: + operationId: PostSalesChannels + summary: Create a Sales Channel + description: Creates a Sales Channel. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - name + properties: + name: + description: The name of the Sales Channel + type: string + description: + description: The description of the Sales Channel + type: string + is_disabled: + description: Whether the Sales Channel is disabled or not. + type: boolean + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channel: + $ref: '#/components/schemas/sales_channel' + get: + operationId: GetSalesChannels + summary: List sales channels + description: Retrieves a list of sales channels + x-authenticated: true + parameters: + - in: query + name: id + description: ID of the sales channel + schema: + type: string + - in: query + name: name + description: Name of the sales channel + schema: + type: string + - in: query + name: description + description: Description of the sales channel + schema: + type: string + - in: query + name: q + description: Query used for searching sales channels' names and descriptions. + schema: + type: string + - in: query + name: order + description: The field to order the results by. + schema: + type: string + - in: query + name: created_at + description: Date comparison for when resulting collections were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting collections were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: deleted_at + description: Date comparison for when resulting collections were deleted. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: offset + description: How many sales channels to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of sales channels returned. + schema: + type: integer + default: 20 + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each sales + channel of the result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each sales + channel of the result. + schema: + type: string + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channels: + type: array + items: + $ref: '#/components/schemas/sales_channel' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page + '/sales-channels/{id}': + delete: + operationId: DeleteSalesChannelsSalesChannel + summary: Delete a sales channel + description: Deletes the sales channel. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Sales channel. + schema: + type: string + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted sales channel + object: + type: string + description: The type of the object that was deleted. + default: sales-channel + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true + get: + operationId: GetSalesChannelsSalesChannel + summary: Retrieve a sales channel + description: Retrieves the sales channel. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Sales channel. + schema: + type: string + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channel: + $ref: '#/components/schemas/sales_channel' + post: + operationId: PostSalesChannelsSalesChannel + summary: Update a Sales Channel + description: Updates a Sales Channel. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Sales Channel. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + name: + type: string + description: Name of the sales channel. + description: + type: string + description: Sales Channel description. + is_disabled: + type: boolean + description: Indication of if the sales channel is active. + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channel: + $ref: '#/components/schemas/sales_channel' /shipping-options: post: operationId: PostShippingOptions @@ -6664,23 +8570,29 @@ paths: content: application/json: schema: + required: + - name + - region_id + - provider_id + - data + - price_type properties: name: description: The name of the Shipping Option type: string region_id: description: >- - The id of the Region in which the Shipping Option will be + The ID of the Region in which the Shipping Option will be available. type: string provider_id: description: >- - The id of the Fulfillment Provider that handles the Shipping + The ID of the Fulfillment Provider that handles the Shipping Option. type: string profile_id: description: >- - The id of the Shipping Profile to add the Shipping Option + The ID of the Shipping Profile to add the Shipping Option to. type: number data: @@ -6703,6 +8615,9 @@ paths: Option to be available. type: array items: + required: + - type + - amount properties: type: description: The type of the requirement @@ -6716,9 +8631,11 @@ paths: is_return: description: Whether the Shipping Option defines a return shipment. type: boolean + default: false admin_only: description: 'If true, the option can be used for draft orders' type: boolean + default: false metadata: description: >- An optional set of key-value pairs with additional @@ -6745,12 +8662,12 @@ paths: name: region_id schema: type: string - description: Region to fetch options from + description: Region ID to fetch options from - in: query name: is_return schema: type: boolean - description: Flag for fetching return options + description: Flag for fetching return options only - in: query name: admin_only schema: @@ -6769,6 +8686,9 @@ paths: type: array items: $ref: '#/components/schemas/shipping_option' + count: + type: integer + description: The total number of items available '/shipping-options/{id}': delete: operationId: DeleteShippingOptionsOption @@ -6779,7 +8699,7 @@ paths: - in: path name: id required: true - description: The id of the Shipping Option. + description: The ID of the Shipping Option. schema: type: string tags: @@ -6793,12 +8713,15 @@ paths: properties: id: type: string - description: The id of the deleted Shipping Option. + description: The ID of the deleted Shipping Option. object: type: string description: The type of the object that was deleted. + default: shipping-option deleted: type: boolean + description: Whether or not the items were deleted. + default: true get: operationId: GetShippingOptionsOption summary: Retrieve a Shipping Option @@ -6808,7 +8731,7 @@ paths: - in: path name: id required: true - description: The id of the Shipping Option. + description: The ID of the Shipping Option. schema: type: string tags: @@ -6831,13 +8754,15 @@ paths: - in: path name: id required: true - description: The id of the Shipping Option. + description: The ID of the Shipping Option. schema: type: string requestBody: content: application/json: schema: + required: + - requirements properties: name: description: The name of the Shipping Option @@ -6859,7 +8784,13 @@ paths: Option to be available. type: array items: + required: + - type + - amount properties: + id: + description: The ID of the requirement + type: string type: description: The type of the requirement type: string @@ -6935,7 +8866,7 @@ paths: - in: path name: id required: true - description: The id of the Shipping Profile. + description: The ID of the Shipping Profile. schema: type: string tags: @@ -6949,12 +8880,15 @@ paths: properties: id: type: string - description: The id of the deleted Shipping Profile. + description: The ID of the deleted Shipping Profile. object: type: string description: The type of the object that was deleted. + default: shipping_profile deleted: type: boolean + description: Whether or not the items were deleted. + default: true get: operationId: GetShippingProfilesProfile summary: Retrieve a Shipping Profile @@ -6964,7 +8898,7 @@ paths: - in: path name: id required: true - description: The id of the Shipping Profile. + description: The ID of the Shipping Profile. schema: type: string tags: @@ -6986,7 +8920,7 @@ paths: - in: path name: id required: true - description: The id of the Shipping Profile. + description: The ID of the Shipping Profile. schema: type: string requestBody: @@ -7006,7 +8940,7 @@ paths: application/json: schema: properties: - shipping_profiles: + shipping_profile: $ref: '#/components/schemas/shipping_profile' '/store/currencies/{code}': post: @@ -7021,6 +8955,9 @@ paths: description: The 3 character ISO currency code. schema: type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. tags: - Store responses: @@ -7044,6 +8981,9 @@ paths: description: The 3 character ISO currency code. schema: type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. tags: - Store responses: @@ -7103,6 +9043,19 @@ paths: default_currency_code: description: The default currency code for the Store. type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + currencies: + description: Array of currencies in 2 character ISO code format. + type: array + items: + type: string + metadata: + description: >- + An optional set of key-value pairs with additional + information. + type: object tags: - Store responses: @@ -7132,7 +9085,7 @@ paths: payment_providers: type: array items: - $ref: '#/components/schemas/store' + $ref: '#/components/schemas/payment_provider' /store/tax-providers: get: operationId: GetStoreTaxProviders @@ -7151,7 +9104,7 @@ paths: tax_providers: type: array items: - $ref: '#/components/schemas/store' + $ref: '#/components/schemas/tax_provider' '/swaps/{id}': get: operationId: GetSwapsSwap @@ -7162,7 +9115,7 @@ paths: - in: path name: id required: true - description: The id of the Swap. + description: The ID of the Swap. schema: type: string tags: @@ -7181,6 +9134,19 @@ paths: operationId: GetSwaps summary: List Swaps description: Retrieves a list of Swaps. + parameters: + - in: query + name: limit + description: The upper limit for the amount of responses returned. + schema: + type: number + default: '50' + - in: query + name: offset + description: The offset of the list returned. + schema: + type: number + default: '0' x-authenticated: true tags: - Swap @@ -7195,14 +9161,56 @@ paths: type: array items: $ref: '#/components/schemas/swap' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/tax-rates/:id/product-types/batch': post: operationId: PostTaxRatesTaxRateProductTypes summary: Add Tax Rate to Product Types description: Associates a Tax Rate with a list of Product Types + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - product_types + properties: + product_types: + type: array + description: >- + The IDs of the types of products to associate with this tax + rate + items: + type: string tags: - - Tax Rates + - Tax Rate responses: '200': description: OK @@ -7211,16 +9219,47 @@ paths: schema: properties: tax_rate: - type: array - items: - $ref: '#/components/schemas/tax_rate' + $ref: '#/components/schemas/tax_rate' delete: operationId: DeleteTaxRatesTaxRateProductTypes summary: Remove Tax Rate from Product Types description: Removes a Tax Rate from a list of Product Types + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - product_types + properties: + product_types: + type: array + description: >- + The IDs of the types of products to remove association with + this tax rate + items: + type: string tags: - - Tax Rates + - Tax Rate responses: '200': description: OK @@ -7229,17 +9268,46 @@ paths: schema: properties: tax_rate: - type: array - items: - $ref: '#/components/schemas/tax_rate' + $ref: '#/components/schemas/tax_rate' '/tax-rates/:id/products/batch': post: operationId: PostTaxRatesTaxRateProducts summary: Add Tax Rate to Products description: Associates a Tax Rate with a list of Products + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - products + properties: + products: + type: array + description: The IDs of the products to associate with this tax rate + items: + type: string tags: - - Tax Rates + - Tax Rate responses: '200': description: OK @@ -7248,16 +9316,47 @@ paths: schema: properties: tax_rate: - type: array - items: - $ref: '#/components/schemas/tax_rate' + $ref: '#/components/schemas/tax_rate' delete: operationId: DeleteTaxRatesTaxRateProducts summary: Removes Tax Rate from Products description: Removes a Tax Rate from a list of Products + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - products + properties: + products: + type: array + description: >- + The IDs of the products to remove association with this tax + rate + items: + type: string tags: - - Tax Rates + - Tax Rate responses: '200': description: OK @@ -7266,17 +9365,48 @@ paths: schema: properties: tax_rate: - type: array - items: - $ref: '#/components/schemas/tax_rate' + $ref: '#/components/schemas/tax_rate' '/tax-rates/:id/shipping-options/batch': post: operationId: PostTaxRatesTaxRateShippingOptions summary: Add Tax Rate to Product Types - description: Associates a Tax Rate with a list of Product Types + description: Associates a Tax Rate with a list of Shipping Options + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - shipping_options + properties: + shipping_options: + type: array + description: >- + The IDs of the shipping options to associate with this tax + rate + items: + type: string tags: - - Tax Rates + - Tax Rate responses: '200': description: OK @@ -7285,16 +9415,47 @@ paths: schema: properties: tax_rate: - type: array - items: - $ref: '#/components/schemas/tax_rate' + $ref: '#/components/schemas/tax_rate' delete: operationId: DeleteTaxRatesTaxRateShippingOptions summary: Removes a Tax Rate from Product Types description: Removes a Tax Rate from a list of Product Types + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - shipping_options + properties: + shipping_options: + type: array + description: >- + The IDs of the shipping options to remove association with + this tax rate + items: + type: string tags: - - Tax Rates + - Tax Rate responses: '200': description: OK @@ -7303,17 +9464,74 @@ paths: schema: properties: tax_rate: - type: array - items: - $ref: '#/components/schemas/tax_rate' + $ref: '#/components/schemas/tax_rate' /tax-rates: post: operationId: PostTaxRates summary: Create a Tax Rate description: Creates a Tax Rate + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - code + - name + - region_id + properties: + code: + type: string + description: A code to identify the tax type by + name: + type: string + description: A human friendly name for the tax + region_id: + type: string + description: The ID of the Region that the rate belongs to + rate: + type: number + description: The numeric rate to charge + products: + type: array + description: The IDs of the products associated with this tax rate + items: + type: string + shipping_options: + type: array + description: >- + The IDs of the shipping options associated with this tax + rate + items: + type: string + product_types: + type: array + description: >- + The IDs of the types of products associated with this tax + rate + items: + type: string tags: - - Tax Rates + - Tax Rate responses: '200': description: OK @@ -7322,9 +9540,7 @@ paths: schema: properties: tax_rate: - type: array - items: - $ref: '#/components/schemas/tax_rate' + $ref: '#/components/schemas/tax_rate' get: operationId: GetTaxRates summary: List Tax Rates @@ -7332,63 +9548,80 @@ paths: x-authenticated: true parameters: - in: query - name: q - description: Query used for searching orders. - schema: - type: string - - in: query - name: id - description: Id of the order to search for. + name: name + description: Name of tax rate to retrieve schema: type: string - in: query name: region_id - description: to search for. + style: form + explode: false + description: Filter by Region ID schema: - type: string + oneOf: + - type: string + - type: array + items: + type: string - in: query name: code - description: to search for. + description: code to search for. schema: type: string - in: query name: rate - description: to search for. + style: form + explode: false + description: Filter by Rate schema: - type: string - - in: query - name: created_at - description: >- - Date comparison for when resulting orders was created, i.e. less - than, greater than etc. - schema: - type: object - - in: query - name: updated_at - description: >- - Date comparison for when resulting orders was updated, i.e. less - than, greater than etc. - schema: - type: object + oneOf: + - type: number + - type: object + properties: + lt: + type: number + description: filter by rates less than this number + gt: + type: number + description: filter by rates greater than this number + lte: + type: number + description: filter by rates less than or equal to this number + gte: + type: number + description: filter by rates greater than or equal to this number - in: query name: offset - description: How many orders to skip in the result. + description: How many tax rates to skip before retrieving the result. schema: - type: string + type: integer + default: 0 - in: query name: limit - description: Limit the number of orders returned. + description: Limit the number of tax rates returned. schema: - type: string + type: integer + default: 50 - in: query name: fields - description: >- - (Comma separated) Which fields should be included in each order of - the result. + description: Which fields should be included in each item. + style: form + explode: false schema: - type: string + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved for each item. + style: form + explode: false + schema: + type: array + items: + type: string tags: - - Order + - Tax Rate responses: '200': description: OK @@ -7396,10 +9629,19 @@ paths: application/json: schema: properties: - orders: + tax_rates: type: array items: - $ref: '#/components/schemas/order' + $ref: '#/components/schemas/tax_rate' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/tax-rates/{id}': delete: operationId: DeleteTaxRatesTaxRate @@ -7410,11 +9652,11 @@ paths: - in: path name: id required: true - description: The id of the Shipping Option. + description: The ID of the Shipping Option. schema: type: string tags: - - Tax Rates + - Tax Rate responses: '200': description: OK @@ -7424,20 +9666,42 @@ paths: properties: id: type: string - description: The id of the deleted Shipping Option. + description: The ID of the deleted Shipping Option. object: type: string description: The type of the object that was deleted. + default: tax-rate deleted: type: boolean + description: Whether or not the items were deleted. + default: true '/tax-rates/:id': get: operationId: GetTaxRatesTaxRate summary: Get Tax Rate description: Retrieves a TaxRate + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string x-authenticated: true tags: - - Tax Rates + - Tax Rate responses: '200': description: OK @@ -7446,16 +9710,69 @@ paths: schema: properties: tax_rate: - type: array - items: - $ref: '#/components/schemas/tax_rate' + $ref: '#/components/schemas/tax_rate' post: operationId: PostTaxRatesTaxRate summary: Update a Tax Rate description: Updates a Tax Rate + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string x-authenticated: true + requestBody: + content: + application/json: + schema: + properties: + code: + type: string + description: A code to identify the tax type by + name: + type: string + description: A human friendly name for the tax + region_id: + type: string + description: The ID of the Region that the rate belongs to + rate: + type: number + description: The numeric rate to charge + products: + type: array + description: The IDs of the products associated with this tax rate + items: + type: string + shipping_options: + type: array + description: >- + The IDs of the shipping options associated with this tax + rate + items: + type: string + product_types: + type: array + description: >- + The IDs of the types of products associated with this tax + rate + items: + type: string tags: - - Tax Rates + - Tax Rate responses: '200': description: OK @@ -7464,19 +9781,15 @@ paths: schema: properties: tax_rate: - type: array - items: - $ref: '#/components/schemas/tax_rate' - /: + $ref: '#/components/schemas/tax_rate' + /uploads: post: operationId: PostUploads - summary: Uploads an array of files - description: >- - Uploads an array of files to the specific fileservice that is installed - in medusa. + summary: Uploads a file + description: Uploads a file to the specific fileservice that is installed in Medusa. x-authenticated: true tags: - - Uploads + - Upload requestBody: content: multipart/form-data: @@ -7484,10 +9797,8 @@ paths: type: object properties: files: - type: array - items: - type: string - format: binary + type: string + format: binary responses: '200': description: OK @@ -7498,7 +9809,12 @@ paths: uploads: type: array items: - type: string + type: object + properties: + url: + type: string + description: The URL of the uploaded file. + format: uri /users: post: operationId: PostUsers @@ -7516,6 +9832,7 @@ paths: email: description: The Users email. type: string + format: email first_name: description: The name of the User. type: string @@ -7525,11 +9842,16 @@ paths: role: description: Userrole assigned to the user. type: string + enum: + - admin + - member + - developer password: description: The Users password. type: string + format: password tags: - - Users + - User responses: '200': description: OK @@ -7545,7 +9867,7 @@ paths: description: Retrieves all users. x-authenticated: true tags: - - Users + - User responses: '200': description: OK @@ -7557,7 +9879,7 @@ paths: type: array items: $ref: '#/components/schemas/user' - '/users/{user_id}': + '/users/{id}': delete: operationId: DeleteUsersUser summary: Delete a User @@ -7565,9 +9887,9 @@ paths: x-authenticated: true parameters: - in: path - name: user_id + name: id required: true - description: The id of the User. + description: The ID of the User. schema: type: string tags: @@ -7581,59 +9903,15 @@ paths: properties: id: type: string - description: The id of the deleted Shipping Profile. + description: The ID of the deleted user. object: type: string description: The type of the object that was deleted. + default: user deleted: type: boolean - post: - operationId: PostUsersUser - summary: Update a User - description: Updates a User - x-authenticated: true - parameters: - - in: path - name: user_id - required: true - description: The id of the User. - schema: - type: string - tags: - - Users - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - user: - $ref: '#/components/schemas/user' - requestBody: - content: - application/json: - schema: - type: object - required: - - first_name - - last_name - - role - - api_token - properties: - first_name: - type: string - description: The name of the User. - last_name: - type: string - description: The name of the User. - role: - type: string - description: 'The role of the User(admin, member, developer).' - api_token: - type: string - description: The api_token of the User. - '/users/{id}': + description: Whether or not the items were deleted. + default: true get: operationId: GetUsersUser summary: Retrieve a User @@ -7643,11 +9921,60 @@ paths: - in: path name: id required: true - description: The id of the User. + description: The ID of the User. schema: type: string tags: - - Users + - User + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + user: + $ref: '#/components/schemas/user' + post: + operationId: PostUsersUser + summary: Update a User + description: Updates a User + parameters: + - in: path + name: id + required: true + description: The ID of the User. + schema: + type: string + x-authenticated: true + requestBody: + content: + application/json: + schema: + properties: + first_name: + description: The name of the User. + type: string + last_name: + description: The name of the User. + type: string + role: + description: Userrole assigned to the user. + type: string + enum: + - admin + - member + - developer + api_token: + description: The api token of the User. + type: string + metadata: + description: >- + An optional set of key-value pairs with additional + information. + type: object + tags: + - User responses: '200': description: OK @@ -7658,6 +9985,28 @@ paths: user: $ref: '#/components/schemas/user' /users/password-token: + post: + operationId: PostUsersUserPasswordToken + summary: Generate a password token for a User. + description: Generates a password token for a User with a given email. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - email + properties: + email: + description: The Users email. + type: string + format: email + tags: + - User + responses: + '204': + description: OK + /users/reset-password: post: operationId: PostUsersUserPassword summary: Set the password for a User. @@ -7668,21 +10017,22 @@ paths: application/json: schema: required: - - email - token - password properties: email: description: The Users email. type: string + format: email token: description: The token generated from the 'password-token' endpoint. type: string password: description: The Users new password. type: string + format: password tags: - - Users + - User responses: '200': description: OK @@ -7708,12 +10058,14 @@ paths: name: offset description: How many variants to skip in the result. schema: - type: string + type: integer + default: 0 - in: query name: limit description: Limit the number of variants returned. schema: - type: string + type: integer + default: 20 tags: - Product Variant responses: @@ -7727,6 +10079,15 @@ paths: type: array items: $ref: '#/components/schemas/product_variant' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page components: schemas: address: @@ -7736,90 +10097,223 @@ components: properties: id: type: string + description: ID of the address + example: addr_01G8ZC9VS1XVE149MGH2J7QSSH customer_id: type: string + description: ID of the customer this address belongs to + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: Available if the relation `customer` is expanded. + type: array + items: + type: object + description: A customer object. company: type: string + description: Company name + example: Acme first_name: type: string + description: First name + example: Arno last_name: type: string + description: Last name + example: Willms address_1: type: string + description: Address line 1 + example: 14433 Kemmer Court address_2: type: string + description: Address line 2 + example: Suite 369 city: type: string + description: City + example: South Geoffreyview country_code: type: string + description: The 2 character ISO code of the country in lower case + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + example: st country: - $ref: '#/components/schemas/country' + description: A country object. Available if the relation `country` is expanded. + type: object + province: + type: string + description: Province + example: Kentucky + postal_code: + type: string + description: Postal Code + example: 72093 + phone: + type: string + description: Phone Number + example: 16128234334802 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white batch_job: title: Batch Job description: A Batch Job. x-resourceId: batch_job + required: + - type properties: id: + type: string description: The unique identifier for the batch job. - type: string + example: batch_01G8T782965PYFG0751G0Z38B4 type: + type: string description: The type of batch job. - type: string enum: - - product_import - - product_export + - product-import + - product-export status: - description: The status of the batch job. type: string + description: The status of the batch job. enum: - created - pre_processed + - confirmed - processing - completed - canceled - failed + default: created created_by: - description: The unique identifier of the user that created the batch job. type: string + description: The unique identifier of the user that created the batch job. + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + created_by_user: + description: >- + A user object. Available if the relation `created_by_user` is + expanded. + type: object context: + type: object description: >- The context of the batch job, the type of the batch job determines what the context should contain. - type: object + example: + shape: + prices: + - region: null + currency_code: eur + dynamicImageColumnCount: 4 + dynamicOptionColumnCount: 2 + list_config: + skip: 0 + take: 50 + order: + created_at: DESC + relations: + - variants + - variant.prices + - images dry_run: - description: Specify if the job must apply the modifications or not. type: boolean + description: Specify if the job must apply the modifications or not. default: false result: - description: The result of the batch job. type: object + description: The result of the batch job. + properties: + count: + type: number + advancement_count: + type: number + progress: + type: number + errors: + type: object + properties: + message: + type: string + code: + oneOf: + - type: string + - type: number + err: + type: array + stat_descriptors: + type: object + properties: + key: + type: string + name: + type: string + message: + type: string + file_key: + type: string + file_size: + type: number + example: + errors: + - err: [] + code: unknown + message: Method not implemented. + stat_descriptors: + - key: product-export-count + name: Product count to export + message: There will be 8 products exported by this action pre_processed_at: - description: The date from which the job has been pre processed. type: string + description: The date from which the job has been pre processed. + format: date-time + processing_at: + type: string + description: The date the job is processing at. format: date-time confirmed_at: - description: The date when the confirmation has been done. type: string + description: The date when the confirmation has been done. format: date-time completed_at: - description: The date of the completion. type: string + description: The date of the completion. format: date-time canceled_at: - description: The date of the concellation. type: string + description: The date of the concellation. + format: date-time + failed_at: + type: string + description: The date when the job failed. format: date-time created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was last updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time cart: title: Cart @@ -7828,127 +10322,261 @@ components: properties: id: type: string + description: The cart's ID + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 email: type: string + description: The email associated with the cart + format: email billing_address_id: type: string + description: The billing address's ID + example: addr_01G8ZH853YPY9B94857DY91YGW billing_address: + description: Available if the relation `billing_address` is expanded. $ref: '#/components/schemas/address' shipping_address_id: type: string + description: The shipping address's ID + example: addr_01G8ZH853YPY9B94857DY91YGW shipping_address: + description: Available if the relation `shipping_address` is expanded. $ref: '#/components/schemas/address' items: + description: Available if the relation `items` is expanded. type: array items: $ref: '#/components/schemas/line_item' region_id: type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G region: - $ref: '#/components/schemas/region' + description: A region object. Available if the relation `region` is expanded. + type: object discounts: type: array + description: Available if the relation `discounts` is expanded. items: - $ref: '#/components/schemas/region' + type: object + description: A discount object. gift_cards: type: array + description: Available if the relation `gift_cards` is expanded. items: - $ref: '#/components/schemas/gift_card' + type: object + description: A gift card object. customer_id: type: string + description: The customer's ID + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 customer: - $ref: '#/components/schemas/customer' + description: A customer object. Available if the relation `customer` is expanded. + type: object payment_session: + description: The selected payment session in the cart. $ref: '#/components/schemas/payment_session' payment_sessions: type: array + description: The payment sessions created on the cart. items: $ref: '#/components/schemas/payment_session' + payment_id: + type: string + description: The payment's ID if available + example: pay_01G8ZCC5W42ZNY842124G7P5R9 payment: + description: Available if the relation `payment` is expanded. $ref: '#/components/schemas/payment' shipping_methods: type: array + description: The shipping methods added to the cart. items: $ref: '#/components/schemas/shipping_method' type: type: string + description: The cart's type. enum: - default - swap + - draft_order - payment_link + - claim + default: default completed_at: type: string + description: The date with timezone at which the cart was completed. format: date-time + payment_authorized_at: + type: string + description: The date with timezone at which the payment was authorized. + format: date-time + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of a cart in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + context: + type: object + description: >- + The context of the cart which can include info like IP or user + agent. + example: + ip: '::1' + user_agent: PostmanRuntime/7.29.2 + sales_channel_id: + type: string + description: The sales channel ID the cart is associated with. + example: null + sales_channel: + description: >- + A sales channel object. Available if the relation `sales_channel` is + expanded. + type: object created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white shipping_total: type: integer + description: The total of shipping + example: 1000 discount_total: type: integer + description: The total of discount + example: 800 tax_total: type: integer + description: The total of tax + example: 0 + refunded_total: + type: integer + description: >- + The total amount refunded if the order associated with this cart is + returned. + example: 0 + total: + type: integer + description: The total amount of the cart + example: 8200 subtotal: type: integer + description: The subtotal of the cart + example: 8000 refundable_amount: type: integer + description: The amount that can be refunded + example: 8200 gift_card_total: type: integer + description: The total of gift cards + example: 0 + gift_card_tax_total: + type: integer + description: The total of gift cards with taxes + example: 0 claim_image: title: Claim Image description: Represents photo documentation of a claim. x-resourceId: claim_image + required: + - claim_item_id + - url properties: id: type: string + description: The claim image's ID + example: cimg_01G8ZH853Y6TFXWPG5EYE81X63 claim_item_id: type: string + description: The ID of the claim item associated with the image + claim_item: + description: >- + A claim item object. Available if the relation `claim_item` is + expanded. + type: object url: type: string + description: The URL of the image + format: uri created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white claim_item: title: Claim Item description: >- Represents a claimed item along with information about the reasons for the claim. x-resourceId: claim_item + required: + - claim_order_id + - item_id + - variant_id + - reason + - quantity properties: id: type: string + description: The claim item's ID + example: citm_01G8ZH853Y6TFXWPG5EYE81X63 images: type: array + description: Available if the relation `images` is expanded. items: $ref: '#/components/schemas/claim_image' claim_order_id: + description: The ID of the claim this item is associated with. type: string + claim_order: + description: >- + A claim order object. Available if the relation `claim_order` is + expanded. + type: object item_id: + description: The ID of the line item that the claim item refers to. type: string + example: item_01G8ZM25TN49YV9EQBE2NC27KC item: - description: The Line Item that the claim refers to + description: Available if the relation `item` is expanded. $ref: '#/components/schemas/line_item' variant_id: + description: The ID of the product variant that is claimed. type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 variant: - description: The Product Variant that is claimed. - $ref: '#/components/schemas/product_variant' + description: A variant object. Available if the relation `variant` is expanded. + type: object reason: description: The reason for the claim type: string @@ -7960,27 +10588,37 @@ components: note: description: 'An optional note about the claim, for additional information' type: string + example: I don't like it. quantity: description: >- The quantity of the item that is being claimed; must be less than or equal to the amount purchased in the original order. type: integer + example: 1 tags: - description: User defined tags for easy filtering and grouping. + description: >- + User defined tags for easy filtering and grouping. Available if the + relation 'tags' is expanded. type: array items: $ref: '#/components/schemas/claim_tag' created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white claim_order: title: Claim Order description: >- @@ -7988,9 +10626,14 @@ components: order consists of a subset of items associated with an original order, and can contain additional information about fulfillments and returns. x-resourceId: claim_order + required: + - type + - order_id properties: id: type: string + description: The claim's ID + example: claim_01G8ZH853Y6TFXWPG5EYE81X63 type: type: string enum: @@ -7998,10 +10641,12 @@ components: - replace payment_status: type: string + description: The status of the claim's payment enum: - na - not_refunded - refunded + default: na fulfillment_status: type: string enum: @@ -8014,6 +10659,7 @@ components: - returned - canceled - requires_action + default: not_fulfilled claim_items: description: The items that have been claimed type: array @@ -8027,16 +10673,23 @@ components: items: $ref: '#/components/schemas/line_item' order_id: - description: The id of the order that the claim comes from. + description: The ID of the order that the claim comes from. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object return_order: - description: Holds information about the return if the claim is to be returned - $ref: '#/components/schemas/return' + description: >- + A return object. Holds information about the return if the claim is + to be returned. Available if the relation 'return_order' is expanded + type: object shipping_address_id: - description: The id of the address that the new items should be shipped to + description: The ID of the address that the new items should be shipped to type: string + example: addr_01G8ZH853YPY9B94857DY91YGW shipping_address: - description: The address that the new items should be shipped to + description: Available if the relation `shipping_address` is expanded. $ref: '#/components/schemas/address' shipping_methods: description: The shipping methods that the claim order will be shipped with. @@ -8051,94 +10704,160 @@ components: refund_amount: description: The amount that will be refunded in conjunction with the claim type: integer + example: 1000 canceled_at: - description: The date with timezone at which the Swap was canceled. + description: The date with timezone at which the claim was canceled. type: string format: date-time created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white no_notification: description: >- Flag for describing whether or not notifications related to this should be send. type: boolean - metadata: - type: object + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the cart + associated with the claim in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. claim_tag: title: Claim Tag description: >- Claim Tags are user defined tags that can be assigned to claim items for easy filtering and grouping. x-resourceId: claim_tag + required: + - value properties: id: - description: The id of the claim tag. Will be prefixed by `ctag_`. type: string + description: The claim tag's ID + example: ctag_01G8ZCC5Y63B95V6B5SHBZ91S4 value: description: The value that the claim tag holds type: string + example: Damaged created_at: + type: string description: The date with timezone at which the resource was created. - type: string format: date-time - update_at: - description: The date with timezone at which the resource was last updated. + updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white country: title: Country description: Country details x-resourceId: country + required: + - iso_2 + - iso_3 + - num_code + - name + - display_name properties: id: - description: The database id of the country - type: integer + type: string + description: The country's ID + example: 109 iso_2: - description: The 2 character ISO code for the country. type: string + description: The 2 character ISO code of the country in lower case + example: it + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. iso_3: - description: The 3 character ISO code for the country. type: string + description: The 2 character ISO code of the country in lower case + example: ita + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements + description: See a list of codes. num_code: description: The numerical ISO code for the country. type: string + example: 380 + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_numeric#Officially_assigned_code_elements + description: See a list of codes. name: - description: The normalized country name; in upper case. + description: The normalized country name in upper case. type: string + example: ITALY display_name: description: The country name appropriate for display. type: string + example: Italy + region_id: + type: string + description: The region ID this country is associated with. + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object currency: title: Currency description: Currency x-resourceId: currency + required: + - code + - symbol + - symbol_native + - name properties: code: description: The 3 character ISO code for the currency. type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. symbol: description: The symbol used to indicate the currency. type: string + example: $ symbol_native: description: The native symbol used to indicate the currency. type: string + example: $ name: description: The written name of the currency type: string + example: US Dollar custom_shipping_option: title: Custom Shipping Option description: >- @@ -8146,242 +10865,363 @@ components: can attach a Custom Shipping Option to a cart in order to set a custom price for a particular Shipping Option x-resourceId: custom_shipping_option + required: + - price + - shipping_option_id properties: id: - description: >- - The id of the Custom Shipping Option. This value will be prefixed - with `cso_`. type: string + description: The custom shipping option's ID + example: cso_01G8X99XNB77DMFBJFWX6DN9V9 price: description: >- The custom price set that will override the shipping option's original price type: integer + example: 1000 shipping_option_id: description: >- - The id of the Shipping Option that the custom shipping option + The ID of the Shipping Option that the custom shipping option overrides - anyOf: - - $ref: '#/components/schemas/shipping_option' - cart_id: - description: The id of the Cart that the custom shipping option is attached to - anyOf: - - $ref: '#/components/schemas/cart' - created_at: - description: The date with timezone at which the resource was created. type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: >- + A shipping option object. Available if the relation + `shipping_option` is expanded. + type: object + cart_id: + description: The ID of the Cart that the custom shipping option is attached to + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white customer_group: title: Customer Group description: Represents a customer group x-resourceId: customer_group + required: + - name properties: id: type: string + description: The customer group's ID + example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63 name: type: string + description: The name of the customer group + example: VIP customers: type: array + description: >- + The customers that belong to the customer group. Available if the + relation `customers` is expanded. items: - $ref: '#/components/schemas/customer' + type: object + description: A customer object. + price_lists: + type: array + description: >- + The price lists that are associated with the customer group. + Available if the relation `price_lists` is expanded. + items: + $ref: '#/components/schemas/price_list' created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white customer: title: Customer description: Represents a customer x-resourceId: customer + required: + - email properties: id: type: string + description: The customer's ID + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 email: type: string + description: The customer's email + format: email + first_name: + type: string + description: The customer's first name + example: Arno + last_name: + type: string + description: The customer's first name + example: Willms billing_address_id: type: string + description: The customer's billing address ID + example: addr_01G8ZH853YPY9B94857DY91YGW billing_address: - description: The Customer's billing address. - anyOf: - - $ref: '#/components/schemas/address' + description: Available if the relation `billing_address` is expanded. + $ref: '#/components/schemas/address' shipping_addresses: + description: Available if the relation `shipping_addresses` is expanded. type: array items: $ref: '#/components/schemas/address' - first_name: - type: string - last_name: - type: string phone: type: string + description: The customer's phone number + example: 16128234334802 has_account: type: boolean + description: Whether the customer has an account or not + default: false + orders: + description: Available if the relation `orders` is expanded. + type: array + items: + type: object + description: An order object. + groups: + description: >- + The customer groups the customer belongs to. Available if the + relation `groups` is expanded. + type: array + items: + $ref: '#/components/schemas/customer_group' created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white discount_condition_customer_group: title: Product Tag Discount Condition description: Associates a discount condition with a customer group x-resourceId: discount_condition_customer_group + required: + - customer_group_id + - condition_id properties: customer_group_id: - description: The id of the Product Tag + description: The ID of the Product Tag type: string + example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63 condition_id: - description: The id of the Discount Condition + description: The ID of the Discount Condition type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + customer_group: + description: Available if the relation `customer_group` is expanded. + $ref: '#/components/schemas/customer_group' + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: '#/components/schemas/discount_condition' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_condition_product_collection: title: Product Collection Discount Condition description: Associates a discount condition with a product collection x-resourceId: discount_condition_product_collection + required: + - product_collection_id + - condition_id properties: product_collection_id: - description: The id of the Product Collection + description: The ID of the Product Collection type: string + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG condition_id: - description: The id of the Discount Condition + description: The ID of the Discount Condition type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_collection: + description: Available if the relation `product_collection` is expanded. + $ref: '#/components/schemas/product_collection' + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: '#/components/schemas/discount_condition' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_condition_product_tag: title: Product Tag Discount Condition description: Associates a discount condition with a product tag x-resourceId: discount_condition_product_tag + required: + - product_tag_id + - condition_id properties: product_tag_id: - description: The id of the Product Tag + description: The ID of the Product Tag type: string + example: ptag_01F0YESHPZYY3H4SJ3A5918SBN condition_id: - description: The id of the Discount Condition + description: The ID of the Discount Condition type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_tag: + description: Available if the relation `product_tag` is expanded. + $ref: '#/components/schemas/product_tag' + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: '#/components/schemas/discount_condition' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_condition_product_type: title: Product Type Discount Condition description: Associates a discount condition with a product type x-resourceId: discount_condition_product + required: + - product_type_id + - condition_id properties: product_type_id: - description: The id of the Product Type + description: The ID of the Product Tag type: string + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A condition_id: - description: The id of the Discount Condition + description: The ID of the Discount Condition type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_type: + description: Available if the relation `product_type` is expanded. + $ref: '#/components/schemas/product_type' + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: '#/components/schemas/discount_condition' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_condition_product: title: Product Discount Condition description: Associates a discount condition with a product x-resourceId: discount_condition_product + required: + - product_id + - condition_id properties: product_id: - description: The id of the Product + description: The ID of the Product Tag type: string + example: prod_01G1G5V2MBA328390B5AXJ610F condition_id: - description: The id of the Discount Condition + description: The ID of the Discount Condition type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product: + description: Available if the relation `product` is expanded. + $ref: '#/components/schemas/product' + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: '#/components/schemas/discount_condition' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_condition: title: Discount Condition description: Holds rule conditions for when a discount is applicable x-resourceId: discount_condition + required: + - type + - operator + - discount_rule_id properties: id: - description: The id of the Discount Condition. Will be prefixed by `discon_`. type: string + description: The discount condition's ID + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A type: description: The type of the Condition type: string @@ -8391,31 +11231,93 @@ components: - product_collections - product_tags - customer_groups + operator: + description: The operator of the Condition + type: string + enum: + - in + - not_in + discount_rule_id: + type: string + description: The ID of the discount rule associated with the condition + example: dru_01F0YESMVK96HVX7N419E3CJ7C + discount_rule: + description: Available if the relation `discount_rule` is expanded. + $ref: '#/components/schemas/discount_rule' + products: + description: >- + products associated with this condition if type = products. + Available if the relation `products` is expanded. + type: array + items: + type: object + description: A product object. + product_types: + description: >- + product types associated with this condition if type = + product_types. Available if the relation `product_types` is + expanded. + type: array + items: + type: object + description: A product type object. + product_tags: + description: >- + product tags associated with this condition if type = product_tags. + Available if the relation `product_tags` is expanded. + type: array + items: + type: object + description: A product tag object. + product_collections: + description: >- + product collections associated with this condition if type = + product_collections. Available if the relation `product_collections` + is expanded. + type: array + items: + type: object + description: A product collection object. + customer_groups: + description: >- + customer groups associated with this condition if type = + customer_groups. Available if the relation `customer_groups` is + expanded. + type: array + items: + type: object + description: A customer group object. created_at: + type: string description: The date with timezone at which the resource was created. - type: string format: date-time - update_at: - description: The date with timezone at which the resource was last updated. + updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_rule: title: Discount Rule description: >- Holds the rules that governs how a Discount is calculated when applied to a Cart. x-resourceId: discount_rule + required: + - type + - value properties: id: - description: The id of the Discount Rule. Will be prefixed by `dru_`. type: string + description: The discount rule's ID + example: dru_01F0YESMVK96HVX7N419E3CJ7C type: description: >- The type of the Discount, can be `fixed` for discounts that reduce @@ -8426,76 +11328,97 @@ components: - fixed - percentage - free_shipping + example: percentage description: description: A short description of the discount type: string + example: 10 Percent value: description: >- The value that the discount represents; this will depend on the type of the discount type: integer + example: 10 allocation: description: The scope that the discount should apply to. type: string enum: - total - item + example: total conditions: description: >- A set of conditions that can be used to limit when the discount can - be used + be used. Available if the relation `conditions` is expanded. type: array items: - $ref: '#/components/schemas/discount_condition' + type: object + description: A discount condition object. created_at: + type: string description: The date with timezone at which the resource was created. - type: string format: date-time - update_at: - description: The date with timezone at which the resource was last updated. + updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount: title: Discount description: >- Represents a discount that can be applied to a cart for promotional purposes. x-resourceId: discount + required: + - code + - is_dynamic properties: id: - description: The id of the Discount. Will be prefixed by `disc_`. type: string + description: The discount's ID + example: disc_01F0YESMW10MGHWJKZSDDMN0VN code: description: >- A unique code for the discount - this will be used by the customer to apply the discount type: string + example: 10DISC is_dynamic: description: >- A flag to indicate if multiple instances of the discount can be generated. I.e. for newsletter discounts type: boolean - rule: + example: false + rule_id: + type: string description: The Discount Rule that governs the behaviour of the Discount - anyOf: - - $ref: '#/components/schemas/discount_rule' + example: dru_01F0YESMVK96HVX7N419E3CJ7C + rule: + description: Available if the relation `rule` is expanded. + $ref: '#/components/schemas/discount_rule' is_disabled: description: >- Whether the Discount has been disabled. Disabled discounts cannot be applied to carts type: boolean + example: false parent_discount_id: + type: string description: >- The Discount that the discount was created from. This will always be a dynamic discount - type: string + example: disc_01G8ZH853YPY9B94857DY91YGW + parent_discount: + description: Available if the relation `parent_discount` is expanded. + $ref: '#/components/schemas/discount' starts_at: description: The time at which the discount can be used. type: string @@ -8504,32 +11427,44 @@ components: description: The time at which the discount can no longer be used. type: string format: date-time + valid_duration: + type: string + description: Duration the discount runs between + example: P3Y6M4DT12H30M5S regions: - description: The Regions in which the Discount can be used + description: >- + The Regions in which the Discount can be used. Available if the + relation `regions` is expanded. type: array items: - $ref: '#/components/schemas/region' + type: object + description: A region object. usage_limit: description: The maximum number of times that a discount can be used. type: integer + example: 100 usage_count: description: The number of times a discount has been used. type: integer + example: 50 + default: 0 created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white draft-order: title: DraftOrder description: Represents a draft order @@ -8537,64 +11472,102 @@ components: properties: id: type: string + description: The draft order's ID + example: dorder_01G8TJFKBG38YYFQ035MSVG03C status: type: string + description: The status of the draft order enum: - open - completed + default: open display_id: type: string + description: The draft order's display ID + example: 2 cart_id: type: string + description: The ID of the cart associated with the draft order. + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 cart: - anyOf: - - $ref: '#/components/schemas/cart' + description: A cart object. Available if the relation `cart` is expanded. + type: object order_id: type: string + description: The ID of the order associated with the draft order. + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK order: - anyOf: - - $ref: '#/components/schemas/order' + description: An order object. Available if the relation `order` is expanded. + type: object canceled_at: type: string - format: date-time - created_at: - type: string - format: date-time - update_at: - type: string - format: date-time - deleted_at: - type: string + description: The date the draft order was canceled at. format: date-time completed_at: type: string + description: The date the draft order was completed at. format: date-time no_notification_order: type: boolean - metadata: - type: object + description: Whether to send the customer notifications regarding order updates. + example: false idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of the cart + associated with the draft order in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white fulfillment_item: title: Fulfillment Item description: >- Correlates a Line Item with a Fulfillment, keeping track of the quantity of the Line Item. x-resourceId: fulfillment_item + required: + - fulfillment_id + - item_id + - quantity properties: fulfillment_id: description: The id of the Fulfillment that the Fulfillment Item belongs to. type: string + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF item_id: description: The id of the Line Item that the Fulfillment Item references. type: string + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + fulfillment: + description: >- + A fulfillment object. Available if the relation `fulfillment` is + expanded. + type: object item: - description: The Line Item that the Fulfillment Item references. - anyOf: - - $ref: '#/components/schemas/line_item' + description: Available if the relation `item` is expanded. + $ref: '#/components/schemas/line_item' quantity: description: The quantity of the Line Item that is included in the Fulfillment. type: integer + example: 1 fulfillment_provider: title: Fulfillment Provider description: >- @@ -8605,12 +11578,14 @@ components: id: description: The id of the fulfillment provider as given by the plugin. type: string + example: manual is_installed: description: >- Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`. type: boolean + example: true fulfillment: title: Fulfillment description: >- @@ -8622,28 +11597,50 @@ components: these providers through webhooks in order to automatically update and synchronize the state of Fulfillments. x-resourceId: fulfillment + required: + - provider_id properties: id: - description: The id of the Fulfillment. This value will be prefixed by `ful_`. type: string + description: The cart's ID + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF claim_order_id: description: The id of the Claim that the Fulfillment belongs to. type: string + example: null + claim_order: + description: >- + A claim order object. Available if the relation `claim_order` is + expanded. + type: object swap_id: description: The id of the Swap that the Fulfillment belongs to. type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object order_id: description: The id of the Order that the Fulfillment belongs to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object provider_id: description: >- The id of the Fulfillment Provider responsible for handling the fulfillment type: string + example: manual + provider: + description: Available if the relation `provider` is expanded. + $ref: '#/components/schemas/fulfillment_provider' items: description: >- The Fulfillment Items in the Fulfillment - these hold information - about how many of each Line Item has been fulfilled. + about how many of each Line Item has been fulfilled. Available if + the relation `items` is expanded. type: array items: $ref: '#/components/schemas/fulfillment_item' @@ -8651,7 +11648,7 @@ components: description: >- The Tracking Links that can be used to track the status of the Fulfillment, these will usually be provided by the Fulfillment - Provider. + Provider. Available if the relation `tracking_links` is expanded. type: array items: $ref: '#/components/schemas/tracking_link' @@ -8663,6 +11660,12 @@ components: type: array items: type: string + data: + description: >- + This contains all the data necessary for the Fulfillment provider to + handle the fulfillment. + type: object + example: {} shipped_at: description: The date with timezone at which the Fulfillment was shipped. type: string @@ -8672,164 +11675,378 @@ components: Flag for describing whether or not notifications related to this should be send. type: boolean + example: false canceled_at: description: The date with timezone at which the Fulfillment was canceled. type: string format: date-time - created_at: - description: The date with timezone at which the resource was created. + idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of the + fulfillment in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white gift_card_transaction: title: Gift Card Transaction description: >- Gift Card Transactions are created once a Customer uses a Gift Card to pay for their Order x-resourceId: gift_card_transaction + required: + - gift_card_id + - amount properties: id: - description: >- - The id of the Gift Card Transaction. This value will be prefixed by - `gct_`. type: string + description: The gift card transaction's ID + example: gct_01G8X9A7ESKAJXG2H0E6F1MW7A gift_card_id: - description: The id of the Gift Card that was used in the transaction. + description: The ID of the Gift Card that was used in the transaction. type: string + example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ gift_card: - description: The Gift Card that was used in the transaction. - anyOf: - - $ref: '#/components/schemas/gift_card' + description: >- + A gift card object. Available if the relation `gift_card` is + expanded. + type: object order_id: - description: The id of the Order that the Gift Card was used to pay for. + description: The ID of the Order that the Gift Card was used to pay for. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object amount: description: The amount that was used from the Gift Card. type: integer + example: 10 created_at: description: The date with timezone at which the resource was created. type: string format: date-time + is_taxable: + description: Whether the transaction is taxable or not. + type: boolean + example: false + tax_rate: + description: The tax rate of the transaction + type: number + example: 0 gift_card: title: Gift Card description: >- Gift Cards are redeemable and represent a value that can be used towards the payment of an Order. x-resourceId: gift_card + required: + - code + - value + - balance + - region_id properties: id: - description: The id of the Gift Card. This value will be prefixed by `gift_`. type: string + description: The cart's ID + example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ code: description: >- The unique code that identifies the Gift Card. This is used by the Customer to redeem the value of the Gift Card. type: string + example: 3RFT-MH2C-Y4YZ-XMN4 value: description: The value that the Gift Card represents. type: integer + example: 10 balance: description: The remaining value on the Gift Card. type: integer + example: 10 region_id: + type: string description: The id of the Region in which the Gift Card is available. - type: string + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G region: - description: The Region in which the Gift Card is available. - anyOf: - - $ref: '#/components/schemas/region' + description: A region object. Available if the relation `region` is expanded. + type: object order_id: - description: The id of the Order that the Gift Card was purchased in. type: string + description: The id of the Order that the Gift Card was purchased in. + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object is_disabled: description: >- Whether the Gift Card has been disabled. Disabled Gift Cards cannot be applied to carts. type: boolean + example: false ends_at: description: The time at which the Gift Card can no longer be used. type: string format: date-time created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white + idempotency_key: + title: Idempotency Key + description: >- + Idempotency Key is used to continue a process in case of any failure + that might occur. + x-resourceId: idempotency_key + required: + - idempotency_key + properties: + id: + type: string + description: The idempotency key's ID + example: ikey_01G8X9A7ESKAJXG2H0E6F1MW7A + idempotency_key: + description: >- + The unique randomly generated key used to determine the state of a + process. + type: string + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + description: Date which the idempotency key was locked. + type: string + format: date-time + locked_at: + description: Date which the idempotency key was locked. + type: string + format: date-time + request_method: + description: The method of the request + type: string + example: POST + request_params: + type: object + description: The parameters passed to the request + example: + id: cart_01G8ZH853Y6TFXWPG5EYE81X63 + request_path: + description: The request's path + type: string + example: /store/carts/cart_01G8ZH853Y6TFXWPG5EYE81X63/complete + response_code: + type: string + description: The response's code. + example: 200 + response_body: + type: object + description: The response's body + example: + id: cart_01G8ZH853Y6TFXWPG5EYE81X63 + recovery_point: + type: string + description: Where to continue from. + default: started image: title: Image description: Images holds a reference to a URL at which the image file can be found. x-resourceId: image + required: + - url properties: id: - description: The id of the Image. This value will be prefixed by `img_`. type: string + description: The image's ID + example: img_01G749BFYR6T8JTVW6SGW3K3E6 url: description: The URL at which the image file can be found. type: string + format: uri created_at: + type: string description: The date with timezone at which the resource was created. - type: string format: date-time - update_at: - description: The date with timezone at which the resource was last updated. + updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white invite: title: Invite description: Represents an invite x-resourceId: invite + required: + - user_email properties: id: type: string + description: The invite's ID + example: invite_01G8TKE4XYCTHSCK2GDEP47RE1 user_email: type: string + description: The email of the user being invited. + format: email role: type: string + description: The user's role. enum: - admin - member - developer + default: member accepted: type: boolean + description: Whether the invite was accepted or not. + example: false token: type: string + description: The token used to accept the invite. expores_at: type: string + description: The date the invite expires at. format: date-time created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white + line_item_adjustment: + title: Line Item Adjustment + description: Represents an Line Item Adjustment + x-resourceId: line_item_adjustment + required: + - item_id + - description + - amount + properties: + id: + type: string + description: The invite's ID + example: lia_01G8TKE4XYCTHSCK2GDEP47RE1 + item_id: + type: string + description: The ID of the line item + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + item: + description: Available if the relation `item` is expanded. + $ref: '#/components/schemas/line_item' + description: + type: string + description: The line item's adjustment description + example: Adjusted item's price. + discount_id: + type: string + description: The ID of the discount associated with the adjustment + example: disc_01F0YESMW10MGHWJKZSDDMN0VN + discount: + description: Available if the relation `discount` is expanded. + $ref: '#/components/schemas/discount' + amount: + type: number + description: The adjustment amount + example: 1000 + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white + line_item_tax_line: + title: Line Item Tax Line + description: Represents an Line Item Tax Line + x-resourceId: line_item_tax_line + required: + - item_id + - rate + - name + properties: + id: + type: string + description: The line item tax line's ID + example: litl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + item_id: + type: string + description: The ID of the line item + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + item: + description: Available if the relation `item` is expanded. + $ref: '#/components/schemas/line_item' + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + rate: + description: The numeric rate to charge tax by + type: number + example: 10 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white line_item: title: Line Item description: >- @@ -8839,87 +12056,176 @@ components: Returns. Line Items may also be created when processing Swaps and Claims. x-resourceId: line_item + required: + - title + - unit_price + - quantity properties: id: - description: The id of the Line Item. This value will be prefixed by `item_`. type: string + description: The cart's ID + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN cart_id: - description: The id of the Cart that the Line Item belongs to. + description: The ID of the Cart that the Line Item belongs to. type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object order_id: - description: The id of the Order that the Line Item belongs to. + description: The ID of the Order that the Line Item belongs to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object swap_id: description: The id of the Swap that the Line Item belongs to. type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object claim_order_id: description: The id of the Claim that the Line Item belongs to. type: string + example: null + claim_order: + description: >- + A claim order object. Available if the relation `claim_order` is + expanded. + type: object + tax_lines: + description: Available if the relation `tax_lines` is expanded. + type: array + items: + $ref: '#/components/schemas/line_item_tax_line' + adjustments: + description: Available if the relation `adjustments` is expanded. + type: array + items: + $ref: '#/components/schemas/line_item_adjustment' title: description: >- The title of the Line Item, this should be easily identifiable by the Customer. type: string + example: Medusa Coffee Mug description: description: A more detailed description of the contents of the Line Item. type: string + example: One Size thumbnail: description: A URL string to a small image of the contents of the Line Item. type: string + format: uri + example: >- + https://medusa-public-images.s3.eu-west-1.amazonaws.com/coffee-mug.png + is_return: + description: Is the item being returned + type: boolean + example: false is_giftcard: description: Flag to indicate if the Line Item is a Gift Card. type: boolean + example: false should_merge: description: >- Flag to indicate if new Line Items with the same variant should be merged or added as an additional Line Item. type: boolean + example: false allow_discounts: description: >- Flag to indicate if the Line Item should be included when doing discount calculations. type: boolean + example: false + has_shipping: + description: >- + Flag to indicate if the Line Item has fulfillment associated with + it. + type: boolean + example: false unit_price: description: >- The price of one unit of the content in the Line Item. This should be in the currency defined by the Cart/Order/Swap/Claim that the Line Item belongs to. type: boolean + example: 8000 variant_id: description: The id of the Product Variant contained in the Line Item. type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 variant: - description: The Product Variant contained in the Line Item. - anyOf: - - $ref: '#/components/schemas/product_variant' + description: >- + A product variant object. The Product Variant contained in the Line + Item. Available if the relation `variant` is expanded. + type: object quantity: description: The quantity of the content in the Line Item. type: integer + example: 1 fulfilled_quantity: description: The quantity of the Line Item that has been fulfilled. type: integer + example: 0 returned_quantity: description: The quantity of the Line Item that has been returned. type: integer + example: 0 shipped_quantity: description: The quantity of the Line Item that has been shipped. type: integer - created_at: - description: The date with timezone at which the resource was created. - type: string - format: date-time - updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - metadata: - description: An optional key-value map with additional information. - type: object + example: 0 refundable: description: >- The amount that can be refunded from the given Line Item. Takes taxes and discounts into consideration. type: integer + example: 0 + subtotal: + type: integer + description: The subtotal of the line item + example: 8000 + tax_total: + type: integer + description: The total of tax of the line item + example: 0 + total: + type: integer + description: The total amount of the line item + example: 8000 + original_total: + type: integer + description: The original total amount of the line item + example: 8000 + original_tax_total: + type: integer + description: The original tax total amount of the line item + example: 0 + discount_total: + type: integer + description: The total of discount of the line item + example: 0 + gift_card_total: + type: integer + description: The total of the gift card of the line item + example: 0 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white money_amount: title: Money Amount description: >- @@ -8930,50 +12236,82 @@ components: region-based pricing is used the amount will be in the currency defined for the Reigon. x-resourceId: money_amount + required: + - currency_code + - amount properties: id: - description: The id of the Money Amount. This value will be prefixed by `ma_`. type: string + description: The money amount's ID + example: ma_01F0YESHRFQNH5S8Q0PK84YYZN currency_code: description: The 3 character currency code that the Money Amount is given in. type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: '#/components/schemas/currency' amount: description: >- The amount in the smallest currecny unit (e.g. cents 100 cents to charge $1) that the Product Variant will cost. type: integer + example: 100 min_quantity: description: >- The minimum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities. type: integer + example: 1 max_quantity: description: >- The maximum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities. type: integer + example: 1 + price_list_id: + type: string + description: The ID of the price list associated with the money amount + example: pl_01G8X3CKJXCG5VXVZ87H9KC09W + price_list: + description: Available if the relation `price_list` is expanded. + $ref: '#/components/schemas/price_list' variant_id: - description: The id of the Product Variant that the Money Amount belongs to. + description: The id of the Product Variant contained in the Line Item. type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: >- + The Product Variant contained in the Line Item. Available if the + relation `variant` is expanded. + type: object region_id: - description: The id of the Region that the Money Amount is defined for. type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G region: - description: The Region that the Money Amount is defined for. - anyOf: - - $ref: '#/components/schemas/region' + description: A region object. Available if the relation `region` is expanded. + type: object created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white note: title: Note description: >- @@ -8981,54 +12319,71 @@ components: resources to allow users to describe additional information in relation to these. x-resourceId: note + required: + - value + - resource_type + - resource_id properties: id: - description: The id of the Note. This value will be prefixed by `note_`. type: string + description: The note's ID + example: note_01G8TM8ENBMC7R90XRR1G6H26Q resource_type: description: The type of resource that the Note refers to. type: string + example: order resource_id: - description: The id of the resource that the Note refers to. + description: The ID of the resource that the Note refers to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK value: description: The contents of the note. type: string - author: - description: The author of the note. - anyOf: - - $ref: '#/components/schemas/user' - created_at: - description: The date with timezone at which the resource was created. + example: This order must be fulfilled on Monday + author_id: type: string + description: The ID of the author (user) + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + author: + description: Available if the relation `author` is expanded. + $ref: '#/components/schemas/user' + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white notification_provider: title: Notification Provider description: >- Represents a notification provider plugin and holds its installation status. x-resourceId: notification_provider + required: + - id properties: id: description: The id of the notification provider as given by the plugin. type: string + example: sendgrid is_installed: description: >- Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`. type: boolean + default: true notification: title: Notification description: >- @@ -9037,40 +12392,47 @@ components: used to show a chronological timeline for communications sent to a Customer regarding an Order, and enables resends. x-resourceId: notification + required: + - resource_type + - resource_id + - to properties: id: - description: The id of the Notification. This value will be prefixed by `noti_`. type: string + description: The notification's ID + example: noti_01G53V9Y6CKMCGBM1P0X7C28RX event_name: description: The name of the event that the notification was sent for. type: string + example: order.placed resource_type: description: The type of resource that the Notification refers to. type: string + example: order resource_id: - description: The id of the resource that the Notification refers to. + description: The ID of the resource that the Notification refers to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK customer_id: - description: The id of the Customer that the Notification was sent to. + description: The ID of the Customer that the Notification was sent to. type: string + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 customer: - description: The Customer that the Notification was sent to. - anyOf: - - $ref: '#/components/schemas/customer' + description: A customer object. Available if the relation `customer` is expanded. + type: object to: description: >- The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id type: string + example: user@example.com data: description: >- The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend. type: object - parent_id: - description: The id of the Notification that was originally sent. - type: string + example: {} resends: description: >- The resends that have been completed after the original @@ -9081,13 +12443,17 @@ components: provider_id: description: The id of the Notification Provider that handles the Notification. type: string + example: sengrid + provider: + description: Available if the relation `provider` is expanded. + $ref: '#/components/schemas/notification_provider' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time notification_resend: title: Notification Resend @@ -9095,76 +12461,123 @@ components: x-resourceId: notification_resend properties: id: - description: The id of the Notification. This value will be prefixed by `noti_`. + description: The notification resend's ID type: string + example: noti_01F0YET45G9NHP08Z66CE4QKBS event_name: description: The name of the event that the notification was sent for. type: string + example: order.placed resource_type: description: The type of resource that the Notification refers to. type: string + example: order resource_id: - description: The id of the resource that the Notification refers to. + description: The ID of the resource that the Notification refers to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + customer_id: + description: The ID of the Customer that the Notification was sent to. + type: string + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: A customer object. Available if the relation `customer` is expanded. + type: object to: description: >- The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id type: string + example: user@example.com data: description: >- The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend. type: object + example: {} parent_id: - description: The id of the Notification that was originally sent. + description: The ID of the Notification that was originally sent. type: string + example: noti_01G53V9Y6CKMCGBM1P0X7C28RX + parent_notification: + description: Available if the relation `parent_notification` is expanded. + $ref: '#/components/schemas/notification' provider_id: - description: The id of the Notification Provider that handles the Notification. + description: The ID of the Notification Provider that handles the Notification. type: string + example: sengrid + provider: + description: Available if the relation `provider` is expanded. + $ref: '#/components/schemas/notification_provider' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time OAuth: title: OAuth description: Represent an OAuth app x-resourceId: OAuth + required: + - id + - display_name + - application_name properties: id: type: string + description: The app's ID + example: example_app display_name: type: string + description: The app's display name + example: Example app application_name: type: string + description: The app's name + example: example install_url: type: string + description: The URL to install the app + format: uri uninstall_url: - type: integer + type: string + description: The URL to uninstall the app + format: uri data: type: object + description: Any data necessary to the app. + example: {} order: title: Order description: Represents an order x-resourceId: order + required: + - customer_id + - email + - region_id + - currency_code properties: id: type: string + description: The order's ID + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK status: type: string + description: The order's status enum: - pending - completed - archived - canceled - requires_action + default: pending fulfillment_status: type: string + description: The order's fulfillment status enum: - not_fulfilled - partially_fulfilled @@ -9175,8 +12588,10 @@ components: - returned - canceled - requires_action + default: not_fulfilled payment_status: type: string + description: The order's payment status enum: - not_paid - awaiting @@ -9185,134 +12600,246 @@ components: - refuneded - canceled - requires_action + default: not_paid display_id: type: integer + description: The order's display ID + example: 2 cart_id: type: string - currency_code: - type: string - tax_rate: - type: number - discounts: - type: array - items: - $ref: '#/components/schemas/discount' - email: - type: string - billing_address_id: - type: string - billing_address: - anyOf: - - $ref: '#/components/schemas/address' - shipping_address_id: - type: string - shipping_address: - anyOf: - - $ref: '#/components/schemas/address' - items: - type: array - items: - $ref: '#/components/schemas/line_item' - region_id: - type: string - region: - anyOf: - - $ref: '#/components/schemas/region' - gift_cards: - type: array - items: - $ref: '#/components/schemas/gift_card' + description: The ID of the cart associated with the order + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object customer_id: type: string + description: The ID of the customer associated with the order + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 customer: - anyOf: - - $ref: '#/components/schemas/customer' - payment_session: - anyOf: - - $ref: '#/components/schemas/payment_session' - payment_sessions: + description: A customer object. Available if the relation `customer` is expanded. + type: object + email: + description: The email associated with the order + type: string + format: email + billing_address_id: + type: string + description: The ID of the billing address associated with the order + example: addr_01G8ZH853YPY9B94857DY91YGW + billing_address: + description: Available if the relation `billing_address` is expanded. + $ref: '#/components/schemas/address' + shipping_address_id: + type: string + description: The ID of the shipping address associated with the order + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: '#/components/schemas/address' + region_id: + type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + currency_code: + description: The 3 character currency code that is used in the order + type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: '#/components/schemas/currency' + tax_rate: + description: The order's tax rate + type: number + example: 0 + discounts: type: array + description: >- + The discounts used in the order. Available if the relation + `discounts` is expanded. items: - $ref: '#/components/schemas/payment_session' - payments: + type: object + description: A discount object. + gift_cards: type: array + description: >- + The gift cards used in the order. Available if the relation + `gift_cards` is expanded. items: - $ref: '#/components/schemas/payment' + type: object + description: A gift card object. shipping_methods: type: array + description: >- + The shipping methods used in the order. Available if the relation + `shipping_methods` is expanded. items: $ref: '#/components/schemas/shipping_method' + payments: + type: array + description: >- + The payments used in the order. Available if the relation `payments` + is expanded. + items: + $ref: '#/components/schemas/payment' fulfillments: type: array + description: >- + The fulfillments used in the order. Available if the relation + `fulfillments` is expanded. items: $ref: '#/components/schemas/fulfillment' returns: type: array + description: >- + The returns associated with the order. Available if the relation + `returns` is expanded. items: - $ref: '#/components/schemas/return' + type: object + description: A return object. claims: type: array + description: >- + The claims associated with the order. Available if the relation + `claims` is expanded. items: - $ref: '#/components/schemas/claim_order' + type: object + description: A claim order object. refunds: type: array + description: >- + The refunds associated with the order. Available if the relation + `refunds` is expanded. items: - $ref: '#/components/schemas/refund' + type: object + description: A refund object. swaps: type: array + description: >- + The swaps associated with the order. Available if the relation + `swaps` is expanded. items: - $ref: '#/components/schemas/refund' + type: object + description: A swap object. + draft_order_id: + type: string + description: The ID of the draft order this order is associated with. + example: null + draft_order: + description: >- + A draft order object. Available if the relation `draft_order` is + expanded. + type: object + items: + type: array + description: >- + The line items that belong to the order. Available if the relation + `items` is expanded. + items: + $ref: '#/components/schemas/line_item' gift_card_transactions: type: array + description: >- + The gift card transactions used in the order. Available if the + relation `gift_card_transactions` is expanded. items: $ref: '#/components/schemas/gift_card_transaction' canceled_at: type: string + description: The date the order was canceled on. format: date-time - created_at: - type: string - format: date-time - update_at: - type: string - format: date-time - deleted_at: - type: string - format: date-time - metadata: - type: object - shipping_total: - type: integer - discount_total: - type: integer - tax_total: - type: integer - subtotal: - type: integer - refundable_amount: - type: integer - gift_card_total: - type: integer - paid_total: - type: integer no_notification: description: >- Flag for describing whether or not notifications related to this should be send. type: boolean + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the processing of the order + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + external_id: + description: The ID of an external order. + type: string + example: null + sales_channel_id: + type: string + description: The ID of the sales channel this order is associated with. + example: null + sales_channel: + description: >- + A sales channel object. Available if the relation `sales_channel` is + expanded. + type: object + shipping_total: + type: integer + description: The total of shipping + example: 1000 + discount_total: + type: integer + description: The total of discount + example: 800 + tax_total: + type: integer + description: The total of tax + example: 0 + refunded_total: + type: integer + description: The total amount refunded if the order is returned. + example: 0 + total: + type: integer + description: The total amount of the order + example: 8200 + subtotal: + type: integer + description: The subtotal of the order + example: 8000 + paid_total: + type: integer + description: The total amount paid + example: 8000 + refundable_amount: + type: integer + description: The amount that can be refunded + example: 8200 + gift_card_total: + type: integer + description: The total of gift cards + example: 0 + gift_card_tax_total: + type: integer + description: The total of gift cards with taxes + example: 0 payment_provider: title: Payment Provider description: Represents a Payment Provider plugin and holds its installation status. x-resourceId: payment_provider + required: + - id properties: id: description: The id of the payment provider as given by the plugin. type: string + example: manual is_installed: description: >- Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`. type: boolean + default: true payment_session: title: Payment Session description: >- @@ -9323,25 +12850,34 @@ components: Sessions will eventually get promoted to Payments to indicate that they are authorized for capture/refunds/etc. x-resourceId: payment_session + required: + - cart_id + - provider_id + - status properties: id: - description: >- - The id of the Payment Session. This value will be prefixed with - `ps_`. type: string + description: The payment session's ID + example: ps_01G901XNSRM2YS3ASN9H5KG3FZ cart_id: description: The id of the Cart that the Payment Session is created for. type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object provider_id: description: >- The id of the Payment Provider that is responsible for the Payment Session type: string + example: manual is_selected: description: >- A flag to indicate if the Payment Session has been selected as the method that will be used to complete the purchase. type: boolean + example: true status: description: >- Indicates the status of the Payment Session. Will default to @@ -9355,6 +12891,7 @@ components: - requires_more - error - canceled + example: pending data: description: >- The data required for the Payment Provider to identify, modify and @@ -9362,13 +12899,23 @@ components: holds an id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state. type: object - created_at: - description: The date with timezone at which the resource was created. + example: {} + idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of a cart in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time payment: title: Payment @@ -9376,33 +12923,59 @@ components: Payments represent an amount authorized with a given payment method, Payments can be captured, canceled or refunded. x-resourceId: payment + required: + - amount + - currency_code + - provider_id properties: id: - description: The id of the Payment. This value will be prefixed with `pay_`. type: string + description: The payment's ID + example: pay_01G2SJNT6DEEWDFNAJ4XWDTHKE swap_id: - description: The id of the Swap that the Payment is used for. - type: string - order_id: - description: The id of the Order that the Payment is used for. + description: The ID of the Swap that the Payment is used for. type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object cart_id: description: The id of the Cart that the Payment Session is created for. type: string + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + order_id: + description: The ID of the Order that the Payment is used for. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object amount: description: The amount that the Payment has been authorized for. type: integer + example: 100 currency_code: description: The 3 character ISO currency code that the Payment is completed in. type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: '#/components/schemas/currency' amount_refunded: description: >- The amount of the original Payment amount that has been refunded back to the Customer. type: integer + example: 0 provider_id: description: The id of the Payment Provider that is responsible for the Payment type: string + example: manual data: description: >- The data required for the Payment Provider to identify, modify and @@ -9410,6 +12983,7 @@ components: id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state. type: object + example: {} captured_at: description: The date with timezone at which the Payment was captured. type: string @@ -9418,27 +12992,50 @@ components: description: The date with timezone at which the Payment was canceled. type: string format: date-time - created_at: - description: The date with timezone at which the resource was created. + idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of a payment + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white price_list: title: Price List description: >- Price Lists represents a set of prices that overrides the default price for one or more product variants. x-resourceId: price_list + required: + - name + - description properties: id: - description: The id of the Price List. This value will be prefixed by `pl_`. type: string + description: The price list's ID + example: pl_01G8X3CKJXCG5VXVZ87H9KC09W + name: + type: string + description: The price list's name + example: VIP Prices + description: + type: string + description: The price list's description + example: Prices for VIP customers type: description: >- The type of Price List. This can be one of either `sale` or @@ -9447,6 +13044,14 @@ components: enum: - sale - override + default: sale + status: + description: The status of the Price List + type: string + enum: + - active + - draft + default: draft starts_at: description: The date with timezone that the Price List starts being valid. type: string @@ -9456,60 +13061,78 @@ components: type: string format: date-time customer_groups: - description: The Customer Groups that the Price List applies to. + description: >- + The Customer Groups that the Price List applies to. Available if the + relation `customer_groups` is expanded. type: array items: - $ref: '#/components/schemas/customer_group' + type: object + description: A customer group object. + prices: + description: >- + The Money Amounts that are associated with the Price List. Available + if the relation `prices` is expanded. + type: array + items: + $ref: '#/components/schemas/money_amount' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time product_collection: title: Product Collection description: Product Collections represents a group of Products that are related. x-resourceId: product_collection + required: + - title properties: id: - description: >- - The id of the Product Collection. This value will be prefixed with - `pcol_`. type: string + description: The product collection's ID + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG title: description: The title that the Product Collection is identified by. type: string + example: Summer Collection handle: description: >- A unique string that identifies the Product Collection - can for example be used in slug structures. type: string + example: summer-collection products: - description: The Products contained in the Product Collection. + description: >- + The Products contained in the Product Collection. Available if the + relation `products` is expanded. type: array items: - $ref: '#/components/schemas/product' + type: object + description: A product collection object. created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_option_value: title: Product Option Value description: >- @@ -9517,43 +13140,57 @@ components: Product Option Value for each of the Product Options defined on the Product. x-resourceId: product_option_value + required: + - value + - option_id + - variant_id properties: id: - description: >- - The id of the Product Option Value. This value will be prefixed with - `optval_`. type: string + description: The product option value's ID + example: optval_01F0YESHR7S6ECD03RF6W12DSJ value: description: >- The value that the Product Variant has defined for the specific Product Option (e.g. if the Product Option is "Size" this value could be "Small", "Medium" or "Large"). type: string + example: large option_id: description: >- - The id of the Product Option that the Product Option Value is + The ID of the Product Option that the Product Option Value is defined for. type: string + example: opt_01F0YESHQBZVKCEXJ24BS6PCX3 + option: + description: Available if the relation `option` is expanded. + $ref: '#/components/schemas/product_option' variant_id: description: >- - The id of the Product Variant that the Product Option Value is + The ID of the Product Variant that the Product Option Value is defined for. type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: Available if the relation `variant` is expanded. + $ref: '#/components/schemas/product_variant' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_option: title: Product Option description: >- @@ -9561,150 +13198,189 @@ components: variants of a Product. Common Product Options are "Size" and "Color", but Medusa doesn't limit what Product Options that can be defined. x-resourceId: product_option + required: + - title + - product_id properties: id: - description: >- - The id of the Product Option. This value will be prefixed with - `opt_`. type: string + description: The product option's ID + example: opt_01F0YESHQBZVKCEXJ24BS6PCX3 title: description: The title that the Product Option is defined by (e.g. "Size"). type: string + example: Size values: - description: The Product Option Values that are defined for the Product Option. + description: >- + The Product Option Values that are defined for the Product Option. + Available if the relation `values` is expanded. type: array items: $ref: '#/components/schemas/product_option_value' product_id: - description: The id of the Product that the Product Option is defined for. + description: The ID of the Product that the Product Option is defined for. type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: A product object. Available if the relation `product` is expanded. + type: object created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_tag: title: Product Tag description: Product Tags can be added to Products for easy filtering and grouping. x-resourceId: product_tag + required: + - value properties: id: - description: The id of the Product Tag. This value will be prefixed with `ptag_`. type: string + description: The product tag's ID + example: ptag_01G8K2MTMG9168F2B70S1TAVK3 value: - description: The value that the Product Tag represents (e.g. "Pants"). + description: The value that the Product Tag represents type: string + example: Pants created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_tax_rate: title: Product Tax Rate description: >- Associates a tax rate with a product to indicate that the product is taxed in a certain way x-resourceId: product_tax_rate + required: + - product_id + - rate_id properties: product_id: - description: The id of the Product + description: The ID of the Product type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: Available if the relation `product` is expanded. + $ref: '#/components/schemas/product' rate_id: - description: The id of the Tax Rate + description: The ID of the Tax Rate type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: '#/components/schemas/tax_rate' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_type_tax_rate: title: Product Type Tax Rate description: >- Associates a tax rate with a product type to indicate that the product type is taxed in a certain way x-resourceId: product_type_tax_rate + required: + - product_type_id + - rate_id properties: product_type_id: - description: The id of the Product type + description: The ID of the Product type type: string + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + product_type: + description: Available if the relation `product_type` is expanded. + $ref: '#/components/schemas/product_type' rate_id: description: The id of the Tax Rate type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: '#/components/schemas/tax_rate' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_type: title: Product Type description: >- Product Type can be added to Products for filtering and reporting purposes. x-resourceId: product_type + required: + - value properties: id: - description: >- - The id of the Product Type. This value will be prefixed with - `ptyp_`. type: string + description: The product type's ID + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A value: - description: The value that the Product Type represents (e.g. "Clothing"). + description: The value that the Product Type represents. type: string + example: Clothing created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_variant: title: Product Variant description: >- @@ -9713,25 +13389,33 @@ components: Product can have is given by the number of available Product Option combinations. x-resourceId: product_variant + required: + - title + - product_id + - inventory_quantity properties: id: - description: >- - The id of the Product Variant. This value will be prefixed with - `variant_`. type: string + description: The product variant's ID + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 title: description: >- A title that can be displayed for easy identification of the Product Variant. type: string + example: Small product_id: - description: The id of the Product that the Product Variant belongs to. + description: The ID of the Product that the Product Variant belongs to. type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: A product object. Available if the relation `product` is expanded. + type: object prices: description: >- The Money Amounts defined for the Product Variant. Each Money Amount represents a price in a given currency or a price in a specific - Region. + Region. Available if the relation `prices` is expanded. type: array items: $ref: '#/components/schemas/money_amount' @@ -9741,96 +13425,119 @@ components: This will usually be a unqiue identifer for the item that is to be shipped, and can be referenced across multiple systems. type: string + example: shirt-123 barcode: description: >- A generic field for a GTIN number that can be used to identify the Product Variant. type: string + example: null ean: description: >- An EAN barcode number that can be used to identify the Product Variant. type: string + example: null upc: description: >- A UPC barcode number that can be used to identify the Product Variant. type: string + example: null + variant_rank: + description: The ranking of this variant + type: number + default: 0 inventory_quantity: description: The current quantity of the item that is stocked. type: integer + example: 100 allow_backorder: description: >- Whether the Product Variant should be purchasable when `inventory_quantity` is 0. type: boolean + default: false manage_inventory: description: Whether Medusa should manage inventory for the Product Variant. type: boolean + default: true hs_code: description: >- The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null origin_country: description: >- The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null mid_code: description: >- The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null material: description: >- The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null weight: description: >- The weight of the Product Variant. May be used in shipping rate calculations. - type: string + type: number + example: null height: description: >- The height of the Product Variant. May be used in shipping rate calculations. - type: string + type: number + example: null width: description: >- The width of the Product Variant. May be used in shipping rate calculations. - type: string + type: number + example: null length: description: >- The length of the Product Variant. May be used in shipping rate calculations. - type: string + type: number + example: null options: - description: The Product Option Values specified for the Product Variant. + description: >- + The Product Option Values specified for the Product Variant. + Available if the relation `options` is expanded. type: array items: $ref: '#/components/schemas/product_option_value' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product: title: Product description: >- @@ -9838,15 +13545,20 @@ components: such as images and descriptions. Products can have multiple options which define the properties that Product Variants differ by. x-resourceId: product + required: + - title + - profile_id properties: id: - description: The id of the Product. This value will be prefixed with `prod_`. type: string + description: The product's ID + example: prod_01G1G5V2MBA328390B5AXJ610F title: description: >- A title that can be displayed for easy identification of the Product. type: string + example: Medusa Coffee Mug subtitle: description: >- An optional subtitle that can be used to further specify the @@ -9855,121 +13567,174 @@ components: description: description: A short description of the Product. type: string + example: Every programmer's best friend. handle: description: A unique identifier for the Product (e.g. for slug structure). type: string + example: coffee-mug is_giftcard: description: >- Whether the Product represents a Gift Card. Products that represent Gift Cards will automatically generate a redeemable Gift Card code once they are purchased. type: boolean - discountable: - description: >- - Whether the Product can be discounted. Discounts will not apply to - Line Items of this Product when this flag is set to `false`. - type: boolean + default: false + status: + description: The status of the product + type: string + enum: + - draft + - proposed + - published + - rejected + default: draft images: - description: Images of the Product + description: >- + Images of the Product. Available if the relation `images` is + expanded. type: array items: $ref: '#/components/schemas/image' thumbnail: description: A URL to an image file that can be used to identify the Product. type: string + format: uri options: description: >- The Product Options that are defined for the Product. Product Variants of the Product will have a unique combination of Product - Option Values. + Option Values. Available if the relation `options` is expanded. type: array items: $ref: '#/components/schemas/product_option' variants: description: >- The Product Variants that belong to the Product. Each will have a - unique combination of Product Option Values. + unique combination of Product Option Values. Available if the + relation `variants` is expanded. type: array items: $ref: '#/components/schemas/product_variant' profile_id: description: >- - The id of the Shipping Profile that the Product belongs to. Shipping + The ID of the Shipping Profile that the Product belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products. type: string + example: sp_01G1G5V239ENSZ5MV4JAR737BM + profile: + description: Available if the relation `profile` is expanded. + $ref: '#/components/schemas/shipping_profile' + weight: + description: >- + The weight of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + height: + description: >- + The height of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + width: + description: >- + The width of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + length: + description: >- + The length of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null hs_code: description: >- The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null origin_country: description: >- The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null mid_code: description: >- The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null material: description: >- The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string - weight: - description: >- - The weight of the Product Variant. May be used in shipping rate - calculations. + example: null + collection_id: type: string - height: - description: >- - The height of the Product Variant. May be used in shipping rate - calculations. - type: string - width: - description: >- - The width of the Product Variant. May be used in shipping rate - calculations. - type: string - length: - description: >- - The length of the Product Variant. May be used in shipping rate - calculations. - type: string - type: - description: The Product Type of the Product (e.g. "Clothing") - anyOf: - - $ref: '#/components/schemas/product_type' + description: The Product Collection that the Product belongs to + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG collection: - description: The Product Collection that the Product belongs to (e.g. "SS20") - anyOf: - - $ref: '#/components/schemas/product_collection' + description: >- + A product collection object. Available if the relation `collection` + is expanded. + type: object + type_id: + type: string + description: The Product type that the Product belongs to + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + type: + description: Available if the relation `type` is expanded. + $ref: '#/components/schemas/product_type' tags: - description: The Product Tags assigned to the Product. + description: >- + The Product Tags assigned to the Product. Available if the relation + `tags` is expanded. type: array items: $ref: '#/components/schemas/product_tag' - created_at: - description: The date with timezone at which the resource was created. + discountable: + description: >- + Whether the Product can be discounted. Discounts will not apply to + Line Items of this Product when this flag is set to `false`. + type: boolean + default: true + external_id: + description: The external ID of the product type: string + example: null + sales_channels: + description: >- + The sales channels the product is associated with. Available if the + relation `sales_channels` is expanded. + type: array + items: + type: object + description: A sales channel object. + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white refund: title: Refund description: >- @@ -9977,19 +13742,26 @@ components: a given reason. Refunds may occur in relation to Returns, Swaps and Claims, but can also be initiated by a store operator. x-resourceId: refund + required: + - order_id + - amount properties: id: - description: The id of the Refund. This value will be prefixed with `ref_`. type: string + description: The refund's ID + example: ref_01G1G5V27GYX4QXNARRQCW1N8T order_id: description: The id of the Order that the Refund is related to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK amount: description: The amount that has be refunded to the Customer. type: integer + example: 1000 note: description: An optional note explaining why the amount was refunded. type: string + example: I didn't like it reason: description: >- The reason given for the Refund, will automatically be set when @@ -10001,17 +13773,33 @@ components: - swap - claim - other - created_at: - description: The date with timezone at which the resource was created. + example: return + idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of the refund + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white region: title: Region description: >- @@ -10020,137 +13808,212 @@ components: Region can consist of multiple countries to accomodate common shopping settings across countries. x-resourceId: region + required: + - name + - currency_code + - tax_rate properties: id: - description: The id of the Region. This value will be prefixed with `reg_`. type: string + description: The cart's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G name: description: >- The name of the region as displayed to the customer. If the Region only has one country it is recommended to write the country name. type: string + example: EU currency_code: - description: >- - The 3 character ISO currency code that Customers will shop in in the - Region. + description: The 3 character currency code that the Region uses. type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: '#/components/schemas/currency' tax_rate: description: The tax rate that should be charged on purchases in the Region. type: number + example: 0 + tax_rates: + description: >- + The tax rates that are included in the Region. Available if the + relation `tax_rates` is expanded. + type: array + items: + $ref: '#/components/schemas/tax_rate' tax_code: description: >- The tax code used on purchases in the Region. This may be used by other systems for accounting purposes. type: string + example: null + gift_cards_taxable: + description: Whether the gift cards are taxable or not in this region. + type: boolean + default: true + automatic_taxes: + description: Whether taxes should be automated in this region. + type: boolean + default: true countries: - description: The countries that are included in the Region. + description: >- + The countries that are included in the Region. Available if the + relation `countries` is expanded. type: array items: $ref: '#/components/schemas/country' + tax_provider_id: + type: string + description: The ID of the tax provider used in this region + example: null + tax_provider: + description: Available if the relation `tax_provider` is expanded. + $ref: '#/components/schemas/tax_provider' payment_providers: description: >- The Payment Providers that can be used to process Payments in the - Region. + Region. Available if the relation `payment_providers` is expanded. type: array items: $ref: '#/components/schemas/payment_provider' fulfillment_providers: description: >- The Fulfillment Providers that can be used to fulfill orders in the - Region. + Region. Available if the relation `payment_providers` is expanded. type: array items: $ref: '#/components/schemas/fulfillment_provider' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white return_item: title: Return Item description: >- Correlates a Line Item with a Return, keeping track of the quantity of the Line Item that will be returned. x-resourceId: return_item + required: + - return_id + - item_id properties: return_id: description: The id of the Return that the Return Item belongs to. type: string + example: ret_01F0YET7XPCMF8RZ0Y151NZV2V + return_order: + description: Available if the relation `return_order` is expanded. + $ref: '#/components/schemas/return' item_id: description: The id of the Line Item that the Return Item references. type: string + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN item: - description: The Line Item that the Return Item references. - anyOf: - - $ref: '#/components/schemas/line_item' + description: Available if the relation `item` is expanded. + $ref: '#/components/schemas/line_item' quantity: description: The quantity of the Line Item that is included in the Return. type: integer + example: 1 is_requested: description: >- Whether the Return Item was requested initially or received unexpectedly in the warehouse. type: boolean + default: true requested_quantity: description: The quantity that was originally requested to be returned. type: integer + example: 1 recieved_quantity: description: The quantity that was received in the warehouse. type: integer + example: 1 + reason_id: + description: The ID of the reason for returning the item. + type: string + example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ reason: - description: The reason for returning the item. - anyOf: - - $ref: '#/components/schemas/return_reason' + description: Available if the relation `reason` is expanded. + $ref: '#/components/schemas/return_reason' note: description: An optional note with additional details about the Return. type: string + example: I didn't like it. metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white return_reason: title: Return Reason description: >- A Reason for why a given product is returned. A Return Reason can be used on Return Items in order to indicate why a Line Item was returned. x-resourceId: return_reason + required: + - value + - label properties: id: - description: The id of the Return Reason will start with `rr_`. type: string + description: The cart's ID + example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ description: description: A description of the Reason. type: string + example: Items that are damaged label: description: A text that can be displayed to the Customer as a reason. type: string + example: Damaged goods value: description: The value to identify the reason by. type: string - created_at: - description: The date with timezone at which the resource was created. + example: damaged + parent_return_reason_id: type: string + description: The ID of the parent reason. + example: null + parent_return_reason: + description: Available if the relation `parent_return_reason` is expanded. + $ref: '#/components/schemas/return_reason' + return_reason_children: + description: Available if the relation `return_reason_children` is expanded. + $ref: '#/components/schemas/return_reason' + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white return: title: Return description: >- @@ -10158,10 +14021,13 @@ components: to send back, along with how the items will be returned. Returns can be used as part of a Swap. x-resourceId: return + required: + - refund_amount properties: id: - description: The id of the Return. This value will be prefixed with `ret_`. type: string + description: The return's ID + example: ret_01F0YET7XPCMF8RZ0Y151NZV2V status: description: Status of the Return. type: string @@ -10169,53 +14035,168 @@ components: - requested - received - requires_action + - canceled + default: requested items: description: >- - The Return Items that will be shipped back to the warehouse. type: - array items: $ref: + The Return Items that will be shipped back to the warehouse. + Available if the relation `items` is expanded. + type: array + items: + $ref: '#/components/schemas/return_item' swap_id: - description: The id of the Swap that the Return is a part of. + description: The ID of the Swap that the Return is a part of. type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object order_id: - description: The id of the Order that the Return is made from. + description: The ID of the Order that the Return is made from. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object claim_order_id: - description: The id of the Claim that the Return is a part of. + description: The ID of the Claim that the Return is a part of. type: string + example: null + claim_order: + description: >- + A claim order object. Available if the relation `claim_order` is + expanded. + type: object shipping_method: description: >- The Shipping Method that will be used to send the Return back. Can be null if the Customer facilitates the return shipment themselves. - anyOf: - - $ref: '#/components/schemas/shipping_method' + Available if the relation `shipping_method` is expanded. + type: array + items: + $ref: '#/components/schemas/shipping_method' shipping_data: description: >- Data about the return shipment as provided by the Fulfilment Provider that handles the return shipment. type: object + example: {} refund_amount: description: The amount that should be refunded as a result of the return. type: integer - received_at: - description: The date with timezone at which the return was received. - type: string - format: date-time - created_at: - description: The date with timezone at which the resource was created. - type: string - format: date-time - updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time + example: 1000 no_notification: description: >- When set to true, no notification will be sent related to this return. type: boolean + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the return + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + received_at: + description: The date with timezone at which the return was received. + type: string + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white + sales_channel: + title: Sales Channel + description: A Sales Channel + x-resourceId: sales_channel + required: + - name + properties: + id: + type: string + description: The sales channel's ID + example: sc_01G8X9A7ESKAJXG2H0E6F1MW7A + name: + description: The name of the sales channel. + type: string + example: Market + description: + description: The description of the sales channel. + type: string + example: Multi-vendor market + is_disabled: + description: Specify if the sales channel is enabled or disabled. + type: boolean + default: false + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + sales_channel_tax_line: + title: Sales Channel + description: A Sales Channel + x-resourceId: sales_channel_tax_line + required: + - shipping_method_id + - rate + - name + properties: + id: + type: string + description: The line item tax line's ID + example: smtl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + shipping_method_id: + type: string + description: The ID of the line item + example: sm_01F0YET7DR2E7CYVSDHM593QG2 + shipping_method: + description: Available if the relation `shipping_method` is expanded. + $ref: '#/components/schemas/shipping_method' + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + rate: + description: The numeric rate to charge tax by + type: number + example: 10 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white shipping_method: title: Shipping Method description: >- @@ -10224,65 +14205,105 @@ components: contain additional details, that can be necessary for the Fulfillment Provider to handle the shipment. x-resourceId: shipping_method + required: + - shipping_option_id + - price properties: id: - description: >- - The id of the Shipping Method. This value will be prefixed with - `sm_`. type: string + description: The shipping method's ID + example: sm_01F0YET7DR2E7CYVSDHM593QG2 shipping_option_id: description: >- The id of the Shipping Option that the Shipping Method is built from. type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T shipping_option: - description: The Shipping Option that the Shipping Method is built from. - anyOf: - - $ref: '#/components/schemas/shipping_option' + description: Available if the relation `shipping_option` is expanded. + $ref: '#/components/schemas/shipping_option' order_id: description: The id of the Order that the Shipping Method is used on. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object return_id: description: The id of the Return that the Shipping Method is used on. type: string + example: null + return_order: + description: >- + A return object. Available if the relation `return_order` is + expanded. + type: object swap_id: description: The id of the Swap that the Shipping Method is used on. type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object cart_id: description: The id of the Cart that the Shipping Method is used on. type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object claim_order_id: description: The id of the Claim that the Shipping Method is used on. type: string + example: null + claim_order: + description: >- + A claim order object. Available if the relation `claim_order` is + expanded. + type: object + tax_lines: + type: array + description: Available if the relation `tax_lines` is expanded. + items: + $ref: '#/components/schemas/tax_line' price: description: >- The amount to charge for the Shipping Method. The currency of the price is defined by the Region that the Order that the Shipping Method belongs to is a part of. type: integer + example: 200 data: description: >- Additional data that the Fulfillment Provider needs to fulfill the shipment. This is used in combination with the Shipping Options data, and may contain information such as a drop point id. type: object + example: {} shipping_option_requirement: title: Shipping Option Requirement description: >- A requirement that a Cart must satisfy for the Shipping Option to be available to the Cart. x-resourceId: shipping_option_requirement + required: + - shipping_option_id + - type + - amount properties: id: - description: >- - The id of the Shipping Option Requirement. This value will be - prefixed with `sor_`. type: string + description: The shipping option requirement's ID + example: sor_01G1G5V29AB4CTNDRFSRWSRKWD shipping_option_id: description: >- - The id of the Shipping Option that the Shipping Option Requirement - belongs to. + The id of the Shipping Option that the hipping option requirement + belongs to type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: Available if the relation `shipping_option` is expanded. + $ref: '#/components/schemas/shipping_option' type: description: >- The type of the requirement, this defines how the value will be @@ -10294,9 +14315,15 @@ components: enum: - min_subtotal - max_subtotal + example: min_subtotal amount: description: The amount to compare the Cart subtotal to. type: integer + example: 100 + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time shipping_option: title: Shipping Option description: >- @@ -10307,35 +14334,49 @@ components: Shipping Methods. This distinction makes it possible to customize individual Shipping Methods with additional information. x-resourceId: shipping_option + required: + - name + - region_id + - profile_id + - provider_id + - price_type properties: id: - description: >- - The id of the Shipping Option. This value will be prefixed with - `so_`. type: string + description: The shipping option's ID + example: so_01G1G5V27GYX4QXNARRQCW1N8T name: description: >- The name given to the Shipping Option - this may be displayed to the Customer. type: string + example: PostFake Standard region_id: - description: The id of the Region that the Shipping Option belongs to. type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G region: - description: The id of the Region that the Shipping Option belongs to. - anyOf: - - $ref: '#/components/schemas/region' + description: A region object. Available if the relation `region` is expanded. + type: object profile_id: description: >- - The id of the Shipping Profile that the Shipping Option belongs to. + The ID of the Shipping Profile that the shipping option belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products. type: string + example: sp_01G1G5V239ENSZ5MV4JAR737BM + profile: + description: Available if the relation `profile` is expanded. + $ref: '#/components/schemas/shipping_profile' provider_id: description: >- The id of the Fulfillment Provider, that will be used to process Fulfillments from the Shipping Option. type: string + example: manual + provider: + description: Available if the relation `provider` is expanded. + $ref: '#/components/schemas/fulfillment_provider' price_type: description: >- The type of pricing calculation that is used when creatin Shipping @@ -10346,20 +14387,24 @@ components: enum: - flat_rate - calculated + example: flat_rate amount: description: >- The amount to charge for shipping when the Shipping Option price type is `flat_rate`. type: integer + example: 200 is_return: description: >- Flag to indicate if the Shipping Option can be used for Return shipments. type: boolean + default: false requirements: description: >- The requirements that must be satisfied for the Shipping Option to - be available for a Cart. + be available for a Cart. Available if the relation `requirements` is + expanded. type: array items: $ref: '#/components/schemas/shipping_option_requirement' @@ -10368,38 +14413,44 @@ components: The data needed for the Fulfillment Provider to identify the Shipping Option. type: object + example: {} created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white shipping_profile: title: Shipping Profile description: >- Shipping Profiles have a set of defined Shipping Options that can be used to fulfill a given set of Products. x-resourceId: shipping_profile + required: + - name + - type properties: id: - description: >- - The id of the Shipping Profile. This value will be prefixed with - `sp_`. type: string + description: The shipping profile's ID + example: sp_01G1G5V239ENSZ5MV4JAR737BM name: description: >- The name given to the Shipping profile - this may be displayed to the Customer. type: string + example: Default Shipping Profile type: description: >- The type of the Shipping Profile, may be `default`, `gift_card` or @@ -10409,99 +14460,156 @@ components: - default - gift_card - custom + example: default products: - description: The Products that the Shipping Profile defines Shipping Options for. + description: >- + The Products that the Shipping Profile defines Shipping Options for. + Available if the relation `products` is expanded. type: array items: - $ref: '#/components/schemas/product' + type: object + description: A product object. shipping_options: description: >- The Shipping Options that can be used to fulfill the Products in the - Shipping Profile. + Shipping Profile. Available if the relation `shipping_options` is + expanded. type: array items: - anyOf: - - $ref: '#/components/schemas/shipping_option' + $ref: '#/components/schemas/shipping_option' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white shipping_tax_rate: title: Shipping Tax Rate description: >- Associates a tax rate with a shipping option to indicate that the shipping option is taxed in a certain way x-resourceId: shipping_tax_rate + required: + - shipping_option_id + - rate_id properties: shipping_option_id: - description: The id of the Shipping Option + description: The ID of the Shipping Option type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: Available if the relation `shipping_option` is expanded. + $ref: '#/components/schemas/shipping_option' rate_id: - description: The id of the Tax Rate + description: The ID of the Tax Rate type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: '#/components/schemas/tax_rate' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white + staged_job: + title: Staged Job + description: A staged job resource + x-resourceId: staged_job + required: + - event_name + properties: + id: + type: string + description: The staged job's ID + example: job_01F0YET7BZTARY9MKN1SJ7AAXF + event_name: + description: The name of the event + type: string + example: order.placed + data: + description: Data necessary for the job + type: object + example: {} store: title: Store description: 'Holds settings for the Store, such as name, currencies, etc.' x-resourceId: store properties: id: - description: The id of the Store. This value will be prefixed with `store_`. type: string + description: The store's ID + example: store_01G1G5V21KADXNGH29BJMAJ4B4 name: description: The name of the Store - this may be displayed to the Customer. type: string + example: Medusa Store default_currency_code: - description: >- - The default currency code used when no other currency code is - specified. + description: The 3 character currency code that is the default of the store. type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + default_currency: + description: Available if the relation `default_currency` is expanded. + $ref: '#/components/schemas/currency' currencies: - description: The currencies that are enabled for the Store. + description: >- + The currencies that are enabled for the Store. Available if the + relation `currencies` is expanded. type: array items: $ref: '#/components/schemas/currency' swap_link_template: description: >- - A template to generate Swap links from use {{cart_id}} to include + A template to generate Swap links from. Use {{cart_id}} to include the Swap's `cart_id` in the link. type: string - created_at: - description: The date with timezone at which the resource was created. + example: null + payment_link_template: + description: >- + A template to generate Payment links from. Use {{cart_id}} to + include the payment's `cart_id` in the link. type: string - format: date-time - updated_at: - description: The date with timezone at which the resource was last updated. + example: null + invite_link_template: + description: A template to generate Invite links from type: string - format: date-time - metadata: - description: An optional key-value map with additional information. + example: null + default_sales_channel_id: + type: string + description: The sales channel ID the cart is associated with. + example: null + default_sales_channel: + description: >- + A sales channel object. Available if the relation + `default_sales_channel` is expanded. type: object + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white swap: title: Swap description: >- @@ -10513,23 +14621,25 @@ components: Products being returned exceed the amount to be paid for the new Products, a Refund will be issued for the difference. x-resourceId: swap + required: + - fulfillment_status + - payment_status + - order_id properties: id: - description: The id of the Swap. This value will be prefixed with `swap_`. type: string + description: The swap's ID + example: swap_01F0YET86Y9G92D3YDR9Y6V676 fulfillment_status: description: The status of the Fulfillment of the Swap. type: string enum: - not_fulfilled - - partially_fulfilled - fulfilled - - partially_shipped - shipped - - partially_returned - - returned - canceled - requires_action + example: not_fulfilled payment_status: description: >- The status of the Payment of the Swap. The payment may either refer @@ -10539,71 +14649,96 @@ components: - not_paid - awaiting - captured + - confirmed - canceled - difference_refunded + - partially_refunded + - refunded - requires_action + example: not_paid order_id: description: >- - The id of the Order where the Line Items to be returned where + The ID of the Order where the Line Items to be returned where purchased. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object additional_items: - description: The new Line Items to ship to the Customer. + description: >- + The new Line Items to ship to the Customer. Available if the + relation `additional_items` is expanded. type: array items: $ref: '#/components/schemas/line_item' return_order: - description: The Return that is issued for the return part of the Swap. - anyOf: - - $ref: '#/components/schemas/return' + description: >- + A return order object. The Return that is issued for the return part + of the Swap. Available if the relation `return_order` is expanded. + type: object fulfillments: - description: The Fulfillments used to send the new Line Items. + description: >- + The Fulfillments used to send the new Line Items. Available if the + relation `fulfillments` is expanded. type: array items: $ref: '#/components/schemas/fulfillment' payment: description: >- The Payment authorized when the Swap requires an additional amount - to be charged from the Customer. - anyOf: - - $ref: '#/components/schemas/payment' + to be charged from the Customer. Available if the relation `payment` + is expanded. + $ref: '#/components/schemas/payment' difference_due: description: >- The difference that is paid or refunded as a result of the Swap. May be negative when the amount paid for the returned items exceed the total of the new Products. type: integer - shipping_address: + example: 0 + shipping_address_id: description: >- The Address to send the new Line Items to - in most cases this will be the same as the shipping address on the Order. - anyOf: - - $ref: '#/components/schemas/address' + type: string + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: '#/components/schemas/address' shipping_methods: - description: The Shipping Methods used to fulfill the addtional items purchased. + description: >- + The Shipping Methods used to fulfill the addtional items purchased. + Available if the relation `shipping_methods` is expanded. type: array items: $ref: '#/components/schemas/shipping_method' cart_id: description: The id of the Cart that the Customer will use to confirm the Swap. type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object allow_backorder: description: 'If true, swaps can be completed with items out of stock' type: boolean + default: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the swap + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. confirmed_at: description: >- The date with timezone at which the Swap was confirmed by the Customer. type: string format: date-time - created_at: - description: The date with timezone at which the resource was created. - type: string - format: date-time - updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time canceled_at: description: The date with timezone at which the Swap was canceled. type: string @@ -10611,37 +14746,61 @@ components: no_notification: description: 'If set to true, no notification will be sent related to this swap' type: boolean + example: false + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white tax_line: title: Tax Line description: Line item that specifies an amount of tax to add to a line item. x-resourceId: tax_line + required: + - rate + - name properties: id: - description: The id of the Tax Line. This value will be prefixed by `tl_`. type: string + description: The tax line's ID + example: tl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 code: description: A code to identify the tax type by type: string + example: tax01 name: description: A human friendly name for the tax type: string + example: Tax Example rate: description: The numeric rate to charge tax by type: number + example: 10 created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white tax_provider: title: Tax Provider description: The tax service used to calculate taxes @@ -10650,50 +14809,96 @@ components: id: description: The id of the tax provider as given by the plugin. type: string + example: manual is_installed: description: >- Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`. type: boolean + default: true tax_rate: title: Tax Rate description: >- A Tax Rate can be used to associate a certain rate to charge on products within a given Region x-resourceId: line_item + required: + - name + - region_id properties: id: - description: The id of the Tax Rate. This value will be prefixed by `txr_`. type: string + description: The tax rate's ID + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR rate: description: The numeric rate to charge type: number + example: 10 code: description: A code to identify the tax type by type: string + example: tax01 name: description: A human friendly name for the tax type: string + example: Tax Example region_id: + type: string description: The id of the Region that the rate belongs to - type: string + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + products: + type: array + description: >- + The products that belong to this tax rate. Available if the relation + `products` is expanded. + items: + type: object + description: A product object. + product_types: + type: array + description: >- + The product types that belong to this tax rate. Available if the + relation `product_types` is expanded. + items: + type: object + description: A product type object. + shipping_options: + type: array + description: >- + The shipping options that belong to this tax rate. Available if the + relation `shipping_options` is expanded. + items: + type: object + description: A shipping option object. + product_count: + description: The count of products + type: integer + example: null + product_type_count: + description: The count of product types + type: integer + example: null + shipping_option_count: + description: The count of shipping options + type: integer + example: null created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object - refundable: - description: >- - The amount that can be refunded from the given Line Item. Takes - taxes and discounts into consideration. - type: integer + description: An optional key-value map with additional details + example: + car: white tracking_link: title: Tracking Link description: >- @@ -10701,61 +14906,96 @@ components: Fulfillment. Tracking Links can optionally contain a URL that can be visited to see the status of the shipment. x-resourceId: tracking_link + required: + - tracking_number + - fulfillment_id properties: id: - description: >- - The id of the Tracking Link. This value will be prefixed with - `tlink_`. type: string + description: The tracking link's ID + example: tlink_01G8ZH853Y6TFXWPG5EYE81X63 url: description: The URL at which the status of the shipment can be tracked. type: string + format: uri tracking_number: description: The tracking number given by the shipping carrier. type: string + format: RH370168054CN fulfillment_id: + type: string description: The id of the Fulfillment that the Tracking Link references. + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF + fulfillment: + description: Available if the relation `fulfillment` is expanded. + $ref: '#/components/schemas/fulfillment' + idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of a process + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white user: title: User description: Represents a User who can manage store settings. x-resourceId: user + required: + - email properties: id: - description: The unique id of the User. This will be prefixed with `usr_` type: string + description: The user's ID + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V email: description: The email of the User type: string + format: email first_name: + description: The first name of the User type: string + example: Levi last_name: - description: The Customer's billing address. - anyOf: - - $ref: '#/components/schemas/address' + description: The last name of the User + type: string + example: Bogan + api_token: + description: An API token associated with the user. + type: string + example: null created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/OAuth.yaml b/docs/api/admin/components/schemas/OAuth.yaml new file mode 100644 index 0000000000..a9afba0974 --- /dev/null +++ b/docs/api/admin/components/schemas/OAuth.yaml @@ -0,0 +1,32 @@ +title: OAuth +description: Represent an OAuth app +x-resourceId: OAuth +required: + - id + - display_name + - application_name +properties: + id: + type: string + description: The app's ID + example: example_app + display_name: + type: string + description: The app's display name + example: Example app + application_name: + type: string + description: The app's name + example: example + install_url: + type: string + description: The URL to install the app + format: uri + uninstall_url: + type: string + description: The URL to uninstall the app + format: uri + data: + type: object + description: Any data necessary to the app. + example: {} diff --git a/docs/api/admin/components/schemas/address.yaml b/docs/api/admin/components/schemas/address.yaml new file mode 100644 index 0000000000..ff413792f1 --- /dev/null +++ b/docs/api/admin/components/schemas/address.yaml @@ -0,0 +1,82 @@ +title: Address +description: An address. +x-resourceId: address +properties: + id: + type: string + description: ID of the address + example: addr_01G8ZC9VS1XVE149MGH2J7QSSH + customer_id: + type: string + description: ID of the customer this address belongs to + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: Available if the relation `customer` is expanded. + type: array + items: + type: object + description: A customer object. + company: + type: string + description: Company name + example: Acme + first_name: + type: string + description: First name + example: Arno + last_name: + type: string + description: Last name + example: Willms + address_1: + type: string + description: Address line 1 + example: 14433 Kemmer Court + address_2: + type: string + description: Address line 2 + example: Suite 369 + city: + type: string + description: City + example: South Geoffreyview + country_code: + type: string + description: The 2 character ISO code of the country in lower case + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + example: st + country: + description: A country object. Available if the relation `country` is expanded. + type: object + province: + type: string + description: Province + example: Kentucky + postal_code: + type: string + description: Postal Code + example: 72093 + phone: + type: string + description: Phone Number + example: 16128234334802 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/batch_job.yaml b/docs/api/admin/components/schemas/batch_job.yaml new file mode 100644 index 0000000000..dcb63d5f55 --- /dev/null +++ b/docs/api/admin/components/schemas/batch_job.yaml @@ -0,0 +1,139 @@ +title: Batch Job +description: A Batch Job. +x-resourceId: batch_job +required: + - type +properties: + id: + type: string + description: The unique identifier for the batch job. + example: batch_01G8T782965PYFG0751G0Z38B4 + type: + type: string + description: The type of batch job. + enum: + - product-import + - product-export + status: + type: string + description: The status of the batch job. + enum: + - created + - pre_processed + - confirmed + - processing + - completed + - canceled + - failed + default: created + created_by: + type: string + description: The unique identifier of the user that created the batch job. + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + created_by_user: + description: A user object. Available if the relation `created_by_user` is expanded. + type: object + context: + type: object + description: >- + The context of the batch job, the type of the batch job determines what + the context should contain. + example: + shape: + prices: + - region: null + currency_code: eur + dynamicImageColumnCount: 4 + dynamicOptionColumnCount: 2 + list_config: + skip: 0 + take: 50 + order: + created_at: DESC + relations: + - variants + - variant.prices + - images + dry_run: + type: boolean + description: Specify if the job must apply the modifications or not. + default: false + result: + type: object + description: The result of the batch job. + properties: + count: + type: number + advancement_count: + type: number + progress: + type: number + errors: + type: object + properties: + message: + type: string + code: + oneOf: + - type: string + - type: number + err: + type: array + stat_descriptors: + type: object + properties: + key: + type: string + name: + type: string + message: + type: string + file_key: + type: string + file_size: + type: number + example: + errors: + - err: [] + code: unknown + message: Method not implemented. + stat_descriptors: + - key: product-export-count + name: Product count to export + message: There will be 8 products exported by this action + pre_processed_at: + type: string + description: The date from which the job has been pre processed. + format: date-time + processing_at: + type: string + description: The date the job is processing at. + format: date-time + confirmed_at: + type: string + description: The date when the confirmation has been done. + format: date-time + completed_at: + type: string + description: The date of the completion. + format: date-time + canceled_at: + type: string + description: The date of the concellation. + format: date-time + failed_at: + type: string + description: The date when the job failed. + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was last updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time diff --git a/docs/api/admin/components/schemas/cart.yaml b/docs/api/admin/components/schemas/cart.yaml new file mode 100644 index 0000000000..0881621115 --- /dev/null +++ b/docs/api/admin/components/schemas/cart.yaml @@ -0,0 +1,174 @@ +title: Cart +description: Represents a user cart +x-resourceId: cart +properties: + id: + type: string + description: The cart's ID + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + email: + type: string + description: The email associated with the cart + format: email + billing_address_id: + type: string + description: The billing address's ID + example: addr_01G8ZH853YPY9B94857DY91YGW + billing_address: + description: Available if the relation `billing_address` is expanded. + $ref: ./address.yaml + shipping_address_id: + type: string + description: The shipping address's ID + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: ./address.yaml + items: + description: Available if the relation `items` is expanded. + type: array + items: + $ref: ./line_item.yaml + region_id: + type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + discounts: + type: array + description: Available if the relation `discounts` is expanded. + items: + type: object + description: A discount object. + gift_cards: + type: array + description: Available if the relation `gift_cards` is expanded. + items: + type: object + description: A gift card object. + customer_id: + type: string + description: The customer's ID + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: A customer object. Available if the relation `customer` is expanded. + type: object + payment_session: + description: The selected payment session in the cart. + $ref: ./payment_session.yaml + payment_sessions: + type: array + description: The payment sessions created on the cart. + items: + $ref: ./payment_session.yaml + payment_id: + type: string + description: The payment's ID if available + example: pay_01G8ZCC5W42ZNY842124G7P5R9 + payment: + description: Available if the relation `payment` is expanded. + $ref: ./payment.yaml + shipping_methods: + type: array + description: The shipping methods added to the cart. + items: + $ref: ./shipping_method.yaml + type: + type: string + description: The cart's type. + enum: + - default + - swap + - draft_order + - payment_link + - claim + default: default + completed_at: + type: string + description: The date with timezone at which the cart was completed. + format: date-time + payment_authorized_at: + type: string + description: The date with timezone at which the payment was authorized. + format: date-time + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of a cart in case + of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + context: + type: object + description: The context of the cart which can include info like IP or user agent. + example: + ip: '::1' + user_agent: PostmanRuntime/7.29.2 + sales_channel_id: + type: string + description: The sales channel ID the cart is associated with. + example: null + sales_channel: + description: >- + A sales channel object. Available if the relation `sales_channel` is + expanded. + type: object + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white + shipping_total: + type: integer + description: The total of shipping + example: 1000 + discount_total: + type: integer + description: The total of discount + example: 800 + tax_total: + type: integer + description: The total of tax + example: 0 + refunded_total: + type: integer + description: >- + The total amount refunded if the order associated with this cart is + returned. + example: 0 + total: + type: integer + description: The total amount of the cart + example: 8200 + subtotal: + type: integer + description: The subtotal of the cart + example: 8000 + refundable_amount: + type: integer + description: The amount that can be refunded + example: 8200 + gift_card_total: + type: integer + description: The total of gift cards + example: 0 + gift_card_tax_total: + type: integer + description: The total of gift cards with taxes + example: 0 diff --git a/docs/api/admin/components/schemas/claim_image.yaml b/docs/api/admin/components/schemas/claim_image.yaml new file mode 100644 index 0000000000..5b2d04e74b --- /dev/null +++ b/docs/api/admin/components/schemas/claim_image.yaml @@ -0,0 +1,38 @@ +title: Claim Image +description: Represents photo documentation of a claim. +x-resourceId: claim_image +required: + - claim_item_id + - url +properties: + id: + type: string + description: The claim image's ID + example: cimg_01G8ZH853Y6TFXWPG5EYE81X63 + claim_item_id: + type: string + description: The ID of the claim item associated with the image + claim_item: + description: A claim item object. Available if the relation `claim_item` is expanded. + type: object + url: + type: string + description: The URL of the image + format: uri + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/claim_item.yaml b/docs/api/admin/components/schemas/claim_item.yaml new file mode 100644 index 0000000000..ccec3c8ebf --- /dev/null +++ b/docs/api/admin/components/schemas/claim_item.yaml @@ -0,0 +1,83 @@ +title: Claim Item +description: >- + Represents a claimed item along with information about the reasons for the + claim. +x-resourceId: claim_item +required: + - claim_order_id + - item_id + - variant_id + - reason + - quantity +properties: + id: + type: string + description: The claim item's ID + example: citm_01G8ZH853Y6TFXWPG5EYE81X63 + images: + type: array + description: Available if the relation `images` is expanded. + items: + $ref: ./claim_image.yaml + claim_order_id: + description: The ID of the claim this item is associated with. + type: string + claim_order: + description: A claim order object. Available if the relation `claim_order` is expanded. + type: object + item_id: + description: The ID of the line item that the claim item refers to. + type: string + example: item_01G8ZM25TN49YV9EQBE2NC27KC + item: + description: Available if the relation `item` is expanded. + $ref: ./line_item.yaml + variant_id: + description: The ID of the product variant that is claimed. + type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: A variant object. Available if the relation `variant` is expanded. + type: object + reason: + description: The reason for the claim + type: string + enum: + - missing_item + - wrong_item + - production_failure + - other + note: + description: An optional note about the claim, for additional information + type: string + example: I don't like it. + quantity: + description: >- + The quantity of the item that is being claimed; must be less than or equal + to the amount purchased in the original order. + type: integer + example: 1 + tags: + description: >- + User defined tags for easy filtering and grouping. Available if the + relation 'tags' is expanded. + type: array + items: + $ref: ./claim_tag.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/claim_order.yaml b/docs/api/admin/components/schemas/claim_order.yaml new file mode 100644 index 0000000000..1d26758cec --- /dev/null +++ b/docs/api/admin/components/schemas/claim_order.yaml @@ -0,0 +1,121 @@ +title: Claim Order +description: >- + Claim Orders represent a group of faulty or missing items. Each claim order + consists of a subset of items associated with an original order, and can + contain additional information about fulfillments and returns. +x-resourceId: claim_order +required: + - type + - order_id +properties: + id: + type: string + description: The claim's ID + example: claim_01G8ZH853Y6TFXWPG5EYE81X63 + type: + type: string + enum: + - refund + - replace + payment_status: + type: string + description: The status of the claim's payment + enum: + - na + - not_refunded + - refunded + default: na + fulfillment_status: + type: string + enum: + - not_fulfilled + - partially_fulfilled + - fulfilled + - partially_shipped + - shipped + - partially_returned + - returned + - canceled + - requires_action + default: not_fulfilled + claim_items: + description: The items that have been claimed + type: array + items: + $ref: ./claim_item.yaml + additional_items: + description: >- + Refers to the new items to be shipped when the claim order has the type + `replace` + type: array + items: + $ref: ./line_item.yaml + order_id: + description: The ID of the order that the claim comes from. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + return_order: + description: >- + A return object. Holds information about the return if the claim is to be + returned. Available if the relation 'return_order' is expanded + type: object + shipping_address_id: + description: The ID of the address that the new items should be shipped to + type: string + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: ./address.yaml + shipping_methods: + description: The shipping methods that the claim order will be shipped with. + type: array + items: + $ref: ./shipping_method.yaml + fulfillments: + description: The fulfillments of the new items to be shipped + type: array + items: + $ref: ./fulfillment.yaml + refund_amount: + description: The amount that will be refunded in conjunction with the claim + type: integer + example: 1000 + canceled_at: + description: The date with timezone at which the claim was canceled. + type: string + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white + no_notification: + description: >- + Flag for describing whether or not notifications related to this should be + send. + type: boolean + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the cart + associated with the claim in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. diff --git a/docs/api/admin/components/schemas/claim_tag.yaml b/docs/api/admin/components/schemas/claim_tag.yaml new file mode 100644 index 0000000000..bf7b96a3db --- /dev/null +++ b/docs/api/admin/components/schemas/claim_tag.yaml @@ -0,0 +1,33 @@ +title: Claim Tag +description: >- + Claim Tags are user defined tags that can be assigned to claim items for easy + filtering and grouping. +x-resourceId: claim_tag +required: + - value +properties: + id: + type: string + description: The claim tag's ID + example: ctag_01G8ZCC5Y63B95V6B5SHBZ91S4 + value: + description: The value that the claim tag holds + type: string + example: Damaged + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/country.yaml b/docs/api/admin/components/schemas/country.yaml new file mode 100644 index 0000000000..8bd271c77c --- /dev/null +++ b/docs/api/admin/components/schemas/country.yaml @@ -0,0 +1,53 @@ +title: Country +description: Country details +x-resourceId: country +required: + - iso_2 + - iso_3 + - num_code + - name + - display_name +properties: + id: + type: string + description: The country's ID + example: 109 + iso_2: + type: string + description: The 2 character ISO code of the country in lower case + example: it + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + iso_3: + type: string + description: The 2 character ISO code of the country in lower case + example: ita + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements + description: See a list of codes. + num_code: + description: The numerical ISO code for the country. + type: string + example: 380 + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_numeric#Officially_assigned_code_elements + description: See a list of codes. + name: + description: The normalized country name in upper case. + type: string + example: ITALY + display_name: + description: The country name appropriate for display. + type: string + example: Italy + region_id: + type: string + description: The region ID this country is associated with. + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object diff --git a/docs/api/admin/components/schemas/currency.yaml b/docs/api/admin/components/schemas/currency.yaml new file mode 100644 index 0000000000..aecf3200e2 --- /dev/null +++ b/docs/api/admin/components/schemas/currency.yaml @@ -0,0 +1,28 @@ +title: Currency +description: Currency +x-resourceId: currency +required: + - code + - symbol + - symbol_native + - name +properties: + code: + description: The 3 character ISO code for the currency. + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + symbol: + description: The symbol used to indicate the currency. + type: string + example: $ + symbol_native: + description: The native symbol used to indicate the currency. + type: string + example: $ + name: + description: The written name of the currency + type: string + example: US Dollar diff --git a/docs/api/admin/components/schemas/custom_shipping_option.yaml b/docs/api/admin/components/schemas/custom_shipping_option.yaml new file mode 100644 index 0000000000..488258a5cb --- /dev/null +++ b/docs/api/admin/components/schemas/custom_shipping_option.yaml @@ -0,0 +1,53 @@ +title: Custom Shipping Option +description: >- + Custom Shipping Options are 'overriden' Shipping Options. Store managers can + attach a Custom Shipping Option to a cart in order to set a custom price for a + particular Shipping Option +x-resourceId: custom_shipping_option +required: + - price + - shipping_option_id +properties: + id: + type: string + description: The custom shipping option's ID + example: cso_01G8X99XNB77DMFBJFWX6DN9V9 + price: + description: >- + The custom price set that will override the shipping option's original + price + type: integer + example: 1000 + shipping_option_id: + description: The ID of the Shipping Option that the custom shipping option overrides + type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: >- + A shipping option object. Available if the relation `shipping_option` is + expanded. + type: object + cart_id: + description: The ID of the Cart that the custom shipping option is attached to + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/customer.yaml b/docs/api/admin/components/schemas/customer.yaml new file mode 100644 index 0000000000..e3df6d690b --- /dev/null +++ b/docs/api/admin/components/schemas/customer.yaml @@ -0,0 +1,72 @@ +title: Customer +description: Represents a customer +x-resourceId: customer +required: + - email +properties: + id: + type: string + description: The customer's ID + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + email: + type: string + description: The customer's email + format: email + first_name: + type: string + description: The customer's first name + example: Arno + last_name: + type: string + description: The customer's first name + example: Willms + billing_address_id: + type: string + description: The customer's billing address ID + example: addr_01G8ZH853YPY9B94857DY91YGW + billing_address: + description: Available if the relation `billing_address` is expanded. + $ref: ./address.yaml + shipping_addresses: + description: Available if the relation `shipping_addresses` is expanded. + type: array + items: + $ref: ./address.yaml + phone: + type: string + description: The customer's phone number + example: 16128234334802 + has_account: + type: boolean + description: Whether the customer has an account or not + default: false + orders: + description: Available if the relation `orders` is expanded. + type: array + items: + type: object + description: An order object. + groups: + description: >- + The customer groups the customer belongs to. Available if the relation + `groups` is expanded. + type: array + items: + $ref: ./customer_group.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/customer_group.yaml b/docs/api/admin/components/schemas/customer_group.yaml new file mode 100644 index 0000000000..d99e3a5923 --- /dev/null +++ b/docs/api/admin/components/schemas/customer_group.yaml @@ -0,0 +1,46 @@ +title: Customer Group +description: Represents a customer group +x-resourceId: customer_group +required: + - name +properties: + id: + type: string + description: The customer group's ID + example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63 + name: + type: string + description: The name of the customer group + example: VIP + customers: + type: array + description: >- + The customers that belong to the customer group. Available if the relation + `customers` is expanded. + items: + type: object + description: A customer object. + price_lists: + type: array + description: >- + The price lists that are associated with the customer group. Available if + the relation `price_lists` is expanded. + items: + $ref: ./price_list.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/discount.yaml b/docs/api/admin/components/schemas/discount.yaml new file mode 100644 index 0000000000..48f090532a --- /dev/null +++ b/docs/api/admin/components/schemas/discount.yaml @@ -0,0 +1,91 @@ +title: Discount +description: Represents a discount that can be applied to a cart for promotional purposes. +x-resourceId: discount +required: + - code + - is_dynamic +properties: + id: + type: string + description: The discount's ID + example: disc_01F0YESMW10MGHWJKZSDDMN0VN + code: + description: >- + A unique code for the discount - this will be used by the customer to + apply the discount + type: string + example: 10DISC + is_dynamic: + description: >- + A flag to indicate if multiple instances of the discount can be generated. + I.e. for newsletter discounts + type: boolean + example: false + rule_id: + type: string + description: The Discount Rule that governs the behaviour of the Discount + example: dru_01F0YESMVK96HVX7N419E3CJ7C + rule: + description: Available if the relation `rule` is expanded. + $ref: ./discount_rule.yaml + is_disabled: + description: >- + Whether the Discount has been disabled. Disabled discounts cannot be + applied to carts + type: boolean + example: false + parent_discount_id: + type: string + description: >- + The Discount that the discount was created from. This will always be a + dynamic discount + example: disc_01G8ZH853YPY9B94857DY91YGW + parent_discount: + description: Available if the relation `parent_discount` is expanded. + $ref: ./discount.yaml + starts_at: + description: The time at which the discount can be used. + type: string + format: date-time + ends_at: + description: The time at which the discount can no longer be used. + type: string + format: date-time + valid_duration: + type: string + description: Duration the discount runs between + example: P3Y6M4DT12H30M5S + regions: + description: >- + The Regions in which the Discount can be used. Available if the relation + `regions` is expanded. + type: array + items: + type: object + description: A region object. + usage_limit: + description: The maximum number of times that a discount can be used. + type: integer + example: 100 + usage_count: + description: The number of times a discount has been used. + type: integer + example: 50 + default: 0 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/discount_condition.yaml b/docs/api/admin/components/schemas/discount_condition.yaml new file mode 100644 index 0000000000..57a0dea0b9 --- /dev/null +++ b/docs/api/admin/components/schemas/discount_condition.yaml @@ -0,0 +1,92 @@ +title: Discount Condition +description: Holds rule conditions for when a discount is applicable +x-resourceId: discount_condition +required: + - type + - operator + - discount_rule_id +properties: + id: + type: string + description: The discount condition's ID + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + type: + description: The type of the Condition + type: string + enum: + - products + - product_types + - product_collections + - product_tags + - customer_groups + operator: + description: The operator of the Condition + type: string + enum: + - in + - not_in + discount_rule_id: + type: string + description: The ID of the discount rule associated with the condition + example: dru_01F0YESMVK96HVX7N419E3CJ7C + discount_rule: + description: Available if the relation `discount_rule` is expanded. + $ref: ./discount_rule.yaml + products: + description: >- + products associated with this condition if type = products. Available if + the relation `products` is expanded. + type: array + items: + type: object + description: A product object. + product_types: + description: >- + product types associated with this condition if type = product_types. + Available if the relation `product_types` is expanded. + type: array + items: + type: object + description: A product type object. + product_tags: + description: >- + product tags associated with this condition if type = product_tags. + Available if the relation `product_tags` is expanded. + type: array + items: + type: object + description: A product tag object. + product_collections: + description: >- + product collections associated with this condition if type = + product_collections. Available if the relation `product_collections` is + expanded. + type: array + items: + type: object + description: A product collection object. + customer_groups: + description: >- + customer groups associated with this condition if type = customer_groups. + Available if the relation `customer_groups` is expanded. + type: array + items: + type: object + description: A customer group object. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/discount_condition_customer_group.yaml b/docs/api/admin/components/schemas/discount_condition_customer_group.yaml new file mode 100644 index 0000000000..ad6527d260 --- /dev/null +++ b/docs/api/admin/components/schemas/discount_condition_customer_group.yaml @@ -0,0 +1,34 @@ +title: Product Tag Discount Condition +description: Associates a discount condition with a customer group +x-resourceId: discount_condition_customer_group +required: + - customer_group_id + - condition_id +properties: + customer_group_id: + description: The ID of the Product Tag + type: string + example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63 + condition_id: + description: The ID of the Discount Condition + type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + customer_group: + description: Available if the relation `customer_group` is expanded. + $ref: ./customer_group.yaml + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: ./discount_condition.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/discount_condition_product.yaml b/docs/api/admin/components/schemas/discount_condition_product.yaml new file mode 100644 index 0000000000..77f4fa6b9e --- /dev/null +++ b/docs/api/admin/components/schemas/discount_condition_product.yaml @@ -0,0 +1,34 @@ +title: Product Discount Condition +description: Associates a discount condition with a product +x-resourceId: discount_condition_product +required: + - product_id + - condition_id +properties: + product_id: + description: The ID of the Product Tag + type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + condition_id: + description: The ID of the Discount Condition + type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product: + description: Available if the relation `product` is expanded. + $ref: ./product.yaml + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: ./discount_condition.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/discount_condition_product_collection.yaml b/docs/api/admin/components/schemas/discount_condition_product_collection.yaml new file mode 100644 index 0000000000..43c7548e34 --- /dev/null +++ b/docs/api/admin/components/schemas/discount_condition_product_collection.yaml @@ -0,0 +1,34 @@ +title: Product Collection Discount Condition +description: Associates a discount condition with a product collection +x-resourceId: discount_condition_product_collection +required: + - product_collection_id + - condition_id +properties: + product_collection_id: + description: The ID of the Product Collection + type: string + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG + condition_id: + description: The ID of the Discount Condition + type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_collection: + description: Available if the relation `product_collection` is expanded. + $ref: ./product_collection.yaml + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: ./discount_condition.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/discount_condition_product_tag.yaml b/docs/api/admin/components/schemas/discount_condition_product_tag.yaml new file mode 100644 index 0000000000..ed3a8b2e79 --- /dev/null +++ b/docs/api/admin/components/schemas/discount_condition_product_tag.yaml @@ -0,0 +1,34 @@ +title: Product Tag Discount Condition +description: Associates a discount condition with a product tag +x-resourceId: discount_condition_product_tag +required: + - product_tag_id + - condition_id +properties: + product_tag_id: + description: The ID of the Product Tag + type: string + example: ptag_01F0YESHPZYY3H4SJ3A5918SBN + condition_id: + description: The ID of the Discount Condition + type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_tag: + description: Available if the relation `product_tag` is expanded. + $ref: ./product_tag.yaml + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: ./discount_condition.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/discount_condition_product_type.yaml b/docs/api/admin/components/schemas/discount_condition_product_type.yaml new file mode 100644 index 0000000000..3125b2119c --- /dev/null +++ b/docs/api/admin/components/schemas/discount_condition_product_type.yaml @@ -0,0 +1,34 @@ +title: Product Type Discount Condition +description: Associates a discount condition with a product type +x-resourceId: discount_condition_product +required: + - product_type_id + - condition_id +properties: + product_type_id: + description: The ID of the Product Tag + type: string + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + condition_id: + description: The ID of the Discount Condition + type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_type: + description: Available if the relation `product_type` is expanded. + $ref: ./product_type.yaml + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: ./discount_condition.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/discount_rule.yaml b/docs/api/admin/components/schemas/discount_rule.yaml new file mode 100644 index 0000000000..328171368f --- /dev/null +++ b/docs/api/admin/components/schemas/discount_rule.yaml @@ -0,0 +1,66 @@ +title: Discount Rule +description: >- + Holds the rules that governs how a Discount is calculated when applied to a + Cart. +x-resourceId: discount_rule +required: + - type + - value +properties: + id: + type: string + description: The discount rule's ID + example: dru_01F0YESMVK96HVX7N419E3CJ7C + type: + description: >- + The type of the Discount, can be `fixed` for discounts that reduce the + price by a fixed amount, `percentage` for percentage reductions or + `free_shipping` for shipping vouchers. + type: string + enum: + - fixed + - percentage + - free_shipping + example: percentage + description: + description: A short description of the discount + type: string + example: 10 Percent + value: + description: >- + The value that the discount represents; this will depend on the type of + the discount + type: integer + example: 10 + allocation: + description: The scope that the discount should apply to. + type: string + enum: + - total + - item + example: total + conditions: + description: >- + A set of conditions that can be used to limit when the discount can be + used. Available if the relation `conditions` is expanded. + type: array + items: + type: object + description: A discount condition object. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/draft-order.yaml b/docs/api/admin/components/schemas/draft-order.yaml new file mode 100644 index 0000000000..12152dc3e0 --- /dev/null +++ b/docs/api/admin/components/schemas/draft-order.yaml @@ -0,0 +1,71 @@ +title: DraftOrder +description: Represents a draft order +x-resourceId: draft-order +properties: + id: + type: string + description: The draft order's ID + example: dorder_01G8TJFKBG38YYFQ035MSVG03C + status: + type: string + description: The status of the draft order + enum: + - open + - completed + default: open + display_id: + type: string + description: The draft order's display ID + example: 2 + cart_id: + type: string + description: The ID of the cart associated with the draft order. + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + order_id: + type: string + description: The ID of the order associated with the draft order. + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + canceled_at: + type: string + description: The date the draft order was canceled at. + format: date-time + completed_at: + type: string + description: The date the draft order was completed at. + format: date-time + no_notification_order: + type: boolean + description: Whether to send the customer notifications regarding order updates. + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the cart + associated with the draft order in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/fulfillment.yaml b/docs/api/admin/components/schemas/fulfillment.yaml new file mode 100644 index 0000000000..0ea09f97e5 --- /dev/null +++ b/docs/api/admin/components/schemas/fulfillment.yaml @@ -0,0 +1,117 @@ +title: Fulfillment +description: >- + Fulfillments are created once store operators can prepare the purchased goods. + Fulfillments will eventually be shipped and hold information about how to + track shipments. Fulfillments are created through a provider, which is + typically an external shipping aggregator, shipping partner og 3PL, most + plugins will have asynchronous communications with these providers through + webhooks in order to automatically update and synchronize the state of + Fulfillments. +x-resourceId: fulfillment +required: + - provider_id +properties: + id: + type: string + description: The cart's ID + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF + claim_order_id: + description: The id of the Claim that the Fulfillment belongs to. + type: string + example: null + claim_order: + description: A claim order object. Available if the relation `claim_order` is expanded. + type: object + swap_id: + description: The id of the Swap that the Fulfillment belongs to. + type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object + order_id: + description: The id of the Order that the Fulfillment belongs to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + provider_id: + description: >- + The id of the Fulfillment Provider responsible for handling the + fulfillment + type: string + example: manual + provider: + description: Available if the relation `provider` is expanded. + $ref: ./fulfillment_provider.yaml + items: + description: >- + The Fulfillment Items in the Fulfillment - these hold information about + how many of each Line Item has been fulfilled. Available if the relation + `items` is expanded. + type: array + items: + $ref: ./fulfillment_item.yaml + tracking_links: + description: >- + The Tracking Links that can be used to track the status of the + Fulfillment, these will usually be provided by the Fulfillment Provider. + Available if the relation `tracking_links` is expanded. + type: array + items: + $ref: ./tracking_link.yaml + tracking_numbers: + deprecated: true + description: >- + The tracking numbers that can be used to track the status of the + fulfillment. + type: array + items: + type: string + data: + description: >- + This contains all the data necessary for the Fulfillment provider to + handle the fulfillment. + type: object + example: {} + shipped_at: + description: The date with timezone at which the Fulfillment was shipped. + type: string + format: date-time + no_notification: + description: >- + Flag for describing whether or not notifications related to this should be + send. + type: boolean + example: false + canceled_at: + description: The date with timezone at which the Fulfillment was canceled. + type: string + format: date-time + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the fulfillment + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/fulfillment_item.yaml b/docs/api/admin/components/schemas/fulfillment_item.yaml new file mode 100644 index 0000000000..29fe0f87b9 --- /dev/null +++ b/docs/api/admin/components/schemas/fulfillment_item.yaml @@ -0,0 +1,28 @@ +title: Fulfillment Item +description: >- + Correlates a Line Item with a Fulfillment, keeping track of the quantity of + the Line Item. +x-resourceId: fulfillment_item +required: + - fulfillment_id + - item_id + - quantity +properties: + fulfillment_id: + description: The id of the Fulfillment that the Fulfillment Item belongs to. + type: string + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF + item_id: + description: The id of the Line Item that the Fulfillment Item references. + type: string + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + fulfillment: + description: A fulfillment object. Available if the relation `fulfillment` is expanded. + type: object + item: + description: Available if the relation `item` is expanded. + $ref: ./line_item.yaml + quantity: + description: The quantity of the Line Item that is included in the Fulfillment. + type: integer + example: 1 diff --git a/docs/api/admin/components/schemas/fulfillment_provider.yaml b/docs/api/admin/components/schemas/fulfillment_provider.yaml new file mode 100644 index 0000000000..d6fdd8ce64 --- /dev/null +++ b/docs/api/admin/components/schemas/fulfillment_provider.yaml @@ -0,0 +1,15 @@ +title: Fulfillment Provider +description: Represents a fulfillment provider plugin and holds its installation status. +x-resourceId: fulfillment_provider +properties: + id: + description: The id of the fulfillment provider as given by the plugin. + type: string + example: manual + is_installed: + description: >- + Whether the plugin is installed in the current version. Plugins that are + no longer installed are not deleted by will have this field set to + `false`. + type: boolean + example: true diff --git a/docs/api/admin/components/schemas/gift_card.yaml b/docs/api/admin/components/schemas/gift_card.yaml new file mode 100644 index 0000000000..713a2a39fc --- /dev/null +++ b/docs/api/admin/components/schemas/gift_card.yaml @@ -0,0 +1,70 @@ +title: Gift Card +description: >- + Gift Cards are redeemable and represent a value that can be used towards the + payment of an Order. +x-resourceId: gift_card +required: + - code + - value + - balance + - region_id +properties: + id: + type: string + description: The cart's ID + example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ + code: + description: >- + The unique code that identifies the Gift Card. This is used by the + Customer to redeem the value of the Gift Card. + type: string + example: 3RFT-MH2C-Y4YZ-XMN4 + value: + description: The value that the Gift Card represents. + type: integer + example: 10 + balance: + description: The remaining value on the Gift Card. + type: integer + example: 10 + region_id: + type: string + description: The id of the Region in which the Gift Card is available. + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + order_id: + type: string + description: The id of the Order that the Gift Card was purchased in. + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + is_disabled: + description: >- + Whether the Gift Card has been disabled. Disabled Gift Cards cannot be + applied to carts. + type: boolean + example: false + ends_at: + description: The time at which the Gift Card can no longer be used. + type: string + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/gift_card_transaction.yaml b/docs/api/admin/components/schemas/gift_card_transaction.yaml new file mode 100644 index 0000000000..0d923b3653 --- /dev/null +++ b/docs/api/admin/components/schemas/gift_card_transaction.yaml @@ -0,0 +1,43 @@ +title: Gift Card Transaction +description: >- + Gift Card Transactions are created once a Customer uses a Gift Card to pay for + their Order +x-resourceId: gift_card_transaction +required: + - gift_card_id + - amount +properties: + id: + type: string + description: The gift card transaction's ID + example: gct_01G8X9A7ESKAJXG2H0E6F1MW7A + gift_card_id: + description: The ID of the Gift Card that was used in the transaction. + type: string + example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ + gift_card: + description: A gift card object. Available if the relation `gift_card` is expanded. + type: object + order_id: + description: The ID of the Order that the Gift Card was used to pay for. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + amount: + description: The amount that was used from the Gift Card. + type: integer + example: 10 + created_at: + description: The date with timezone at which the resource was created. + type: string + format: date-time + is_taxable: + description: Whether the transaction is taxable or not. + type: boolean + example: false + tax_rate: + description: The tax rate of the transaction + type: number + example: 0 diff --git a/docs/api/admin/components/schemas/idempotency_key.yaml b/docs/api/admin/components/schemas/idempotency_key.yaml new file mode 100644 index 0000000000..ac4f6b63b7 --- /dev/null +++ b/docs/api/admin/components/schemas/idempotency_key.yaml @@ -0,0 +1,55 @@ +title: Idempotency Key +description: >- + Idempotency Key is used to continue a process in case of any failure that + might occur. +x-resourceId: idempotency_key +required: + - idempotency_key +properties: + id: + type: string + description: The idempotency key's ID + example: ikey_01G8X9A7ESKAJXG2H0E6F1MW7A + idempotency_key: + description: >- + The unique randomly generated key used to determine the state of a + process. + type: string + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + description: Date which the idempotency key was locked. + type: string + format: date-time + locked_at: + description: Date which the idempotency key was locked. + type: string + format: date-time + request_method: + description: The method of the request + type: string + example: POST + request_params: + type: object + description: The parameters passed to the request + example: + id: cart_01G8ZH853Y6TFXWPG5EYE81X63 + request_path: + description: The request's path + type: string + example: /store/carts/cart_01G8ZH853Y6TFXWPG5EYE81X63/complete + response_code: + type: string + description: The response's code. + example: 200 + response_body: + type: object + description: The response's body + example: + id: cart_01G8ZH853Y6TFXWPG5EYE81X63 + recovery_point: + type: string + description: Where to continue from. + default: started diff --git a/docs/api/admin/components/schemas/image.yaml b/docs/api/admin/components/schemas/image.yaml new file mode 100644 index 0000000000..24bf973e75 --- /dev/null +++ b/docs/api/admin/components/schemas/image.yaml @@ -0,0 +1,31 @@ +title: Image +description: Images holds a reference to a URL at which the image file can be found. +x-resourceId: image +required: + - url +properties: + id: + type: string + description: The image's ID + example: img_01G749BFYR6T8JTVW6SGW3K3E6 + url: + description: The URL at which the image file can be found. + type: string + format: uri + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/invite.yaml b/docs/api/admin/components/schemas/invite.yaml new file mode 100644 index 0000000000..492a71eeb2 --- /dev/null +++ b/docs/api/admin/components/schemas/invite.yaml @@ -0,0 +1,50 @@ +title: Invite +description: Represents an invite +x-resourceId: invite +required: + - user_email +properties: + id: + type: string + description: The invite's ID + example: invite_01G8TKE4XYCTHSCK2GDEP47RE1 + user_email: + type: string + description: The email of the user being invited. + format: email + role: + type: string + description: The user's role. + enum: + - admin + - member + - developer + default: member + accepted: + type: boolean + description: Whether the invite was accepted or not. + example: false + token: + type: string + description: The token used to accept the invite. + expores_at: + type: string + description: The date the invite expires at. + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/line_item.yaml b/docs/api/admin/components/schemas/line_item.yaml new file mode 100644 index 0000000000..d949a50d95 --- /dev/null +++ b/docs/api/admin/components/schemas/line_item.yaml @@ -0,0 +1,172 @@ +title: Line Item +description: >- + Line Items represent purchasable units that can be added to a Cart for + checkout. When Line Items are purchased they will get copied to the resulting + order and can eventually be referenced in Fulfillments and Returns. Line Items + may also be created when processing Swaps and Claims. +x-resourceId: line_item +required: + - title + - unit_price + - quantity +properties: + id: + type: string + description: The cart's ID + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + cart_id: + description: The ID of the Cart that the Line Item belongs to. + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + order_id: + description: The ID of the Order that the Line Item belongs to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + swap_id: + description: The id of the Swap that the Line Item belongs to. + type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object + claim_order_id: + description: The id of the Claim that the Line Item belongs to. + type: string + example: null + claim_order: + description: A claim order object. Available if the relation `claim_order` is expanded. + type: object + tax_lines: + description: Available if the relation `tax_lines` is expanded. + type: array + items: + $ref: ./line_item_tax_line.yaml + adjustments: + description: Available if the relation `adjustments` is expanded. + type: array + items: + $ref: ./line_item_adjustment.yaml + title: + description: >- + The title of the Line Item, this should be easily identifiable by the + Customer. + type: string + example: Medusa Coffee Mug + description: + description: A more detailed description of the contents of the Line Item. + type: string + example: One Size + thumbnail: + description: A URL string to a small image of the contents of the Line Item. + type: string + format: uri + example: https://medusa-public-images.s3.eu-west-1.amazonaws.com/coffee-mug.png + is_return: + description: Is the item being returned + type: boolean + example: false + is_giftcard: + description: Flag to indicate if the Line Item is a Gift Card. + type: boolean + example: false + should_merge: + description: >- + Flag to indicate if new Line Items with the same variant should be merged + or added as an additional Line Item. + type: boolean + example: false + allow_discounts: + description: >- + Flag to indicate if the Line Item should be included when doing discount + calculations. + type: boolean + example: false + has_shipping: + description: Flag to indicate if the Line Item has fulfillment associated with it. + type: boolean + example: false + unit_price: + description: >- + The price of one unit of the content in the Line Item. This should be in + the currency defined by the Cart/Order/Swap/Claim that the Line Item + belongs to. + type: boolean + example: 8000 + variant_id: + description: The id of the Product Variant contained in the Line Item. + type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: >- + A product variant object. The Product Variant contained in the Line Item. + Available if the relation `variant` is expanded. + type: object + quantity: + description: The quantity of the content in the Line Item. + type: integer + example: 1 + fulfilled_quantity: + description: The quantity of the Line Item that has been fulfilled. + type: integer + example: 0 + returned_quantity: + description: The quantity of the Line Item that has been returned. + type: integer + example: 0 + shipped_quantity: + description: The quantity of the Line Item that has been shipped. + type: integer + example: 0 + refundable: + description: >- + The amount that can be refunded from the given Line Item. Takes taxes and + discounts into consideration. + type: integer + example: 0 + subtotal: + type: integer + description: The subtotal of the line item + example: 8000 + tax_total: + type: integer + description: The total of tax of the line item + example: 0 + total: + type: integer + description: The total amount of the line item + example: 8000 + original_total: + type: integer + description: The original total amount of the line item + example: 8000 + original_tax_total: + type: integer + description: The original tax total amount of the line item + example: 0 + discount_total: + type: integer + description: The total of discount of the line item + example: 0 + gift_card_total: + type: integer + description: The total of the gift card of the line item + example: 0 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/line_item_adjustment.yaml b/docs/api/admin/components/schemas/line_item_adjustment.yaml new file mode 100644 index 0000000000..8ae889c8dc --- /dev/null +++ b/docs/api/admin/components/schemas/line_item_adjustment.yaml @@ -0,0 +1,39 @@ +title: Line Item Adjustment +description: Represents an Line Item Adjustment +x-resourceId: line_item_adjustment +required: + - item_id + - description + - amount +properties: + id: + type: string + description: The invite's ID + example: lia_01G8TKE4XYCTHSCK2GDEP47RE1 + item_id: + type: string + description: The ID of the line item + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + item: + description: Available if the relation `item` is expanded. + $ref: ./line_item.yaml + description: + type: string + description: The line item's adjustment description + example: Adjusted item's price. + discount_id: + type: string + description: The ID of the discount associated with the adjustment + example: disc_01F0YESMW10MGHWJKZSDDMN0VN + discount: + description: Available if the relation `discount` is expanded. + $ref: ./discount.yaml + amount: + type: number + description: The adjustment amount + example: 1000 + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/line_item_tax_line.yaml b/docs/api/admin/components/schemas/line_item_tax_line.yaml new file mode 100644 index 0000000000..9320de67e3 --- /dev/null +++ b/docs/api/admin/components/schemas/line_item_tax_line.yaml @@ -0,0 +1,44 @@ +title: Line Item Tax Line +description: Represents an Line Item Tax Line +x-resourceId: line_item_tax_line +required: + - item_id + - rate + - name +properties: + id: + type: string + description: The line item tax line's ID + example: litl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + item_id: + type: string + description: The ID of the line item + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + item: + description: Available if the relation `item` is expanded. + $ref: ./line_item.yaml + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + rate: + description: The numeric rate to charge tax by + type: number + example: 10 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/money_amount.yaml b/docs/api/admin/components/schemas/money_amount.yaml new file mode 100644 index 0000000000..f54d7e4a7a --- /dev/null +++ b/docs/api/admin/components/schemas/money_amount.yaml @@ -0,0 +1,84 @@ +title: Money Amount +description: >- + Money Amounts represents an amount that a given Product Variant can be + purcased for. Each Money Amount either has a Currency or Region associated + with it to indicate the pricing in a given Currency or, for fully region-based + pricing, the given price in a specific Region. If region-based pricing is used + the amount will be in the currency defined for the Reigon. +x-resourceId: money_amount +required: + - currency_code + - amount +properties: + id: + type: string + description: The money amount's ID + example: ma_01F0YESHRFQNH5S8Q0PK84YYZN + currency_code: + description: The 3 character currency code that the Money Amount is given in. + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: ./currency.yaml + amount: + description: >- + The amount in the smallest currecny unit (e.g. cents 100 cents to charge + $1) that the Product Variant will cost. + type: integer + example: 100 + min_quantity: + description: >- + The minimum quantity that the Money Amount applies to. If this value is + not set, the Money Amount applies to all quantities. + type: integer + example: 1 + max_quantity: + description: >- + The maximum quantity that the Money Amount applies to. If this value is + not set, the Money Amount applies to all quantities. + type: integer + example: 1 + price_list_id: + type: string + description: The ID of the price list associated with the money amount + example: pl_01G8X3CKJXCG5VXVZ87H9KC09W + price_list: + description: Available if the relation `price_list` is expanded. + $ref: ./price_list.yaml + variant_id: + description: The id of the Product Variant contained in the Line Item. + type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: >- + The Product Variant contained in the Line Item. Available if the relation + `variant` is expanded. + type: object + region_id: + type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/note.yaml b/docs/api/admin/components/schemas/note.yaml new file mode 100644 index 0000000000..9333e49472 --- /dev/null +++ b/docs/api/admin/components/schemas/note.yaml @@ -0,0 +1,50 @@ +title: Note +description: >- + Notes are elements which we can use in association with different resources to + allow users to describe additional information in relation to these. +x-resourceId: note +required: + - value + - resource_type + - resource_id +properties: + id: + type: string + description: The note's ID + example: note_01G8TM8ENBMC7R90XRR1G6H26Q + resource_type: + description: The type of resource that the Note refers to. + type: string + example: order + resource_id: + description: The ID of the resource that the Note refers to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + value: + description: The contents of the note. + type: string + example: This order must be fulfilled on Monday + author_id: + type: string + description: The ID of the author (user) + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + author: + description: Available if the relation `author` is expanded. + $ref: ./user.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/notification.yaml b/docs/api/admin/components/schemas/notification.yaml new file mode 100644 index 0000000000..559d58d79a --- /dev/null +++ b/docs/api/admin/components/schemas/notification.yaml @@ -0,0 +1,67 @@ +title: Notification +description: >- + Notifications a communications sent via Notification Providers as a reaction + to internal events such as `order.placed`. Notifications can be used to show a + chronological timeline for communications sent to a Customer regarding an + Order, and enables resends. +x-resourceId: notification +required: + - resource_type + - resource_id + - to +properties: + id: + type: string + description: The notification's ID + example: noti_01G53V9Y6CKMCGBM1P0X7C28RX + event_name: + description: The name of the event that the notification was sent for. + type: string + example: order.placed + resource_type: + description: The type of resource that the Notification refers to. + type: string + example: order + resource_id: + description: The ID of the resource that the Notification refers to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + customer_id: + description: The ID of the Customer that the Notification was sent to. + type: string + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: A customer object. Available if the relation `customer` is expanded. + type: object + to: + description: >- + The address that the Notification was sent to. This will usually be an + email address, but represent other addresses such as a chat bot user id + type: string + example: user@example.com + data: + description: >- + The data that the Notification was sent with. This contains all the data + necessary for the Notification Provider to initiate a resend. + type: object + example: {} + resends: + description: The resends that have been completed after the original Notification. + type: array + items: + $ref: ./notification_resend.yaml + provider_id: + description: The id of the Notification Provider that handles the Notification. + type: string + example: sengrid + provider: + description: Available if the relation `provider` is expanded. + $ref: ./notification_provider.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time diff --git a/docs/api/admin/components/schemas/notification_provider.yaml b/docs/api/admin/components/schemas/notification_provider.yaml new file mode 100644 index 0000000000..6ac490109f --- /dev/null +++ b/docs/api/admin/components/schemas/notification_provider.yaml @@ -0,0 +1,17 @@ +title: Notification Provider +description: Represents a notification provider plugin and holds its installation status. +x-resourceId: notification_provider +required: + - id +properties: + id: + description: The id of the notification provider as given by the plugin. + type: string + example: sendgrid + is_installed: + description: >- + Whether the plugin is installed in the current version. Plugins that are + no longer installed are not deleted by will have this field set to + `false`. + type: boolean + default: true diff --git a/docs/api/admin/components/schemas/notification_resend.yaml b/docs/api/admin/components/schemas/notification_resend.yaml new file mode 100644 index 0000000000..c5cfe4431f --- /dev/null +++ b/docs/api/admin/components/schemas/notification_resend.yaml @@ -0,0 +1,61 @@ +title: Notification Resend +description: A resend of a Notification. +x-resourceId: notification_resend +properties: + id: + description: The notification resend's ID + type: string + example: noti_01F0YET45G9NHP08Z66CE4QKBS + event_name: + description: The name of the event that the notification was sent for. + type: string + example: order.placed + resource_type: + description: The type of resource that the Notification refers to. + type: string + example: order + resource_id: + description: The ID of the resource that the Notification refers to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + customer_id: + description: The ID of the Customer that the Notification was sent to. + type: string + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: A customer object. Available if the relation `customer` is expanded. + type: object + to: + description: >- + The address that the Notification was sent to. This will usually be an + email address, but represent other addresses such as a chat bot user id + type: string + example: user@example.com + data: + description: >- + The data that the Notification was sent with. This contains all the data + necessary for the Notification Provider to initiate a resend. + type: object + example: {} + parent_id: + description: The ID of the Notification that was originally sent. + type: string + example: noti_01G53V9Y6CKMCGBM1P0X7C28RX + parent_notification: + description: Available if the relation `parent_notification` is expanded. + $ref: ./notification.yaml + provider_id: + description: The ID of the Notification Provider that handles the Notification. + type: string + example: sengrid + provider: + description: Available if the relation `provider` is expanded. + $ref: ./notification_provider.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time diff --git a/docs/api/admin/components/schemas/order.yaml b/docs/api/admin/components/schemas/order.yaml new file mode 100644 index 0000000000..45e495fab3 --- /dev/null +++ b/docs/api/admin/components/schemas/order.yaml @@ -0,0 +1,268 @@ +title: Order +description: Represents an order +x-resourceId: order +required: + - customer_id + - email + - region_id + - currency_code +properties: + id: + type: string + description: The order's ID + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + status: + type: string + description: The order's status + enum: + - pending + - completed + - archived + - canceled + - requires_action + default: pending + fulfillment_status: + type: string + description: The order's fulfillment status + enum: + - not_fulfilled + - partially_fulfilled + - fulfilled + - partially_shipped + - shipped + - partially_returned + - returned + - canceled + - requires_action + default: not_fulfilled + payment_status: + type: string + description: The order's payment status + enum: + - not_paid + - awaiting + - captured + - partially_refunded + - refuneded + - canceled + - requires_action + default: not_paid + display_id: + type: integer + description: The order's display ID + example: 2 + cart_id: + type: string + description: The ID of the cart associated with the order + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + customer_id: + type: string + description: The ID of the customer associated with the order + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: A customer object. Available if the relation `customer` is expanded. + type: object + email: + description: The email associated with the order + type: string + format: email + billing_address_id: + type: string + description: The ID of the billing address associated with the order + example: addr_01G8ZH853YPY9B94857DY91YGW + billing_address: + description: Available if the relation `billing_address` is expanded. + $ref: ./address.yaml + shipping_address_id: + type: string + description: The ID of the shipping address associated with the order + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: ./address.yaml + region_id: + type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + currency_code: + description: The 3 character currency code that is used in the order + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: ./currency.yaml + tax_rate: + description: The order's tax rate + type: number + example: 0 + discounts: + type: array + description: >- + The discounts used in the order. Available if the relation `discounts` is + expanded. + items: + type: object + description: A discount object. + gift_cards: + type: array + description: >- + The gift cards used in the order. Available if the relation `gift_cards` + is expanded. + items: + type: object + description: A gift card object. + shipping_methods: + type: array + description: >- + The shipping methods used in the order. Available if the relation + `shipping_methods` is expanded. + items: + $ref: ./shipping_method.yaml + payments: + type: array + description: >- + The payments used in the order. Available if the relation `payments` is + expanded. + items: + $ref: ./payment.yaml + fulfillments: + type: array + description: >- + The fulfillments used in the order. Available if the relation + `fulfillments` is expanded. + items: + $ref: ./fulfillment.yaml + returns: + type: array + description: >- + The returns associated with the order. Available if the relation `returns` + is expanded. + items: + type: object + description: A return object. + claims: + type: array + description: >- + The claims associated with the order. Available if the relation `claims` + is expanded. + items: + type: object + description: A claim order object. + refunds: + type: array + description: >- + The refunds associated with the order. Available if the relation `refunds` + is expanded. + items: + type: object + description: A refund object. + swaps: + type: array + description: >- + The swaps associated with the order. Available if the relation `swaps` is + expanded. + items: + type: object + description: A swap object. + draft_order_id: + type: string + description: The ID of the draft order this order is associated with. + example: null + draft_order: + description: A draft order object. Available if the relation `draft_order` is expanded. + type: object + items: + type: array + description: >- + The line items that belong to the order. Available if the relation `items` + is expanded. + items: + $ref: ./line_item.yaml + gift_card_transactions: + type: array + description: >- + The gift card transactions used in the order. Available if the relation + `gift_card_transactions` is expanded. + items: + $ref: ./gift_card_transaction.yaml + canceled_at: + type: string + description: The date the order was canceled on. + format: date-time + no_notification: + description: >- + Flag for describing whether or not notifications related to this should be + send. + type: boolean + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the processing of the order in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + external_id: + description: The ID of an external order. + type: string + example: null + sales_channel_id: + type: string + description: The ID of the sales channel this order is associated with. + example: null + sales_channel: + description: >- + A sales channel object. Available if the relation `sales_channel` is + expanded. + type: object + shipping_total: + type: integer + description: The total of shipping + example: 1000 + discount_total: + type: integer + description: The total of discount + example: 800 + tax_total: + type: integer + description: The total of tax + example: 0 + refunded_total: + type: integer + description: The total amount refunded if the order is returned. + example: 0 + total: + type: integer + description: The total amount of the order + example: 8200 + subtotal: + type: integer + description: The subtotal of the order + example: 8000 + paid_total: + type: integer + description: The total amount paid + example: 8000 + refundable_amount: + type: integer + description: The amount that can be refunded + example: 8200 + gift_card_total: + type: integer + description: The total of gift cards + example: 0 + gift_card_tax_total: + type: integer + description: The total of gift cards with taxes + example: 0 diff --git a/docs/api/admin/components/schemas/payment.yaml b/docs/api/admin/components/schemas/payment.yaml new file mode 100644 index 0000000000..92294bd2e6 --- /dev/null +++ b/docs/api/admin/components/schemas/payment.yaml @@ -0,0 +1,96 @@ +title: Payment +description: >- + Payments represent an amount authorized with a given payment method, Payments + can be captured, canceled or refunded. +x-resourceId: payment +required: + - amount + - currency_code + - provider_id +properties: + id: + type: string + description: The payment's ID + example: pay_01G2SJNT6DEEWDFNAJ4XWDTHKE + swap_id: + description: The ID of the Swap that the Payment is used for. + type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object + cart_id: + description: The id of the Cart that the Payment Session is created for. + type: string + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + order_id: + description: The ID of the Order that the Payment is used for. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + amount: + description: The amount that the Payment has been authorized for. + type: integer + example: 100 + currency_code: + description: The 3 character ISO currency code that the Payment is completed in. + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: ./currency.yaml + amount_refunded: + description: >- + The amount of the original Payment amount that has been refunded back to + the Customer. + type: integer + example: 0 + provider_id: + description: The id of the Payment Provider that is responsible for the Payment + type: string + example: manual + data: + description: >- + The data required for the Payment Provider to identify, modify and process + the Payment. Typically this will be an object that holds an id to the + external payment session, but can be an empty object if the Payment + Provider doesn't hold any state. + type: object + example: {} + captured_at: + description: The date with timezone at which the Payment was captured. + type: string + format: date-time + canceled_at: + description: The date with timezone at which the Payment was canceled. + type: string + format: date-time + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of a payment in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/payment_provider.yaml b/docs/api/admin/components/schemas/payment_provider.yaml new file mode 100644 index 0000000000..7f39ed6355 --- /dev/null +++ b/docs/api/admin/components/schemas/payment_provider.yaml @@ -0,0 +1,17 @@ +title: Payment Provider +description: Represents a Payment Provider plugin and holds its installation status. +x-resourceId: payment_provider +required: + - id +properties: + id: + description: The id of the payment provider as given by the plugin. + type: string + example: manual + is_installed: + description: >- + Whether the plugin is installed in the current version. Plugins that are + no longer installed are not deleted by will have this field set to + `false`. + type: boolean + default: true diff --git a/docs/api/admin/components/schemas/payment_session.yaml b/docs/api/admin/components/schemas/payment_session.yaml new file mode 100644 index 0000000000..c9f52a749b --- /dev/null +++ b/docs/api/admin/components/schemas/payment_session.yaml @@ -0,0 +1,74 @@ +title: Payment Session +description: >- + Payment Sessions are created when a Customer initilizes the checkout flow, and + can be used to hold the state of a payment flow. Each Payment Session is + controlled by a Payment Provider, who is responsible for the communication + with external payment services. Authorized Payment Sessions will eventually + get promoted to Payments to indicate that they are authorized for + capture/refunds/etc. +x-resourceId: payment_session +required: + - cart_id + - provider_id + - status +properties: + id: + type: string + description: The payment session's ID + example: ps_01G901XNSRM2YS3ASN9H5KG3FZ + cart_id: + description: The id of the Cart that the Payment Session is created for. + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + provider_id: + description: The id of the Payment Provider that is responsible for the Payment Session + type: string + example: manual + is_selected: + description: >- + A flag to indicate if the Payment Session has been selected as the method + that will be used to complete the purchase. + type: boolean + example: true + status: + description: >- + Indicates the status of the Payment Session. Will default to `pending`, + and will eventually become `authorized`. Payment Sessions may have the + status of `requires_more` to indicate that further actions are to be + completed by the Customer. + type: string + enum: + - authorized + - pending + - requires_more + - error + - canceled + example: pending + data: + description: >- + The data required for the Payment Provider to identify, modify and process + the Payment Session. Typically this will be an object that holds an id to + the external payment session, but can be an empty object if the Payment + Provider doesn't hold any state. + type: object + example: {} + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of a cart in case + of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time diff --git a/docs/api/admin/components/schemas/price_list.yaml b/docs/api/admin/components/schemas/price_list.yaml new file mode 100644 index 0000000000..a39b820583 --- /dev/null +++ b/docs/api/admin/components/schemas/price_list.yaml @@ -0,0 +1,70 @@ +title: Price List +description: >- + Price Lists represents a set of prices that overrides the default price for + one or more product variants. +x-resourceId: price_list +required: + - name + - description +properties: + id: + type: string + description: The price list's ID + example: pl_01G8X3CKJXCG5VXVZ87H9KC09W + name: + type: string + description: The price list's name + example: VIP Prices + description: + type: string + description: The price list's description + example: Prices for VIP customers + type: + description: The type of Price List. This can be one of either `sale` or `override`. + type: string + enum: + - sale + - override + default: sale + status: + description: The status of the Price List + type: string + enum: + - active + - draft + default: draft + starts_at: + description: The date with timezone that the Price List starts being valid. + type: string + format: date-time + ends_at: + description: The date with timezone that the Price List stops being valid. + type: string + format: date-time + customer_groups: + description: >- + The Customer Groups that the Price List applies to. Available if the + relation `customer_groups` is expanded. + type: array + items: + type: object + description: A customer group object. + prices: + description: >- + The Money Amounts that are associated with the Price List. Available if + the relation `prices` is expanded. + type: array + items: + $ref: ./money_amount.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time diff --git a/docs/api/admin/components/schemas/product.yaml b/docs/api/admin/components/schemas/product.yaml new file mode 100644 index 0000000000..41bf53f444 --- /dev/null +++ b/docs/api/admin/components/schemas/product.yaml @@ -0,0 +1,188 @@ +title: Product +description: >- + Products are a grouping of Product Variants that have common properties such + as images and descriptions. Products can have multiple options which define + the properties that Product Variants differ by. +x-resourceId: product +required: + - title + - profile_id +properties: + id: + type: string + description: The product's ID + example: prod_01G1G5V2MBA328390B5AXJ610F + title: + description: A title that can be displayed for easy identification of the Product. + type: string + example: Medusa Coffee Mug + subtitle: + description: An optional subtitle that can be used to further specify the Product. + type: string + description: + description: A short description of the Product. + type: string + example: Every programmer's best friend. + handle: + description: A unique identifier for the Product (e.g. for slug structure). + type: string + example: coffee-mug + is_giftcard: + description: >- + Whether the Product represents a Gift Card. Products that represent Gift + Cards will automatically generate a redeemable Gift Card code once they + are purchased. + type: boolean + default: false + status: + description: The status of the product + type: string + enum: + - draft + - proposed + - published + - rejected + default: draft + images: + description: Images of the Product. Available if the relation `images` is expanded. + type: array + items: + $ref: ./image.yaml + thumbnail: + description: A URL to an image file that can be used to identify the Product. + type: string + format: uri + options: + description: >- + The Product Options that are defined for the Product. Product Variants of + the Product will have a unique combination of Product Option Values. + Available if the relation `options` is expanded. + type: array + items: + $ref: ./product_option.yaml + variants: + description: >- + The Product Variants that belong to the Product. Each will have a unique + combination of Product Option Values. Available if the relation `variants` + is expanded. + type: array + items: + $ref: ./product_variant.yaml + profile_id: + description: >- + The ID of the Shipping Profile that the Product belongs to. Shipping + Profiles have a set of defined Shipping Options that can be used to + Fulfill a given set of Products. + type: string + example: sp_01G1G5V239ENSZ5MV4JAR737BM + profile: + description: Available if the relation `profile` is expanded. + $ref: ./shipping_profile.yaml + weight: + description: >- + The weight of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + height: + description: >- + The height of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + width: + description: >- + The width of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + length: + description: >- + The length of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + hs_code: + description: >- + The Harmonized System code of the Product Variant. May be used by + Fulfillment Providers to pass customs information to shipping carriers. + type: string + example: null + origin_country: + description: >- + The country in which the Product Variant was produced. May be used by + Fulfillment Providers to pass customs information to shipping carriers. + type: string + example: null + mid_code: + description: >- + The Manufacturers Identification code that identifies the manufacturer of + the Product Variant. May be used by Fulfillment Providers to pass customs + information to shipping carriers. + type: string + example: null + material: + description: >- + The material and composition that the Product Variant is made of, May be + used by Fulfillment Providers to pass customs information to shipping + carriers. + type: string + example: null + collection_id: + type: string + description: The Product Collection that the Product belongs to + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG + collection: + description: >- + A product collection object. Available if the relation `collection` is + expanded. + type: object + type_id: + type: string + description: The Product type that the Product belongs to + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + type: + description: Available if the relation `type` is expanded. + $ref: ./product_type.yaml + tags: + description: >- + The Product Tags assigned to the Product. Available if the relation `tags` + is expanded. + type: array + items: + $ref: ./product_tag.yaml + discountable: + description: >- + Whether the Product can be discounted. Discounts will not apply to Line + Items of this Product when this flag is set to `false`. + type: boolean + default: true + external_id: + description: The external ID of the product + type: string + example: null + sales_channels: + description: >- + The sales channels the product is associated with. Available if the + relation `sales_channels` is expanded. + type: array + items: + type: object + description: A sales channel object. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/product_collection.yaml b/docs/api/admin/components/schemas/product_collection.yaml new file mode 100644 index 0000000000..711acc6c10 --- /dev/null +++ b/docs/api/admin/components/schemas/product_collection.yaml @@ -0,0 +1,45 @@ +title: Product Collection +description: Product Collections represents a group of Products that are related. +x-resourceId: product_collection +required: + - title +properties: + id: + type: string + description: The product collection's ID + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG + title: + description: The title that the Product Collection is identified by. + type: string + example: Summer Collection + handle: + description: >- + A unique string that identifies the Product Collection - can for example + be used in slug structures. + type: string + example: summer-collection + products: + description: >- + The Products contained in the Product Collection. Available if the + relation `products` is expanded. + type: array + items: + type: object + description: A product collection object. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/product_option.yaml b/docs/api/admin/components/schemas/product_option.yaml new file mode 100644 index 0000000000..66fd46f4fd --- /dev/null +++ b/docs/api/admin/components/schemas/product_option.yaml @@ -0,0 +1,49 @@ +title: Product Option +description: >- + Product Options define properties that may vary between different variants of + a Product. Common Product Options are "Size" and "Color", but Medusa doesn't + limit what Product Options that can be defined. +x-resourceId: product_option +required: + - title + - product_id +properties: + id: + type: string + description: The product option's ID + example: opt_01F0YESHQBZVKCEXJ24BS6PCX3 + title: + description: The title that the Product Option is defined by (e.g. "Size"). + type: string + example: Size + values: + description: >- + The Product Option Values that are defined for the Product Option. + Available if the relation `values` is expanded. + type: array + items: + $ref: ./product_option_value.yaml + product_id: + description: The ID of the Product that the Product Option is defined for. + type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: A product object. Available if the relation `product` is expanded. + type: object + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/product_option_value.yaml b/docs/api/admin/components/schemas/product_option_value.yaml new file mode 100644 index 0000000000..3b8606ea53 --- /dev/null +++ b/docs/api/admin/components/schemas/product_option_value.yaml @@ -0,0 +1,54 @@ +title: Product Option Value +description: >- + A value given to a Product Variant's option set. Product Variant have a + Product Option Value for each of the Product Options defined on the Product. +x-resourceId: product_option_value +required: + - value + - option_id + - variant_id +properties: + id: + type: string + description: The product option value's ID + example: optval_01F0YESHR7S6ECD03RF6W12DSJ + value: + description: >- + The value that the Product Variant has defined for the specific Product + Option (e.g. if the Product Option is "Size" this value could be "Small", + "Medium" or "Large"). + type: string + example: large + option_id: + description: The ID of the Product Option that the Product Option Value is defined for. + type: string + example: opt_01F0YESHQBZVKCEXJ24BS6PCX3 + option: + description: Available if the relation `option` is expanded. + $ref: ./product_option.yaml + variant_id: + description: >- + The ID of the Product Variant that the Product Option Value is defined + for. + type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: Available if the relation `variant` is expanded. + $ref: ./product_variant.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/product_tag.yaml b/docs/api/admin/components/schemas/product_tag.yaml new file mode 100644 index 0000000000..cdfa21d4ad --- /dev/null +++ b/docs/api/admin/components/schemas/product_tag.yaml @@ -0,0 +1,31 @@ +title: Product Tag +description: Product Tags can be added to Products for easy filtering and grouping. +x-resourceId: product_tag +required: + - value +properties: + id: + type: string + description: The product tag's ID + example: ptag_01G8K2MTMG9168F2B70S1TAVK3 + value: + description: The value that the Product Tag represents + type: string + example: Pants + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/product_tax_rate.yaml b/docs/api/admin/components/schemas/product_tax_rate.yaml new file mode 100644 index 0000000000..f72e8896a8 --- /dev/null +++ b/docs/api/admin/components/schemas/product_tax_rate.yaml @@ -0,0 +1,36 @@ +title: Product Tax Rate +description: >- + Associates a tax rate with a product to indicate that the product is taxed in + a certain way +x-resourceId: product_tax_rate +required: + - product_id + - rate_id +properties: + product_id: + description: The ID of the Product + type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: Available if the relation `product` is expanded. + $ref: ./product.yaml + rate_id: + description: The ID of the Tax Rate + type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: ./tax_rate.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/product_type.yaml b/docs/api/admin/components/schemas/product_type.yaml new file mode 100644 index 0000000000..e2be2bf920 --- /dev/null +++ b/docs/api/admin/components/schemas/product_type.yaml @@ -0,0 +1,31 @@ +title: Product Type +description: Product Type can be added to Products for filtering and reporting purposes. +x-resourceId: product_type +required: + - value +properties: + id: + type: string + description: The product type's ID + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + value: + description: The value that the Product Type represents. + type: string + example: Clothing + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/product_type_tax_rate.yaml b/docs/api/admin/components/schemas/product_type_tax_rate.yaml new file mode 100644 index 0000000000..5bc7d5c302 --- /dev/null +++ b/docs/api/admin/components/schemas/product_type_tax_rate.yaml @@ -0,0 +1,36 @@ +title: Product Type Tax Rate +description: >- + Associates a tax rate with a product type to indicate that the product type is + taxed in a certain way +x-resourceId: product_type_tax_rate +required: + - product_type_id + - rate_id +properties: + product_type_id: + description: The ID of the Product type + type: string + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + product_type: + description: Available if the relation `product_type` is expanded. + $ref: ./product_type.yaml + rate_id: + description: The id of the Tax Rate + type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: ./tax_rate.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/product_variant.yaml b/docs/api/admin/components/schemas/product_variant.yaml new file mode 100644 index 0000000000..aa7386d615 --- /dev/null +++ b/docs/api/admin/components/schemas/product_variant.yaml @@ -0,0 +1,149 @@ +title: Product Variant +description: >- + Product Variants represent a Product with a specific set of Product Option + configurations. The maximum number of Product Variants that a Product can have + is given by the number of available Product Option combinations. +x-resourceId: product_variant +required: + - title + - product_id + - inventory_quantity +properties: + id: + type: string + description: The product variant's ID + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + title: + description: >- + A title that can be displayed for easy identification of the Product + Variant. + type: string + example: Small + product_id: + description: The ID of the Product that the Product Variant belongs to. + type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: A product object. Available if the relation `product` is expanded. + type: object + prices: + description: >- + The Money Amounts defined for the Product Variant. Each Money Amount + represents a price in a given currency or a price in a specific Region. + Available if the relation `prices` is expanded. + type: array + items: + $ref: ./money_amount.yaml + sku: + description: >- + The unique stock keeping unit used to identify the Product Variant. This + will usually be a unqiue identifer for the item that is to be shipped, and + can be referenced across multiple systems. + type: string + example: shirt-123 + barcode: + description: >- + A generic field for a GTIN number that can be used to identify the Product + Variant. + type: string + example: null + ean: + description: An EAN barcode number that can be used to identify the Product Variant. + type: string + example: null + upc: + description: A UPC barcode number that can be used to identify the Product Variant. + type: string + example: null + variant_rank: + description: The ranking of this variant + type: number + default: 0 + inventory_quantity: + description: The current quantity of the item that is stocked. + type: integer + example: 100 + allow_backorder: + description: >- + Whether the Product Variant should be purchasable when + `inventory_quantity` is 0. + type: boolean + default: false + manage_inventory: + description: Whether Medusa should manage inventory for the Product Variant. + type: boolean + default: true + hs_code: + description: >- + The Harmonized System code of the Product Variant. May be used by + Fulfillment Providers to pass customs information to shipping carriers. + type: string + example: null + origin_country: + description: >- + The country in which the Product Variant was produced. May be used by + Fulfillment Providers to pass customs information to shipping carriers. + type: string + example: null + mid_code: + description: >- + The Manufacturers Identification code that identifies the manufacturer of + the Product Variant. May be used by Fulfillment Providers to pass customs + information to shipping carriers. + type: string + example: null + material: + description: >- + The material and composition that the Product Variant is made of, May be + used by Fulfillment Providers to pass customs information to shipping + carriers. + type: string + example: null + weight: + description: >- + The weight of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + height: + description: >- + The height of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + width: + description: >- + The width of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + length: + description: >- + The length of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + options: + description: >- + The Product Option Values specified for the Product Variant. Available if + the relation `options` is expanded. + type: array + items: + $ref: ./product_option_value.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/refund.yaml b/docs/api/admin/components/schemas/refund.yaml new file mode 100644 index 0000000000..c1fc4cfc0f --- /dev/null +++ b/docs/api/admin/components/schemas/refund.yaml @@ -0,0 +1,64 @@ +title: Refund +description: >- + Refund represent an amount of money transfered back to the Customer for a + given reason. Refunds may occur in relation to Returns, Swaps and Claims, but + can also be initiated by a store operator. +x-resourceId: refund +required: + - order_id + - amount +properties: + id: + type: string + description: The refund's ID + example: ref_01G1G5V27GYX4QXNARRQCW1N8T + order_id: + description: The id of the Order that the Refund is related to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + amount: + description: The amount that has be refunded to the Customer. + type: integer + example: 1000 + note: + description: An optional note explaining why the amount was refunded. + type: string + example: I didn't like it + reason: + description: >- + The reason given for the Refund, will automatically be set when processed + as part of a Swap, Claim or Return. + type: string + enum: + - discount + - return + - swap + - claim + - other + example: return + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the refund in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/region.yaml b/docs/api/admin/components/schemas/region.yaml new file mode 100644 index 0000000000..877489af02 --- /dev/null +++ b/docs/api/admin/components/schemas/region.yaml @@ -0,0 +1,102 @@ +title: Region +description: >- + Regions hold settings for how Customers in a given geographical location shop. + The is, for example, where currencies and tax rates are defined. A Region can + consist of multiple countries to accomodate common shopping settings across + countries. +x-resourceId: region +required: + - name + - currency_code + - tax_rate +properties: + id: + type: string + description: The cart's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + name: + description: >- + The name of the region as displayed to the customer. If the Region only + has one country it is recommended to write the country name. + type: string + example: EU + currency_code: + description: The 3 character currency code that the Region uses. + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: ./currency.yaml + tax_rate: + description: The tax rate that should be charged on purchases in the Region. + type: number + example: 0 + tax_rates: + description: >- + The tax rates that are included in the Region. Available if the relation + `tax_rates` is expanded. + type: array + items: + $ref: ./tax_rate.yaml + tax_code: + description: >- + The tax code used on purchases in the Region. This may be used by other + systems for accounting purposes. + type: string + example: null + gift_cards_taxable: + description: Whether the gift cards are taxable or not in this region. + type: boolean + default: true + automatic_taxes: + description: Whether taxes should be automated in this region. + type: boolean + default: true + countries: + description: >- + The countries that are included in the Region. Available if the relation + `countries` is expanded. + type: array + items: + $ref: ./country.yaml + tax_provider_id: + type: string + description: The ID of the tax provider used in this region + example: null + tax_provider: + description: Available if the relation `tax_provider` is expanded. + $ref: ./tax_provider.yaml + payment_providers: + description: >- + The Payment Providers that can be used to process Payments in the Region. + Available if the relation `payment_providers` is expanded. + type: array + items: + $ref: ./payment_provider.yaml + fulfillment_providers: + description: >- + The Fulfillment Providers that can be used to fulfill orders in the + Region. Available if the relation `payment_providers` is expanded. + type: array + items: + $ref: ./fulfillment_provider.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/return.yaml b/docs/api/admin/components/schemas/return.yaml new file mode 100644 index 0000000000..a475900106 --- /dev/null +++ b/docs/api/admin/components/schemas/return.yaml @@ -0,0 +1,98 @@ +title: Return +description: >- + Return orders hold information about Line Items that a Customer wishes to send + back, along with how the items will be returned. Returns can be used as part + of a Swap. +x-resourceId: return +required: + - refund_amount +properties: + id: + type: string + description: The return's ID + example: ret_01F0YET7XPCMF8RZ0Y151NZV2V + status: + description: Status of the Return. + type: string + enum: + - requested + - received + - requires_action + - canceled + default: requested + items: + description: >- + The Return Items that will be shipped back to the warehouse. Available if + the relation `items` is expanded. + type: array + items: + $ref: ./return_item.yaml + swap_id: + description: The ID of the Swap that the Return is a part of. + type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object + order_id: + description: The ID of the Order that the Return is made from. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + claim_order_id: + description: The ID of the Claim that the Return is a part of. + type: string + example: null + claim_order: + description: A claim order object. Available if the relation `claim_order` is expanded. + type: object + shipping_method: + description: >- + The Shipping Method that will be used to send the Return back. Can be null + if the Customer facilitates the return shipment themselves. Available if + the relation `shipping_method` is expanded. + type: array + items: + $ref: ./shipping_method.yaml + shipping_data: + description: >- + Data about the return shipment as provided by the Fulfilment Provider that + handles the return shipment. + type: object + example: {} + refund_amount: + description: The amount that should be refunded as a result of the return. + type: integer + example: 1000 + no_notification: + description: When set to true, no notification will be sent related to this return. + type: boolean + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the return in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + received_at: + description: The date with timezone at which the return was received. + type: string + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/return_item.yaml b/docs/api/admin/components/schemas/return_item.yaml new file mode 100644 index 0000000000..3c45a35003 --- /dev/null +++ b/docs/api/admin/components/schemas/return_item.yaml @@ -0,0 +1,57 @@ +title: Return Item +description: >- + Correlates a Line Item with a Return, keeping track of the quantity of the + Line Item that will be returned. +x-resourceId: return_item +required: + - return_id + - item_id +properties: + return_id: + description: The id of the Return that the Return Item belongs to. + type: string + example: ret_01F0YET7XPCMF8RZ0Y151NZV2V + return_order: + description: Available if the relation `return_order` is expanded. + $ref: ./return.yaml + item_id: + description: The id of the Line Item that the Return Item references. + type: string + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + item: + description: Available if the relation `item` is expanded. + $ref: ./line_item.yaml + quantity: + description: The quantity of the Line Item that is included in the Return. + type: integer + example: 1 + is_requested: + description: >- + Whether the Return Item was requested initially or received unexpectedly + in the warehouse. + type: boolean + default: true + requested_quantity: + description: The quantity that was originally requested to be returned. + type: integer + example: 1 + recieved_quantity: + description: The quantity that was received in the warehouse. + type: integer + example: 1 + reason_id: + description: The ID of the reason for returning the item. + type: string + example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ + reason: + description: Available if the relation `reason` is expanded. + $ref: ./return_reason.yaml + note: + description: An optional note with additional details about the Return. + type: string + example: I didn't like it. + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/return_reason.yaml b/docs/api/admin/components/schemas/return_reason.yaml new file mode 100644 index 0000000000..7873cfc3f2 --- /dev/null +++ b/docs/api/admin/components/schemas/return_reason.yaml @@ -0,0 +1,52 @@ +title: Return Reason +description: >- + A Reason for why a given product is returned. A Return Reason can be used on + Return Items in order to indicate why a Line Item was returned. +x-resourceId: return_reason +required: + - value + - label +properties: + id: + type: string + description: The cart's ID + example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ + description: + description: A description of the Reason. + type: string + example: Items that are damaged + label: + description: A text that can be displayed to the Customer as a reason. + type: string + example: Damaged goods + value: + description: The value to identify the reason by. + type: string + example: damaged + parent_return_reason_id: + type: string + description: The ID of the parent reason. + example: null + parent_return_reason: + description: Available if the relation `parent_return_reason` is expanded. + $ref: ./return_reason.yaml + return_reason_children: + description: Available if the relation `return_reason_children` is expanded. + $ref: ./return_reason.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/sales_channel.yaml b/docs/api/admin/components/schemas/sales_channel.yaml new file mode 100644 index 0000000000..0523299105 --- /dev/null +++ b/docs/api/admin/components/schemas/sales_channel.yaml @@ -0,0 +1,34 @@ +title: Sales Channel +description: A Sales Channel +x-resourceId: sales_channel +required: + - name +properties: + id: + type: string + description: The sales channel's ID + example: sc_01G8X9A7ESKAJXG2H0E6F1MW7A + name: + description: The name of the sales channel. + type: string + example: Market + description: + description: The description of the sales channel. + type: string + example: Multi-vendor market + is_disabled: + description: Specify if the sales channel is enabled or disabled. + type: boolean + default: false + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time diff --git a/docs/api/admin/components/schemas/sales_channel_tax_line.yaml b/docs/api/admin/components/schemas/sales_channel_tax_line.yaml new file mode 100644 index 0000000000..8aac42859c --- /dev/null +++ b/docs/api/admin/components/schemas/sales_channel_tax_line.yaml @@ -0,0 +1,44 @@ +title: Sales Channel +description: A Sales Channel +x-resourceId: sales_channel_tax_line +required: + - shipping_method_id + - rate + - name +properties: + id: + type: string + description: The line item tax line's ID + example: smtl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + shipping_method_id: + type: string + description: The ID of the line item + example: sm_01F0YET7DR2E7CYVSDHM593QG2 + shipping_method: + description: Available if the relation `shipping_method` is expanded. + $ref: ./shipping_method.yaml + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + rate: + description: The numeric rate to charge tax by + type: number + example: 10 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/shipping_method.yaml b/docs/api/admin/components/schemas/shipping_method.yaml new file mode 100644 index 0000000000..d53bafb241 --- /dev/null +++ b/docs/api/admin/components/schemas/shipping_method.yaml @@ -0,0 +1,76 @@ +title: Shipping Method +description: >- + Shipping Methods represent a way in which an Order or Return can be shipped. + Shipping Methods are built from a Shipping Option, but may contain additional + details, that can be necessary for the Fulfillment Provider to handle the + shipment. +x-resourceId: shipping_method +required: + - shipping_option_id + - price +properties: + id: + type: string + description: The shipping method's ID + example: sm_01F0YET7DR2E7CYVSDHM593QG2 + shipping_option_id: + description: The id of the Shipping Option that the Shipping Method is built from. + type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: Available if the relation `shipping_option` is expanded. + $ref: ./shipping_option.yaml + order_id: + description: The id of the Order that the Shipping Method is used on. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + return_id: + description: The id of the Return that the Shipping Method is used on. + type: string + example: null + return_order: + description: A return object. Available if the relation `return_order` is expanded. + type: object + swap_id: + description: The id of the Swap that the Shipping Method is used on. + type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object + cart_id: + description: The id of the Cart that the Shipping Method is used on. + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + claim_order_id: + description: The id of the Claim that the Shipping Method is used on. + type: string + example: null + claim_order: + description: A claim order object. Available if the relation `claim_order` is expanded. + type: object + tax_lines: + type: array + description: Available if the relation `tax_lines` is expanded. + items: + $ref: ./tax_line.yaml + price: + description: >- + The amount to charge for the Shipping Method. The currency of the price is + defined by the Region that the Order that the Shipping Method belongs to + is a part of. + type: integer + example: 200 + data: + description: >- + Additional data that the Fulfillment Provider needs to fulfill the + shipment. This is used in combination with the Shipping Options data, and + may contain information such as a drop point id. + type: object + example: {} diff --git a/docs/api/admin/components/schemas/shipping_option.yaml b/docs/api/admin/components/schemas/shipping_option.yaml new file mode 100644 index 0000000000..61f298af6f --- /dev/null +++ b/docs/api/admin/components/schemas/shipping_option.yaml @@ -0,0 +1,103 @@ +title: Shipping Option +description: >- + Shipping Options represent a way in which an Order or Return can be shipped. + Shipping Options have an associated Fulfillment Provider that will be used + when the fulfillment of an Order is initiated. Shipping Options themselves + cannot be added to Carts, but serve as a template for Shipping Methods. This + distinction makes it possible to customize individual Shipping Methods with + additional information. +x-resourceId: shipping_option +required: + - name + - region_id + - profile_id + - provider_id + - price_type +properties: + id: + type: string + description: The shipping option's ID + example: so_01G1G5V27GYX4QXNARRQCW1N8T + name: + description: >- + The name given to the Shipping Option - this may be displayed to the + Customer. + type: string + example: PostFake Standard + region_id: + type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + profile_id: + description: >- + The ID of the Shipping Profile that the shipping option belongs to. + Shipping Profiles have a set of defined Shipping Options that can be used + to Fulfill a given set of Products. + type: string + example: sp_01G1G5V239ENSZ5MV4JAR737BM + profile: + description: Available if the relation `profile` is expanded. + $ref: ./shipping_profile.yaml + provider_id: + description: >- + The id of the Fulfillment Provider, that will be used to process + Fulfillments from the Shipping Option. + type: string + example: manual + provider: + description: Available if the relation `provider` is expanded. + $ref: ./fulfillment_provider.yaml + price_type: + description: >- + The type of pricing calculation that is used when creatin Shipping Methods + from the Shipping Option. Can be `flat_rate` for fixed prices or + `calculated` if the Fulfillment Provider can provide price calulations. + type: string + enum: + - flat_rate + - calculated + example: flat_rate + amount: + description: >- + The amount to charge for shipping when the Shipping Option price type is + `flat_rate`. + type: integer + example: 200 + is_return: + description: Flag to indicate if the Shipping Option can be used for Return shipments. + type: boolean + default: false + requirements: + description: >- + The requirements that must be satisfied for the Shipping Option to be + available for a Cart. Available if the relation `requirements` is + expanded. + type: array + items: + $ref: ./shipping_option_requirement.yaml + data: + description: >- + The data needed for the Fulfillment Provider to identify the Shipping + Option. + type: object + example: {} + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/shipping_option_requirement.yaml b/docs/api/admin/components/schemas/shipping_option_requirement.yaml new file mode 100644 index 0000000000..559d21de44 --- /dev/null +++ b/docs/api/admin/components/schemas/shipping_option_requirement.yaml @@ -0,0 +1,43 @@ +title: Shipping Option Requirement +description: >- + A requirement that a Cart must satisfy for the Shipping Option to be available + to the Cart. +x-resourceId: shipping_option_requirement +required: + - shipping_option_id + - type + - amount +properties: + id: + type: string + description: The shipping option requirement's ID + example: sor_01G1G5V29AB4CTNDRFSRWSRKWD + shipping_option_id: + description: >- + The id of the Shipping Option that the hipping option requirement belongs + to + type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: Available if the relation `shipping_option` is expanded. + $ref: ./shipping_option.yaml + type: + description: >- + The type of the requirement, this defines how the value will be compared + to the Cart's total. `min_subtotal` requirements define the minimum + subtotal that is needed for the Shipping Option to be available, while the + `max_subtotal` defines the maximum subtotal that the Cart can have for the + Shipping Option to be available. + type: string + enum: + - min_subtotal + - max_subtotal + example: min_subtotal + amount: + description: The amount to compare the Cart subtotal to. + type: integer + example: 100 + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time diff --git a/docs/api/admin/components/schemas/shipping_profile.yaml b/docs/api/admin/components/schemas/shipping_profile.yaml new file mode 100644 index 0000000000..cb55e4f134 --- /dev/null +++ b/docs/api/admin/components/schemas/shipping_profile.yaml @@ -0,0 +1,62 @@ +title: Shipping Profile +description: >- + Shipping Profiles have a set of defined Shipping Options that can be used to + fulfill a given set of Products. +x-resourceId: shipping_profile +required: + - name + - type +properties: + id: + type: string + description: The shipping profile's ID + example: sp_01G1G5V239ENSZ5MV4JAR737BM + name: + description: >- + The name given to the Shipping profile - this may be displayed to the + Customer. + type: string + example: Default Shipping Profile + type: + description: >- + The type of the Shipping Profile, may be `default`, `gift_card` or + `custom`. + type: string + enum: + - default + - gift_card + - custom + example: default + products: + description: >- + The Products that the Shipping Profile defines Shipping Options for. + Available if the relation `products` is expanded. + type: array + items: + type: object + description: A product object. + shipping_options: + description: >- + The Shipping Options that can be used to fulfill the Products in the + Shipping Profile. Available if the relation `shipping_options` is + expanded. + type: array + items: + $ref: ./shipping_option.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/shipping_tax_rate.yaml b/docs/api/admin/components/schemas/shipping_tax_rate.yaml new file mode 100644 index 0000000000..ddf13f172a --- /dev/null +++ b/docs/api/admin/components/schemas/shipping_tax_rate.yaml @@ -0,0 +1,36 @@ +title: Shipping Tax Rate +description: >- + Associates a tax rate with a shipping option to indicate that the shipping + option is taxed in a certain way +x-resourceId: shipping_tax_rate +required: + - shipping_option_id + - rate_id +properties: + shipping_option_id: + description: The ID of the Shipping Option + type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: Available if the relation `shipping_option` is expanded. + $ref: ./shipping_option.yaml + rate_id: + description: The ID of the Tax Rate + type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: ./tax_rate.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/staged_job.yaml b/docs/api/admin/components/schemas/staged_job.yaml new file mode 100644 index 0000000000..95fd6aaf34 --- /dev/null +++ b/docs/api/admin/components/schemas/staged_job.yaml @@ -0,0 +1,18 @@ +title: Staged Job +description: A staged job resource +x-resourceId: staged_job +required: + - event_name +properties: + id: + type: string + description: The staged job's ID + example: job_01F0YET7BZTARY9MKN1SJ7AAXF + event_name: + description: The name of the event + type: string + example: order.placed + data: + description: Data necessary for the job + type: object + example: {} diff --git a/docs/api/admin/components/schemas/store.yaml b/docs/api/admin/components/schemas/store.yaml new file mode 100644 index 0000000000..09844ff155 --- /dev/null +++ b/docs/api/admin/components/schemas/store.yaml @@ -0,0 +1,59 @@ +title: Store +description: Holds settings for the Store, such as name, currencies, etc. +x-resourceId: store +properties: + id: + type: string + description: The store's ID + example: store_01G1G5V21KADXNGH29BJMAJ4B4 + name: + description: The name of the Store - this may be displayed to the Customer. + type: string + example: Medusa Store + default_currency_code: + description: The 3 character currency code that is the default of the store. + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + default_currency: + description: Available if the relation `default_currency` is expanded. + $ref: ./currency.yaml + currencies: + description: >- + The currencies that are enabled for the Store. Available if the relation + `currencies` is expanded. + type: array + items: + $ref: ./currency.yaml + swap_link_template: + description: >- + A template to generate Swap links from. Use {{cart_id}} to include the + Swap's `cart_id` in the link. + type: string + example: null + payment_link_template: + description: >- + A template to generate Payment links from. Use {{cart_id}} to include the + payment's `cart_id` in the link. + type: string + example: null + invite_link_template: + description: A template to generate Invite links from + type: string + example: null + default_sales_channel_id: + type: string + description: The sales channel ID the cart is associated with. + example: null + default_sales_channel: + description: >- + A sales channel object. Available if the relation `default_sales_channel` + is expanded. + type: object + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/swap.yaml b/docs/api/admin/components/schemas/swap.yaml new file mode 100644 index 0000000000..35a81eed87 --- /dev/null +++ b/docs/api/admin/components/schemas/swap.yaml @@ -0,0 +1,149 @@ +title: Swap +description: >- + Swaps can be created when a Customer wishes to exchange Products that they + have purchased to different Products. Swaps consist of a Return of previously + purchased Products and a Fulfillment of new Products, the amount paid for the + Products being returned will be used towards payment for the new Products. In + the case where the amount paid for the the Products being returned exceed the + amount to be paid for the new Products, a Refund will be issued for the + difference. +x-resourceId: swap +required: + - fulfillment_status + - payment_status + - order_id +properties: + id: + type: string + description: The swap's ID + example: swap_01F0YET86Y9G92D3YDR9Y6V676 + fulfillment_status: + description: The status of the Fulfillment of the Swap. + type: string + enum: + - not_fulfilled + - fulfilled + - shipped + - canceled + - requires_action + example: not_fulfilled + payment_status: + description: >- + The status of the Payment of the Swap. The payment may either refer to the + refund of an amount or the authorization of a new amount. + type: string + enum: + - not_paid + - awaiting + - captured + - confirmed + - canceled + - difference_refunded + - partially_refunded + - refunded + - requires_action + example: not_paid + order_id: + description: The ID of the Order where the Line Items to be returned where purchased. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + additional_items: + description: >- + The new Line Items to ship to the Customer. Available if the relation + `additional_items` is expanded. + type: array + items: + $ref: ./line_item.yaml + return_order: + description: >- + A return order object. The Return that is issued for the return part of + the Swap. Available if the relation `return_order` is expanded. + type: object + fulfillments: + description: >- + The Fulfillments used to send the new Line Items. Available if the + relation `fulfillments` is expanded. + type: array + items: + $ref: ./fulfillment.yaml + payment: + description: >- + The Payment authorized when the Swap requires an additional amount to be + charged from the Customer. Available if the relation `payment` is + expanded. + $ref: ./payment.yaml + difference_due: + description: >- + The difference that is paid or refunded as a result of the Swap. May be + negative when the amount paid for the returned items exceed the total of + the new Products. + type: integer + example: 0 + shipping_address_id: + description: >- + The Address to send the new Line Items to - in most cases this will be the + same as the shipping address on the Order. + type: string + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: ./address.yaml + shipping_methods: + description: >- + The Shipping Methods used to fulfill the addtional items purchased. + Available if the relation `shipping_methods` is expanded. + type: array + items: + $ref: ./shipping_method.yaml + cart_id: + description: The id of the Cart that the Customer will use to confirm the Swap. + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + allow_backorder: + description: If true, swaps can be completed with items out of stock + type: boolean + default: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the swap in case + of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + confirmed_at: + description: The date with timezone at which the Swap was confirmed by the Customer. + type: string + format: date-time + canceled_at: + description: The date with timezone at which the Swap was canceled. + type: string + format: date-time + no_notification: + description: If set to true, no notification will be sent related to this swap + type: boolean + example: false + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/tax_line.yaml b/docs/api/admin/components/schemas/tax_line.yaml new file mode 100644 index 0000000000..491a7e0c00 --- /dev/null +++ b/docs/api/admin/components/schemas/tax_line.yaml @@ -0,0 +1,36 @@ +title: Tax Line +description: Line item that specifies an amount of tax to add to a line item. +x-resourceId: tax_line +required: + - rate + - name +properties: + id: + type: string + description: The tax line's ID + example: tl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + rate: + description: The numeric rate to charge tax by + type: number + example: 10 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/tax_provider.yaml b/docs/api/admin/components/schemas/tax_provider.yaml new file mode 100644 index 0000000000..267d162eae --- /dev/null +++ b/docs/api/admin/components/schemas/tax_provider.yaml @@ -0,0 +1,15 @@ +title: Tax Provider +description: The tax service used to calculate taxes +x-resourceId: tax_provider +properties: + id: + description: The id of the tax provider as given by the plugin. + type: string + example: manual + is_installed: + description: >- + Whether the plugin is installed in the current version. Plugins that are + no longer installed are not deleted by will have this field set to + `false`. + type: boolean + default: true diff --git a/docs/api/admin/components/schemas/tax_rate.yaml b/docs/api/admin/components/schemas/tax_rate.yaml new file mode 100644 index 0000000000..29f7e0e0a9 --- /dev/null +++ b/docs/api/admin/components/schemas/tax_rate.yaml @@ -0,0 +1,81 @@ +title: Tax Rate +description: >- + A Tax Rate can be used to associate a certain rate to charge on products + within a given Region +x-resourceId: line_item +required: + - name + - region_id +properties: + id: + type: string + description: The tax rate's ID + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + rate: + description: The numeric rate to charge + type: number + example: 10 + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + region_id: + type: string + description: The id of the Region that the rate belongs to + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + products: + type: array + description: >- + The products that belong to this tax rate. Available if the relation + `products` is expanded. + items: + type: object + description: A product object. + product_types: + type: array + description: >- + The product types that belong to this tax rate. Available if the relation + `product_types` is expanded. + items: + type: object + description: A product type object. + shipping_options: + type: array + description: >- + The shipping options that belong to this tax rate. Available if the + relation `shipping_options` is expanded. + items: + type: object + description: A shipping option object. + product_count: + description: The count of products + type: integer + example: null + product_type_count: + description: The count of product types + type: integer + example: null + shipping_option_count: + description: The count of shipping options + type: integer + example: null + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/tracking_link.yaml b/docs/api/admin/components/schemas/tracking_link.yaml new file mode 100644 index 0000000000..2a79689722 --- /dev/null +++ b/docs/api/admin/components/schemas/tracking_link.yaml @@ -0,0 +1,55 @@ +title: Tracking Link +description: >- + Tracking Link holds information about tracking numbers for a Fulfillment. + Tracking Links can optionally contain a URL that can be visited to see the + status of the shipment. +x-resourceId: tracking_link +required: + - tracking_number + - fulfillment_id +properties: + id: + type: string + description: The tracking link's ID + example: tlink_01G8ZH853Y6TFXWPG5EYE81X63 + url: + description: The URL at which the status of the shipment can be tracked. + type: string + format: uri + tracking_number: + description: The tracking number given by the shipping carrier. + type: string + format: RH370168054CN + fulfillment_id: + type: string + description: The id of the Fulfillment that the Tracking Link references. + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF + fulfillment: + description: Available if the relation `fulfillment` is expanded. + $ref: ./fulfillment.yaml + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of a process in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/components/schemas/user.yaml b/docs/api/admin/components/schemas/user.yaml new file mode 100644 index 0000000000..5083be44de --- /dev/null +++ b/docs/api/admin/components/schemas/user.yaml @@ -0,0 +1,43 @@ +title: User +description: Represents a User who can manage store settings. +x-resourceId: user +required: + - email +properties: + id: + type: string + description: The user's ID + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + email: + description: The email of the User + type: string + format: email + first_name: + description: The first name of the User + type: string + example: Levi + last_name: + description: The last name of the User + type: string + example: Bogan + api_token: + description: An API token associated with the user. + type: string + example: null + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/admin/openapi.yaml b/docs/api/admin/openapi.yaml new file mode 100644 index 0000000000..d374333fbb --- /dev/null +++ b/docs/api/admin/openapi.yaml @@ -0,0 +1,353 @@ +openapi: 3.0.0 +info: + version: 1.0.0 + title: Medusa Admin API + description: >- + API reference for Medusa's Admin endpoints. All endpoints are prefixed with + `/admin`. + license: + name: MIT + url: https://github.com/medusajs/medusa/blob/master/LICENSE +tags: + - name: Auth + description: >- + Auth endpoints that allow authorization of admin Users and manages their + sessions. + - name: App + description: App endpoints that allow handling apps in Medusa. + x-resourceId: OAuth + - name: Batch Job + description: Batch Job endpoints that allow handling batch jobs in Medusa. + x-resourceId: batch_job + - name: Claim + description: Claim endpoints that allow handling claims in Medusa. + x-resourceId: claim_order + - name: Collection + description: Collection endpoints that allow handling collections in Medusa. + x-resourceId: product_collection + - name: Customer + description: Customer endpoints that allow handling customers in Medusa. + x-resourceId: customer + - name: Customer Group + description: Customer Group endpoints that allow handling customer groups in Medusa. + x-resourceId: customer_group + - name: Discount + description: Discount endpoints that allow handling discounts in Medusa. + x-resourceId: discount + - name: Discount Condition + description: >- + Discount Condition endpoints that allow handling discount conditions in + Medusa. + x-resourceId: discount_condition + - name: Draft Order + description: Draft Order endpoints that allow handling draft orders in Medusa. + x-resourceId: draft-order + - name: Gift Card + description: Gift Card endpoints that allow handling gift cards in Medusa. + x-resourceId: gift_card + - name: Invite + description: Invite endpoints that allow handling invites in Medusa. + x-resourceId: invite + - name: Note + description: Note endpoints that allow handling notes in Medusa. + x-resourceId: note + - name: Notification + description: Notification endpoints that allow handling notifications in Medusa. + x-resourceId: notification + - name: Order + description: Order endpoints that allow handling orders in Medusa. + x-resourceId: order + - name: Price List + description: Price List endpoints that allow handling price lists in Medusa. + x-resourceId: price_list + - name: Product + description: Product endpoints that allow handling products in Medusa. + x-resourceId: product + - name: Product Tag + description: Product Tag endpoints that allow handling product tags in Medusa. + x-resourceId: product_tag + - name: Product Types + description: Product Types endpoints that allow handling product types in Medusa. + x-resourceId: product_type + - name: Product Variant + description: Product Variant endpoints that allow handling product variants in Medusa. + x-resourceId: product_variant + - name: Region + description: Region endpoints that allow handling regions in Medusa. + x-resourceId: region + - name: Return Reason + description: Return Reason endpoints that allow handling return reasons in Medusa. + x-resourceId: return_reason + - name: Return + description: Return endpoints that allow handling returns in Medusa. + x-resourceId: return + - name: Sales Channel + description: Sales Channel endpoints that allow handling sales channels in Medusa. + x-resourceId: sales_channel + - name: Shipping Option + description: Shipping Option endpoints that allow handling shipping options in Medusa. + x-resourceId: shipping_option + - name: Shipping Profile + description: >- + Shipping Profile endpoints that allow handling shipping profiles in + Medusa. + x-resourceId: shipping_profile + - name: Store + description: Store endpoints that allow handling stores in Medusa. + x-resourceId: store + - name: Swap + description: Swap endpoints that allow handling swaps in Medusa. + x-resourceId: swap + - name: Tax Rate + description: Tax Rate endpoints that allow handling tax rates in Medusa. + x-resourceId: tax_rate + - name: Upload + description: Upload endpoints that allow handling uploads in Medusa. + - name: User + description: User endpoints that allow handling users in Medusa. + x-resourceId: user +servers: + - url: https://api.medusa-commerce.com/admin +paths: + /auth: + $ref: paths/auth.yaml + /batch-jobs/{id}/cancel: + $ref: paths/batch-jobs_{id}_cancel.yaml + /batch-jobs/{id}/confirm: + $ref: paths/batch-jobs_{id}_confirm.yaml + /batch-jobs: + $ref: paths/batch-jobs.yaml + /batch-jobs/{id}: + $ref: paths/batch-jobs_{id}.yaml + /collections/{id}/products/batch: + $ref: paths/collections_{id}_products_batch.yaml + /collections: + $ref: paths/collections.yaml + /collections/{id}: + $ref: paths/collections_{id}.yaml + /customer-groups/{id}/customers/batch: + $ref: paths/customer-groups_{id}_customers_batch.yaml + /customer-groups: + $ref: paths/customer-groups.yaml + /customer-groups/{id}: + $ref: paths/customer-groups_{id}.yaml + /customer-groups/{id}/customers: + $ref: paths/customer-groups_{id}_customers.yaml + /customers: + $ref: paths/customers.yaml + /customers/{id}: + $ref: paths/customers_{id}.yaml + /discounts/{id}/regions/{region_id}: + $ref: paths/discounts_{id}_regions_{region_id}.yaml + /discounts/{discount_id}/conditions: + $ref: paths/discounts_{discount_id}_conditions.yaml + /discounts: + $ref: paths/discounts.yaml + /discounts/{id}/dynamic-codes: + $ref: paths/discounts_{id}_dynamic-codes.yaml + /discounts/{discount_id}/conditions/{condition_id}: + $ref: paths/discounts_{discount_id}_conditions_{condition_id}.yaml + /discounts/{id}: + $ref: paths/discounts_{id}.yaml + /discounts/{id}/dynamic-codes/{code}: + $ref: paths/discounts_{id}_dynamic-codes_{code}.yaml + /discounts/code/{code}: + $ref: paths/discounts_code_{code}.yaml + /apps/authorizations: + $ref: paths/apps_authorizations.yaml + /apps: + $ref: paths/apps.yaml + /draft-orders: + $ref: paths/draft-orders.yaml + /draft-orders/{id}/line-items: + $ref: paths/draft-orders_{id}_line-items.yaml + /draft-orders/{id}: + $ref: paths/draft-orders_{id}.yaml + /draft-orders/{id}/line-items/{line_id}: + $ref: paths/draft-orders_{id}_line-items_{line_id}.yaml + /draft-orders/{id}/pay: + $ref: paths/draft-orders_{id}_pay.yaml + /admin/draft-orders/{id}: + $ref: paths/admin_draft-orders_{id}.yaml + /gift-cards: + $ref: paths/gift-cards.yaml + /gift-cards/{id}: + $ref: paths/gift-cards_{id}.yaml + /invites/accept: + $ref: paths/invites_accept.yaml + /invites: + $ref: paths/invites.yaml + /invites/{invite_id}: + $ref: paths/invites_{invite_id}.yaml + /invites/{invite_id}/resend: + $ref: paths/invites_{invite_id}_resend.yaml + /notes: + $ref: paths/notes.yaml + /notes/{id}: + $ref: paths/notes_{id}.yaml + /notifications: + $ref: paths/notifications.yaml + /notifications/{id}/resend: + $ref: paths/notifications_{id}_resend.yaml + /orders/{id}/shipping-methods: + $ref: paths/orders_{id}_shipping-methods.yaml + /orders/{id}/archive: + $ref: paths/orders_{id}_archive.yaml + /orders/{id}/claims/{claim_id}/cancel: + $ref: paths/orders_{id}_claims_{claim_id}_cancel.yaml + /orders/{id}/claims/{claim_id}/fulfillments/{fulfillment_id}/cancel: + $ref: >- + paths/orders_{id}_claims_{claim_id}_fulfillments_{fulfillment_id}_cancel.yaml + /orders/{id}/swaps/{swap_id}/fulfillments/{fulfillment_id}/cancel: + $ref: >- + paths/orders_{id}_swaps_{swap_id}_fulfillments_{fulfillment_id}_cancel.yaml + /orders/{id}/fulfillments/{fulfillment_id}/cancel: + $ref: paths/orders_{id}_fulfillments_{fulfillment_id}_cancel.yaml + /orders/{id}/cancel: + $ref: paths/orders_{id}_cancel.yaml + /orders/{id}/swaps/{swap_id}/cancel: + $ref: paths/orders_{id}_swaps_{swap_id}_cancel.yaml + /orders/{id}/capture: + $ref: paths/orders_{id}_capture.yaml + /orders/{id}/complete: + $ref: paths/orders_{id}_complete.yaml + /orders/{id}/claims/{claim_id}/shipments: + $ref: paths/orders_{id}_claims_{claim_id}_shipments.yaml + /order/{id}/claims: + $ref: paths/order_{id}_claims.yaml + /orders/{id}/fulfillment: + $ref: paths/orders_{id}_fulfillment.yaml + /orders/{id}/shipment: + $ref: paths/orders_{id}_shipment.yaml + /orders/{id}/swaps/{swap_id}/shipments: + $ref: paths/orders_{id}_swaps_{swap_id}_shipments.yaml + /order/{id}/swaps: + $ref: paths/order_{id}_swaps.yaml + /orders/{id}/claims/{claim_id}/fulfillments: + $ref: paths/orders_{id}_claims_{claim_id}_fulfillments.yaml + /orders/{id}/swaps/{swap_id}/fulfillments: + $ref: paths/orders_{id}_swaps_{swap_id}_fulfillments.yaml + /orders/{id}: + $ref: paths/orders_{id}.yaml + /orders: + $ref: paths/orders.yaml + /orders/{id}/swaps/{swap_id}/process-payment: + $ref: paths/orders_{id}_swaps_{swap_id}_process-payment.yaml + /orders/{id}/refund: + $ref: paths/orders_{id}_refund.yaml + /orders/{id}/return: + $ref: paths/orders_{id}_return.yaml + /order/{id}/claims/{claim_id}: + $ref: paths/order_{id}_claims_{claim_id}.yaml + /price-lists/{id}/prices/batch: + $ref: paths/price-lists_{id}_prices_batch.yaml + /price-lists: + $ref: paths/price-lists.yaml + /price-lists/{id}: + $ref: paths/price-lists_{id}.yaml + /price-lists/{id}/products/{product_id}/prices: + $ref: paths/price-lists_{id}_products_{product_id}_prices.yaml + /price-lists/{id}/variants/{variant_id}/prices: + $ref: paths/price-lists_{id}_variants_{variant_id}_prices.yaml + /price-lists/:id/products: + $ref: paths/price-lists_:id_products.yaml + /product-tags: + $ref: paths/product-tags.yaml + /product-types: + $ref: paths/product-types.yaml + /products/{id}/options: + $ref: paths/products_{id}_options.yaml + /products: + $ref: paths/products.yaml + /products/{id}/variants: + $ref: paths/products_{id}_variants.yaml + /products/{id}/options/{option_id}: + $ref: paths/products_{id}_options_{option_id}.yaml + /products/{id}: + $ref: paths/products_{id}.yaml + /products/{id}/variants/{variant_id}: + $ref: paths/products_{id}_variants_{variant_id}.yaml + /products/tag-usage: + $ref: paths/products_tag-usage.yaml + /products/types: + $ref: paths/products_types.yaml + /products/{id}/metadata: + $ref: paths/products_{id}_metadata.yaml + /regions/{id}/countries: + $ref: paths/regions_{id}_countries.yaml + /regions/{id}/fulfillment-providers: + $ref: paths/regions_{id}_fulfillment-providers.yaml + /regions/{id}/payment-providers: + $ref: paths/regions_{id}_payment-providers.yaml + /regions: + $ref: paths/regions.yaml + /regions/{id}: + $ref: paths/regions_{id}.yaml + /regions/{id}/fulfillment-options: + $ref: paths/regions_{id}_fulfillment-options.yaml + /regions/{id}/countries/{country_code}: + $ref: paths/regions_{id}_countries_{country_code}.yaml + /regions/{id}/fulfillment-providers/{provider_id}: + $ref: paths/regions_{id}_fulfillment-providers_{provider_id}.yaml + /regions/{id}/payment-providers/{provider_id}: + $ref: paths/regions_{id}_payment-providers_{provider_id}.yaml + /return-reasons: + $ref: paths/return-reasons.yaml + /return-reasons/{id}: + $ref: paths/return-reasons_{id}.yaml + /returns/{id}/cancel: + $ref: paths/returns_{id}_cancel.yaml + /returns: + $ref: paths/returns.yaml + /returns/{id}/receive: + $ref: paths/returns_{id}_receive.yaml + /sales-channels/{id}/products/batch: + $ref: paths/sales-channels_{id}_products_batch.yaml + /sales-channels: + $ref: paths/sales-channels.yaml + /sales-channels/{id}: + $ref: paths/sales-channels_{id}.yaml + /shipping-options: + $ref: paths/shipping-options.yaml + /shipping-options/{id}: + $ref: paths/shipping-options_{id}.yaml + /shipping-profiles: + $ref: paths/shipping-profiles.yaml + /shipping-profiles/{id}: + $ref: paths/shipping-profiles_{id}.yaml + /store/currencies/{code}: + $ref: paths/store_currencies_{code}.yaml + /store: + $ref: paths/store.yaml + /store/payment-providers: + $ref: paths/store_payment-providers.yaml + /store/tax-providers: + $ref: paths/store_tax-providers.yaml + /swaps/{id}: + $ref: paths/swaps_{id}.yaml + /swaps: + $ref: paths/swaps.yaml + /tax-rates/:id/product-types/batch: + $ref: paths/tax-rates_:id_product-types_batch.yaml + /tax-rates/:id/products/batch: + $ref: paths/tax-rates_:id_products_batch.yaml + /tax-rates/:id/shipping-options/batch: + $ref: paths/tax-rates_:id_shipping-options_batch.yaml + /tax-rates: + $ref: paths/tax-rates.yaml + /tax-rates/{id}: + $ref: paths/tax-rates_{id}.yaml + /tax-rates/:id: + $ref: paths/tax-rates_:id.yaml + /uploads: + $ref: paths/uploads.yaml + /users: + $ref: paths/users.yaml + /users/{id}: + $ref: paths/users_{id}.yaml + /users/password-token: + $ref: paths/users_password-token.yaml + /users/reset-password: + $ref: paths/users_reset-password.yaml + /variants: + $ref: paths/variants.yaml diff --git a/docs/api/admin/paths/admin_draft-orders_{id}.yaml b/docs/api/admin/paths/admin_draft-orders_{id}.yaml new file mode 100644 index 0000000000..4855247cef --- /dev/null +++ b/docs/api/admin/paths/admin_draft-orders_{id}.yaml @@ -0,0 +1,67 @@ +post: + operationId: PostDraftOrdersDraftOrder + summary: Update a Draft Order" + description: Updates a Draft Order. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Draft Order. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + region_id: + type: string + description: The ID of the Region to create the Draft Order in. + country_code: + type: string + description: The 2 character ISO code for the Country. + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + email: + type: string + description: An email to be used on the Draft Order. + format: email + billing_address: + description: The Address to be used for billing purposes. + $ref: ../components/schemas/address.yaml + shipping_address: + description: The Address to be used for shipping. + $ref: ../components/schemas/address.yaml + discounts: + description: An array of Discount codes to add to the Draft Order. + type: array + items: + type: object + required: + - code + properties: + code: + description: The code that a Discount is identifed by. + type: string + no_notification_order: + description: >- + An optional flag passed to the resulting order to determine use + of notifications. + type: boolean + customer_id: + description: The ID of the Customer to associate the Draft Order with. + type: string + tags: + - Draft Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + draft_order: + $ref: ../components/schemas/draft-order.yaml diff --git a/docs/api/admin/paths/apps.yaml b/docs/api/admin/paths/apps.yaml new file mode 100644 index 0000000000..c29526c571 --- /dev/null +++ b/docs/api/admin/paths/apps.yaml @@ -0,0 +1,18 @@ +get: + operationId: GetApps + summary: List applications + description: Retrieve a list of applications. + x-authenticated: true + tags: + - App + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + apps: + type: array + items: + $ref: ../components/schemas/OAuth.yaml diff --git a/docs/api/admin/paths/apps_authorizations.yaml b/docs/api/admin/paths/apps_authorizations.yaml new file mode 100644 index 0000000000..7d61982e8c --- /dev/null +++ b/docs/api/admin/paths/apps_authorizations.yaml @@ -0,0 +1,34 @@ +post: + operationId: PostApps + summary: Generates a token for an application. + description: Generates a token for an application. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - application_name + - state + - code + properties: + application_name: + type: string + description: Name of the application for the token to be generated for. + state: + type: string + description: State of the application. + code: + type: string + description: The code for the generated token. + tags: + - App + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + apps: + $ref: ../components/schemas/OAuth.yaml diff --git a/docs/api/admin/paths/auth.yaml b/docs/api/admin/paths/auth.yaml new file mode 100644 index 0000000000..b49b934669 --- /dev/null +++ b/docs/api/admin/paths/auth.yaml @@ -0,0 +1,62 @@ +post: + operationId: PostAuth + summary: Authenticate a User + x-authenticated: false + description: Logs a User in and authorizes them to manage Store settings. + parameters: [] + requestBody: + content: + application/json: + schema: + type: object + required: + - email + - password + properties: + email: + type: string + description: The User's email. + password: + type: string + description: The User's password. + tags: + - Auth + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + user: + $ref: ../components/schemas/user.yaml + '401': + description: The user doesn't exist or the credentials are incorrect. +delete: + operationId: DeleteAuth + summary: Delete Session + x-authenticated: true + description: Deletes the current session for the logged in user. + tags: + - Auth + responses: + '200': + description: OK +get: + operationId: GetAuth + summary: Get Session + x-authenticated: true + description: Gets the currently logged in User. + tags: + - Auth + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + user: + $ref: ../components/schemas/user.yaml + '400': + description: An error occurred. diff --git a/docs/api/admin/paths/batch-jobs.yaml b/docs/api/admin/paths/batch-jobs.yaml new file mode 100644 index 0000000000..6b660c9a2f --- /dev/null +++ b/docs/api/admin/paths/batch-jobs.yaml @@ -0,0 +1,318 @@ +post: + operationId: PostBatchJobs + summary: Create a Batch Job + description: Creates a Batch Job. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - type + - context + properties: + type: + type: string + description: The type of batch job to start. + example: product-export + context: + type: object + description: >- + Additional infomration regarding the batch to be used for + processing. + example: + shape: + prices: + - region: null + currency_code: eur + dynamicImageColumnCount: 4 + dynamicOptionColumnCount: 2 + list_config: + skip: 0 + take: 50 + order: + created_at: DESC + relations: + - variants + - variant.prices + - images + dry_run: + type: boolean + description: >- + Set a batch job in dry_run mode to get some information on what + will be done without applying any modifications. + default: false + tags: + - Batch Job + responses: + '201': + description: OK + content: + application/json: + schema: + properties: + batch_job: + $ref: ../components/schemas/batch_job.yaml +get: + operationId: GetBatchJobs + summary: List Batch Jobs + description: Retrieve a list of Batch Jobs. + x-authenticated: true + parameters: + - in: query + name: limit + description: The number of batch jobs to return. + schema: + type: integer + default: 10 + - in: query + name: offset + description: The number of batch jobs to skip before results. + schema: + type: integer + default: 0 + - in: query + name: id + style: form + explode: false + description: Filter by the batch ID + schema: + oneOf: + - type: string + description: batch job ID + - type: array + description: multiple batch job IDs + items: + type: string + - in: query + name: type + style: form + explode: false + description: Filter by the batch type + schema: + type: array + items: + type: string + - in: query + name: confirmed_at + style: form + explode: false + description: >- + Date comparison for when resulting collections was confirmed, i.e. less + than, greater than etc. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: pre_processed_at + style: form + explode: false + description: >- + Date comparison for when resulting collections was pre processed, i.e. + less than, greater than etc. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: completed_at + style: form + explode: false + description: >- + Date comparison for when resulting collections was completed, i.e. less + than, greater than etc. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: failed_at + style: form + explode: false + description: >- + Date comparison for when resulting collections was failed, i.e. less + than, greater than etc. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: canceled_at + style: form + explode: false + description: >- + Date comparison for when resulting collections was canceled, i.e. less + than, greater than etc. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: order + description: Field used to order retrieved batch jobs + schema: + type: string + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each order of the + result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each order of the + result. + schema: + type: string + - in: query + name: created_at + style: form + explode: false + description: >- + Date comparison for when resulting collections was created, i.e. less + than, greater than etc. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + style: form + explode: false + description: >- + Date comparison for when resulting collections was updated, i.e. less + than, greater than etc. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + tags: + - Batch Job + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + batch_jobs: + type: array + items: + $ref: ../components/schemas/batch_job.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/batch-jobs_{id}.yaml b/docs/api/admin/paths/batch-jobs_{id}.yaml new file mode 100644 index 0000000000..9d0f4ae7d5 --- /dev/null +++ b/docs/api/admin/paths/batch-jobs_{id}.yaml @@ -0,0 +1,23 @@ +get: + operationId: GetBatchJobsBatchJob + summary: Retrieve a Batch Job + description: Retrieves a Batch Job. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Batch Job + schema: + type: string + tags: + - Batch Job + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + batch_job: + $ref: ../components/schemas/batch_job.yaml diff --git a/docs/api/admin/paths/batch-jobs_{id}_cancel.yaml b/docs/api/admin/paths/batch-jobs_{id}_cancel.yaml new file mode 100644 index 0000000000..d754a32790 --- /dev/null +++ b/docs/api/admin/paths/batch-jobs_{id}_cancel.yaml @@ -0,0 +1,23 @@ +post: + operationId: PostBatchJobsBatchJobCancel + summary: Marks a batch job as canceled + description: Marks a batch job as canceled + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the batch job. + schema: + type: string + tags: + - Batch Job + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + batch_job: + $ref: ../components/schemas/batch_job.yaml diff --git a/docs/api/admin/paths/batch-jobs_{id}_confirm.yaml b/docs/api/admin/paths/batch-jobs_{id}_confirm.yaml new file mode 100644 index 0000000000..dc85edfc0f --- /dev/null +++ b/docs/api/admin/paths/batch-jobs_{id}_confirm.yaml @@ -0,0 +1,23 @@ +post: + operationId: PostBatchJobsBatchJobConfirmProcessing + summary: Confirm a batch job + description: Confirms that a previously requested batch job should be executed. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the batch job. + schema: + type: string + tags: + - Batch Job + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + batch_job: + $ref: ../components/schemas/batch_job.yaml diff --git a/docs/api/admin/paths/collections.yaml b/docs/api/admin/paths/collections.yaml new file mode 100644 index 0000000000..9fcc46fd19 --- /dev/null +++ b/docs/api/admin/paths/collections.yaml @@ -0,0 +1,157 @@ +post: + operationId: PostCollections + summary: Create a Product Collection + description: Creates a Product Collection. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - title + properties: + title: + type: string + description: The title to identify the Collection by. + handle: + type: string + description: >- + An optional handle to be used in slugs, if none is provided we + will kebab-case the title. + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Collection + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + collection: + $ref: ../components/schemas/product_collection.yaml +get: + operationId: GetCollections + summary: List Product Collections + description: Retrieve a list of Product Collection. + x-authenticated: true + parameters: + - in: query + name: limit + description: The number of collections to return. + schema: + type: integer + default: 10 + - in: query + name: offset + description: The number of collections to skip before the results. + schema: + type: integer + default: 0 + - in: query + name: title + description: The title of collections to return. + schema: + type: string + - in: query + name: handle + description: The handle of collections to return. + schema: + type: string + - in: query + name: q + description: a search term to search titles and handles. + schema: + type: string + - in: query + name: created_at + description: Date comparison for when resulting collections were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting collections were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: deleted_at + description: Date comparison for when resulting collections were deleted. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + tags: + - Collection + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + collections: + type: array + items: + $ref: ../components/schemas/product_collection.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/collections_{id}.yaml b/docs/api/admin/paths/collections_{id}.yaml new file mode 100644 index 0000000000..d949bc5a74 --- /dev/null +++ b/docs/api/admin/paths/collections_{id}.yaml @@ -0,0 +1,96 @@ +delete: + operationId: DeleteCollectionsCollection + summary: Delete a Product Collection + description: Deletes a Product Collection. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Collection. + schema: + type: string + tags: + - Collection + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Collection + object: + type: string + description: The type of the object that was deleted. + default: product-collection + deleted: + type: boolean + description: Whether the collection was deleted successfully or not. + default: true +get: + operationId: GetCollectionsCollection + summary: Retrieve a Product Collection + description: Retrieves a Product Collection. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Product Collection + schema: + type: string + tags: + - Collection + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + collection: + $ref: ../components/schemas/product_collection.yaml +post: + operationId: PostCollectionsCollection + summary: Update a Product Collection + description: Updates a Product Collection. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Collection. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + title: + type: string + description: The title to identify the Collection by. + handle: + type: string + description: >- + An optional handle to be used in slugs, if none is provided we + will kebab-case the title. + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Collection + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + collection: + $ref: ../components/schemas/product_collection.yaml diff --git a/docs/api/admin/paths/collections_{id}_products_batch.yaml b/docs/api/admin/paths/collections_{id}_products_batch.yaml new file mode 100644 index 0000000000..2d02589d38 --- /dev/null +++ b/docs/api/admin/paths/collections_{id}_products_batch.yaml @@ -0,0 +1,83 @@ +post: + operationId: PostProductsToCollection + summary: Updates products associated with a Product Collection + description: Updates products associated with a Product Collection + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Collection. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - product_ids + properties: + product_ids: + description: An array of Product IDs to add to the Product Collection. + type: array + items: + description: The ID of a Product to add to the Product Collection. + type: string + tags: + - Collection + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + collection: + $ref: ../components/schemas/product_collection.yaml +delete: + operationId: DeleteProductsFromCollection + summary: Removes products associated with a Product Collection + description: Removes products associated with a Product Collection + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Collection. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - product_ids + properties: + product_ids: + description: An array of Product IDs to remove from the Product Collection. + type: array + items: + description: The ID of a Product to add to the Product Collection. + type: string + tags: + - Collection + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the collection + object: + type: string + description: The type of object the removal was executed on + default: product-collection + removed_products: + description: The IDs of the products removed from the collection + type: array + items: + description: The ID of a Product to add to the Product Collection. + type: string diff --git a/docs/api/admin/paths/customer-groups.yaml b/docs/api/admin/paths/customer-groups.yaml new file mode 100644 index 0000000000..6f0f1c2a57 --- /dev/null +++ b/docs/api/admin/paths/customer-groups.yaml @@ -0,0 +1,170 @@ +post: + operationId: PostCustomerGroups + summary: Create a CustomerGroup + description: Creates a CustomerGroup. + x-authenticated: true + parameters: [] + tags: + - Customer Group + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer_group: + $ref: ../components/schemas/customer_group.yaml + requestBody: + content: + application/json: + schema: + type: object + required: + - name + properties: + name: + type: string + description: Name of the customer group + metadata: + type: object + description: Metadata for the customer. +get: + operationId: GetCustomerGroups + summary: Retrieve a list of customer groups + description: Retrieve a list of customer groups. + x-authenticated: true + parameters: + - in: query + name: q + description: Query used for searching customer group names. + schema: + type: string + - in: query + name: offset + description: How many groups to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: order + description: the field used to order the customer groups. + schema: + type: string + - in: query + name: id + style: form + explode: false + description: Filter by the customer group ID + schema: + oneOf: + - type: string + description: customer group ID + - type: array + description: multiple customer group IDs + items: + type: string + - type: object + properties: + lt: + type: string + description: filter by IDs less than this ID + gt: + type: string + description: filter by IDs greater than this ID + lte: + type: string + description: filter by IDs less than or equal to this ID + gte: + type: string + description: filter by IDs greater than or equal to this ID + - in: query + name: name + style: form + explode: false + description: Filter by the customer group name + schema: + type: array + description: multiple customer group names + items: + type: string + description: customer group name + - in: query + name: created_at + description: Date comparison for when resulting customer groups were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting customer groups were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: limit + description: Limit the number of customer groups returned. + schema: + type: integer + default: 10 + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each customer + groups of the result. + schema: + type: string + tags: + - Customer Group + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer_groups: + type: array + items: + $ref: ../components/schemas/customer_group.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/customer-groups_{id}.yaml b/docs/api/admin/paths/customer-groups_{id}.yaml new file mode 100644 index 0000000000..d0ea8b72a2 --- /dev/null +++ b/docs/api/admin/paths/customer-groups_{id}.yaml @@ -0,0 +1,99 @@ +delete: + operationId: DeleteCustomerGroupsCustomerGroup + summary: Delete a CustomerGroup + description: Deletes a CustomerGroup. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Customer Group + schema: + type: string + tags: + - Customer Group + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted customer group. + object: + type: string + description: The type of the object that was deleted. + default: customer_group + deleted: + type: boolean + description: Whether the customer group was deleted successfully or not. + default: true +get: + operationId: GetCustomerGroupsGroup + summary: Retrieve a CustomerGroup + description: Retrieves a Customer Group. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Customer Group. + schema: + type: string + - in: query + name: expand + description: (Comma separated) Which fields should be expanded in the customer group. + schema: + type: string + - in: query + name: fields + description: (Comma separated) Which fields should be included in the customer group. + schema: + type: string + tags: + - Customer Group + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer_group: + $ref: ../components/schemas/customer_group.yaml +post: + operationId: PostCustomerGroupsGroup + summary: Update a CustomerGroup + description: Update a CustomerGroup. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the customer group. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + name: + description: Name of the customer group + type: string + metadata: + description: Metadata for the customer. + type: object + tags: + - Customer Group + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer_group: + $ref: ../components/schemas/customer_group.yaml diff --git a/docs/api/admin/paths/customer-groups_{id}_customers.yaml b/docs/api/admin/paths/customer-groups_{id}_customers.yaml new file mode 100644 index 0000000000..93cf62793a --- /dev/null +++ b/docs/api/admin/paths/customer-groups_{id}_customers.yaml @@ -0,0 +1,34 @@ +get: + operationId: GetCustomerGroupsGroupCustomers + summary: List Customers + description: Retrieves a list of customers in a customer group + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the customer group. + schema: + type: string + tags: + - Customer Group + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customers: + type: array + items: + $ref: ../components/schemas/customer.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/customer-groups_{id}_customers_batch.yaml b/docs/api/admin/paths/customer-groups_{id}_customers_batch.yaml new file mode 100644 index 0000000000..c139980b1f --- /dev/null +++ b/docs/api/admin/paths/customer-groups_{id}_customers_batch.yaml @@ -0,0 +1,80 @@ +post: + operationId: PostCustomerGroupsGroupCustomersBatch + summary: 'Add a list of customers to a customer group ' + description: Adds a list of customers, represented by id's, to a customer group. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the customer group. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - customer_ids + properties: + customer_ids: + description: The ids of the customers to add + type: array + items: + required: + - id + properties: + id: + description: ID of the customer + type: string + tags: + - Customer Group + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer_group: + $ref: ../components/schemas/customer_group.yaml +delete: + operationId: DeleteCustomerGroupsGroupCustomerBatch + summary: 'Remove a list of customers from a customer group ' + description: Removes a list of customers, represented by id's, from a customer group. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the customer group. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - customer_ids + properties: + customer_ids: + description: The ids of the customers to remove + type: array + items: + required: + - id + properties: + id: + description: ID of the customer + type: string + tags: + - Customer Group + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer_group: + $ref: ../components/schemas/customer_group.yaml diff --git a/docs/api/admin/paths/customers.yaml b/docs/api/admin/paths/customers.yaml new file mode 100644 index 0000000000..a72518f26b --- /dev/null +++ b/docs/api/admin/paths/customers.yaml @@ -0,0 +1,98 @@ +post: + operationId: PostCustomers + summary: Create a Customer + description: Creates a Customer. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - email + - first_name + - last_name + - password + properties: + email: + type: string + description: The customer's email. + format: email + first_name: + type: string + description: The customer's first name. + last_name: + type: string + description: The customer's last name. + password: + type: string + description: The customer's password. + format: password + phone: + type: string + description: The customer's phone number. + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Customer + responses: + '201': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml +get: + operationId: GetCustomers + summary: List Customers + description: Retrieves a list of Customers. + x-authenticated: true + parameters: + - in: query + name: limit + description: The number of items to return. + schema: + type: integer + default: 50 + - in: query + name: offset + description: The items to skip before result. + schema: + type: integer + default: 0 + - in: query + name: expand + description: (Comma separated) Which fields should be expanded in each customer. + schema: + type: string + - in: query + name: q + description: a search term to search email, first_name, and last_name. + schema: + type: string + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customers: + type: array + items: + $ref: ../components/schemas/customer.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/customers_{id}.yaml b/docs/api/admin/paths/customers_{id}.yaml new file mode 100644 index 0000000000..22b9979e92 --- /dev/null +++ b/docs/api/admin/paths/customers_{id}.yaml @@ -0,0 +1,103 @@ +get: + operationId: GetCustomersCustomer + summary: Retrieve a Customer + description: Retrieves a Customer. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Customer. + schema: + type: string + - in: query + name: expand + description: (Comma separated) Which fields should be expanded in the customer. + schema: + type: string + - in: query + name: fields + description: (Comma separated) Which fields should be included in the customer. + schema: + type: string + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml +post: + operationId: PostCustomersCustomer + summary: Update a Customer + description: Updates a Customer. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Customer. + schema: + type: string + - in: query + name: expand + description: (Comma separated) Which fields should be expanded in each customer. + schema: + type: string + - in: query + name: fields + description: (Comma separated) Which fields should be retrieved in each customer. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + email: + type: string + description: The Customer's email. + format: email + first_name: + type: string + description: The Customer's first name. + last_name: + type: string + description: The Customer's last name. + phone: + type: string + description: The Customer's phone number. + password: + type: string + description: The Customer's password. + format: password + groups: + type: array + items: + required: + - id + properties: + id: + description: The ID of a customer group + type: string + description: A list of customer groups to which the customer belongs. + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml diff --git a/docs/api/admin/paths/discounts.yaml b/docs/api/admin/paths/discounts.yaml new file mode 100644 index 0000000000..419c5b4bb5 --- /dev/null +++ b/docs/api/admin/paths/discounts.yaml @@ -0,0 +1,250 @@ +post: + operationId: PostDiscounts + summary: Creates a Discount + x-authenticated: true + description: >- + Creates a Discount with a given set of rules that define how the Discount + behaves. + parameters: + - in: query + name: expand + description: (Comma separated) Which fields should be expanded in each customer. + schema: + type: string + - in: query + name: fields + description: (Comma separated) Which fields should be retrieved in each customer. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - code + - rule + properties: + code: + type: string + description: A unique code that will be used to redeem the Discount + is_dynamic: + type: boolean + description: >- + Whether the Discount should have multiple instances of itself, + each with a different code. This can be useful for automatically + generated codes that all have to follow a common set of rules. + default: false + rule: + description: The Discount Rule that defines how Discounts are calculated + type: object + required: + - type + - value + - allocation + properties: + description: + type: string + description: A short description of the discount + type: + type: string + description: >- + The type of the Discount, can be `fixed` for discounts that + reduce the price by a fixed amount, `percentage` for + percentage reductions or `free_shipping` for shipping + vouchers. + enum: + - fixed + - percentage + - free_shipping + value: + type: number + description: >- + The value that the discount represents; this will depend on + the type of the discount + allocation: + type: string + description: The scope that the discount should apply to. + enum: + - total + - item + conditions: + type: array + description: >- + A set of conditions that can be used to limit when the + discount can be used. Only one of `products`, + `product_types`, `product_collections`, `product_tags`, and + `customer_groups` should be provided. + items: + type: object + required: + - operator + properties: + operator: + type: string + description: Operator of the condition + enum: + - in + - not_in + products: + type: array + description: >- + list of product IDs if the condition is applied on + products. + items: + type: string + product_types: + type: array + description: >- + list of product type IDs if the condition is applied + on product types. + items: + type: string + product_collections: + type: array + description: >- + list of product collection IDs if the condition is + applied on product collections. + items: + type: string + product_tags: + type: array + description: >- + list of product tag IDs if the condition is applied on + product tags. + items: + type: string + customer_groups: + type: array + description: >- + list of customer group IDs if the condition is applied + on customer groups. + items: + type: string + is_disabled: + type: boolean + description: >- + Whether the Discount code is disabled on creation. You will have + to enable it later to make it available to Customers. + default: false + starts_at: + type: string + format: date-time + description: The time at which the Discount should be available. + ends_at: + type: string + format: date-time + description: The time at which the Discount should no longer be available. + valid_duration: + type: string + description: Duration the discount runs between + example: P3Y6M4DT12H30M5S + regions: + description: >- + A list of Region ids representing the Regions in which the + Discount can be used. + type: array + items: + type: string + usage_limit: + type: number + description: Maximum times the discount can be used + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount: + $ref: ../components/schemas/discount.yaml +get: + operationId: GetDiscounts + summary: List Discounts + x-authenticated: true + description: Retrieves a list of Discounts + parameters: + - in: query + name: q + description: Search query applied on the code field. + schema: + type: string + - in: query + name: rule + description: Discount Rules filters to apply on the search + schema: + type: object + properties: + type: + type: string + enum: + - fixed + - percentage + - free_shipping + description: >- + The type of the Discount, can be `fixed` for discounts that reduce + the price by a fixed amount, `percentage` for percentage + reductions or `free_shipping` for shipping vouchers. + allocation: + type: string + enum: + - total + - item + description: >- + The value that the discount represents; this will depend on the + type of the discount + - in: query + name: is_dynamic + description: Return only dynamic discounts. + schema: + type: boolean + - in: query + name: is_disabled + description: Return only disabled discounts. + schema: + type: boolean + - in: query + name: limit + description: The number of items in the response + schema: + type: number + default: '20' + - in: query + name: offset + description: The offset of items in response + schema: + type: number + default: '0' + - in: query + name: expand + description: Comma separated list of relations to include in the results. + schema: + type: string + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discounts: + type: array + items: + $ref: ../components/schemas/discount.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/discounts_code_{code}.yaml b/docs/api/admin/paths/discounts_code_{code}.yaml new file mode 100644 index 0000000000..eea7f4d09e --- /dev/null +++ b/docs/api/admin/paths/discounts_code_{code}.yaml @@ -0,0 +1,33 @@ +get: + operationId: GetDiscountsDiscountCode + summary: Retrieve a Discount by code + description: Retrieves a Discount by its discount code + x-authenticated: true + parameters: + - in: path + name: code + required: true + description: The code of the Discount + schema: + type: string + - in: query + name: expand + description: Comma separated list of relations to include in the results. + schema: + type: string + - in: query + name: fields + description: Comma separated list of fields to include in the results. + schema: + type: string + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount: + $ref: ../components/schemas/discount.yaml diff --git a/docs/api/admin/paths/discounts_{discount_id}_conditions.yaml b/docs/api/admin/paths/discounts_{discount_id}_conditions.yaml new file mode 100644 index 0000000000..017f75a49a --- /dev/null +++ b/docs/api/admin/paths/discounts_{discount_id}_conditions.yaml @@ -0,0 +1,86 @@ +post: + operationId: PostDiscountsDiscountConditions + summary: >- + Creates a DiscountCondition. Only one of `products`, `product_types`, + `product_collections`, `product_tags`, and `customer_groups` should be + provided. + x-authenticated: true + parameters: + - in: path + name: discount_id + required: true + description: The ID of the Product. + schema: + type: string + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each product of the + result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each product of the + result. + schema: + type: string + description: Creates a DiscountCondition + requestBody: + content: + application/json: + schema: + required: + - operator + properties: + operator: + description: Operator of the condition + type: string + enum: + - in + - not_in + products: + type: array + description: list of product IDs if the condition is applied on products. + items: + type: string + product_types: + type: array + description: >- + list of product type IDs if the condition is applied on product + types. + items: + type: string + product_collections: + type: array + description: >- + list of product collection IDs if the condition is applied on + product collections. + items: + type: string + product_tags: + type: array + description: >- + list of product tag IDs if the condition is applied on product + tags. + items: + type: string + customer_groups: + type: array + description: >- + list of customer group IDs if the condition is applied on + customer groups. + items: + type: string + tags: + - Discount Condition + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount: + $ref: ../components/schemas/discount.yaml diff --git a/docs/api/admin/paths/discounts_{discount_id}_conditions_{condition_id}.yaml b/docs/api/admin/paths/discounts_{discount_id}_conditions_{condition_id}.yaml new file mode 100644 index 0000000000..757656fb12 --- /dev/null +++ b/docs/api/admin/paths/discounts_{discount_id}_conditions_{condition_id}.yaml @@ -0,0 +1,176 @@ +delete: + operationId: DeleteDiscountsDiscountConditionsCondition + summary: Delete a DiscountCondition + description: Deletes a DiscountCondition + x-authenticated: true + parameters: + - in: path + name: discount_id + required: true + description: The ID of the Discount + schema: + type: string + - in: path + name: condition_id + required: true + description: The ID of the DiscountCondition + schema: + type: string + - in: query + name: expand + description: Comma separated list of relations to include in the results. + schema: + type: string + - in: query + name: fields + description: Comma separated list of fields to include in the results. + schema: + type: string + tags: + - Discount Condition + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted DiscountCondition + object: + type: string + description: The type of the object that was deleted. + default: discount-condition + deleted: + type: boolean + description: >- + Whether the discount condition was deleted successfully or + not. + default: true + discount: + description: The Discount to which the condition used to belong + $ref: ../components/schemas/discount.yaml +get: + operationId: GetDiscountsDiscountConditionsCondition + summary: Gets a DiscountCondition + x-authenticated: true + parameters: + - in: path + name: discount_id + required: true + description: The ID of the Discount. + schema: + type: string + - in: path + name: condition_id + required: true + description: The ID of the DiscountCondition. + schema: + type: string + - in: query + name: expand + description: Comma separated list of relations to include in the results. + schema: + type: string + - in: query + name: fields + description: Comma separated list of fields to include in the results. + schema: + type: string + description: Gets a DiscountCondition + tags: + - Discount Condition + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount_condition: + $ref: ../components/schemas/discount_condition.yaml +post: + operationId: PostDiscountsDiscountConditionsCondition + summary: >- + Updates a DiscountCondition. Only one of `products`, `product_types`, + `product_collections`, `product_tags`, and `customer_groups` should be + provided. + x-authenticated: true + parameters: + - in: path + name: discount_id + required: true + description: The ID of the Product. + schema: + type: string + - in: path + name: condition_id + required: true + description: The ID of the DiscountCondition. + schema: + type: string + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each item of the + result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each item of the + result. + schema: + type: string + description: Updates a DiscountCondition + requestBody: + content: + application/json: + schema: + properties: + products: + type: array + description: list of product IDs if the condition is applied on products. + items: + type: string + product_types: + type: array + description: >- + list of product type IDs if the condition is applied on product + types. + items: + type: string + product_collections: + type: array + description: >- + list of product collection IDs if the condition is applied on + product collections. + items: + type: string + product_tags: + type: array + description: >- + list of product tag IDs if the condition is applied on product + tags. + items: + type: string + customer_groups: + type: array + description: >- + list of customer group IDs if the condition is applied on + customer groups. + items: + type: string + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount: + $ref: ../components/schemas/discount.yaml diff --git a/docs/api/admin/paths/discounts_{id}.yaml b/docs/api/admin/paths/discounts_{id}.yaml new file mode 100644 index 0000000000..d975584355 --- /dev/null +++ b/docs/api/admin/paths/discounts_{id}.yaml @@ -0,0 +1,221 @@ +delete: + operationId: DeleteDiscountsDiscount + summary: Delete a Discount + description: Deletes a Discount. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Discount + schema: + type: string + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Discount + object: + type: string + description: The type of the object that was deleted. + default: discount + deleted: + type: boolean + description: Whether the discount was deleted successfully or not. + default: true +get: + operationId: GetDiscountsDiscount + summary: Retrieve a Discount + description: Retrieves a Discount + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Discount + schema: + type: string + - in: query + name: expand + description: Comma separated list of relations to include in the results. + schema: + type: string + - in: query + name: fields + description: Comma separated list of fields to include in the results. + schema: + type: string + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount: + $ref: ../components/schemas/discount.yaml +post: + operationId: PostDiscountsDiscount + summary: Update a Discount + description: >- + Updates a Discount with a given set of rules that define how the Discount + behaves. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Discount. + schema: + type: string + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each item of the + result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each item of the + result. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + code: + type: string + description: A unique code that will be used to redeem the Discount + rule: + description: The Discount Rule that defines how Discounts are calculated + type: object + required: + - id + properties: + id: + type: string + description: The ID of the Rule + description: + type: string + description: A short description of the discount + value: + type: number + description: >- + The value that the discount represents; this will depend on + the type of the discount + allocation: + type: string + description: The scope that the discount should apply to. + enum: + - total + - item + conditions: + type: array + description: >- + A set of conditions that can be used to limit when the + discount can be used. Only one of `products`, + `product_types`, `product_collections`, `product_tags`, and + `customer_groups` should be provided. + items: + type: object + required: + - operator + properties: + id: + type: string + description: The ID of the Rule + operator: + type: string + description: Operator of the condition + enum: + - in + - not_in + products: + type: array + description: >- + list of product IDs if the condition is applied on + products. + items: + type: string + product_types: + type: array + description: >- + list of product type IDs if the condition is applied + on product types. + items: + type: string + product_collections: + type: array + description: >- + list of product collection IDs if the condition is + applied on product collections. + items: + type: string + product_tags: + type: array + description: >- + list of product tag IDs if the condition is applied on + product tags. + items: + type: string + customer_groups: + type: array + description: >- + list of customer group IDs if the condition is applied + on customer groups. + items: + type: string + is_disabled: + type: boolean + description: >- + Whether the Discount code is disabled on creation. You will have + to enable it later to make it available to Customers. + starts_at: + type: string + format: date-time + description: The time at which the Discount should be available. + ends_at: + type: string + format: date-time + description: The time at which the Discount should no longer be available. + valid_duration: + type: string + description: Duration the discount runs between + example: P3Y6M4DT12H30M5S + usage_limit: + type: number + description: Maximum times the discount can be used + regions: + description: >- + A list of Region ids representing the Regions in which the + Discount can be used. + type: array + items: + type: string + metadata: + description: An object containing metadata of the discount + type: object + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount: + $ref: ../components/schemas/discount.yaml diff --git a/docs/api/admin/paths/discounts_{id}_dynamic-codes.yaml b/docs/api/admin/paths/discounts_{id}_dynamic-codes.yaml new file mode 100644 index 0000000000..9d88c80442 --- /dev/null +++ b/docs/api/admin/paths/discounts_{id}_dynamic-codes.yaml @@ -0,0 +1,45 @@ +post: + operationId: PostDiscountsDiscountDynamicCodes + summary: Create a dynamic Discount code + description: >- + Creates a unique code that can map to a parent Discount. This is useful if + you want to automatically generate codes with the same behaviour. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Discount to create the dynamic code from." + schema: + type: string + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount: + $ref: ../components/schemas/discount.yaml + requestBody: + content: + application/json: + schema: + type: object + required: + - code + properties: + code: + type: string + description: The unique code that will be used to redeem the Discount. + usage_limit: + type: number + default: '1' + description: amount of times the discount can be applied. + metadata: + type: object + description: >- + An optional set of key-value paris to hold additional + information. diff --git a/docs/api/admin/paths/discounts_{id}_dynamic-codes_{code}.yaml b/docs/api/admin/paths/discounts_{id}_dynamic-codes_{code}.yaml new file mode 100644 index 0000000000..7b7eaaf5ff --- /dev/null +++ b/docs/api/admin/paths/discounts_{id}_dynamic-codes_{code}.yaml @@ -0,0 +1,29 @@ +delete: + operationId: DeleteDiscountsDiscountDynamicCodesCode + summary: Delete a dynamic code + description: Deletes a dynamic code from a Discount. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Discount + schema: + type: string + - in: path + name: code + required: true + description: The ID of the Discount + schema: + type: string + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount: + $ref: ../components/schemas/discount.yaml diff --git a/docs/api/admin/paths/discounts_{id}_regions_{region_id}.yaml b/docs/api/admin/paths/discounts_{id}_regions_{region_id}.yaml new file mode 100644 index 0000000000..20d08f82be --- /dev/null +++ b/docs/api/admin/paths/discounts_{id}_regions_{region_id}.yaml @@ -0,0 +1,58 @@ +post: + operationId: PostDiscountsDiscountRegionsRegion + summary: Adds Region availability + description: Adds a Region to the list of Regions that a Discount can be used in. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Discount. + schema: + type: string + - in: path + name: region_id + required: true + description: The ID of the Region. + schema: + type: string + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount: + $ref: ../components/schemas/discount.yaml +delete: + operationId: DeleteDiscountsDiscountRegionsRegion + summary: Remove Region availability + x-authenticated: true + description: Removes a Region from the list of Regions that a Discount can be used in. + parameters: + - in: path + name: id + required: true + description: The ID of the Discount. + schema: + type: string + - in: path + name: region_id + required: true + description: The ID of the Region. + schema: + type: string + tags: + - Discount + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + discount: + $ref: ../components/schemas/discount.yaml diff --git a/docs/api/admin/paths/draft-orders.yaml b/docs/api/admin/paths/draft-orders.yaml new file mode 100644 index 0000000000..6248fa51be --- /dev/null +++ b/docs/api/admin/paths/draft-orders.yaml @@ -0,0 +1,162 @@ +post: + operationId: PostDraftOrders + summary: Create a Draft Order + description: Creates a Draft Order + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - email + - items + - region_id + - shipping_methods + properties: + status: + description: The status of the draft order + type: string + enum: + - open + - completed + email: + description: The email of the customer of the draft order + type: string + format: email + billing_address: + description: The Address to be used for billing purposes. + $ref: ../components/schemas/address.yaml + shipping_address: + description: The Address to be used for shipping. + $ref: ../components/schemas/address.yaml + items: + description: The Line Items that have been received. + type: array + items: + type: object + required: + - quantity + properties: + variant_id: + description: >- + The ID of the Product Variant to generate the Line Item + from. + type: string + unit_price: + description: The potential custom price of the item. + type: integer + title: + description: The potential custom title of the item. + type: string + quantity: + description: The quantity of the Line Item. + type: integer + metadata: + description: >- + The optional key-value map with additional details about + the Line Item. + type: object + region_id: + description: The ID of the region for the draft order + type: string + discounts: + description: The discounts to add on the draft order + type: array + items: + type: object + required: + - code + properties: + code: + description: The code of the discount to apply + type: string + customer_id: + description: The ID of the customer to add on the draft order + type: string + no_notification_order: + description: >- + An optional flag passed to the resulting order to determine use + of notifications. + type: boolean + shipping_methods: + description: The shipping methods for the draft order + type: array + items: + type: object + required: + - option_id + properties: + option_id: + description: The ID of the shipping option in use + type: string + data: + description: >- + The optional additional data needed for the shipping + method + type: object + price: + description: The potential custom price of the shipping + type: integer + metadata: + description: >- + The optional key-value map with additional details about the + Draft Order. + type: object + tags: + - Draft Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + draft_order: + $ref: ../components/schemas/draft-order.yaml +get: + operationId: GetDraftOrders + summary: List Draft Orders + description: Retrieves an list of Draft Orders + x-authenticated: true + parameters: + - in: query + name: offset + description: The number of items to skip before the results. + schema: + type: number + default: '0' + - in: query + name: limit + description: Limit the number of items returned. + schema: + type: number + default: '50' + - in: query + name: q + description: >- + a search term to search emails in carts associated with draft orders and + display IDs of draft orders + schema: + type: string + tags: + - Draft Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + draft_orders: + type: array + items: + $ref: ../components/schemas/draft-order.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/draft-orders_{id}.yaml b/docs/api/admin/paths/draft-orders_{id}.yaml new file mode 100644 index 0000000000..ba4d184535 --- /dev/null +++ b/docs/api/admin/paths/draft-orders_{id}.yaml @@ -0,0 +1,55 @@ +delete: + operationId: DeleteDraftOrdersDraftOrder + summary: Delete a Draft Order + description: Deletes a Draft Order + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Draft Order. + schema: + type: string + tags: + - Draft Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Draft Order. + object: + type: string + description: The type of the object that was deleted. + default: draft-order + deleted: + type: boolean + description: Whether the draft order was deleted successfully or not. + default: true +get: + operationId: GetDraftOrdersDraftOrder + summary: Retrieve a Draft Order + description: Retrieves a Draft Order. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Draft Order. + schema: + type: string + tags: + - Draft Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + draft_order: + $ref: ../components/schemas/draft-order.yaml diff --git a/docs/api/admin/paths/draft-orders_{id}_line-items.yaml b/docs/api/admin/paths/draft-orders_{id}_line-items.yaml new file mode 100644 index 0000000000..c148eb193f --- /dev/null +++ b/docs/api/admin/paths/draft-orders_{id}_line-items.yaml @@ -0,0 +1,48 @@ +post: + operationId: PostDraftOrdersDraftOrderLineItems + summary: Create a Line Item for Draft Order + description: Creates a Line Item for the Draft Order + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Draft Order. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - quantity + properties: + variant_id: + description: The ID of the Product Variant to generate the Line Item from. + type: string + unit_price: + description: The potential custom price of the item. + type: integer + title: + description: The potential custom title of the item. + type: string + default: Custom item + quantity: + description: The quantity of the Line Item. + type: integer + metadata: + description: >- + The optional key-value map with additional details about the + Line Item. + type: object + tags: + - Draft Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + draft_order: + $ref: ../components/schemas/draft-order.yaml diff --git a/docs/api/admin/paths/draft-orders_{id}_line-items_{line_id}.yaml b/docs/api/admin/paths/draft-orders_{id}_line-items_{line_id}.yaml new file mode 100644 index 0000000000..d9910fda20 --- /dev/null +++ b/docs/api/admin/paths/draft-orders_{id}_line-items_{line_id}.yaml @@ -0,0 +1,77 @@ +delete: + operationId: DeleteDraftOrdersDraftOrderLineItemsItem + summary: Delete a Line Item + description: Removes a Line Item from a Draft Order. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Draft Order. + schema: + type: string + - in: path + name: line_id + required: true + description: The ID of the Draft Order. + schema: + type: string + tags: + - Draft Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + draft_order: + $ref: ../components/schemas/draft-order.yaml +post: + operationId: PostDraftOrdersDraftOrderLineItemsItem + summary: Update a Line Item for a Draft Order + description: Updates a Line Item for a Draft Order + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Draft Order. + schema: + type: string + - in: path + name: line_id + required: true + description: The ID of the Line Item. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + unit_price: + description: The potential custom price of the item. + type: integer + title: + description: The potential custom title of the item. + type: string + quantity: + description: The quantity of the Line Item. + type: integer + metadata: + description: >- + The optional key-value map with additional details about the + Line Item. + type: object + tags: + - Draft Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + draft_order: + $ref: ../components/schemas/draft-order.yaml diff --git a/docs/api/admin/paths/draft-orders_{id}_pay.yaml b/docs/api/admin/paths/draft-orders_{id}_pay.yaml new file mode 100644 index 0000000000..86e17e1c26 --- /dev/null +++ b/docs/api/admin/paths/draft-orders_{id}_pay.yaml @@ -0,0 +1,23 @@ +post: + summary: Registers a payment for a Draft Order + operationId: PostDraftOrdersDraftOrderRegisterPayment + description: Registers a payment for a Draft Order. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The Draft Order id. + schema: + type: string + tags: + - Draft Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/draft-order.yaml diff --git a/docs/api/admin/paths/gift-cards.yaml b/docs/api/admin/paths/gift-cards.yaml new file mode 100644 index 0000000000..cc8188b39d --- /dev/null +++ b/docs/api/admin/paths/gift-cards.yaml @@ -0,0 +1,90 @@ +post: + operationId: PostGiftCards + summary: Create a Gift Card + description: >- + Creates a Gift Card that can redeemed by its unique code. The Gift Card is + only valid within 1 region. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - region_id + properties: + value: + type: integer + description: The value (excluding VAT) that the Gift Card should represent. + is_disabled: + type: boolean + description: >- + Whether the Gift Card is disabled on creation. You will have to + enable it later to make it available to Customers. + ends_at: + type: string + format: date-time + description: The time at which the Gift Card should no longer be available. + region_id: + description: The ID of the Region in which the Gift Card can be used. + type: string + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Gift Card + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + gift_card: + $ref: ../components/schemas/gift_card.yaml +get: + operationId: GetGiftCards + summary: List Gift Cards + description: Retrieves a list of Gift Cards. + x-authenticated: true + parameters: + - in: query + name: offset + description: The number of items to skip before the results. + schema: + type: number + default: '0' + - in: query + name: limit + description: Limit the number of items returned. + schema: + type: number + default: '50' + - in: query + name: q + description: a search term to search by code or display ID + schema: + type: string + tags: + - Gift Card + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + gift_cards: + type: array + items: + $ref: ../components/schemas/gift_card.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/gift-cards_{id}.yaml b/docs/api/admin/paths/gift-cards_{id}.yaml new file mode 100644 index 0000000000..14cfd47017 --- /dev/null +++ b/docs/api/admin/paths/gift-cards_{id}.yaml @@ -0,0 +1,105 @@ +delete: + operationId: DeleteGiftCardsGiftCard + summary: Delete a Gift Card + description: Deletes a Gift Card + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Gift Card to delete. + schema: + type: string + tags: + - Gift Card + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Gift Card + object: + type: string + description: The type of the object that was deleted. + default: gift-card + deleted: + type: boolean + description: Whether the gift card was deleted successfully or not. + default: true +get: + operationId: GetGiftCardsGiftCard + summary: Retrieve a Gift Card + description: Retrieves a Gift Card. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Gift Card. + schema: + type: string + tags: + - Gift Card + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + gift_card: + $ref: ../components/schemas/gift_card.yaml +post: + operationId: PostGiftCardsGiftCard + summary: Create a Gift Card + description: >- + Creates a Gift Card that can redeemed by its unique code. The Gift Card is + only valid within 1 region. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Gift Card. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + balance: + type: integer + description: The value (excluding VAT) that the Gift Card should represent. + is_disabled: + type: boolean + description: >- + Whether the Gift Card is disabled on creation. You will have to + enable it later to make it available to Customers. + ends_at: + type: string + format: date-time + description: The time at which the Gift Card should no longer be available. + region_id: + description: The ID of the Region in which the Gift Card can be used. + type: string + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Gift Card + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + gift_card: + $ref: ../components/schemas/gift_card.yaml diff --git a/docs/api/admin/paths/invites.yaml b/docs/api/admin/paths/invites.yaml new file mode 100644 index 0000000000..85b31b2ae2 --- /dev/null +++ b/docs/api/admin/paths/invites.yaml @@ -0,0 +1,47 @@ +post: + operationId: PostInvites + summary: Create an Invite + description: Creates an Invite and triggers an 'invite' created event + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - user + - role + properties: + user: + description: The email for the user to be created. + type: string + format: email + role: + description: The role of the user to be created. + type: string + enum: + - admin + - member + - developer + tags: + - Invite + responses: + '200': + description: OK +get: + operationId: GetInvites + summary: Lists all Invites + description: Lists all Invites + x-authenticated: true + tags: + - Invite + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + invites: + type: array + items: + $ref: ../components/schemas/invite.yaml diff --git a/docs/api/admin/paths/invites_accept.yaml b/docs/api/admin/paths/invites_accept.yaml new file mode 100644 index 0000000000..35e7f50f1d --- /dev/null +++ b/docs/api/admin/paths/invites_accept.yaml @@ -0,0 +1,38 @@ +post: + operationId: PostInvitesInviteAccept + summary: Accept an Invite + description: Accepts an Invite and creates a corresponding user + requestBody: + content: + application/json: + schema: + required: + - token + - user + properties: + token: + description: The invite token provided by the admin. + type: string + user: + description: The User to create. + type: object + required: + - first_name + - last_name + - password + properties: + first_name: + type: string + description: the first name of the User + last_name: + type: string + description: the last name of the User + password: + description: The desired password for the User + type: string + format: password + tags: + - Invite + responses: + '200': + description: OK diff --git a/docs/api/admin/paths/invites_{invite_id}.yaml b/docs/api/admin/paths/invites_{invite_id}.yaml new file mode 100644 index 0000000000..4724f1dfc0 --- /dev/null +++ b/docs/api/admin/paths/invites_{invite_id}.yaml @@ -0,0 +1,32 @@ +delete: + operationId: DeleteInvitesInvite + summary: Create an Invite + description: Creates an Invite and triggers an 'invite' created event + x-authenticated: true + parameters: + - in: path + name: invite_id + required: true + description: The ID of the Invite + schema: + type: string + tags: + - Invite + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Invite. + object: + type: string + description: The type of the object that was deleted. + format: invite + deleted: + type: boolean + description: Whether or not the Invite was deleted. + default: true diff --git a/docs/api/admin/paths/invites_{invite_id}_resend.yaml b/docs/api/admin/paths/invites_{invite_id}_resend.yaml new file mode 100644 index 0000000000..6c1f0662a2 --- /dev/null +++ b/docs/api/admin/paths/invites_{invite_id}_resend.yaml @@ -0,0 +1,17 @@ +post: + operationId: PostInvitesInviteResend + summary: Resend an Invite + description: Resends an Invite by triggering the 'invite' created event again + x-authenticated: true + parameters: + - in: path + name: invite_id + required: true + description: The ID of the Invite + schema: + type: string + tags: + - Invite + responses: + '200': + description: OK diff --git a/docs/api/admin/paths/notes.yaml b/docs/api/admin/paths/notes.yaml new file mode 100644 index 0000000000..15e516465b --- /dev/null +++ b/docs/api/admin/paths/notes.yaml @@ -0,0 +1,79 @@ +post: + operationId: PostNotes + summary: Creates a Note + description: Creates a Note which can be associated with any resource as required. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - resource_id + - resource_type + - value + properties: + resource_id: + type: string + description: The ID of the resource which the Note relates to. + resource_type: + type: string + description: The type of resource which the Note relates to. + value: + type: string + description: The content of the Note to create. + tags: + - Note + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + note: + $ref: ../components/schemas/note.yaml +get: + operationId: GetNotes + summary: List Notes + x-authenticated: true + description: Retrieves a list of notes + parameters: + - in: query + name: limit + description: The number of notes to get + schema: + type: number + default: '50' + - in: query + name: offset + description: The offset at which to get notes + schema: + type: number + default: '0' + - in: query + name: resource_id + description: The ID which the notes belongs to + schema: + type: string + tags: + - Note + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + notes: + type: array + items: + $ref: ../components/schemas/note.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/notes_{id}.yaml b/docs/api/admin/paths/notes_{id}.yaml new file mode 100644 index 0000000000..24f0700f3c --- /dev/null +++ b/docs/api/admin/paths/notes_{id}.yaml @@ -0,0 +1,88 @@ +delete: + operationId: DeleteNotesNote + summary: Deletes a Note + description: Deletes a Note. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Note to delete. + schema: + type: string + tags: + - Note + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Note. + object: + type: string + description: The type of the object that was deleted. + default: note + deleted: + type: boolean + description: Whether or not the Note was deleted. + default: true +get: + operationId: GetNotesNote + summary: Get Note + description: Retrieves a single note using its id + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the note to retrieve. + schema: + type: string + tags: + - Note + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + note: + $ref: ../components/schemas/note.yaml +post: + operationId: PostNotesNote + summary: Updates a Note + x-authenticated: true + description: Updates a Note associated with some resource + parameters: + - in: path + name: id + required: true + description: The ID of the Note to update + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - value + properties: + value: + type: string + description: The updated description of the Note. + tags: + - Note + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + note: + $ref: ../components/schemas/note.yaml diff --git a/docs/api/admin/paths/notifications.yaml b/docs/api/admin/paths/notifications.yaml new file mode 100644 index 0000000000..9aa2ca712f --- /dev/null +++ b/docs/api/admin/paths/notifications.yaml @@ -0,0 +1,72 @@ +get: + operationId: GetNotifications + summary: List Notifications + description: Retrieves a list of Notifications. + x-authenticated: true + parameters: + - in: query + name: offset + description: >- + The number of notifications to skip before starting to collect the + notifications set + schema: + type: integer + default: 0 + - in: query + name: limit + description: The number of notifications to return + schema: + type: integer + default: 50 + - in: query + name: fields + description: Comma separated fields to include in the result set + schema: + type: string + - in: query + name: expand + description: Comma separated fields to populate + schema: + type: string + - in: query + name: event_name + description: The name of the event that the notification was sent for. + schema: + type: string + - in: query + name: resource_type + description: The type of resource that the Notification refers to. + schema: + type: string + - in: query + name: resource_id + description: The ID of the resource that the Notification refers to. + schema: + type: string + - in: query + name: to + description: >- + The address that the Notification was sent to. This will usually be an + email address, but represent other addresses such as a chat bot user id + schema: + type: string + - in: query + name: include_resends + description: >- + A boolean indicating whether the result set should include resent + notifications or not + schema: + type: string + tags: + - Notification + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + notifications: + type: array + items: + $ref: ../components/schemas/notification.yaml diff --git a/docs/api/admin/paths/notifications_{id}_resend.yaml b/docs/api/admin/paths/notifications_{id}_resend.yaml new file mode 100644 index 0000000000..72f58d9fad --- /dev/null +++ b/docs/api/admin/paths/notifications_{id}_resend.yaml @@ -0,0 +1,35 @@ +post: + operationId: PostNotificationsNotificationResend + summary: Resend Notification + description: >- + Resends a previously sent notifications, with the same data but optionally + to a different address + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Notification + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + to: + description: >- + A new address or user identifier that the Notification should be + sent to + type: string + tags: + - Notification + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + notification: + $ref: ../components/schemas/notification.yaml diff --git a/docs/api/admin/paths/order_{id}_claims.yaml b/docs/api/admin/paths/order_{id}_claims.yaml new file mode 100644 index 0000000000..3d27b2d2f5 --- /dev/null +++ b/docs/api/admin/paths/order_{id}_claims.yaml @@ -0,0 +1,144 @@ +post: + operationId: PostOrdersOrderClaims + summary: Create a Claim + description: Creates a Claim. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - type + - claim_items + properties: + type: + description: >- + The type of the Claim. This will determine how the Claim is + treated: `replace` Claims will result in a Fulfillment with new + items being created, while a `refund` Claim will refund the + amount paid for the claimed items. + type: string + enum: + - replace + - refund + claim_items: + description: The Claim Items that the Claim will consist of. + type: array + items: + required: + - item_id + - quantity + properties: + item_id: + description: The ID of the Line Item that will be claimed. + type: string + quantity: + description: The number of items that will be returned + type: integer + note: + description: Short text describing the Claim Item in further detail. + type: string + reason: + description: The reason for the Claim + type: string + enum: + - missing_item + - wrong_item + - production_failure + - other + tags: + description: A list o tags to add to the Claim Item + type: array + items: + type: string + images: + description: >- + A list of image URL's that will be associated with the + Claim + items: + type: string + return_shipping: + description: >- + Optional details for the Return Shipping Method, if the items + are to be sent back. + type: object + properties: + option_id: + type: string + description: >- + The ID of the Shipping Option to create the Shipping Method + from. + price: + type: integer + description: The price to charge for the Shipping Method. + additional_items: + description: >- + The new items to send to the Customer when the Claim type is + Replace. + type: array + items: + required: + - variant_id + - quantity + properties: + variant_id: + description: The ID of the Product Variant to ship. + type: string + quantity: + description: The quantity of the Product Variant to ship. + type: integer + shipping_methods: + description: The Shipping Methods to send the additional Line Items with. + type: array + items: + properties: + id: + description: The ID of an existing Shipping Method + type: string + option_id: + description: >- + The ID of the Shipping Option to create a Shipping Method + from + type: string + price: + description: The price to charge for the Shipping Method + type: integer + shipping_address: + type: object + description: >- + An optional shipping address to send the claim to. Defaults to + the parent order's shipping address + $ref: ../components/schemas/address.yaml + refund_amount: + description: >- + The amount to refund the Customer when the Claim type is + `refund`. + type: integer + no_notification: + description: >- + If set to true no notification will be send related to this + Claim. + type: boolean + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Claim + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/order_{id}_claims_{claim_id}.yaml b/docs/api/admin/paths/order_{id}_claims_{claim_id}.yaml new file mode 100644 index 0000000000..8e9a412acd --- /dev/null +++ b/docs/api/admin/paths/order_{id}_claims_{claim_id}.yaml @@ -0,0 +1,120 @@ +post: + operationId: PostOrdersOrderClaimsClaim + summary: Update a Claim + description: Updates a Claim. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + - in: path + name: claim_id + required: true + description: The ID of the Claim. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + claim_items: + description: The Claim Items that the Claim will consist of. + type: array + items: + required: + - id + - images + - tags + properties: + id: + description: The ID of the Claim Item. + type: string + item_id: + description: The ID of the Line Item that will be claimed. + type: string + quantity: + description: The number of items that will be returned + type: integer + note: + description: Short text describing the Claim Item in further detail. + type: string + reason: + description: The reason for the Claim + type: string + enum: + - missing_item + - wrong_item + - production_failure + - other + tags: + description: A list o tags to add to the Claim Item + type: array + items: + type: object + properties: + id: + type: string + description: Tag ID + value: + type: string + description: Tag value + images: + description: >- + A list of image URL's that will be associated with the + Claim + type: array + items: + type: object + properties: + id: + type: string + description: Image ID + url: + type: string + description: Image URL + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + shipping_methods: + description: The Shipping Methods to send the additional Line Items with. + type: array + items: + properties: + id: + description: The ID of an existing Shipping Method + type: string + option_id: + description: >- + The ID of the Shipping Option to create a Shipping Method + from + type: string + price: + description: The price to charge for the Shipping Method + type: integer + no_notification: + description: >- + If set to true no notification will be send related to this + Swap. + type: boolean + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Claim + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/order_{id}_swaps.yaml b/docs/api/admin/paths/order_{id}_swaps.yaml new file mode 100644 index 0000000000..85a0f948b1 --- /dev/null +++ b/docs/api/admin/paths/order_{id}_swaps.yaml @@ -0,0 +1,107 @@ +post: + operationId: PostOrdersOrderSwaps + summary: Create a Swap + description: >- + Creates a Swap. Swaps are used to handle Return of previously purchased + goods and Fulfillment of replacements simultaneously. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - return_items + properties: + return_items: + description: The Line Items to return as part of the Swap. + type: array + items: + required: + - item_id + - quantity + properties: + item_id: + description: The ID of the Line Item that will be claimed. + type: string + quantity: + description: The number of items that will be returned + type: integer + reason_id: + description: The ID of the Return Reason to use. + type: string + note: + description: An optional note with information about the Return. + type: string + return_shipping: + description: How the Swap will be returned. + type: object + required: + - option_id + properties: + option_id: + type: string + description: >- + The ID of the Shipping Option to create the Shipping Method + from. + price: + type: integer + description: The price to charge for the Shipping Method. + additional_items: + description: The new items to send to the Customer. + type: array + items: + required: + - variant_id + - quantity + properties: + variant_id: + description: The ID of the Product Variant to ship. + type: string + quantity: + description: The quantity of the Product Variant to ship. + type: integer + custom_shipping_options: + description: >- + The custom shipping options to potentially create a Shipping + Method from. + type: array + items: + required: + - option_id + - price + properties: + option_id: + description: >- + The ID of the Shipping Option to override with a custom + price. + type: string + price: + description: The custom price of the Shipping Option. + type: integer + no_notification: + description: >- + If set to true no notification will be send related to this + Swap. + type: boolean + allow_backorder: + description: If true, swaps can be completed with items out of stock + type: boolean + default: true + tags: + - Swap + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders.yaml b/docs/api/admin/paths/orders.yaml new file mode 100644 index 0000000000..da9e4f81b9 --- /dev/null +++ b/docs/api/admin/paths/orders.yaml @@ -0,0 +1,241 @@ +get: + operationId: GetOrders + summary: List Orders + description: Retrieves a list of Orders + x-authenticated: true + parameters: + - in: query + name: q + description: >- + Query used for searching orders by shipping address first name, orders' + email, and orders' display ID + schema: + type: string + - in: query + name: id + description: ID of the order to search for. + schema: + type: string + - in: query + name: status + style: form + explode: false + description: Status to search for + schema: + type: array + items: + type: string + enum: + - pending + - completed + - archived + - canceled + - requires_action + - in: query + name: fulfillment_status + style: form + explode: false + description: Fulfillment status to search for. + schema: + type: array + items: + type: string + enum: + - not_fulfilled + - fulfilled + - partially_fulfilled + - shipped + - partially_shipped + - canceled + - returned + - partially_returned + - requires_action + - in: query + name: payment_status + style: form + explode: false + description: Payment status to search for. + schema: + type: array + items: + type: string + enum: + - captured + - awaiting + - not_paid + - refunded + - partially_refunded + - canceled + - requires_action + - in: query + name: display_id + description: Display ID to search for. + schema: + type: string + - in: query + name: cart_id + description: to search for. + schema: + type: string + - in: query + name: customer_id + description: to search for. + schema: + type: string + - in: query + name: email + description: to search for. + schema: + type: string + - in: query + name: region_id + style: form + explode: false + description: Regions to search orders by + schema: + oneOf: + - type: string + description: ID of a Region. + - type: array + items: + type: string + description: ID of a Region. + - in: query + name: currency_code + style: form + explode: false + description: Currency code to search for + schema: + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + - in: query + name: tax_rate + description: to search for. + schema: + type: string + - in: query + name: created_at + description: Date comparison for when resulting orders were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting orders were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: canceled_at + description: Date comparison for when resulting orders were canceled. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: sales_channel_id + style: form + explode: false + description: Filter by Sales Channels + schema: + type: array + items: + type: string + description: The ID of a Sales Channel + - in: query + name: offset + description: How many orders to skip before the results. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of orders returned. + schema: + type: integer + default: 50 + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each order of the + result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each order of the + result. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + orders: + type: array + items: + $ref: ../components/schemas/order.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/orders_{id}.yaml b/docs/api/admin/paths/orders_{id}.yaml new file mode 100644 index 0000000000..522232cd00 --- /dev/null +++ b/docs/api/admin/paths/orders_{id}.yaml @@ -0,0 +1,114 @@ +get: + operationId: GetOrdersOrder + summary: Retrieve an Order + description: Retrieves an Order + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml +post: + operationId: PostOrdersOrder + summary: Update an order + description: Updates and order + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + email: + description: the email for the order + type: string + billing_address: + description: Billing address + anyOf: + - $ref: ../components/schemas/address.yaml + shipping_address: + description: Shipping address + anyOf: + - $ref: ../components/schemas/address.yaml + items: + description: The Line Items for the order + type: array + items: + $ref: ../components/schemas/line_item.yaml + region: + description: ID of the region where the order belongs + type: string + discounts: + description: Discounts applied to the order + type: array + items: + $ref: ../components/schemas/discount.yaml + customer_id: + description: ID of the customer + type: string + payment_method: + description: payment method chosen for the order + type: object + properties: + provider_id: + type: string + description: ID of the payment provider + data: + description: Data relevant for the given payment method + type: object + shipping_method: + description: The Shipping Method used for shipping the order. + type: object + properties: + provider_id: + type: string + description: The ID of the shipping provider. + profile_id: + type: string + description: The ID of the shipping profile. + price: + type: integer + description: The price of the shipping. + data: + type: object + description: Data relevant to the specific shipping method. + items: + type: array + items: + $ref: ../components/schemas/line_item.yaml + description: Items to ship + no_notification: + description: >- + A flag to indicate if no notifications should be emitted related + to the updated order. + type: boolean + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_archive.yaml b/docs/api/admin/paths/orders_{id}_archive.yaml new file mode 100644 index 0000000000..7e76e76b62 --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_archive.yaml @@ -0,0 +1,23 @@ +post: + operationId: PostOrdersOrderArchive + summary: Archive order + description: Archives the order with the given id. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_cancel.yaml b/docs/api/admin/paths/orders_{id}_cancel.yaml new file mode 100644 index 0000000000..eba6094b48 --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_cancel.yaml @@ -0,0 +1,26 @@ +post: + operationId: PostOrdersOrderCancel + summary: Cancel an Order + description: >- + Registers an Order as canceled. This triggers a flow that will cancel any + created Fulfillments and Payments, may fail if the Payment or Fulfillment + Provider is unable to cancel the Payment/Fulfillment. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_capture.yaml b/docs/api/admin/paths/orders_{id}_capture.yaml new file mode 100644 index 0000000000..606f7ec1fa --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_capture.yaml @@ -0,0 +1,23 @@ +post: + operationId: PostOrdersOrderCapture + summary: Capture an Order + description: Captures all the Payments associated with an Order. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_claims_{claim_id}_cancel.yaml b/docs/api/admin/paths/orders_{id}_claims_{claim_id}_cancel.yaml new file mode 100644 index 0000000000..f20534fce9 --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_claims_{claim_id}_cancel.yaml @@ -0,0 +1,29 @@ +post: + operationId: PostOrdersClaimCancel + summary: Cancels a Claim + description: Cancels a Claim + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + - in: path + name: claim_id + required: true + description: The ID of the Claim. + schema: + type: string + tags: + - Claim + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_claims_{claim_id}_fulfillments.yaml b/docs/api/admin/paths/orders_{id}_claims_{claim_id}_fulfillments.yaml new file mode 100644 index 0000000000..cda549a877 --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_claims_{claim_id}_fulfillments.yaml @@ -0,0 +1,44 @@ +post: + operationId: PostOrdersOrderClaimsClaimFulfillments + summary: Create a Claim Fulfillment + description: Creates a Fulfillment for a Claim. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + - in: path + name: claim_id + required: true + description: The ID of the Claim. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + no_notification: + description: >- + If set to true no notification will be send related to this + Claim. + type: boolean + tags: + - Fulfillment + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_claims_{claim_id}_fulfillments_{fulfillment_id}_cancel.yaml b/docs/api/admin/paths/orders_{id}_claims_{claim_id}_fulfillments_{fulfillment_id}_cancel.yaml new file mode 100644 index 0000000000..55c62e37fe --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_claims_{claim_id}_fulfillments_{fulfillment_id}_cancel.yaml @@ -0,0 +1,35 @@ +post: + operationId: PostOrdersClaimFulfillmentsCancel + summary: Cancels a fulfilmment related to a Claim + description: Registers a Fulfillment as canceled. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order which the Claim relates to. + schema: + type: string + - in: path + name: claim_id + required: true + description: The ID of the Claim which the Fulfillment relates to. + schema: + type: string + - in: path + name: fulfillment_id + required: true + description: The ID of the Fulfillment. + schema: + type: string + tags: + - Fulfillment + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_claims_{claim_id}_shipments.yaml b/docs/api/admin/paths/orders_{id}_claims_{claim_id}_shipments.yaml new file mode 100644 index 0000000000..842f6274e5 --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_claims_{claim_id}_shipments.yaml @@ -0,0 +1,44 @@ +post: + operationId: PostOrdersOrderClaimsClaimShipments + summary: Create Claim Shipment + description: Registers a Claim Fulfillment as shipped. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + - in: path + name: claim_id + required: true + description: The ID of the Claim. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - fulfillment_id + properties: + fulfillment_id: + description: The ID of the Fulfillment. + type: string + tracking_numbers: + description: The tracking numbers for the shipment. + type: array + items: + type: string + tags: + - Claim + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_complete.yaml b/docs/api/admin/paths/orders_{id}_complete.yaml new file mode 100644 index 0000000000..70d77a6e26 --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_complete.yaml @@ -0,0 +1,23 @@ +post: + operationId: PostOrdersOrderComplete + summary: Complete an Order + description: Completes an Order + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_fulfillment.yaml b/docs/api/admin/paths/orders_{id}_fulfillment.yaml new file mode 100644 index 0000000000..583f527ead --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_fulfillment.yaml @@ -0,0 +1,56 @@ +post: + operationId: PostOrdersOrderFulfillments + summary: Create a Fulfillment + description: >- + Creates a Fulfillment of an Order - will notify Fulfillment Providers to + prepare a shipment. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - items + properties: + items: + description: The Line Items to include in the Fulfillment. + type: array + items: + required: + - item_id + - quantity + properties: + item_id: + description: The ID of Line Item to fulfill. + type: string + quantity: + description: The quantity of the Line Item to fulfill. + type: integer + no_notification: + description: >- + If set to true no notification will be send related to this + Swap. + type: boolean + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + tags: + - Fulfillment + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_fulfillments_{fulfillment_id}_cancel.yaml b/docs/api/admin/paths/orders_{id}_fulfillments_{fulfillment_id}_cancel.yaml new file mode 100644 index 0000000000..59f192d43c --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_fulfillments_{fulfillment_id}_cancel.yaml @@ -0,0 +1,29 @@ +post: + operationId: PostOrdersOrderFulfillmentsCancel + summary: Cancels a fulfilmment + description: Registers a Fulfillment as canceled. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order which the Fulfillment relates to. + schema: + type: string + - in: path + name: fulfillment_id + required: true + description: The ID of the Fulfillment + schema: + type: string + tags: + - Fulfillment + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_refund.yaml b/docs/api/admin/paths/orders_{id}_refund.yaml new file mode 100644 index 0000000000..5e6f41da7d --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_refund.yaml @@ -0,0 +1,45 @@ +post: + operationId: PostOrdersOrderRefunds + summary: Create a Refund + description: Issues a Refund. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - amount + - reason + properties: + amount: + description: The amount to refund. + type: integer + reason: + description: The reason for the Refund. + type: string + note: + description: A note with additional details about the Refund. + type: string + no_notification: + description: >- + If set to true no notification will be send related to this + Refund. + type: boolean + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_return.yaml b/docs/api/admin/paths/orders_{id}_return.yaml new file mode 100644 index 0000000000..5264c4a659 --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_return.yaml @@ -0,0 +1,82 @@ +post: + operationId: PostOrdersOrderReturns + summary: Request a Return + description: >- + Requests a Return. If applicable a return label will be created and other + plugins notified. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - items + properties: + items: + description: The Line Items that will be returned. + type: array + items: + required: + - item_id + - quantity + properties: + item_id: + description: The ID of the Line Item. + type: string + reason_id: + description: The ID of the Return Reason to use. + type: string + note: + description: An optional note with information about the Return. + type: string + quantity: + description: The quantity of the Line Item. + type: integer + return_shipping: + description: The Shipping Method to be used to handle the return shipment. + type: object + properties: + option_id: + type: string + description: >- + The ID of the Shipping Option to create the Shipping Method + from. + price: + type: integer + description: The price to charge for the Shipping Method. + note: + description: An optional note with information about the Return. + type: string + receive_now: + description: >- + A flag to indicate if the Return should be registerd as received + immediately. + type: boolean + default: false + no_notification: + description: >- + A flag to indicate if no notifications should be emitted related + to the requested Return. + type: boolean + refund: + description: The amount to refund. + type: integer + tags: + - Return + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_shipment.yaml b/docs/api/admin/paths/orders_{id}_shipment.yaml new file mode 100644 index 0000000000..a9b3dfdc00 --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_shipment.yaml @@ -0,0 +1,43 @@ +post: + operationId: PostOrdersOrderShipment + summary: Create a Shipment + description: Registers a Fulfillment as shipped. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - fulfillment_id + properties: + fulfillment_id: + description: The ID of the Fulfillment. + type: string + tracking_numbers: + description: The tracking numbers for the shipment. + type: array + items: + type: string + no_notification: + description: >- + If set to true no notification will be send related to this + Shipment. + type: boolean + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_shipping-methods.yaml b/docs/api/admin/paths/orders_{id}_shipping-methods.yaml new file mode 100644 index 0000000000..dbed77554a --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_shipping-methods.yaml @@ -0,0 +1,49 @@ +post: + operationId: PostOrdersOrderShippingMethods + summary: Add a Shipping Method + description: >- + Adds a Shipping Method to an Order. If another Shipping Method exists with + the same Shipping Profile, the previous Shipping Method will be replaced. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml + requestBody: + content: + application/json: + schema: + type: object + required: + - price + - option_id + properties: + price: + type: integer + description: >- + The price (excluding VAT) that should be charged for the + Shipping Method + option_id: + type: string + description: >- + The ID of the Shipping Option to create the Shipping Method + from. + data: + type: object + description: >- + The data required for the Shipping Option to create a Shipping + Method. This will depend on the Fulfillment Provider. diff --git a/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_cancel.yaml b/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_cancel.yaml new file mode 100644 index 0000000000..dd1dc6425a --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_cancel.yaml @@ -0,0 +1,29 @@ +post: + operationId: PostOrdersSwapCancel + summary: Cancels a Swap + description: Cancels a Swap + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + - in: path + name: swap_id + required: true + description: The ID of the Swap. + schema: + type: string + tags: + - Swap + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_fulfillments.yaml b/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_fulfillments.yaml new file mode 100644 index 0000000000..e8ee04bebc --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_fulfillments.yaml @@ -0,0 +1,44 @@ +post: + operationId: PostOrdersOrderSwapsSwapFulfillments + summary: Create a Swap Fulfillment + description: Creates a Fulfillment for a Swap. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + - in: path + name: swap_id + required: true + description: The ID of the Swap. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + metadata: + description: >- + An optional set of key-value pairs to hold additional + information. + type: object + no_notification: + description: >- + If set to true no notification will be send related to this + Claim. + type: boolean + tags: + - Fulfillment + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_fulfillments_{fulfillment_id}_cancel.yaml b/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_fulfillments_{fulfillment_id}_cancel.yaml new file mode 100644 index 0000000000..8a7bf82d9b --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_fulfillments_{fulfillment_id}_cancel.yaml @@ -0,0 +1,35 @@ +post: + operationId: PostOrdersSwapFulfillmentsCancel + summary: Cancels a fulfilmment related to a Swap + description: Registers a Fulfillment as canceled. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order which the Swap relates to. + schema: + type: string + - in: path + name: swap_id + required: true + description: The ID of the Swap which the Fulfillment relates to. + schema: + type: string + - in: path + name: fulfillment_id + required: true + description: The ID of the Fulfillment. + schema: + type: string + tags: + - Fulfillment + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_process-payment.yaml b/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_process-payment.yaml new file mode 100644 index 0000000000..35987dcfdd --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_process-payment.yaml @@ -0,0 +1,32 @@ +post: + operationId: PostOrdersOrderSwapsSwapProcessPayment + summary: Process a Swap difference + description: >- + When there are differences between the returned and shipped Products in a + Swap, the difference must be processed. Either a Refund will be issued or a + Payment will be captured. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + - in: path + name: swap_id + required: true + description: The ID of the Swap. + schema: + type: string + tags: + - Swap + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_shipments.yaml b/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_shipments.yaml new file mode 100644 index 0000000000..3b6e8b7d82 --- /dev/null +++ b/docs/api/admin/paths/orders_{id}_swaps_{swap_id}_shipments.yaml @@ -0,0 +1,49 @@ +post: + operationId: PostOrdersOrderSwapsSwapShipments + summary: Create Swap Shipment + description: Registers a Swap Fulfillment as shipped. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Order. + schema: + type: string + - in: path + name: swap_id + required: true + description: The ID of the Swap. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - fulfillment_id + properties: + fulfillment_id: + description: The ID of the Fulfillment. + type: string + tracking_numbers: + description: The tracking numbers for the shipment. + type: array + items: + type: string + no_notification: + description: >- + If set to true no notification will be send related to this + Claim. + type: boolean + tags: + - Swap + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/price-lists.yaml b/docs/api/admin/paths/price-lists.yaml new file mode 100644 index 0000000000..291cd17026 --- /dev/null +++ b/docs/api/admin/paths/price-lists.yaml @@ -0,0 +1,263 @@ +post: + operationId: PostPriceListsPriceList + summary: Creates a Price List + description: Creates a Price List + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - name + - description + - type + - prices + properties: + name: + description: The name of the Price List + type: string + description: + description: A description of the Price List. + type: string + starts_at: + description: The date with timezone that the Price List starts being valid. + type: string + format: date + ends_at: + description: The date with timezone that the Price List ends being valid. + type: string + format: date + type: + description: The type of the Price List. + type: string + enum: + - sale + - override + status: + description: The status of the Price List. + type: string + enum: + - active + - draft + prices: + description: The prices of the Price List. + type: array + items: + required: + - amount + - variant_id + properties: + region_id: + description: >- + The ID of the Region for which the price is used. Only + required if currecny_code is not provided. + type: string + currency_code: + description: >- + The 3 character ISO currency code for which the price will + be used. Only required if region_id is not provided. + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + amount: + description: The amount to charge for the Product Variant. + type: integer + variant_id: + description: The ID of the Variant for which the price is used. + type: string + min_quantity: + description: The minimum quantity for which the price will be used. + type: integer + max_quantity: + description: The maximum quantity for which the price will be used. + type: integer + customer_groups: + type: array + description: A list of customer groups that the Price List applies to. + items: + required: + - id + properties: + id: + description: The ID of a customer group + type: string + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + price_list: + $ref: ../components/schemas/price_list.yaml +get: + operationId: GetPriceLists + summary: List Price Lists + description: Retrieves a list of Price Lists. + x-authenticated: true + parameters: + - in: query + name: limit + description: The number of items to get + schema: + type: number + default: '10' + - in: query + name: offset + description: The offset at which to get items + schema: + type: number + default: '0' + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each item of the + result. + schema: + type: string + - in: query + name: order + description: field to order results by. + schema: + type: string + - in: query + name: id + description: ID to search for. + schema: + type: string + - in: query + name: q + description: >- + query to search in price list description, price list name, and customer + group name fields. + schema: + type: string + - in: query + name: status + style: form + explode: false + description: Status to search for. + schema: + type: array + items: + type: string + enum: + - active + - draft + - in: query + name: name + description: price list name to search for. + schema: + type: string + - in: query + name: customer_groups + style: form + explode: false + description: Customer Group IDs to search for. + schema: + type: array + items: + type: string + - in: query + name: type + style: form + explode: false + description: Type to search for. + schema: + type: array + items: + type: string + enum: + - sale + - override + - in: query + name: created_at + description: Date comparison for when resulting price lists were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting price lists were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: deleted_at + description: Date comparison for when resulting price lists were deleted. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + price_lists: + type: array + items: + $ref: ../components/schemas/price_list.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/price-lists_:id_products.yaml b/docs/api/admin/paths/price-lists_:id_products.yaml new file mode 100644 index 0000000000..1a0b37b37e --- /dev/null +++ b/docs/api/admin/paths/price-lists_:id_products.yaml @@ -0,0 +1,194 @@ +get: + operationId: GetPriceListsPriceListProducts + summary: List Product in a Price List + description: Retrieves a list of Product that are part of a Price List + x-authenticated: true + parameters: + - in: query + name: q + description: >- + Query used for searching product title and description, variant title + and sku, and collection title. + schema: + type: string + - in: query + name: id + description: ID of the product to search for. + schema: + type: string + - in: query + name: status + description: Product status to search for + style: form + explode: false + schema: + type: array + items: + type: string + enum: + - draft + - proposed + - published + - rejected + - in: query + name: collection_id + description: Collection IDs to search for + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: tags + description: Tag IDs to search for + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: title + description: product title to search for. + schema: + type: string + - in: query + name: description + description: product description to search for. + schema: + type: string + - in: query + name: handle + description: product handle to search for. + schema: + type: string + - in: query + name: is_giftcard + description: Search for giftcards using is_giftcard=true. + schema: + type: string + - in: query + name: type + description: to search for. + schema: + type: string + - in: query + name: order + description: field to sort results by. + schema: + type: string + - in: query + name: created_at + description: Date comparison for when resulting products were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting products were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: deleted_at + description: Date comparison for when resulting products were deleted. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: offset + description: How many products to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of products returned. + schema: + type: integer + default: 50 + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each product of the + result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each product of the + result. + schema: + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + products: + type: array + items: + $ref: ../components/schemas/product.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/price-lists_{id}.yaml b/docs/api/admin/paths/price-lists_{id}.yaml new file mode 100644 index 0000000000..7dbabaccfe --- /dev/null +++ b/docs/api/admin/paths/price-lists_{id}.yaml @@ -0,0 +1,155 @@ +delete: + operationId: DeletePriceListsPriceList + summary: Delete a Price List + description: Deletes a Price List + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Price List to delete. + schema: + type: string + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Price List. + object: + type: string + description: The type of the object that was deleted. + default: price-list + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true +get: + operationId: GetPriceListsPriceList + summary: Retrieve a Price List + description: Retrieves a Price List. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Price List. + schema: + type: string + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + price_list: + $ref: ../components/schemas/price_list.yaml +post: + operationId: PostPriceListsPriceListPriceList + summary: Update a Price List + description: Updates a Price List + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Price List. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + name: + description: The name of the Price List + type: string + description: + description: A description of the Price List. + type: string + starts_at: + description: The date with timezone that the Price List starts being valid. + type: string + format: date + ends_at: + description: The date with timezone that the Price List ends being valid. + type: string + format: date + type: + description: The type of the Price List. + type: string + enum: + - sale + - override + status: + description: The status of the Price List. + type: string + enum: + - active + - draft + prices: + description: The prices of the Price List. + type: array + items: + required: + - amount + - variant_id + properties: + id: + description: The ID of the price. + type: string + region_id: + description: >- + The ID of the Region for which the price is used. Only + required if currecny_code is not provided. + type: string + currency_code: + description: >- + The 3 character ISO currency code for which the price will + be used. Only required if region_id is not provided. + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + variant_id: + description: The ID of the Variant for which the price is used. + type: string + amount: + description: The amount to charge for the Product Variant. + type: integer + min_quantity: + description: The minimum quantity for which the price will be used. + type: integer + max_quantity: + description: The maximum quantity for which the price will be used. + type: integer + customer_groups: + type: array + description: A list of customer groups that the Price List applies to. + items: + required: + - id + properties: + id: + description: The ID of a customer group + type: string + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + price_list: + $ref: ../components/schemas/price_list.yaml diff --git a/docs/api/admin/paths/price-lists_{id}_prices_batch.yaml b/docs/api/admin/paths/price-lists_{id}_prices_batch.yaml new file mode 100644 index 0000000000..c3b2707b6c --- /dev/null +++ b/docs/api/admin/paths/price-lists_{id}_prices_batch.yaml @@ -0,0 +1,115 @@ +post: + operationId: PostPriceListsPriceListPricesBatch + summary: Batch update prices for a Price List + description: Batch update prices for a Price List + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Price List to update prices for. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + prices: + description: The prices to update or add. + type: array + items: + required: + - amount + - variant_id + properties: + id: + description: The ID of the price. + type: string + region_id: + description: >- + The ID of the Region for which the price is used. Only + required if currecny_code is not provided. + type: string + currency_code: + description: >- + The 3 character ISO currency code for which the price will + be used. Only required if region_id is not provided. + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + variant_id: + description: The ID of the Variant for which the price is used. + type: string + amount: + description: The amount to charge for the Product Variant. + type: integer + min_quantity: + description: The minimum quantity for which the price will be used. + type: integer + max_quantity: + description: The maximum quantity for which the price will be used. + type: integer + override: + description: >- + If true the prices will replace all existing prices associated + with the Price List. + type: boolean + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + price_list: + $ref: ../components/schemas/price_list.yaml +delete: + operationId: DeletePriceListsPriceListPricesBatch + summary: Batch delete prices that belong to a Price List + description: Batch delete prices that belong to a Price List + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: >- + The ID of the Price List that the Money Amounts (Prices) that will be + deleted belongs to. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + price_ids: + description: The price id's of the Money Amounts to delete. + type: array + items: + type: string + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + ids: + type: array + items: + type: string + description: The IDs of the deleted Money Amounts (Prices). + object: + type: string + description: The type of the object that was deleted. + default: money-amount + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true diff --git a/docs/api/admin/paths/price-lists_{id}_products_{product_id}_prices.yaml b/docs/api/admin/paths/price-lists_{id}_products_{product_id}_prices.yaml new file mode 100644 index 0000000000..f75ca0179d --- /dev/null +++ b/docs/api/admin/paths/price-lists_{id}_products_{product_id}_prices.yaml @@ -0,0 +1,42 @@ +delete: + operationId: DeletePriceListsPriceListProductsProductPrices + summary: Delete all the prices related to a specific product in a price list + description: Delete all the prices related to a specific product in a price list + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: >- + The ID of the Price List that the Money Amounts that will be deleted + belongs to. + schema: + type: string + - in: path + name: product_id + required: true + description: The ID of the product from which the money amount will be deleted. + schema: + type: string + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + ids: + type: array + description: The price ids that have been deleted. + items: + type: string + object: + type: string + description: The type of the object that was deleted. + default: money-amount + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true diff --git a/docs/api/admin/paths/price-lists_{id}_variants_{variant_id}_prices.yaml b/docs/api/admin/paths/price-lists_{id}_variants_{variant_id}_prices.yaml new file mode 100644 index 0000000000..57c7b119cf --- /dev/null +++ b/docs/api/admin/paths/price-lists_{id}_variants_{variant_id}_prices.yaml @@ -0,0 +1,42 @@ +delete: + operationId: DeletePriceListsPriceListVariantsVariantPrices + summary: Delete all the prices related to a specific variant in a price list + description: Delete all the prices related to a specific variant in a price list + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: >- + The ID of the Price List that the Money Amounts that will be deleted + belongs to. + schema: + type: string + - in: path + name: variant_id + required: true + description: The ID of the variant from which the money amount will be deleted. + schema: + type: string + tags: + - Price List + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + ids: + type: array + description: The price ids that have been deleted. + items: + type: string + object: + type: string + description: The type of the object that was deleted. + default: money-amount + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true diff --git a/docs/api/admin/paths/product-tags.yaml b/docs/api/admin/paths/product-tags.yaml new file mode 100644 index 0000000000..5aa1685ac2 --- /dev/null +++ b/docs/api/admin/paths/product-tags.yaml @@ -0,0 +1,110 @@ +get: + operationId: GetProductTags + summary: List Product Tags + description: Retrieve a list of Product Tags. + x-authenticated: true + parameters: + - in: query + name: limit + description: The number of tags to return. + schema: + type: integer + default: 10 + - in: query + name: offset + description: The number of items to skip before the results. + schema: + type: integer + default: 0 + - in: query + name: order + description: The field to sort items by. + schema: + type: string + - in: query + name: value + style: form + explode: false + description: The tag values to search for + schema: + type: array + items: + type: string + - in: query + name: q + description: A query string to search values for + schema: + type: string + - in: query + name: id + style: form + explode: false + description: The tag IDs to search for + schema: + type: array + items: + type: string + - in: query + name: created_at + description: Date comparison for when resulting product tags were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting product tags were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + tags: + - Product Tag + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product_tags: + $ref: ../components/schemas/product_tag.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/product-types.yaml b/docs/api/admin/paths/product-types.yaml new file mode 100644 index 0000000000..6c412a776d --- /dev/null +++ b/docs/api/admin/paths/product-types.yaml @@ -0,0 +1,110 @@ +get: + operationId: GetProductTypes + summary: List Product Types + description: Retrieve a list of Product Types. + x-authenticated: true + parameters: + - in: query + name: limit + description: The number of types to return. + schema: + type: integer + default: 10 + - in: query + name: offset + description: The number of items to skip before the results. + schema: + type: integer + default: 0 + - in: query + name: order + description: The field to sort items by. + schema: + type: string + - in: query + name: value + style: form + explode: false + description: The type values to search for + schema: + type: array + items: + type: string + - in: query + name: id + style: form + explode: false + description: The type IDs to search for + schema: + type: array + items: + type: string + - in: query + name: q + description: A query string to search values for + schema: + type: string + - in: query + name: created_at + description: Date comparison for when resulting product types were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting product types were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + tags: + - Product Type + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product_types: + $ref: ../components/schemas/product_type.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/products.yaml b/docs/api/admin/paths/products.yaml new file mode 100644 index 0000000000..42a4488412 --- /dev/null +++ b/docs/api/admin/paths/products.yaml @@ -0,0 +1,469 @@ +post: + operationId: PostProducts + summary: Create a Product + x-authenticated: true + description: Creates a Product + requestBody: + content: + application/json: + schema: + required: + - title + properties: + title: + description: The title of the Product + type: string + subtitle: + description: The subtitle of the Product + type: string + description: + description: A description of the Product. + type: string + is_giftcard: + description: >- + A flag to indicate if the Product represents a Gift Card. + Purchasing Products with this flag set to `true` will result in + a Gift Card being created. + type: boolean + default: false + discountable: + description: >- + A flag to indicate if discounts can be applied to the LineItems + generated from this Product + type: boolean + default: true + images: + description: Images of the Product. + type: array + items: + type: string + thumbnail: + description: The thumbnail to use for the Product. + type: string + handle: + description: A unique handle to identify the Product by. + type: string + status: + description: The status of the product. + type: string + enum: + - draft + - proposed + - published + - rejected + default: draft + type: + description: The Product Type to associate the Product with. + type: object + required: + - value + properties: + id: + description: The ID of the Product Type. + type: string + value: + description: The value of the Product Type. + type: string + collection_id: + description: The ID of the Collection the Product should belong to. + type: string + tags: + description: Tags to associate the Product with. + type: array + items: + required: + - value + properties: + id: + description: The ID of an existing Tag. + type: string + value: + description: The value of the Tag, these will be upserted. + type: string + sales_channels: + description: '[EXPERIMENTAL] Sales channels to associate the Product with.' + type: array + items: + required: + - id + properties: + id: + description: The ID of an existing Sales channel. + type: string + options: + description: >- + The Options that the Product should have. These define on which + properties the Product's Product Variants will differ. + type: array + items: + required: + - title + properties: + title: + description: The title to identify the Product Option by. + type: string + variants: + description: A list of Product Variants to create with the Product. + type: array + items: + required: + - title + properties: + title: + description: The title to identify the Product Variant by. + type: string + sku: + description: The unique SKU for the Product Variant. + type: string + ean: + description: The EAN number of the item. + type: string + upc: + description: The UPC number of the item. + type: string + barcode: + description: A generic GTIN field for the Product Variant. + type: string + hs_code: + description: The Harmonized System code for the Product Variant. + type: string + inventory_quantity: + description: The amount of stock kept for the Product Variant. + type: integer + default: 0 + allow_backorder: + description: >- + Whether the Product Variant can be purchased when out of + stock. + type: boolean + manage_inventory: + description: >- + Whether Medusa should keep track of the inventory for this + Product Variant. + type: boolean + weight: + description: The wieght of the Product Variant. + type: number + length: + description: The length of the Product Variant. + type: number + height: + description: The height of the Product Variant. + type: number + width: + description: The width of the Product Variant. + type: number + origin_country: + description: The country of origin of the Product Variant. + type: string + mid_code: + description: >- + The Manufacturer Identification code for the Product + Variant. + type: string + material: + description: The material composition of the Product Variant. + type: string + metadata: + description: >- + An optional set of key-value pairs with additional + information. + type: object + prices: + type: array + items: + required: + - amount + properties: + region_id: + description: >- + The ID of the Region for which the price is used. + Only required if currency_code is not provided. + type: string + currency_code: + description: >- + The 3 character ISO currency code for which the + price will be used. Only required if region_id is + not provided. + type: string + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + amount: + description: The amount to charge for the Product Variant. + type: integer + min_quantity: + description: >- + The minimum quantity for which the price will be + used. + type: integer + max_quantity: + description: >- + The maximum quantity for which the price will be + used. + type: integer + options: + type: array + items: + required: + - value + properties: + value: + description: >- + The value to give for the Product Option at the same + index in the Product's `options` field. + type: string + weight: + description: The wieght of the Product. + type: number + length: + description: The length of the Product. + type: number + height: + description: The height of the Product. + type: number + width: + description: The width of the Product. + type: number + hs_code: + description: The Harmonized System code for the Product Variant. + type: string + origin_country: + description: The country of origin of the Product. + type: string + mid_code: + description: The Manufacturer Identification code for the Product. + type: string + material: + description: The material composition of the Product. + type: string + metadata: + description: An optional set of key-value pairs with additional information. + type: object + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product: + $ref: ../components/schemas/product.yaml +get: + operationId: GetProducts + summary: List Product + description: Retrieves a list of Product + x-authenticated: true + parameters: + - in: query + name: q + description: >- + Query used for searching product title and description, variant title + and sku, and collection title. + schema: + type: string + - in: query + name: id + style: form + explode: false + description: Filter by product IDs. + schema: + oneOf: + - type: string + description: ID of the product to search for. + - type: array + items: + type: string + description: ID of a product. + - in: query + name: status + style: form + explode: false + description: Status to search for + schema: + type: array + items: + type: string + enum: + - draft + - proposed + - published + - rejected + - in: query + name: collection_id + style: form + explode: false + description: Collection ids to search for. + schema: + type: array + items: + type: string + - in: query + name: tags + style: form + explode: false + description: Tag IDs to search for + schema: + type: array + items: + type: string + - in: query + name: price_list_id + style: form + explode: false + description: Price List IDs to search for + schema: + type: array + items: + type: string + - in: query + name: sales_channel_id + style: form + explode: false + description: Sales Channel IDs to filter products by + schema: + type: array + items: + type: string + - in: query + name: title + description: title to search for. + schema: + type: string + - in: query + name: description + description: description to search for. + schema: + type: string + - in: query + name: handle + description: handle to search for. + schema: + type: string + - in: query + name: is_giftcard + description: Search for giftcards using is_giftcard=true. + schema: + type: boolean + - in: query + name: type + description: type ID to search for. + schema: + type: string + - in: query + name: created_at + description: Date comparison for when resulting products were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting products were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: deleted_at + description: Date comparison for when resulting products were deleted. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: offset + description: How many products to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of products returned. + schema: + type: integer + default: 50 + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each product of the + result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each product of the + result. + schema: + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + products: + type: array + items: + $ref: ../components/schemas/product.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/products_tag-usage.yaml b/docs/api/admin/paths/products_tag-usage.yaml new file mode 100644 index 0000000000..20910f398a --- /dev/null +++ b/docs/api/admin/paths/products_tag-usage.yaml @@ -0,0 +1,27 @@ +get: + operationId: GetProductsTagUsage + summary: List Product Tags Usage Number + description: Retrieves a list of Product Tags with how many times each is used. + x-authenticated: true + tags: + - Product Tag + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tags: + type: array + items: + properties: + id: + description: The ID of the tag. + type: string + usage_count: + description: The number of products that use this tag. + type: string + value: + description: The value of the tag. + type: string diff --git a/docs/api/admin/paths/products_types.yaml b/docs/api/admin/paths/products_types.yaml new file mode 100644 index 0000000000..c8bf32459c --- /dev/null +++ b/docs/api/admin/paths/products_types.yaml @@ -0,0 +1,18 @@ +get: + operationId: GetProductsTypes + summary: List Product Types + description: Retrieves a list of Product Types. + x-authenticated: true + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + types: + type: array + items: + $ref: ../components/schemas/product_type.yaml diff --git a/docs/api/admin/paths/products_{id}.yaml b/docs/api/admin/paths/products_{id}.yaml new file mode 100644 index 0000000000..540f1ddcc6 --- /dev/null +++ b/docs/api/admin/paths/products_{id}.yaml @@ -0,0 +1,297 @@ +delete: + operationId: DeleteProductsProduct + summary: Delete a Product + description: Deletes a Product and it's associated Product Variants. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Product. + schema: + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Product. + object: + type: string + description: The type of the object that was deleted. + default: product + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true +get: + operationId: GetProductsProduct + summary: Retrieve a Product + description: Retrieves a Product. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Product. + schema: + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product: + $ref: ../components/schemas/product.yaml +post: + operationId: PostProductsProduct + summary: Update a Product + description: Updates a Product + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Product. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + title: + description: The title of the Product + type: string + subtitle: + description: The subtitle of the Product + type: string + description: + description: A description of the Product. + type: string + discountable: + description: >- + A flag to indicate if discounts can be applied to the LineItems + generated from this Product + type: boolean + images: + description: Images of the Product. + type: array + items: + type: string + thumbnail: + description: The thumbnail to use for the Product. + type: string + handle: + description: A unique handle to identify the Product by. + type: string + status: + description: The status of the product. + type: string + enum: + - draft + - proposed + - published + - rejected + type: + description: The Product Type to associate the Product with. + type: object + required: + - value + properties: + id: + description: The ID of the Product Type. + type: string + value: + description: The value of the Product Type. + type: string + collection_id: + description: The ID of the Collection the Product should belong to. + type: string + tags: + description: Tags to associate the Product with. + type: array + items: + required: + - value + properties: + id: + description: The ID of an existing Tag. + type: string + value: + description: The value of the Tag, these will be upserted. + type: string + sales_channels: + description: '[EXPERIMENTAL] Sales channels to associate the Product with.' + type: array + items: + required: + - id + properties: + id: + description: The ID of an existing Sales channel. + type: string + variants: + description: A list of Product Variants to create with the Product. + type: array + items: + properties: + id: + description: The ID of the Product Variant. + type: string + title: + description: The title to identify the Product Variant by. + type: string + sku: + description: The unique SKU for the Product Variant. + type: string + ean: + description: The EAN number of the item. + type: string + upc: + description: The UPC number of the item. + type: string + barcode: + description: A generic GTIN field for the Product Variant. + type: string + hs_code: + description: The Harmonized System code for the Product Variant. + type: string + inventory_quantity: + description: The amount of stock kept for the Product Variant. + type: integer + allow_backorder: + description: >- + Whether the Product Variant can be purchased when out of + stock. + type: boolean + manage_inventory: + description: >- + Whether Medusa should keep track of the inventory for this + Product Variant. + type: boolean + weight: + description: The wieght of the Product Variant. + type: number + length: + description: The length of the Product Variant. + type: number + height: + description: The height of the Product Variant. + type: number + width: + description: The width of the Product Variant. + type: number + origin_country: + description: The country of origin of the Product Variant. + type: string + mid_code: + description: >- + The Manufacturer Identification code for the Product + Variant. + type: string + material: + description: The material composition of the Product Variant. + type: string + metadata: + description: >- + An optional set of key-value pairs with additional + information. + type: object + prices: + type: array + items: + required: + - amount + properties: + id: + description: The ID of the Price. + type: string + region_id: + description: >- + The ID of the Region for which the price is used. + Only required if currency_code is not provided. + type: string + currency_code: + description: >- + The 3 character ISO currency code for which the + price will be used. Only required if region_id is + not provided. + type: string + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + amount: + description: The amount to charge for the Product Variant. + type: integer + min_quantity: + description: >- + The minimum quantity for which the price will be + used. + type: integer + max_quantity: + description: >- + The maximum quantity for which the price will be + used. + type: integer + options: + type: array + items: + required: + - option_id + - value + properties: + option_id: + description: The ID of the Option. + type: string + value: + description: >- + The value to give for the Product Option at the same + index in the Product's `options` field. + type: string + weight: + description: The wieght of the Product. + type: number + length: + description: The length of the Product. + type: number + height: + description: The height of the Product. + type: number + width: + description: The width of the Product. + type: number + origin_country: + description: The country of origin of the Product. + type: string + mid_code: + description: The Manufacturer Identification code for the Product. + type: string + material: + description: The material composition of the Product. + type: string + metadata: + description: An optional set of key-value pairs with additional information. + type: object + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product: + $ref: ../components/schemas/product.yaml diff --git a/docs/api/admin/paths/products_{id}_metadata.yaml b/docs/api/admin/paths/products_{id}_metadata.yaml new file mode 100644 index 0000000000..1af710764c --- /dev/null +++ b/docs/api/admin/paths/products_{id}_metadata.yaml @@ -0,0 +1,37 @@ +post: + operationId: PostProductsProductMetadata + summary: Set Product metadata + description: Set metadata key/value pair for Product + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Product. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - key + - value + properties: + key: + description: The metadata key + type: string + value: + description: The metadata value + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product: + $ref: ../components/schemas/product.yaml diff --git a/docs/api/admin/paths/products_{id}_options.yaml b/docs/api/admin/paths/products_{id}_options.yaml new file mode 100644 index 0000000000..5624796830 --- /dev/null +++ b/docs/api/admin/paths/products_{id}_options.yaml @@ -0,0 +1,33 @@ +post: + operationId: PostProductsProductOptions + summary: Add an Option + x-authenticated: true + description: Adds a Product Option to a Product + parameters: + - in: path + name: id + required: true + description: The ID of the Product. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - title + properties: + title: + description: The title the Product Option will be identified by i.e. "Size" + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product: + $ref: ../components/schemas/product.yaml diff --git a/docs/api/admin/paths/products_{id}_options_{option_id}.yaml b/docs/api/admin/paths/products_{id}_options_{option_id}.yaml new file mode 100644 index 0000000000..c63c57913a --- /dev/null +++ b/docs/api/admin/paths/products_{id}_options_{option_id}.yaml @@ -0,0 +1,82 @@ +delete: + operationId: DeleteProductsProductOptionsOption + summary: Delete a Product Option + description: >- + Deletes a Product Option. Before a Product Option can be deleted all Option + Values for the Product Option must be the same. You may, for example, have + to delete some of your variants prior to deleting the Product Option + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Product. + schema: + type: string + - in: path + name: option_id + required: true + description: The ID of the Product Option. + schema: + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + option_id: + type: string + description: The ID of the deleted Product Option + object: + type: string + description: The type of the object that was deleted. + default: option + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true + product: + $ref: ../components/schemas/product.yaml +post: + operationId: PostProductsProductOptionsOption + summary: Update a Product Option. + description: Updates a Product Option + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Product. + schema: + type: string + - in: path + name: option_id + required: true + description: The ID of the Product Option. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - title + properties: + title: + description: The title of the Product Option + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product: + $ref: ../components/schemas/product.yaml diff --git a/docs/api/admin/paths/products_{id}_variants.yaml b/docs/api/admin/paths/products_{id}_variants.yaml new file mode 100644 index 0000000000..a4319c6c8d --- /dev/null +++ b/docs/api/admin/paths/products_{id}_variants.yaml @@ -0,0 +1,188 @@ +post: + operationId: PostProductsProductVariants + summary: Create a Product Variant + description: >- + Creates a Product Variant. Each Product Variant must have a unique + combination of Product Option Values. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Product. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - title + - prices + - options + properties: + title: + description: The title to identify the Product Variant by. + type: string + sku: + description: The unique SKU for the Product Variant. + type: string + ean: + description: The EAN number of the item. + type: string + upc: + description: The UPC number of the item. + type: string + barcode: + description: A generic GTIN field for the Product Variant. + type: string + hs_code: + description: The Harmonized System code for the Product Variant. + type: string + inventory_quantity: + description: The amount of stock kept for the Product Variant. + type: integer + default: 0 + allow_backorder: + description: Whether the Product Variant can be purchased when out of stock. + type: boolean + manage_inventory: + description: >- + Whether Medusa should keep track of the inventory for this + Product Variant. + type: boolean + weight: + description: The wieght of the Product Variant. + type: number + length: + description: The length of the Product Variant. + type: number + height: + description: The height of the Product Variant. + type: number + width: + description: The width of the Product Variant. + type: number + origin_country: + description: The country of origin of the Product Variant. + type: string + mid_code: + description: The Manufacturer Identification code for the Product Variant. + type: string + material: + description: The material composition of the Product Variant. + type: string + metadata: + description: An optional set of key-value pairs with additional information. + type: object + prices: + type: array + items: + required: + - amount + properties: + id: + description: The ID of the price. + type: string + region_id: + description: >- + The ID of the Region for which the price is used. Only + required if currency_code is not provided. + type: string + currency_code: + description: >- + The 3 character ISO currency code for which the price will + be used. Only required if region_id is not provided. + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + amount: + description: The amount to charge for the Product Variant. + type: integer + min_quantity: + description: The minimum quantity for which the price will be used. + type: integer + max_quantity: + description: The maximum quantity for which the price will be used. + type: integer + options: + type: array + items: + required: + - option_id + - value + properties: + option_id: + description: The ID of the Product Option to set the value for. + type: string + value: + description: The value to give for the Product Option. + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product: + $ref: ../components/schemas/product.yaml +get: + operationId: GetProductsProductVariants + summary: List a Product's Product Variants + description: Retrieves a list of the Product Variants associated with a Product. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: ID of the product to search for the variants. + schema: + type: string + - in: query + name: fields + description: Comma separated string of the column to select. + schema: + type: string + - in: query + name: expand + description: Comma separated string of the relations to include. + schema: + type: string + - in: query + name: offset + description: How many items to skip before the results. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of items returned. + schema: + type: integer + default: 100 + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + variants: + type: array + items: + $ref: ../components/schemas/product_variant.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/products_{id}_variants_{variant_id}.yaml b/docs/api/admin/paths/products_{id}_variants_{variant_id}.yaml new file mode 100644 index 0000000000..8dde101221 --- /dev/null +++ b/docs/api/admin/paths/products_{id}_variants_{variant_id}.yaml @@ -0,0 +1,171 @@ +delete: + operationId: DeleteProductsProductVariantsVariant + summary: Delete a Product Variant + description: Deletes a Product Variant. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Product. + schema: + type: string + - in: path + name: variant_id + required: true + description: The ID of the Product Variant. + schema: + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + variant_id: + type: string + description: The ID of the deleted Product Variant. + object: + type: string + description: The type of the object that was deleted. + default: variant + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true + product: + $ref: ../components/schemas/product.yaml +post: + operationId: PostProductsProductVariantsVariant + summary: Update a Product Variant + description: Update a Product Variant. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Product. + schema: + type: string + - in: path + name: variant_id + required: true + description: The ID of the Product Variant. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + title: + description: The title to identify the Product Variant by. + type: string + sku: + description: The unique SKU for the Product Variant. + type: string + ean: + description: The EAN number of the item. + type: string + upc: + description: The UPC number of the item. + type: string + barcode: + description: A generic GTIN field for the Product Variant. + type: string + hs_code: + description: The Harmonized System code for the Product Variant. + type: string + inventory_quantity: + description: The amount of stock kept for the Product Variant. + type: integer + allow_backorder: + description: Whether the Product Variant can be purchased when out of stock. + type: boolean + manage_inventory: + description: >- + Whether Medusa should keep track of the inventory for this + Product Variant. + type: boolean + weight: + description: The wieght of the Product Variant. + type: number + length: + description: The length of the Product Variant. + type: number + height: + description: The height of the Product Variant. + type: number + width: + description: The width of the Product Variant. + type: number + origin_country: + description: The country of origin of the Product Variant. + type: string + mid_code: + description: The Manufacturer Identification code for the Product Variant. + type: string + material: + description: The material composition of the Product Variant. + type: string + metadata: + description: An optional set of key-value pairs with additional information. + type: object + prices: + type: array + items: + required: + - amount + properties: + id: + description: The ID of the price. + type: string + region_id: + description: >- + The ID of the Region for which the price is used. Only + required if currency_code is not provided. + type: string + currency_code: + description: >- + The 3 character ISO currency code for which the price will + be used. Only required if region_id is not provided. + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + amount: + description: The amount to charge for the Product Variant. + type: integer + min_quantity: + description: The minimum quantity for which the price will be used. + type: integer + max_quantity: + description: The maximum quantity for which the price will be used. + type: integer + options: + type: array + items: + required: + - option_id + - value + properties: + option_id: + description: The ID of the Product Option to set the value for. + type: string + value: + description: The value to give for the Product Option. + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product: + $ref: ../components/schemas/product.yaml diff --git a/docs/api/admin/paths/regions.yaml b/docs/api/admin/paths/regions.yaml new file mode 100644 index 0000000000..6ca2f8a3da --- /dev/null +++ b/docs/api/admin/paths/regions.yaml @@ -0,0 +1,132 @@ +post: + operationId: PostRegions + summary: Create a Region + description: Creates a Region + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - name + - currency_code + - tax_rate + - payment_providers + - fulfillment_providers + - countries + properties: + name: + description: The name of the Region + type: string + currency_code: + description: The 3 character ISO currency code to use for the Region. + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + tax_code: + description: An optional tax code the Region. + type: string + tax_rate: + description: The tax rate to use on Orders in the Region. + type: number + payment_providers: + description: >- + A list of Payment Provider IDs that should be enabled for the + Region + type: array + items: + type: string + fulfillment_providers: + description: >- + A list of Fulfillment Provider IDs that should be enabled for + the Region + type: array + items: + type: string + countries: + description: >- + A list of countries' 2 ISO Characters that should be included in + the Region. + example: + - US + type: array + items: + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: ../components/schemas/region.yaml +get: + operationId: GetRegions + summary: List Regions + description: Retrieves a list of Regions. + x-authenticated: true + parameters: + - in: query + name: limit + schema: + type: integer + default: 50 + required: false + description: limit the number of regions in response + - in: query + name: offset + schema: + type: integer + default: 0 + required: false + description: Offset of regions in response (used for pagination) + - in: query + name: created_at + schema: + type: object + required: false + description: >- + Date comparison for when resulting region was created, i.e. less than, + greater than etc. + - in: query + name: updated_at + schema: + type: object + required: false + description: >- + Date comparison for when resulting region was updated, i.e. less than, + greater than etc. + - in: query + name: deleted_at + schema: + type: object + required: false + description: >- + Date comparison for when resulting region was deleted, i.e. less than, + greater than etc. + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + regions: + type: array + items: + $ref: ../components/schemas/region.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/regions_{id}.yaml b/docs/api/admin/paths/regions_{id}.yaml new file mode 100644 index 0000000000..5dbf6ca17a --- /dev/null +++ b/docs/api/admin/paths/regions_{id}.yaml @@ -0,0 +1,135 @@ +delete: + operationId: DeleteRegionsRegion + summary: Delete a Region + description: Deletes a Region. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Region. + schema: + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Region. + object: + type: string + description: The type of the object that was deleted. + default: region + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true +get: + operationId: GetRegionsRegion + summary: Retrieve a Region + description: Retrieves a Region. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Region. + schema: + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: ../components/schemas/region.yaml +post: + operationId: PostRegionsRegion + summary: Update a Region + description: Updates a Region + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Region. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + name: + description: The name of the Region + type: string + currency_code: + description: The 3 character ISO currency code to use for the Region. + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + automatic_taxes: + description: >- + If true Medusa will automatically calculate taxes for carts in + this region. If false you have to manually call POST + /carts/:id/taxes. + type: boolean + gift_cards_taxable: + description: >- + Whether gift cards in this region should be applied sales tax + when purchasing a gift card + type: boolean + tax_provider_id: + description: >- + The ID of the tax provider to use; if null the system tax + provider is used + type: string + tax_code: + description: An optional tax code the Region. + type: string + tax_rate: + description: The tax rate to use on Orders in the Region. + type: number + payment_providers: + description: >- + A list of Payment Provider IDs that should be enabled for the + Region + type: array + items: + type: string + fulfillment_providers: + description: >- + A list of Fulfillment Provider IDs that should be enabled for + the Region + type: array + items: + type: string + countries: + description: >- + A list of countries' 2 ISO Characters that should be included in + the Region. + type: array + items: + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: ../components/schemas/region.yaml diff --git a/docs/api/admin/paths/regions_{id}_countries.yaml b/docs/api/admin/paths/regions_{id}_countries.yaml new file mode 100644 index 0000000000..4bab7c3d58 --- /dev/null +++ b/docs/api/admin/paths/regions_{id}_countries.yaml @@ -0,0 +1,37 @@ +post: + operationId: PostRegionsRegionCountries + summary: Add Country + description: Adds a Country to the list of Countries in a Region + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Region. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - country_code + properties: + country_code: + description: The 2 character ISO code for the Country. + type: string + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: ../components/schemas/region.yaml diff --git a/docs/api/admin/paths/regions_{id}_countries_{country_code}.yaml b/docs/api/admin/paths/regions_{id}_countries_{country_code}.yaml new file mode 100644 index 0000000000..b0f5b2c8d1 --- /dev/null +++ b/docs/api/admin/paths/regions_{id}_countries_{country_code}.yaml @@ -0,0 +1,32 @@ +delete: + operationId: PostRegionsRegionCountriesCountry + summary: Remove Country + x-authenticated: true + description: Removes a Country from the list of Countries in a Region + parameters: + - in: path + name: id + required: true + description: The ID of the Region. + schema: + type: string + - in: path + name: country_code + description: The 2 character ISO code for the Country. + required: true + schema: + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: ../components/schemas/region.yaml diff --git a/docs/api/admin/paths/regions_{id}_fulfillment-options.yaml b/docs/api/admin/paths/regions_{id}_fulfillment-options.yaml new file mode 100644 index 0000000000..16a5b4a85a --- /dev/null +++ b/docs/api/admin/paths/regions_{id}_fulfillment-options.yaml @@ -0,0 +1,35 @@ +get: + operationId: GetRegionsRegionFulfillmentOptions + summary: List Fulfillment Options available in the Region + description: Gathers all the fulfillment options available to in the Region. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Region. + schema: + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + fulfillment_options: + type: array + items: + properties: + provider_id: + type: string + description: ID of the fulfillment provider + options: + type: array + description: fulfillment provider options + example: + - id: manual-fulfillment + - id: manual-fulfillment-return + is_return: true diff --git a/docs/api/admin/paths/regions_{id}_fulfillment-providers.yaml b/docs/api/admin/paths/regions_{id}_fulfillment-providers.yaml new file mode 100644 index 0000000000..f01f857fe3 --- /dev/null +++ b/docs/api/admin/paths/regions_{id}_fulfillment-providers.yaml @@ -0,0 +1,33 @@ +post: + operationId: PostRegionsRegionFulfillmentProviders + summary: Add Fulfillment Provider + description: Adds a Fulfillment Provider to a Region + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Region. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - provider_id + properties: + provider_id: + description: The ID of the Fulfillment Provider to add. + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: ../components/schemas/region.yaml diff --git a/docs/api/admin/paths/regions_{id}_fulfillment-providers_{provider_id}.yaml b/docs/api/admin/paths/regions_{id}_fulfillment-providers_{provider_id}.yaml new file mode 100644 index 0000000000..9e73c6f45b --- /dev/null +++ b/docs/api/admin/paths/regions_{id}_fulfillment-providers_{provider_id}.yaml @@ -0,0 +1,29 @@ +delete: + operationId: PostRegionsRegionFulfillmentProvidersProvider + summary: Remove Fulfillment Provider + description: Removes a Fulfillment Provider. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Region. + schema: + type: string + - in: path + name: provider_id + required: true + description: The ID of the Fulfillment Provider. + schema: + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: ../components/schemas/region.yaml diff --git a/docs/api/admin/paths/regions_{id}_payment-providers.yaml b/docs/api/admin/paths/regions_{id}_payment-providers.yaml new file mode 100644 index 0000000000..80ba28f73a --- /dev/null +++ b/docs/api/admin/paths/regions_{id}_payment-providers.yaml @@ -0,0 +1,33 @@ +post: + operationId: PostRegionsRegionPaymentProviders + summary: Add Payment Provider + description: Adds a Payment Provider to a Region + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Region. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - provider_id + properties: + provider_id: + description: The ID of the Payment Provider to add. + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: ../components/schemas/region.yaml diff --git a/docs/api/admin/paths/regions_{id}_payment-providers_{provider_id}.yaml b/docs/api/admin/paths/regions_{id}_payment-providers_{provider_id}.yaml new file mode 100644 index 0000000000..27e03641fe --- /dev/null +++ b/docs/api/admin/paths/regions_{id}_payment-providers_{provider_id}.yaml @@ -0,0 +1,29 @@ +delete: + operationId: PostRegionsRegionPaymentProvidersProvider + summary: Remove Payment Provider + description: Removes a Payment Provider. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Region. + schema: + type: string + - in: path + name: provider_id + required: true + description: The ID of the Payment Provider. + schema: + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: ../components/schemas/region.yaml diff --git a/docs/api/admin/paths/return-reasons.yaml b/docs/api/admin/paths/return-reasons.yaml new file mode 100644 index 0000000000..8219cd0a96 --- /dev/null +++ b/docs/api/admin/paths/return-reasons.yaml @@ -0,0 +1,59 @@ +post: + operationId: PostReturnReasons + summary: Create a Return Reason + description: Creates a Return Reason + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - label + - value + properties: + label: + description: The label to display to the Customer. + type: string + value: + description: >- + The value that the Return Reason will be identified by. Must be + unique. + type: string + parent_return_reason_id: + description: The ID of the parent return reason. + type: string + description: + description: An optional description to for the Reason. + type: string + metadata: + description: An optional set of key-value pairs with additional information. + type: object + tags: + - Return Reason + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + return_reason: + $ref: ../components/schemas/return_reason.yaml +get: + operationId: GetReturnReasons + summary: List Return Reasons + description: Retrieves a list of Return Reasons. + x-authenticated: true + tags: + - Return Reason + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + return_reasons: + type: array + items: + $ref: ../components/schemas/return_reason.yaml diff --git a/docs/api/admin/paths/return-reasons_{id}.yaml b/docs/api/admin/paths/return-reasons_{id}.yaml new file mode 100644 index 0000000000..c8b01a4aa5 --- /dev/null +++ b/docs/api/admin/paths/return-reasons_{id}.yaml @@ -0,0 +1,97 @@ +delete: + operationId: DeleteReturnReason + summary: Delete a return reason + description: Deletes a return reason. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the return reason + schema: + type: string + tags: + - Return Reason + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted return reason + object: + type: string + description: The type of the object that was deleted. + default: return_reason + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true +get: + operationId: GetReturnReasonsReason + summary: Retrieve a Return Reason + description: Retrieves a Return Reason. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Return Reason. + schema: + type: string + tags: + - Return Reason + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + return_reason: + $ref: ../components/schemas/return_reason.yaml +post: + operationId: PostReturnReasonsReason + summary: Update a Return Reason + description: Updates a Return Reason + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Return Reason. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + label: + description: The label to display to the Customer. + type: string + value: + description: >- + The value that the Return Reason will be identified by. Must be + unique. + type: string + description: + description: An optional description to for the Reason. + type: string + metadata: + description: An optional set of key-value pairs with additional information. + type: object + tags: + - Return Reason + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + return_reason: + $ref: ../components/schemas/return_reason.yaml diff --git a/docs/api/admin/paths/returns.yaml b/docs/api/admin/paths/returns.yaml new file mode 100644 index 0000000000..4af7b6557e --- /dev/null +++ b/docs/api/admin/paths/returns.yaml @@ -0,0 +1,39 @@ +get: + operationId: GetReturns + summary: List Returns + description: Retrieves a list of Returns + parameters: + - in: query + name: limit + description: The upper limit for the amount of responses returned. + schema: + type: number + default: '50' + - in: query + name: offset + description: The offset of the list returned. + schema: + type: number + default: '0' + tags: + - Return + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + returns: + type: array + items: + $ref: ../components/schemas/return.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/returns_{id}_cancel.yaml b/docs/api/admin/paths/returns_{id}_cancel.yaml new file mode 100644 index 0000000000..6862b58e55 --- /dev/null +++ b/docs/api/admin/paths/returns_{id}_cancel.yaml @@ -0,0 +1,22 @@ +post: + operationId: PostReturnsReturnCancel + summary: Cancel a Return + description: Registers a Return as canceled. + parameters: + - in: path + name: id + required: true + description: The ID of the Return. + schema: + type: string + tags: + - Return + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/admin/paths/returns_{id}_receive.yaml b/docs/api/admin/paths/returns_{id}_receive.yaml new file mode 100644 index 0000000000..038679f62e --- /dev/null +++ b/docs/api/admin/paths/returns_{id}_receive.yaml @@ -0,0 +1,48 @@ +post: + operationId: PostReturnsReturnReceive + summary: Receive a Return + description: >- + Registers a Return as received. Updates statuses on Orders and Swaps + accordingly. + parameters: + - in: path + name: id + required: true + description: The ID of the Return. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - items + properties: + items: + description: The Line Items that have been received. + type: array + items: + required: + - item_id + - quantity + properties: + item_id: + description: The ID of the Line Item. + type: string + quantity: + description: The quantity of the Line Item. + type: integer + refund: + description: The amount to refund. + type: number + tags: + - Return + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + return: + $ref: ../components/schemas/return.yaml diff --git a/docs/api/admin/paths/sales-channels.yaml b/docs/api/admin/paths/sales-channels.yaml new file mode 100644 index 0000000000..61dbcac072 --- /dev/null +++ b/docs/api/admin/paths/sales-channels.yaml @@ -0,0 +1,177 @@ +post: + operationId: PostSalesChannels + summary: Create a Sales Channel + description: Creates a Sales Channel. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - name + properties: + name: + description: The name of the Sales Channel + type: string + description: + description: The description of the Sales Channel + type: string + is_disabled: + description: Whether the Sales Channel is disabled or not. + type: boolean + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channel: + $ref: ../components/schemas/sales_channel.yaml +get: + operationId: GetSalesChannels + summary: List sales channels + description: Retrieves a list of sales channels + x-authenticated: true + parameters: + - in: query + name: id + description: ID of the sales channel + schema: + type: string + - in: query + name: name + description: Name of the sales channel + schema: + type: string + - in: query + name: description + description: Description of the sales channel + schema: + type: string + - in: query + name: q + description: Query used for searching sales channels' names and descriptions. + schema: + type: string + - in: query + name: order + description: The field to order the results by. + schema: + type: string + - in: query + name: created_at + description: Date comparison for when resulting collections were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting collections were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: deleted_at + description: Date comparison for when resulting collections were deleted. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: offset + description: How many sales channels to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of sales channels returned. + schema: + type: integer + default: 20 + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each sales channel + of the result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each sales channel + of the result. + schema: + type: string + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channels: + type: array + items: + $ref: ../components/schemas/sales_channel.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/sales-channels_{id}.yaml b/docs/api/admin/paths/sales-channels_{id}.yaml new file mode 100644 index 0000000000..222272b5a3 --- /dev/null +++ b/docs/api/admin/paths/sales-channels_{id}.yaml @@ -0,0 +1,92 @@ +delete: + operationId: DeleteSalesChannelsSalesChannel + summary: Delete a sales channel + description: Deletes the sales channel. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Sales channel. + schema: + type: string + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted sales channel + object: + type: string + description: The type of the object that was deleted. + default: sales-channel + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true +get: + operationId: GetSalesChannelsSalesChannel + summary: Retrieve a sales channel + description: Retrieves the sales channel. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Sales channel. + schema: + type: string + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channel: + $ref: ../components/schemas/sales_channel.yaml +post: + operationId: PostSalesChannelsSalesChannel + summary: Update a Sales Channel + description: Updates a Sales Channel. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Sales Channel. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + name: + type: string + description: Name of the sales channel. + description: + type: string + description: Sales Channel description. + is_disabled: + type: boolean + description: Indication of if the sales channel is active. + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channel: + $ref: ../components/schemas/sales_channel.yaml diff --git a/docs/api/admin/paths/sales-channels_{id}_products_batch.yaml b/docs/api/admin/paths/sales-channels_{id}_products_batch.yaml new file mode 100644 index 0000000000..e1631b42f9 --- /dev/null +++ b/docs/api/admin/paths/sales-channels_{id}_products_batch.yaml @@ -0,0 +1,82 @@ +post: + operationId: PostSalesChannelsChannelProductsBatch + summary: Assign a batch of product to a sales channel + description: Assign a batch of product to a sales channel. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Sales channel. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - product_ids + properties: + product_ids: + description: The IDs of the products to add to the Sales Channel + type: array + items: + type: object + required: + - id + properties: + id: + type: string + description: The ID of the product + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channel: + $ref: ../components/schemas/sales_channel.yaml +delete: + operationId: DeleteSalesChannelsChannelProductsBatch + summary: Remove a list of products from a sales channel + description: Remove a list of products from a sales channel. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Sales Channel + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - product_ids + properties: + product_ids: + description: The IDs of the products to delete from the Sales Channel. + type: array + items: + type: object + required: + - id + properties: + id: + description: The ID of a product + type: string + tags: + - Sales Channel + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + sales_channel: + $ref: ../components/schemas/sales_channel.yaml diff --git a/docs/api/admin/paths/shipping-options.yaml b/docs/api/admin/paths/shipping-options.yaml new file mode 100644 index 0000000000..63efe277fd --- /dev/null +++ b/docs/api/admin/paths/shipping-options.yaml @@ -0,0 +1,124 @@ +post: + operationId: PostShippingOptions + summary: Create Shipping Option + description: Creates a Shipping Option + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - name + - region_id + - provider_id + - data + - price_type + properties: + name: + description: The name of the Shipping Option + type: string + region_id: + description: >- + The ID of the Region in which the Shipping Option will be + available. + type: string + provider_id: + description: >- + The ID of the Fulfillment Provider that handles the Shipping + Option. + type: string + profile_id: + description: The ID of the Shipping Profile to add the Shipping Option to. + type: number + data: + description: >- + The data needed for the Fulfillment Provider to handle shipping + with this Shipping Option. + type: object + price_type: + description: The type of the Shipping Option price. + type: string + enum: + - flat_rate + - calculated + amount: + description: The amount to charge for the Shipping Option. + type: integer + requirements: + description: >- + The requirements that must be satisfied for the Shipping Option + to be available. + type: array + items: + required: + - type + - amount + properties: + type: + description: The type of the requirement + type: string + enum: + - max_subtotal + - min_subtotal + amount: + description: The amount to compare with. + type: integer + is_return: + description: Whether the Shipping Option defines a return shipment. + type: boolean + default: false + admin_only: + description: If true, the option can be used for draft orders + type: boolean + default: false + metadata: + description: An optional set of key-value pairs with additional information. + type: object + tags: + - Shipping Option + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + shipping_option: + $ref: ../components/schemas/shipping_option.yaml +get: + operationId: GetShippingOptions + summary: List Shipping Options + description: Retrieves a list of Shipping Options. + x-authenticated: true + parameters: + - in: query + name: region_id + schema: + type: string + description: Region ID to fetch options from + - in: query + name: is_return + schema: + type: boolean + description: Flag for fetching return options only + - in: query + name: admin_only + schema: + type: boolean + description: Flag for fetching admin specific options + tags: + - Shipping Option + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + shipping_options: + type: array + items: + $ref: ../components/schemas/shipping_option.yaml + count: + type: integer + description: The total number of items available diff --git a/docs/api/admin/paths/shipping-options_{id}.yaml b/docs/api/admin/paths/shipping-options_{id}.yaml new file mode 100644 index 0000000000..021185a0a9 --- /dev/null +++ b/docs/api/admin/paths/shipping-options_{id}.yaml @@ -0,0 +1,119 @@ +delete: + operationId: DeleteShippingOptionsOption + summary: Delete a Shipping Option + description: Deletes a Shipping Option. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Shipping Option. + schema: + type: string + tags: + - Shipping Option + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Shipping Option. + object: + type: string + description: The type of the object that was deleted. + default: shipping-option + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true +get: + operationId: GetShippingOptionsOption + summary: Retrieve a Shipping Option + description: Retrieves a Shipping Option. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Shipping Option. + schema: + type: string + tags: + - Shipping Option + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + shipping_option: + $ref: ../components/schemas/shipping_option.yaml +post: + operationId: PostShippingOptionsOption + summary: Update Shipping Option + description: Updates a Shipping Option + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Shipping Option. + schema: + type: string + requestBody: + content: + application/json: + schema: + required: + - requirements + properties: + name: + description: The name of the Shipping Option + type: string + amount: + description: The amount to charge for the Shipping Option. + type: integer + admin_only: + description: If true, the option can be used for draft orders + type: boolean + metadata: + description: An optional set of key-value pairs with additional information. + type: object + requirements: + description: >- + The requirements that must be satisfied for the Shipping Option + to be available. + type: array + items: + required: + - type + - amount + properties: + id: + description: The ID of the requirement + type: string + type: + description: The type of the requirement + type: string + enum: + - max_subtotal + - min_subtotal + amount: + description: The amount to compare with. + type: integer + tags: + - Shipping Option + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + shipping_option: + $ref: ../components/schemas/shipping_option.yaml diff --git a/docs/api/admin/paths/shipping-profiles.yaml b/docs/api/admin/paths/shipping-profiles.yaml new file mode 100644 index 0000000000..199c2a7999 --- /dev/null +++ b/docs/api/admin/paths/shipping-profiles.yaml @@ -0,0 +1,44 @@ +post: + operationId: PostShippingProfiles + summary: Create a Shipping Profile + description: Creates a Shipping Profile + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - name + properties: + name: + description: The name of the Shipping Profile + type: string + tags: + - Shipping Profile + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + shipping_profile: + $ref: ../components/schemas/shipping_profile.yaml +get: + operationId: GetShippingProfiles + summary: List Shipping Profiles + description: Retrieves a list of Shipping Profile. + x-authenticated: true + tags: + - Shipping Profile + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + shipping_profiles: + type: array + items: + $ref: ../components/schemas/shipping_profile.yaml diff --git a/docs/api/admin/paths/shipping-profiles_{id}.yaml b/docs/api/admin/paths/shipping-profiles_{id}.yaml new file mode 100644 index 0000000000..69bb1b5f75 --- /dev/null +++ b/docs/api/admin/paths/shipping-profiles_{id}.yaml @@ -0,0 +1,85 @@ +delete: + operationId: DeleteShippingProfilesProfile + summary: Delete a Shipping Profile + description: Deletes a Shipping Profile. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Shipping Profile. + schema: + type: string + tags: + - Shipping Profile + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Shipping Profile. + object: + type: string + description: The type of the object that was deleted. + default: shipping_profile + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true +get: + operationId: GetShippingProfilesProfile + summary: Retrieve a Shipping Profile + description: Retrieves a Shipping Profile. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Shipping Profile. + schema: + type: string + tags: + - Shipping Profile + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + shipping_profile: + $ref: ../components/schemas/shipping_profile.yaml +post: + operationId: PostShippingProfilesProfile + summary: Update a Shipping Profiles + description: Updates a Shipping Profile + parameters: + - in: path + name: id + required: true + description: The ID of the Shipping Profile. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + name: + description: The name of the Shipping Profile + type: string + tags: + - Shipping Profile + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + shipping_profile: + $ref: ../components/schemas/shipping_profile.yaml diff --git a/docs/api/admin/paths/store.yaml b/docs/api/admin/paths/store.yaml new file mode 100644 index 0000000000..b7b5bd1a6e --- /dev/null +++ b/docs/api/admin/paths/store.yaml @@ -0,0 +1,69 @@ +get: + operationId: GetStore + summary: Retrieve Store details. + description: Retrieves the Store details + x-authenticated: true + tags: + - Store + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + store: + $ref: ../components/schemas/store.yaml +post: + operationId: PostStore + summary: Update Store details. + description: Updates the Store details + x-authenticated: true + requestBody: + content: + application/json: + schema: + properties: + name: + description: The name of the Store + type: string + swap_link_template: + description: >- + A template for Swap links - use `{{cart_id}}` to insert the Swap + Cart id + type: string + payment_link_template: + description: >- + A template for payment links links - use `{{cart_id}}` to insert + the Cart id + type: string + invite_link_template: + description: >- + A template for invite links - use `{{invite_token}}` to insert + the invite token + type: string + default_currency_code: + description: The default currency code for the Store. + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + currencies: + description: Array of currencies in 2 character ISO code format. + type: array + items: + type: string + metadata: + description: An optional set of key-value pairs with additional information. + type: object + tags: + - Store + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + store: + $ref: ../components/schemas/store.yaml diff --git a/docs/api/admin/paths/store_currencies_{code}.yaml b/docs/api/admin/paths/store_currencies_{code}.yaml new file mode 100644 index 0000000000..1b7000d7e0 --- /dev/null +++ b/docs/api/admin/paths/store_currencies_{code}.yaml @@ -0,0 +1,52 @@ +post: + operationId: PostStoreCurrenciesCode + summary: Add a Currency Code + description: Adds a Currency Code to the available currencies. + x-authenticated: true + parameters: + - in: path + name: code + required: true + description: The 3 character ISO currency code. + schema: + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + tags: + - Store + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + store: + $ref: ../components/schemas/store.yaml +delete: + operationId: DeleteStoreCurrenciesCode + summary: Remove a Currency Code + description: Removes a Currency Code from the available currencies. + x-authenticated: true + parameters: + - in: path + name: code + required: true + description: The 3 character ISO currency code. + schema: + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + tags: + - Store + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + store: + $ref: ../components/schemas/store.yaml diff --git a/docs/api/admin/paths/store_payment-providers.yaml b/docs/api/admin/paths/store_payment-providers.yaml new file mode 100644 index 0000000000..1e5aa37c71 --- /dev/null +++ b/docs/api/admin/paths/store_payment-providers.yaml @@ -0,0 +1,18 @@ +get: + operationId: GetStorePaymentProviders + summary: Retrieve configured Payment Providers + description: Retrieves the configured Payment Providers + x-authenticated: true + tags: + - Store + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + payment_providers: + type: array + items: + $ref: ../components/schemas/payment_provider.yaml diff --git a/docs/api/admin/paths/store_tax-providers.yaml b/docs/api/admin/paths/store_tax-providers.yaml new file mode 100644 index 0000000000..540f80edfa --- /dev/null +++ b/docs/api/admin/paths/store_tax-providers.yaml @@ -0,0 +1,18 @@ +get: + operationId: GetStoreTaxProviders + summary: Retrieve configured Tax Providers + description: Retrieves the configured Tax Providers + x-authenticated: true + tags: + - Store + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_providers: + type: array + items: + $ref: ../components/schemas/tax_provider.yaml diff --git a/docs/api/admin/paths/swaps.yaml b/docs/api/admin/paths/swaps.yaml new file mode 100644 index 0000000000..9b5d24c9e2 --- /dev/null +++ b/docs/api/admin/paths/swaps.yaml @@ -0,0 +1,40 @@ +get: + operationId: GetSwaps + summary: List Swaps + description: Retrieves a list of Swaps. + parameters: + - in: query + name: limit + description: The upper limit for the amount of responses returned. + schema: + type: number + default: '50' + - in: query + name: offset + description: The offset of the list returned. + schema: + type: number + default: '0' + x-authenticated: true + tags: + - Swap + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + swaps: + type: array + items: + $ref: ../components/schemas/swap.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/swaps_{id}.yaml b/docs/api/admin/paths/swaps_{id}.yaml new file mode 100644 index 0000000000..885878ad3c --- /dev/null +++ b/docs/api/admin/paths/swaps_{id}.yaml @@ -0,0 +1,23 @@ +get: + operationId: GetSwapsSwap + summary: Retrieve a Swap + description: Retrieves a Swap. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Swap. + schema: + type: string + tags: + - Swap + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + swap: + $ref: ../components/schemas/swap.yaml diff --git a/docs/api/admin/paths/tax-rates.yaml b/docs/api/admin/paths/tax-rates.yaml new file mode 100644 index 0000000000..5032d3164b --- /dev/null +++ b/docs/api/admin/paths/tax-rates.yaml @@ -0,0 +1,172 @@ +post: + operationId: PostTaxRates + summary: Create a Tax Rate + description: Creates a Tax Rate + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - code + - name + - region_id + properties: + code: + type: string + description: A code to identify the tax type by + name: + type: string + description: A human friendly name for the tax + region_id: + type: string + description: The ID of the Region that the rate belongs to + rate: + type: number + description: The numeric rate to charge + products: + type: array + description: The IDs of the products associated with this tax rate + items: + type: string + shipping_options: + type: array + description: The IDs of the shipping options associated with this tax rate + items: + type: string + product_types: + type: array + description: The IDs of the types of products associated with this tax rate + items: + type: string + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_rate: + $ref: ../components/schemas/tax_rate.yaml +get: + operationId: GetTaxRates + summary: List Tax Rates + description: Retrieves a list of TaxRates + x-authenticated: true + parameters: + - in: query + name: name + description: Name of tax rate to retrieve + schema: + type: string + - in: query + name: region_id + style: form + explode: false + description: Filter by Region ID + schema: + oneOf: + - type: string + - type: array + items: + type: string + - in: query + name: code + description: code to search for. + schema: + type: string + - in: query + name: rate + style: form + explode: false + description: Filter by Rate + schema: + oneOf: + - type: number + - type: object + properties: + lt: + type: number + description: filter by rates less than this number + gt: + type: number + description: filter by rates greater than this number + lte: + type: number + description: filter by rates less than or equal to this number + gte: + type: number + description: filter by rates greater than or equal to this number + - in: query + name: offset + description: How many tax rates to skip before retrieving the result. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of tax rates returned. + schema: + type: integer + default: 50 + - in: query + name: fields + description: Which fields should be included in each item. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved for each item. + style: form + explode: false + schema: + type: array + items: + type: string + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_rates: + type: array + items: + $ref: ../components/schemas/tax_rate.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/admin/paths/tax-rates_:id.yaml b/docs/api/admin/paths/tax-rates_:id.yaml new file mode 100644 index 0000000000..84f1f79b65 --- /dev/null +++ b/docs/api/admin/paths/tax-rates_:id.yaml @@ -0,0 +1,102 @@ +get: + operationId: GetTaxRatesTaxRate + summary: Get Tax Rate + description: Retrieves a TaxRate + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string + x-authenticated: true + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_rate: + $ref: ../components/schemas/tax_rate.yaml +post: + operationId: PostTaxRatesTaxRate + summary: Update a Tax Rate + description: Updates a Tax Rate + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string + x-authenticated: true + requestBody: + content: + application/json: + schema: + properties: + code: + type: string + description: A code to identify the tax type by + name: + type: string + description: A human friendly name for the tax + region_id: + type: string + description: The ID of the Region that the rate belongs to + rate: + type: number + description: The numeric rate to charge + products: + type: array + description: The IDs of the products associated with this tax rate + items: + type: string + shipping_options: + type: array + description: The IDs of the shipping options associated with this tax rate + items: + type: string + product_types: + type: array + description: The IDs of the types of products associated with this tax rate + items: + type: string + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_rate: + $ref: ../components/schemas/tax_rate.yaml diff --git a/docs/api/admin/paths/tax-rates_:id_product-types_batch.yaml b/docs/api/admin/paths/tax-rates_:id_product-types_batch.yaml new file mode 100644 index 0000000000..df938552fb --- /dev/null +++ b/docs/api/admin/paths/tax-rates_:id_product-types_batch.yaml @@ -0,0 +1,96 @@ +post: + operationId: PostTaxRatesTaxRateProductTypes + summary: Add Tax Rate to Product Types + description: Associates a Tax Rate with a list of Product Types + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - product_types + properties: + product_types: + type: array + description: The IDs of the types of products to associate with this tax rate + items: + type: string + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_rate: + $ref: ../components/schemas/tax_rate.yaml +delete: + operationId: DeleteTaxRatesTaxRateProductTypes + summary: Remove Tax Rate from Product Types + description: Removes a Tax Rate from a list of Product Types + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - product_types + properties: + product_types: + type: array + description: >- + The IDs of the types of products to remove association with this + tax rate + items: + type: string + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_rate: + $ref: ../components/schemas/tax_rate.yaml diff --git a/docs/api/admin/paths/tax-rates_:id_products_batch.yaml b/docs/api/admin/paths/tax-rates_:id_products_batch.yaml new file mode 100644 index 0000000000..3162d0c75c --- /dev/null +++ b/docs/api/admin/paths/tax-rates_:id_products_batch.yaml @@ -0,0 +1,94 @@ +post: + operationId: PostTaxRatesTaxRateProducts + summary: Add Tax Rate to Products + description: Associates a Tax Rate with a list of Products + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - products + properties: + products: + type: array + description: The IDs of the products to associate with this tax rate + items: + type: string + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_rate: + $ref: ../components/schemas/tax_rate.yaml +delete: + operationId: DeleteTaxRatesTaxRateProducts + summary: Removes Tax Rate from Products + description: Removes a Tax Rate from a list of Products + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - products + properties: + products: + type: array + description: The IDs of the products to remove association with this tax rate + items: + type: string + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_rate: + $ref: ../components/schemas/tax_rate.yaml diff --git a/docs/api/admin/paths/tax-rates_:id_shipping-options_batch.yaml b/docs/api/admin/paths/tax-rates_:id_shipping-options_batch.yaml new file mode 100644 index 0000000000..27b1da8f5c --- /dev/null +++ b/docs/api/admin/paths/tax-rates_:id_shipping-options_batch.yaml @@ -0,0 +1,96 @@ +post: + operationId: PostTaxRatesTaxRateShippingOptions + summary: Add Tax Rate to Product Types + description: Associates a Tax Rate with a list of Shipping Options + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - shipping_options + properties: + shipping_options: + type: array + description: The IDs of the shipping options to associate with this tax rate + items: + type: string + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_rate: + $ref: ../components/schemas/tax_rate.yaml +delete: + operationId: DeleteTaxRatesTaxRateShippingOptions + summary: Removes a Tax Rate from Product Types + description: Removes a Tax Rate from a list of Product Types + parameters: + - in: query + name: fields + description: Which fields should be included in the result. + style: form + explode: false + schema: + type: array + items: + type: string + - in: query + name: expand + description: Which fields should be expanded and retrieved in the result. + style: form + explode: false + schema: + type: array + items: + type: string + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - shipping_options + properties: + shipping_options: + type: array + description: >- + The IDs of the shipping options to remove association with this + tax rate + items: + type: string + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + tax_rate: + $ref: ../components/schemas/tax_rate.yaml diff --git a/docs/api/admin/paths/tax-rates_{id}.yaml b/docs/api/admin/paths/tax-rates_{id}.yaml new file mode 100644 index 0000000000..38904fa17a --- /dev/null +++ b/docs/api/admin/paths/tax-rates_{id}.yaml @@ -0,0 +1,32 @@ +delete: + operationId: DeleteTaxRatesTaxRate + summary: Delete a Tax Rate + description: Deletes a Tax Rate + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the Shipping Option. + schema: + type: string + tags: + - Tax Rate + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted Shipping Option. + object: + type: string + description: The type of the object that was deleted. + default: tax-rate + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true diff --git a/docs/api/admin/paths/uploads.yaml b/docs/api/admin/paths/uploads.yaml new file mode 100644 index 0000000000..9c16a13004 --- /dev/null +++ b/docs/api/admin/paths/uploads.yaml @@ -0,0 +1,32 @@ +post: + operationId: PostUploads + summary: Uploads a file + description: Uploads a file to the specific fileservice that is installed in Medusa. + x-authenticated: true + tags: + - Upload + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + files: + type: string + format: binary + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + uploads: + type: array + items: + type: object + properties: + url: + type: string + description: The URL of the uploaded file. + format: uri diff --git a/docs/api/admin/paths/users.yaml b/docs/api/admin/paths/users.yaml new file mode 100644 index 0000000000..8d3f93b8fa --- /dev/null +++ b/docs/api/admin/paths/users.yaml @@ -0,0 +1,63 @@ +post: + operationId: PostUsers + summary: Create a User + description: Creates a User + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - email + - password + properties: + email: + description: The Users email. + type: string + format: email + first_name: + description: The name of the User. + type: string + last_name: + description: The name of the User. + type: string + role: + description: Userrole assigned to the user. + type: string + enum: + - admin + - member + - developer + password: + description: The Users password. + type: string + format: password + tags: + - User + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + user: + $ref: ../components/schemas/user.yaml +get: + operationId: GetUsers + summary: Retrieve all users + description: Retrieves all users. + x-authenticated: true + tags: + - User + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + users: + type: array + items: + $ref: ../components/schemas/user.yaml diff --git a/docs/api/admin/paths/users_password-token.yaml b/docs/api/admin/paths/users_password-token.yaml new file mode 100644 index 0000000000..454c020560 --- /dev/null +++ b/docs/api/admin/paths/users_password-token.yaml @@ -0,0 +1,21 @@ +post: + operationId: PostUsersUserPasswordToken + summary: Generate a password token for a User. + description: Generates a password token for a User with a given email. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - email + properties: + email: + description: The Users email. + type: string + format: email + tags: + - User + responses: + '204': + description: OK diff --git a/docs/api/admin/paths/users_reset-password.yaml b/docs/api/admin/paths/users_reset-password.yaml new file mode 100644 index 0000000000..c092a38a1b --- /dev/null +++ b/docs/api/admin/paths/users_reset-password.yaml @@ -0,0 +1,35 @@ +post: + operationId: PostUsersUserPassword + summary: Set the password for a User. + description: Sets the password for a User given the correct token. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - token + - password + properties: + email: + description: The Users email. + type: string + format: email + token: + description: The token generated from the 'password-token' endpoint. + type: string + password: + description: The Users new password. + type: string + format: password + tags: + - User + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + user: + $ref: ../components/schemas/user.yaml diff --git a/docs/api/admin/paths/users_{id}.yaml b/docs/api/admin/paths/users_{id}.yaml new file mode 100644 index 0000000000..5fb9c49727 --- /dev/null +++ b/docs/api/admin/paths/users_{id}.yaml @@ -0,0 +1,102 @@ +delete: + operationId: DeleteUsersUser + summary: Delete a User + description: Deletes a User + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the User. + schema: + type: string + tags: + - Users + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + id: + type: string + description: The ID of the deleted user. + object: + type: string + description: The type of the object that was deleted. + default: user + deleted: + type: boolean + description: Whether or not the items were deleted. + default: true +get: + operationId: GetUsersUser + summary: Retrieve a User + description: Retrieves a User. + x-authenticated: true + parameters: + - in: path + name: id + required: true + description: The ID of the User. + schema: + type: string + tags: + - User + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + user: + $ref: ../components/schemas/user.yaml +post: + operationId: PostUsersUser + summary: Update a User + description: Updates a User + parameters: + - in: path + name: id + required: true + description: The ID of the User. + schema: + type: string + x-authenticated: true + requestBody: + content: + application/json: + schema: + properties: + first_name: + description: The name of the User. + type: string + last_name: + description: The name of the User. + type: string + role: + description: Userrole assigned to the user. + type: string + enum: + - admin + - member + - developer + api_token: + description: The api token of the User. + type: string + metadata: + description: An optional set of key-value pairs with additional information. + type: object + tags: + - User + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + user: + $ref: ../components/schemas/user.yaml diff --git a/docs/api/admin/paths/variants.yaml b/docs/api/admin/paths/variants.yaml new file mode 100644 index 0000000000..aa468d5094 --- /dev/null +++ b/docs/api/admin/paths/variants.yaml @@ -0,0 +1,45 @@ +get: + operationId: GetVariants + summary: List Product Variants. + description: Retrieves a list of Product Variants + x-authenticated: true + parameters: + - in: query + name: q + description: Query used for searching variants. + schema: + type: string + - in: query + name: offset + description: How many variants to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of variants returned. + schema: + type: integer + default: 20 + tags: + - Product Variant + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + variants: + type: array + items: + $ref: ../components/schemas/product_variant.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/store-spec3-base.json b/docs/api/store-spec3-base.json index 1e981c55a8..777afcd8fb 100644 --- a/docs/api/store-spec3-base.json +++ b/docs/api/store-spec3-base.json @@ -3,70 +3,76 @@ "info": { "version": "1.0.0", "title": "Medusa Storefront API", + "description": "API reference for Medusa's Storefront endpoints. All endpoints are prefixed with `/store`.", "license": { - "name": "MIT" + "name": "MIT", + "url": "https://github.com/medusajs/medusa/blob/master/LICENSE" } }, "tags": [ { "name": "Auth", - "description": "Auth endpoints allows authorization of admin Users and manages their sessions." + "description": "Auth endpoints that allow authorization of customers and manages their sessions." }, { "name": "Cart", + "description": "Cart endpoints that allow handling carts in Medusa.", "x-resourceId": "cart" }, { "name": "Collection", + "description": "Collection endpoints that allow handling collections in Medusa.", "x-resourceId": "product_collection" }, { "name": "Customer", + "description": "Customer endpoints that allow handling customers in Medusa.", "x-resourceId": "customer" }, - { - "name": "Discount", - "x-resourceId": "discount" - }, { "name": "Gift Card", + "description": "Gift Card endpoints that allow handling gift cards in Medusa.", "x-resourceId": "gift_card" }, - { - "name": "Notification", - "x-resourceId": "notification" - }, { "name": "Order", + "description": "Order endpoints that allow handling orders in Medusa.", "x-resourceId": "order" }, { "name": "Product", + "description": "Product endpoints that allow handling products in Medusa.", "x-resourceId": "product" }, + { + "name": "Product Variant", + "description": "Product Variant endpoints that allow handling product variants in Medusa.", + "x-resourceId": "product_variant" + }, { "name": "Region", + "description": "Region endpoints that allow handling regions in Medusa.", "x-resourceId": "region" }, + { + "name": "Return Reason", + "description": "Return Reason endpoints that allow handling return reasons in Medusa.", + "x-resourceId": "return_reason" + }, { "name": "Return", + "description": "Return endpoints that allow handling returns in Medusa.", "x-resourceId": "return" }, { "name": "Shipping Option", + "description": "Shipping Option endpoints that allow handling shipping options in Medusa.", "x-resourceId": "shipping_option" }, - { - "name": "Shipping Profile", - "x-resourceId": "shipping_profile" - }, { "name": "Swap", + "description": "Swap endpoints that allow handling swaps in Medusa.", "x-resourceId": "swap" - }, - { - "name": "Product Variant", - "x-resourceId": "product_variant" } ], "servers": [ diff --git a/docs/api/store-spec3.json b/docs/api/store-spec3.json index fc3ac4fc46..2e0a0924af 100644 --- a/docs/api/store-spec3.json +++ b/docs/api/store-spec3.json @@ -3,70 +3,76 @@ "info": { "version": "1.0.0", "title": "Medusa Storefront API", + "description": "API reference for Medusa's Storefront endpoints. All endpoints are prefixed with `/store`.", "license": { - "name": "MIT" + "name": "MIT", + "url": "https://github.com/medusajs/medusa/blob/master/LICENSE" } }, "tags": [ { "name": "Auth", - "description": "Auth endpoints allows authorization of admin Users and manages their sessions." + "description": "Auth endpoints that allow authorization of customers and manages their sessions." }, { "name": "Cart", + "description": "Cart endpoints that allow handling carts in Medusa.", "x-resourceId": "cart" }, { "name": "Collection", + "description": "Collection endpoints that allow handling collections in Medusa.", "x-resourceId": "product_collection" }, { "name": "Customer", + "description": "Customer endpoints that allow handling customers in Medusa.", "x-resourceId": "customer" }, - { - "name": "Discount", - "x-resourceId": "discount" - }, { "name": "Gift Card", + "description": "Gift Card endpoints that allow handling gift cards in Medusa.", "x-resourceId": "gift_card" }, - { - "name": "Notification", - "x-resourceId": "notification" - }, { "name": "Order", + "description": "Order endpoints that allow handling orders in Medusa.", "x-resourceId": "order" }, { "name": "Product", + "description": "Product endpoints that allow handling products in Medusa.", "x-resourceId": "product" }, + { + "name": "Product Variant", + "description": "Product Variant endpoints that allow handling product variants in Medusa.", + "x-resourceId": "product_variant" + }, { "name": "Region", + "description": "Region endpoints that allow handling regions in Medusa.", "x-resourceId": "region" }, + { + "name": "Return Reason", + "description": "Return Reason endpoints that allow handling return reasons in Medusa.", + "x-resourceId": "return_reason" + }, { "name": "Return", + "description": "Return endpoints that allow handling returns in Medusa.", "x-resourceId": "return" }, { "name": "Shipping Option", + "description": "Shipping Option endpoints that allow handling shipping options in Medusa.", "x-resourceId": "shipping_option" }, - { - "name": "Shipping Profile", - "x-resourceId": "shipping_profile" - }, { "name": "Swap", + "description": "Swap endpoints that allow handling swaps in Medusa.", "x-resourceId": "swap" - }, - { - "name": "Product Variant", - "x-resourceId": "product_variant" } ], "servers": [ @@ -159,6 +165,9 @@ } } } + }, + "401": { + "description": "Unauthorized" } } } @@ -172,11 +181,12 @@ { "in": "path", "name": "email", - "required": true, - "description": "The Customer's email.", "schema": { - "type": "string" - } + "type": "string", + "format": "email" + }, + "required": true, + "description": "The email to check if exists." } ], "tags": [ @@ -190,7 +200,8 @@ "schema": { "properties": { "exists": { - "type": "boolean" + "type": "boolean", + "description": "Whether email exists or not." } } } @@ -213,7 +224,7 @@ "in": "path", "name": "id", "required": true, - "description": "The cart id.", + "description": "The cart ID.", "schema": { "type": "string" } @@ -221,7 +232,7 @@ ], "responses": { "200": { - "description": "A successful response", + "description": "OK", "content": { "application/json": { "schema": { @@ -246,7 +257,7 @@ "properties": { "option_id": { "type": "string", - "description": "id of the shipping option to create the method from" + "description": "ID of the shipping option to create the method from" }, "data": { "type": "object", @@ -269,7 +280,7 @@ "in": "path", "name": "id", "required": true, - "description": "The Cart id.", + "description": "The Cart ID.", "schema": { "type": "string" } @@ -280,20 +291,15 @@ ], "responses": { "200": { - "description": "A cart object with the tax_total field populated", + "description": "OK", "content": { "application/json": { "schema": { - "oneOf": [ - { - "type": "object", - "properties": { - "cart": { - "$ref": "#/components/schemas/cart" - } - } + "properties": { + "cart": { + "$ref": "#/components/schemas/cart" } - ] + } } } } @@ -326,32 +332,50 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "type": "object", - "properties": { - "order": { - "$ref": "#/components/schemas/order" - } - } + "properties": { + "type": { + "type": "string", + "description": "The type of the data property.", + "enum": [ + "order", + "cart", + "swap" + ] }, - { + "data": { "type": "object", - "properties": { - "cart": { - "$ref": "#/components/schemas/cart" + "description": "The data of the result object. Its type depends on the type field.", + "oneOf": [ + { + "type": "object", + "description": "Cart was successfully authorized and order was placed successfully.", + "properties": { + "order": { + "$ref": "#/components/schemas/order" + } + } + }, + { + "type": "object", + "description": "Cart was successfully authorized but requires further actions.", + "properties": { + "cart": { + "$ref": "#/components/schemas/cart" + } + } + }, + { + "type": "object", + "description": "When cart is used for a swap and it has been completed successfully.", + "properties": { + "cart": { + "$ref": "#/components/schemas/swap" + } + } } - } - }, - { - "type": "object", - "properties": { - "cart": { - "$ref": "#/components/schemas/swap" - } - } + ] } - ] + } } } } @@ -371,16 +395,28 @@ "properties": { "region_id": { "type": "string", - "description": "The id of the Region to create the Cart in." + "description": "The ID of the Region to create the Cart in." + }, + "sales_channel_id": { + "type": "string", + "description": "[EXPERIMENTAL] The ID of the Sales channel to create the Cart in." }, "country_code": { "type": "string", - "description": "The 2 character ISO country code to create the Cart in." + "description": "The 2 character ISO country code to create the Cart in.", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements", + "description": "See a list of codes." + } }, "items": { "description": "An optional array of `variant_id`, `quantity` pairs to generate Line Items from.", "type": "array", "items": { + "required": [ + "variant_id", + "quantity" + ], "properties": { "variant_id": { "description": "The id of the Product Variant to generate a Line Item from.", @@ -395,7 +431,11 @@ }, "context": { "description": "An optional object to provide context to the Cart. The `context` field is automatically populated with `ip` and `user_agent`", - "type": "object" + "type": "object", + "example": { + "ip": "::1", + "user_agent": "Chrome" + } } } } @@ -821,6 +861,140 @@ } } } + }, + "post": { + "operationId": "PostCartsCart", + "summary": "Update a Cart", + "description": "Updates a Cart.", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "description": "The id of the Cart.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "region_id": { + "type": "string", + "description": "The id of the Region to create the Cart in." + }, + "country_code": { + "type": "string", + "description": "The 2 character ISO country code to create the Cart in.", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements", + "description": "See a list of codes." + } + }, + "email": { + "type": "string", + "description": "An email to be used on the Cart.", + "format": "email" + }, + "sales_channel_id": { + "type": "string", + "description": "The ID of the Sales channel to update the Cart with." + }, + "billing_address": { + "description": "The Address to be used for billing purposes.", + "anyOf": [ + { + "$ref": "#/components/schemas/address", + "description": "A full billing address object." + }, + { + "type": "string", + "description": "The billing address ID" + } + ] + }, + "shipping_address": { + "description": "The Address to be used for shipping.", + "anyOf": [ + { + "$ref": "#/components/schemas/address", + "description": "A full shipping address object." + }, + { + "type": "string", + "description": "The shipping address ID" + } + ] + }, + "gift_cards": { + "description": "An array of Gift Card codes to add to the Cart.", + "type": "array", + "items": { + "required": [ + "code" + ], + "properties": { + "code": { + "description": "The code that a Gift Card is identified by.", + "type": "string" + } + } + } + }, + "discounts": { + "description": "An array of Discount codes to add to the Cart.", + "type": "array", + "items": { + "required": [ + "code" + ], + "properties": { + "code": { + "description": "The code that a Discount is identifed by.", + "type": "string" + } + } + } + }, + "customer_id": { + "description": "The ID of the Customer to associate the Cart with.", + "type": "string" + }, + "context": { + "description": "An optional object to provide context to the Cart.", + "type": "object", + "example": { + "ip": "::1", + "user_agent": "Chrome" + } + } + } + } + } + } + }, + "tags": [ + "Cart" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "cart": { + "$ref": "#/components/schemas/cart" + } + } + } + } + } + } + } } }, "/carts/{id}/payment-sessions/{provider_id}/refresh": { @@ -879,7 +1053,7 @@ "in": "path", "name": "id", "required": true, - "description": "The id of the Cart.", + "description": "The ID of the Cart.", "schema": { "type": "string" } @@ -915,120 +1089,7 @@ "properties": { "provider_id": { "type": "string", - "description": "The id of the Payment Provider." - } - } - } - } - } - } - } - }, - "/store/carts/{id}": { - "post": { - "operationId": "PostCartsCart", - "summary": "Update a Cart\"", - "description": "Updates a Cart.", - "parameters": [ - { - "in": "path", - "name": "id", - "required": true, - "description": "The id of the Cart.", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "region_id": { - "type": "string", - "description": "The id of the Region to create the Cart in." - }, - "country_code": { - "type": "string", - "description": "The 2 character ISO country code to create the Cart in." - }, - "email": { - "type": "string", - "description": "An email to be used on the Cart." - }, - "billing_address": { - "description": "The Address to be used for billing purposes.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] - }, - "shipping_address": { - "description": "The Address to be used for shipping.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] - }, - "gift_cards": { - "description": "An array of Gift Card codes to add to the Cart.", - "type": "array", - "items": { - "required": [ - "code" - ], - "properties": { - "code": { - "description": "The code that a Gift Card is identified by.", - "type": "string" - } - } - } - }, - "discounts": { - "description": "An array of Discount codes to add to the Cart.", - "type": "array", - "items": { - "required": [ - "code" - ], - "properties": { - "code": { - "description": "The code that a Discount is identifed by.", - "type": "string" - } - } - } - }, - "customer_id": { - "description": "The id of the Customer to associate the Cart with.", - "type": "string" - }, - "context": { - "description": "An optional object to provide context to the Cart.", - "type": "object" - } - } - } - } - } - }, - "tags": [ - "Cart" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "cart": { - "$ref": "#/components/schemas/cart" - } + "description": "The ID of the Payment Provider." } } } @@ -1097,6 +1158,66 @@ "type": "integer", "default": 10 } + }, + { + "in": "query", + "name": "created_at", + "description": "Date comparison for when resulting collections were created.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "updated_at", + "description": "Date comparison for when resulting collections were updated.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } } ], "tags": [ @@ -1109,57 +1230,23 @@ "application/json": { "schema": { "properties": { - "collection": { - "$ref": "#/components/schemas/product_collection" - } - } - } - } - } - } - } - } - }, - "/gift-cards/{code}": { - "get": { - "operationId": "GetGiftCardsCode", - "summary": "Retrieve Gift Card by Code", - "description": "Retrieves a Gift Card by its associated unqiue code.", - "parameters": [ - { - "in": "path", - "name": "code", - "required": true, - "description": "The unique Gift Card code.", - "schema": { - "type": "string" - } - } - ], - "tags": [ - "Gift Card" - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "properties": { - "id": { - "description": "The id of the Gift Card" + "collections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/product_collection" + } }, - "code": { - "description": "The code of the Gift Card" + "count": { + "type": "integer", + "description": "The total number of items available" }, - "value": { - "description": "The original value of the Gift Card." + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" }, - "balance": { - "description": "The current balanace of the Gift Card" - }, - "region": { - "$ref": "#/components/schemas/region" + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -1222,7 +1309,44 @@ "operationId": "PostCustomers", "summary": "Create a Customer", "description": "Creates a Customer account.", - "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "first_name", + "last_name", + "email", + "password" + ], + "properties": { + "first_name": { + "description": "The Customer's first name.", + "type": "string" + }, + "last_name": { + "description": "The Customer's last name.", + "type": "string" + }, + "email": { + "description": "The email of the customer.", + "type": "string", + "format": "email" + }, + "password": { + "description": "The Customer's password.", + "type": "string", + "format": "password" + }, + "phone": { + "description": "The Customer's phone number.", + "type": "string" + } + } + } + } + } + }, "tags": [ "Customer" ], @@ -1240,40 +1364,31 @@ } } } - } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "email", - "first_name", - "last_name", - "password" - ], - "properties": { - "email": { - "type": "string", - "description": "The Customer's email address." - }, - "first_name": { - "type": "string", - "description": "The Customer's first name." - }, - "last_name": { - "type": "string", - "description": "The Customer's last name." - }, - "password": { - "type": "string", - "description": "The Customer's password for login." - }, - "phone": { - "type": "string", - "description": "The Customer's phone number." + }, + "422": { + "description": "A customer with the same email exists", + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "type": "string", + "description": "The error code" + }, + "type": { + "type": "string", + "description": "The type of error" + }, + "message": { + "type": "string", + "description": "Human-readable message with details about the error" + } } + }, + "example": { + "code": "invalid_request_error", + "type": "duplicate_error", + "message": "A customer with the given email already has an account. Log in instead" } } } @@ -1285,7 +1400,7 @@ "delete": { "operationId": "DeleteCustomersCustomerAddressesAddress", "summary": "Delete an Address", - "description": "Removes an Address from the Customer's saved addresse.", + "description": "Removes an Address from the Customer's saved addresses.", "x-authenticated": true, "parameters": [ { @@ -1338,16 +1453,11 @@ "content": { "application/json": { "schema": { - "properties": { - "address": { - "description": "The updated Address.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "anyOf": [ + { + "$ref": "#/components/schemas/address" } - } + ] } } } @@ -1421,7 +1531,12 @@ "description": "The Address to be used for billing purposes.", "anyOf": [ { - "$ref": "#/components/schemas/address" + "$ref": "#/components/schemas/address", + "description": "The full billing address object" + }, + { + "type": "string", + "description": "The ID of an existing billing address" } ] }, @@ -1516,23 +1631,25 @@ { "in": "query", "name": "limit", - "description": "How many addresses to return.", + "description": "How many orders to return.", "schema": { - "type": "integer" + "type": "integer", + "default": 10 } }, { "in": "query", "name": "offset", - "description": "The offset in the resulting addresses.", + "description": "The offset in the resulting orders.", "schema": { - "type": "integer" + "type": "integer", + "default": 0 } }, { "in": "query", "name": "fields", - "description": "(Comma separated string) Which fields should be included in the resulting addresses.", + "description": "(Comma separated string) Which fields should be included in the resulting orders.", "schema": { "type": "string" } @@ -1540,7 +1657,7 @@ { "in": "query", "name": "expand", - "description": "(Comma separated string) Which relations should be expanded in the resulting addresses.", + "description": "(Comma separated string) Which relations should be expanded in the resulting orders.", "schema": { "type": "string" } @@ -1556,23 +1673,23 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The total number of Orders.", - "type": "integer" - }, - "offset": { - "description": "The offset for pagination.", - "type": "integer" - }, - "limit": { - "description": "The maxmimum number of Orders to return,", - "type": "integer" - }, "orders": { "type": "array", "items": { "$ref": "#/components/schemas/order" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" } } } @@ -1587,7 +1704,24 @@ "operationId": "PostCustomersCustomerPasswordToken", "summary": "Creates a reset password token", "description": "Creates a reset password token to be used in a subsequent /reset-password request. The password token should be sent out of band e.g. via email and will not be returned.", - "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "email" + ], + "properties": { + "email": { + "description": "The email of the customer.", + "type": "string", + "format": "email" + } + } + } + } + } + }, "tags": [ "Customer" ], @@ -1595,33 +1729,43 @@ "204": { "description": "OK" } - }, + } + } + }, + "/customers/password-reset": { + "post": { + "operationId": "PostCustomersResetPassword", + "summary": "Resets Customer password", + "description": "Resets a Customer's password using a password token created by a previous /password-token request.", "requestBody": { "content": { "application/json": { "schema": { - "type": "object", "required": [ - "email" + "email", + "password", + "token" ], "properties": { "email": { + "description": "The email of the customer.", "type": "string", - "description": "Email of the user whose password should be reset." + "format": "email" + }, + "password": { + "description": "The Customer's password.", + "type": "string", + "format": "password" + }, + "token": { + "description": "The reset password token", + "type": "string" } } } } } - } - } - }, - "/customers/reset-password": { - "post": { - "operationId": "PostCustomersResetPassword", - "summary": "Resets Customer password", - "description": "Resets a Customer's password using a password token created by a previous /password-token request.", - "parameters": [], + }, "tags": [ "Customer" ], @@ -1640,29 +1784,38 @@ } } } - }, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "email", - "token", - "password" - ], - "properties": { - "email": { - "type": "string", - "description": "The Customer's email." - }, - "token": { - "type": "string", - "description": "The password token created by a /password-token request." - }, - "password": { - "type": "string", - "description": "The new password to set for the Customer." + } + } + }, + "/gift-cards/{code}": { + "get": { + "operationId": "GetGiftCardsCode", + "summary": "Retrieve Gift Card by Code", + "description": "Retrieves a Gift Card by its associated unqiue code.", + "parameters": [ + { + "in": "path", + "name": "code", + "required": true, + "description": "The unique Gift Card code.", + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Gift Card" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "gift_card": { + "$ref": "#/components/schemas/gift_card" + } } } } @@ -1681,7 +1834,7 @@ "in": "path", "name": "cart_id", "required": true, - "description": "The id of Cart.", + "description": "The ID of Cart.", "schema": { "type": "string" } @@ -1734,8 +1887,8 @@ "application/json": { "schema": { "properties": { - "customer": { - "$ref": "#/components/schemas/customer" + "order": { + "$ref": "#/components/schemas/order" } } } @@ -1749,7 +1902,7 @@ "get": { "operationId": "GetOrders", "summary": "Look Up an Order", - "description": "Looks for an Order with a given `display_id`, `email` pair. The `display_id`, `email` pair must match in order for the Order to be returned.", + "description": "Look up an order using filters.", "parameters": [ { "in": "query", @@ -1763,10 +1916,29 @@ { "in": "query", "name": "email", + "style": "form", + "explode": false, + "description": "The email associated with this order.", "required": true, - "description": "The email of the Order with the given display_id.", "schema": { - "type": "string" + "type": "string", + "format": "email" + } + }, + { + "in": "query", + "name": "shipping_address", + "style": "form", + "explode": false, + "description": "The shipping address associated with this order.", + "schema": { + "type": "object", + "properties": { + "postal_code": { + "type": "string", + "description": "The postal code of the shipping address" + } + } } } ], @@ -1837,7 +2009,7 @@ { "in": "query", "name": "q", - "description": "Query used for searching products.", + "description": "Query used for searching products by title, description, variant's title, variant's sku, and collection's title", "schema": { "type": "string" } @@ -1845,9 +2017,21 @@ { "in": "query", "name": "id", - "description": "Id of the product to search for.", + "style": "form", + "explode": false, + "description": "product IDs to search for.", "schema": { - "type": "string" + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] } }, { @@ -1855,7 +2039,7 @@ "name": "collection_id", "style": "form", "explode": false, - "description": "Collection ids to search for", + "description": "Collection IDs to search for", "schema": { "type": "array", "items": { @@ -1868,7 +2052,7 @@ "name": "tags", "style": "form", "explode": false, - "description": "Tags to search for", + "description": "Tag IDs to search for", "schema": { "type": "array", "items": { @@ -1879,7 +2063,7 @@ { "in": "query", "name": "title", - "description": "to search for.", + "description": "title to search for.", "schema": { "type": "string" } @@ -1887,7 +2071,7 @@ { "in": "query", "name": "description", - "description": "to search for.", + "description": "description to search for.", "schema": { "type": "string" } @@ -1895,7 +2079,7 @@ { "in": "query", "name": "handle", - "description": "to search for.", + "description": "handle to search for.", "schema": { "type": "string" } @@ -1905,13 +2089,13 @@ "name": "is_giftcard", "description": "Search for giftcards using is_giftcard=true.", "schema": { - "type": "string" + "type": "boolean" } }, { "in": "query", "name": "type", - "description": "to search for.", + "description": "type to search for.", "schema": { "type": "string" } @@ -1919,25 +2103,61 @@ { "in": "query", "name": "created_at", - "description": "Date comparison for when resulting products was created, i.e. less than, greater than etc.", + "description": "Date comparison for when resulting products were created.", "schema": { - "type": "object" + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { "in": "query", "name": "updated_at", - "description": "Date comparison for when resulting products was updated, i.e. less than, greater than etc.", + "description": "Date comparison for when resulting products were updated.", "schema": { - "type": "object" - } - }, - { - "in": "query", - "name": "deleted_at", - "description": "Date comparison for when resulting products was deleted, i.e. less than, greater than etc.", - "schema": { - "type": "object" + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } } }, { @@ -1945,13 +2165,31 @@ "name": "offset", "description": "How many products to skip in the result.", "schema": { - "type": "string" + "type": "integer", + "default": 0 } }, { "in": "query", "name": "limit", "description": "Limit the number of products returned.", + "schema": { + "type": "integer", + "default": 100 + } + }, + { + "in": "query", + "name": "expand", + "description": "(Comma separated) Which fields should be expanded in each order of the result.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "fields", + "description": "(Comma separated) Which fields should be included in each order of the result.", "schema": { "type": "string" } @@ -1967,23 +2205,77 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The total number of Products.", - "type": "integer" - }, - "offset": { - "description": "The offset for pagination.", - "type": "integer" - }, - "limit": { - "description": "The maxmimum number of Products to return,", - "type": "integer" - }, "products": { "type": "array", "items": { "$ref": "#/components/schemas/product" } + }, + "count": { + "type": "integer", + "description": "The total number of items available" + }, + "offset": { + "type": "integer", + "description": "The number of items skipped before these items" + }, + "limit": { + "type": "integer", + "description": "The number of items per page" + } + } + } + } + } + } + } + } + }, + "/products/search": { + "get": { + "operationId": "GetProductsSearch", + "summary": "Search Products", + "description": "Run a search query on products using the search engine installed on Medusa", + "parameters": [ + { + "in": "query", + "name": "q", + "required": true, + "description": "The query to run the search with.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "offset", + "description": "How many products to skip in the result.", + "schema": { + "type": "integer" + } + }, + { + "in": "query", + "name": "limit", + "description": "Limit the number of products returned.", + "schema": { + "type": "integer" + } + } + ], + "tags": [ + "Product" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "properties": { + "hits": { + "type": "array", + "description": "Array of results. The format of the items depends on the search engine installed on the server." } } } @@ -2035,6 +2327,86 @@ "operationId": "GetRegions", "summary": "List Regions", "description": "Retrieves a list of Regions.", + "parameters": [ + { + "in": "query", + "name": "offset", + "description": "How many regions to skip in the result.", + "schema": { + "type": "integer", + "default": 0 + } + }, + { + "in": "query", + "name": "limit", + "description": "Limit the number of regions returned.", + "schema": { + "type": "integer", + "default": 100 + } + }, + { + "in": "query", + "name": "created_at", + "description": "Date comparison for when resulting regions were created.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + }, + { + "in": "query", + "name": "updated_at", + "description": "Date comparison for when resulting regions were updated.", + "schema": { + "type": "object", + "properties": { + "lt": { + "type": "string", + "description": "filter by dates less than this date", + "format": "date" + }, + "gt": { + "type": "string", + "description": "filter by dates greater than this date", + "format": "date" + }, + "lte": { + "type": "string", + "description": "filter by dates less than or equal to this date", + "format": "date" + }, + "gte": { + "type": "string", + "description": "filter by dates greater than or equal to this date", + "format": "date" + } + } + } + } + ], "tags": [ "Region" ], @@ -2045,18 +2417,6 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The total number of regions.", - "type": "integer" - }, - "offset": { - "description": "The offset for pagination.", - "type": "integer" - }, - "limit": { - "description": "The maxmimum number of regions to return,", - "type": "integer" - }, "regions": { "type": "array", "items": { @@ -2146,49 +2506,57 @@ "content": { "application/json": { "schema": { + "required": [ + "order_id", + "items" + ], "properties": { "order_id": { "type": "string", - "description": "The id of the Order to create the Return from." + "description": "The ID of the Order to create the Return from." }, "items": { "description": "The items to include in the Return.", "type": "array", "items": { + "required": [ + "item_id", + "quantity" + ], "properties": { "item_id": { - "description": "The id of the Line Item from the Order.", + "description": "The ID of the Line Item from the Order.", "type": "string" }, "quantity": { "description": "The quantity to return.", "type": "integer" + }, + "reason_id": { + "description": "The ID of the return reason.", + "type": "string" + }, + "note": { + "description": "A note to add to the item returned.", + "type": "string" } - }, - "required": [ - "item_id", - "quantity" - ] + } } }, "return_shipping": { "description": "If the Return is to be handled by the store operator the Customer can choose a Return Shipping Method. Alternatvely the Customer can handle the Return themselves.", "type": "object", + "required": [ + "option_id" + ], "properties": { "option_id": { "type": "string", - "description": "The id of the Shipping Option to create the Shipping Method from." + "description": "The ID of the Shipping Option to create the Shipping Method from." } - }, - "required": [ - "option_id" - ] + } } - }, - "required": [ - "order_id", - "items" - ] + } } } } @@ -2326,7 +2694,7 @@ "properties": { "order_id": { "type": "string", - "description": "The id of the Order to create the Swap for." + "description": "The ID of the Order to create the Swap for." }, "return_items": { "description": "The items to include in the Return.", @@ -2338,19 +2706,19 @@ ], "properties": { "item_id": { - "description": "The id of the Line Item from the Order.", + "description": "The ID of the Line Item from the Order.", "type": "string" }, "quantity": { - "description": "The quantity to return.", + "description": "The quantity to swap.", "type": "integer" }, "reason_id": { - "description": "The id of the reason of this return", + "description": "The ID of the reason of this return.", "type": "string" }, - "note_id": { - "description": "The id of the note", + "note": { + "description": "The note to add to the item being swapped.", "type": "string" } } @@ -2358,7 +2726,7 @@ }, "return_shipping_option": { "type": "string", - "description": "The id of the Shipping Option to create the Shipping Method from." + "description": "The ID of the Shipping Option to create the Shipping Method from." }, "additional_items": { "description": "The items to exchange the returned items to.", @@ -2370,7 +2738,7 @@ ], "properties": { "variant_id": { - "description": "The id of the Product Variant to send.", + "description": "The ID of the Product Variant to send.", "type": "string" }, "quantity": { @@ -2457,6 +2825,36 @@ "schema": { "type": "string" } + }, + { + "in": "query", + "name": "cart_id", + "description": "The id of the Cart to set prices based on.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "region_id", + "description": "The id of the Region to set prices based on.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "currency_code", + "style": "form", + "explode": false, + "description": "The 3 character ISO currency code to set prices based on.", + "schema": { + "type": "string", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + } } ], "tags": [ @@ -2505,8 +2903,10 @@ { "in": "query", "name": "offset", + "description": "How many product variants to skip in the result.", "schema": { - "type": "number" + "type": "number", + "default": "0" } }, { @@ -2514,7 +2914,65 @@ "name": "limit", "description": "Maximum number of Product Variants to return.", "schema": { - "type": "number" + "type": "number", + "default": "100" + } + }, + { + "in": "query", + "name": "title", + "style": "form", + "explode": false, + "description": "product variant title to search for.", + "schema": { + "oneOf": [ + { + "type": "string", + "description": "a single title to search by" + }, + { + "type": "array", + "description": "multiple titles to search by", + "items": { + "type": "string" + } + } + ] + } + }, + { + "in": "query", + "name": "inventory_quantity", + "description": "Filter by available inventory quantity", + "schema": { + "oneOf": [ + { + "type": "number", + "description": "a specific number to search by." + }, + { + "type": "object", + "description": "search using less and greater than comparisons.", + "properties": { + "lt": { + "type": "number", + "description": "filter by inventory quantity less than this number" + }, + "gt": { + "type": "number", + "description": "filter by inventory quantity greater than this number" + }, + "lte": { + "type": "number", + "description": "filter by inventory quantity less than or equal to this number" + }, + "gte": { + "type": "number", + "description": "filter by inventory quantity greater than or equal to this number" + } + } + } + ] } } ], @@ -2551,34 +3009,102 @@ "x-resourceId": "address", "properties": { "id": { - "type": "string" + "type": "string", + "description": "ID of the address", + "example": "addr_01G8ZC9VS1XVE149MGH2J7QSSH" }, "customer_id": { - "type": "string" + "type": "string", + "description": "ID of the customer this address belongs to", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" + }, + "customer": { + "description": "Available if the relation `customer` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A customer object." + } }, "company": { - "type": "string" + "type": "string", + "description": "Company name", + "example": "Acme" }, "first_name": { - "type": "string" + "type": "string", + "description": "First name", + "example": "Arno" }, "last_name": { - "type": "string" + "type": "string", + "description": "Last name", + "example": "Willms" }, "address_1": { - "type": "string" + "type": "string", + "description": "Address line 1", + "example": "14433 Kemmer Court" }, "address_2": { - "type": "string" + "type": "string", + "description": "Address line 2", + "example": "Suite 369" }, "city": { - "type": "string" + "type": "string", + "description": "City", + "example": "South Geoffreyview" }, "country_code": { - "type": "string" + "type": "string", + "description": "The 2 character ISO code of the country in lower case", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements", + "description": "See a list of codes." + }, + "example": "st" }, "country": { - "$ref": "#/components/schemas/country" + "description": "A country object. Available if the relation `country` is expanded.", + "type": "object" + }, + "province": { + "type": "string", + "description": "Province", + "example": "Kentucky" + }, + "postal_code": { + "type": "string", + "description": "Postal Code", + "example": 72093 + }, + "phone": { + "type": "string", + "description": "Phone Number", + "example": 16128234334802 + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", + "format": "date-time" + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -2586,81 +3112,194 @@ "title": "Batch Job", "description": "A Batch Job.", "x-resourceId": "batch_job", + "required": [ + "type" + ], "properties": { "id": { + "type": "string", "description": "The unique identifier for the batch job.", - "type": "string" + "example": "batch_01G8T782965PYFG0751G0Z38B4" }, "type": { - "description": "The type of batch job.", "type": "string", + "description": "The type of batch job.", "enum": [ - "product_import", - "product_export" + "product-import", + "product-export" ] }, "status": { - "description": "The status of the batch job.", "type": "string", + "description": "The status of the batch job.", "enum": [ "created", "pre_processed", + "confirmed", "processing", "completed", "canceled", "failed" - ] + ], + "default": "created" }, "created_by": { + "type": "string", "description": "The unique identifier of the user that created the batch job.", - "type": "string" + "example": "usr_01G1G5V26F5TB3GPAPNJ8X1S3V" }, - "context": { - "description": "The context of the batch job, the type of the batch job determines what the context should contain.", + "created_by_user": { + "description": "A user object. Available if the relation `created_by_user` is expanded.", "type": "object" }, + "context": { + "type": "object", + "description": "The context of the batch job, the type of the batch job determines what the context should contain.", + "example": { + "shape": { + "prices": [ + { + "region": null, + "currency_code": "eur" + } + ], + "dynamicImageColumnCount": 4, + "dynamicOptionColumnCount": 2 + }, + "list_config": { + "skip": 0, + "take": 50, + "order": { + "created_at": "DESC" + }, + "relations": [ + "variants", + "variant.prices", + "images" + ] + } + } + }, "dry_run": { - "description": "Specify if the job must apply the modifications or not.", "type": "boolean", + "description": "Specify if the job must apply the modifications or not.", "default": false }, "result": { + "type": "object", "description": "The result of the batch job.", - "type": "object" + "properties": { + "count": { + "type": "number" + }, + "advancement_count": { + "type": "number" + }, + "progress": { + "type": "number" + }, + "errors": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "code": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "err": { + "type": "array" + } + } + }, + "stat_descriptors": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "file_key": { + "type": "string" + }, + "file_size": { + "type": "number" + } + }, + "example": { + "errors": [ + { + "err": [], + "code": "unknown", + "message": "Method not implemented." + } + ], + "stat_descriptors": [ + { + "key": "product-export-count", + "name": "Product count to export", + "message": "There will be 8 products exported by this action" + } + ] + } }, "pre_processed_at": { - "description": "The date from which the job has been pre processed.", "type": "string", + "description": "The date from which the job has been pre processed.", + "format": "date-time" + }, + "processing_at": { + "type": "string", + "description": "The date the job is processing at.", "format": "date-time" }, "confirmed_at": { - "description": "The date when the confirmation has been done.", "type": "string", + "description": "The date when the confirmation has been done.", "format": "date-time" }, "completed_at": { - "description": "The date of the completion.", "type": "string", + "description": "The date of the completion.", "format": "date-time" }, "canceled_at": { - "description": "The date of the concellation.", "type": "string", + "description": "The date of the concellation.", + "format": "date-time" + }, + "failed_at": { + "type": "string", + "description": "The date when the job failed.", "format": "date-time" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was last updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" } } @@ -2671,115 +3310,214 @@ "x-resourceId": "cart", "properties": { "id": { - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" }, "email": { - "type": "string" + "type": "string", + "description": "The email associated with the cart", + "format": "email" }, "billing_address_id": { - "type": "string" + "type": "string", + "description": "The billing address's ID", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" }, "billing_address": { + "description": "Available if the relation `billing_address` is expanded.", "$ref": "#/components/schemas/address" }, "shipping_address_id": { - "type": "string" + "type": "string", + "description": "The shipping address's ID", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" }, "shipping_address": { + "description": "Available if the relation `shipping_address` is expanded.", "$ref": "#/components/schemas/address" }, "items": { + "description": "Available if the relation `items` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/line_item" } }, "region_id": { - "type": "string" + "type": "string", + "description": "The region's ID", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" }, "region": { - "$ref": "#/components/schemas/region" + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" }, "discounts": { "type": "array", + "description": "Available if the relation `discounts` is expanded.", "items": { - "$ref": "#/components/schemas/region" + "type": "object", + "description": "A discount object." } }, "gift_cards": { "type": "array", + "description": "Available if the relation `gift_cards` is expanded.", "items": { - "$ref": "#/components/schemas/gift_card" + "type": "object", + "description": "A gift card object." } }, "customer_id": { - "type": "string" + "type": "string", + "description": "The customer's ID", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" }, "customer": { - "$ref": "#/components/schemas/customer" + "description": "A customer object. Available if the relation `customer` is expanded.", + "type": "object" }, "payment_session": { + "description": "The selected payment session in the cart.", "$ref": "#/components/schemas/payment_session" }, "payment_sessions": { "type": "array", + "description": "The payment sessions created on the cart.", "items": { "$ref": "#/components/schemas/payment_session" } }, + "payment_id": { + "type": "string", + "description": "The payment's ID if available", + "example": "pay_01G8ZCC5W42ZNY842124G7P5R9" + }, "payment": { + "description": "Available if the relation `payment` is expanded.", "$ref": "#/components/schemas/payment" }, "shipping_methods": { "type": "array", + "description": "The shipping methods added to the cart.", "items": { "$ref": "#/components/schemas/shipping_method" } }, "type": { "type": "string", + "description": "The cart's type.", "enum": [ "default", "swap", - "payment_link" - ] + "draft_order", + "payment_link", + "claim" + ], + "default": "default" }, "completed_at": { "type": "string", + "description": "The date with timezone at which the cart was completed.", "format": "date-time" }, + "payment_authorized_at": { + "type": "string", + "description": "The date with timezone at which the payment was authorized.", + "format": "date-time" + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of a cart in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "context": { + "type": "object", + "description": "The context of the cart which can include info like IP or user agent.", + "example": { + "ip": "::1", + "user_agent": "PostmanRuntime/7.29.2" + } + }, + "sales_channel_id": { + "type": "string", + "description": "The sales channel ID the cart is associated with.", + "example": null + }, + "sales_channel": { + "description": "A sales channel object. Available if the relation `sales_channel` is expanded.", + "type": "object" + }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } }, "shipping_total": { - "type": "integer" + "type": "integer", + "description": "The total of shipping", + "example": 1000 }, "discount_total": { - "type": "integer" + "type": "integer", + "description": "The total of discount", + "example": 800 }, "tax_total": { - "type": "integer" + "type": "integer", + "description": "The total of tax", + "example": 0 + }, + "refunded_total": { + "type": "integer", + "description": "The total amount refunded if the order associated with this cart is returned.", + "example": 0 + }, + "total": { + "type": "integer", + "description": "The total amount of the cart", + "example": 8200 }, "subtotal": { - "type": "integer" + "type": "integer", + "description": "The subtotal of the cart", + "example": 8000 }, "refundable_amount": { - "type": "integer" + "type": "integer", + "description": "The amount that can be refunded", + "example": 8200 }, "gift_card_total": { - "type": "integer" + "type": "integer", + "description": "The total of gift cards", + "example": 0 + }, + "gift_card_tax_total": { + "type": "integer", + "description": "The total of gift cards with taxes", + "example": 0 } } }, @@ -2787,30 +3525,50 @@ "title": "Claim Image", "description": "Represents photo documentation of a claim.", "x-resourceId": "claim_image", + "required": [ + "claim_item_id", + "url" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The claim image's ID", + "example": "cimg_01G8ZH853Y6TFXWPG5EYE81X63" }, "claim_item_id": { - "type": "string" + "type": "string", + "description": "The ID of the claim item associated with the image" + }, + "claim_item": { + "description": "A claim item object. Available if the relation `claim_item` is expanded.", + "type": "object" }, "url": { - "type": "string" + "type": "string", + "description": "The URL of the image", + "format": "uri" }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -2818,32 +3576,51 @@ "title": "Claim Item", "description": "Represents a claimed item along with information about the reasons for the claim.", "x-resourceId": "claim_item", + "required": [ + "claim_order_id", + "item_id", + "variant_id", + "reason", + "quantity" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The claim item's ID", + "example": "citm_01G8ZH853Y6TFXWPG5EYE81X63" }, "images": { "type": "array", + "description": "Available if the relation `images` is expanded.", "items": { "$ref": "#/components/schemas/claim_image" } }, "claim_order_id": { + "description": "The ID of the claim this item is associated with.", "type": "string" }, + "claim_order": { + "description": "A claim order object. Available if the relation `claim_order` is expanded.", + "type": "object" + }, "item_id": { - "type": "string" + "description": "The ID of the line item that the claim item refers to.", + "type": "string", + "example": "item_01G8ZM25TN49YV9EQBE2NC27KC" }, "item": { - "description": "The Line Item that the claim refers to", + "description": "Available if the relation `item` is expanded.", "$ref": "#/components/schemas/line_item" }, "variant_id": { - "type": "string" + "description": "The ID of the product variant that is claimed.", + "type": "string", + "example": "variant_01G1G5V2MRX2V3PVSR2WXYPFB6" }, "variant": { - "description": "The Product Variant that is claimed.", - "$ref": "#/components/schemas/product_variant" + "description": "A variant object. Available if the relation `variant` is expanded.", + "type": "object" }, "reason": { "description": "The reason for the claim", @@ -2857,14 +3634,16 @@ }, "note": { "description": "An optional note about the claim, for additional information", - "type": "string" + "type": "string", + "example": "I don't like it." }, "quantity": { "description": "The quantity of the item that is being claimed; must be less than or equal to the amount purchased in the original order.", - "type": "integer" + "type": "integer", + "example": 1 }, "tags": { - "description": "User defined tags for easy filtering and grouping.", + "description": "User defined tags for easy filtering and grouping. Available if the relation 'tags' is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/claim_tag" @@ -2872,18 +3651,25 @@ }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -2891,9 +3677,15 @@ "title": "Claim Order", "description": "Claim Orders represent a group of faulty or missing items. Each claim order consists of a subset of items associated with an original order, and can contain additional information about fulfillments and returns.", "x-resourceId": "claim_order", + "required": [ + "type", + "order_id" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The claim's ID", + "example": "claim_01G8ZH853Y6TFXWPG5EYE81X63" }, "type": { "type": "string", @@ -2904,11 +3696,13 @@ }, "payment_status": { "type": "string", + "description": "The status of the claim's payment", "enum": [ "na", "not_refunded", "refunded" - ] + ], + "default": "na" }, "fulfillment_status": { "type": "string", @@ -2922,7 +3716,8 @@ "returned", "canceled", "requires_action" - ] + ], + "default": "not_fulfilled" }, "claim_items": { "description": "The items that have been claimed", @@ -2939,19 +3734,25 @@ } }, "order_id": { - "description": "The id of the order that the claim comes from.", - "type": "string" + "description": "The ID of the order that the claim comes from.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "return_order": { - "description": "Holds information about the return if the claim is to be returned", - "$ref": "#/components/schemas/return" + "description": "A return object. Holds information about the return if the claim is to be returned. Available if the relation 'return_order' is expanded", + "type": "object" }, "shipping_address_id": { - "description": "The id of the address that the new items should be shipped to", - "type": "string" + "description": "The ID of the address that the new items should be shipped to", + "type": "string", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" }, "shipping_address": { - "description": "The address that the new items should be shipped to", + "description": "Available if the relation `shipping_address` is expanded.", "$ref": "#/components/schemas/address" }, "shipping_methods": { @@ -2970,31 +3771,48 @@ }, "refund_amount": { "description": "The amount that will be refunded in conjunction with the claim", - "type": "integer" + "type": "integer", + "example": 1000 }, "canceled_at": { - "description": "The date with timezone at which the Swap was canceled.", + "description": "The date with timezone at which the claim was canceled.", "type": "string", "format": "date-time" }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + }, "no_notification": { "description": "Flag for describing whether or not notifications related to this should be send.", - "type": "boolean" + "type": "boolean", + "example": false }, - "metadata": { - "type": "object" + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of the cart associated with the claim in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } } } }, @@ -3002,33 +3820,41 @@ "title": "Claim Tag", "description": "Claim Tags are user defined tags that can be assigned to claim items for easy filtering and grouping.", "x-resourceId": "claim_tag", + "required": [ + "value" + ], "properties": { "id": { - "description": "The id of the claim tag. Will be prefixed by `ctag_`.", - "type": "string" + "type": "string", + "description": "The claim tag's ID", + "example": "ctag_01G8ZCC5Y63B95V6B5SHBZ91S4" }, "value": { "description": "The value that the claim tag holds", - "type": "string" + "type": "string", + "example": "Damaged" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, - "update_at": { - "description": "The date with timezone at which the resource was last updated.", + "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3036,30 +3862,64 @@ "title": "Country", "description": "Country details", "x-resourceId": "country", + "required": [ + "iso_2", + "iso_3", + "num_code", + "name", + "display_name" + ], "properties": { "id": { - "description": "The database id of the country", - "type": "integer" + "type": "string", + "description": "The country's ID", + "example": 109 }, "iso_2": { - "description": "The 2 character ISO code for the country.", - "type": "string" + "type": "string", + "description": "The 2 character ISO code of the country in lower case", + "example": "it", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements", + "description": "See a list of codes." + } }, "iso_3": { - "description": "The 3 character ISO code for the country.", - "type": "string" + "type": "string", + "description": "The 2 character ISO code of the country in lower case", + "example": "ita", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements", + "description": "See a list of codes." + } }, "num_code": { "description": "The numerical ISO code for the country.", - "type": "string" + "type": "string", + "example": 380, + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_3166-1_numeric#Officially_assigned_code_elements", + "description": "See a list of codes." + } }, "name": { - "description": "The normalized country name; in upper case.", - "type": "string" + "description": "The normalized country name in upper case.", + "type": "string", + "example": "ITALY" }, "display_name": { "description": "The country name appropriate for display.", - "type": "string" + "type": "string", + "example": "Italy" + }, + "region_id": { + "type": "string", + "description": "The region ID this country is associated with.", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" + }, + "region": { + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" } } }, @@ -3067,22 +3927,36 @@ "title": "Currency", "description": "Currency", "x-resourceId": "currency", + "required": [ + "code", + "symbol", + "symbol_native", + "name" + ], "properties": { "code": { "description": "The 3 character ISO code for the currency.", - "type": "string" + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } }, "symbol": { "description": "The symbol used to indicate the currency.", - "type": "string" + "type": "string", + "example": "$" }, "symbol_native": { "description": "The native symbol used to indicate the currency.", - "type": "string" + "type": "string", + "example": "$" }, "name": { "description": "The written name of the currency", - "type": "string" + "type": "string", + "example": "US Dollar" } } }, @@ -3090,49 +3964,60 @@ "title": "Custom Shipping Option", "description": "Custom Shipping Options are 'overriden' Shipping Options. Store managers can attach a Custom Shipping Option to a cart in order to set a custom price for a particular Shipping Option", "x-resourceId": "custom_shipping_option", + "required": [ + "price", + "shipping_option_id" + ], "properties": { "id": { - "description": "The id of the Custom Shipping Option. This value will be prefixed with `cso_`.", - "type": "string" + "type": "string", + "description": "The custom shipping option's ID", + "example": "cso_01G8X99XNB77DMFBJFWX6DN9V9" }, "price": { "description": "The custom price set that will override the shipping option's original price", - "type": "integer" + "type": "integer", + "example": 1000 }, "shipping_option_id": { - "description": "The id of the Shipping Option that the custom shipping option overrides", - "anyOf": [ - { - "$ref": "#/components/schemas/shipping_option" - } - ] + "description": "The ID of the Shipping Option that the custom shipping option overrides", + "type": "string", + "example": "so_01G1G5V27GYX4QXNARRQCW1N8T" + }, + "shipping_option": { + "description": "A shipping option object. Available if the relation `shipping_option` is expanded.", + "type": "object" }, "cart_id": { - "description": "The id of the Cart that the custom shipping option is attached to", - "anyOf": [ - { - "$ref": "#/components/schemas/cart" - } - ] + "description": "The ID of the Cart that the custom shipping option is attached to", + "type": "string", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3140,33 +4025,56 @@ "title": "Customer Group", "description": "Represents a customer group", "x-resourceId": "customer_group", + "required": [ + "name" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The customer group's ID", + "example": "cgrp_01G8ZH853Y6TFXWPG5EYE81X63" }, "name": { - "type": "string" + "type": "string", + "description": "The name of the customer group", + "example": "VIP" }, "customers": { "type": "array", + "description": "The customers that belong to the customer group. Available if the relation `customers` is expanded.", "items": { - "$ref": "#/components/schemas/customer" + "type": "object", + "description": "A customer object." + } + }, + "price_lists": { + "type": "array", + "description": "The price lists that are associated with the customer group. Available if the relation `price_lists` is expanded.", + "items": { + "$ref": "#/components/schemas/price_list" } }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3174,56 +4082,92 @@ "title": "Customer", "description": "Represents a customer", "x-resourceId": "customer", + "required": [ + "email" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The customer's ID", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" }, "email": { - "type": "string" + "type": "string", + "description": "The customer's email", + "format": "email" + }, + "first_name": { + "type": "string", + "description": "The customer's first name", + "example": "Arno" + }, + "last_name": { + "type": "string", + "description": "The customer's first name", + "example": "Willms" }, "billing_address_id": { - "type": "string" + "type": "string", + "description": "The customer's billing address ID", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" }, "billing_address": { - "description": "The Customer's billing address.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "description": "Available if the relation `billing_address` is expanded.", + "$ref": "#/components/schemas/address" }, "shipping_addresses": { + "description": "Available if the relation `shipping_addresses` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/address" } }, - "first_name": { - "type": "string" - }, - "last_name": { - "type": "string" - }, "phone": { - "type": "string" + "type": "string", + "description": "The customer's phone number", + "example": 16128234334802 }, "has_account": { - "type": "boolean" + "type": "boolean", + "description": "Whether the customer has an account or not", + "default": false + }, + "orders": { + "description": "Available if the relation `orders` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "An order object." + } + }, + "groups": { + "description": "The customer groups the customer belongs to. Available if the relation `groups` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/customer_group" + } }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3231,33 +4175,45 @@ "title": "Product Tag Discount Condition", "description": "Associates a discount condition with a customer group", "x-resourceId": "discount_condition_customer_group", + "required": [ + "customer_group_id", + "condition_id" + ], "properties": { "customer_group_id": { - "description": "The id of the Product Tag", - "type": "string" + "description": "The ID of the Product Tag", + "type": "string", + "example": "cgrp_01G8ZH853Y6TFXWPG5EYE81X63" }, "condition_id": { - "description": "The id of the Discount Condition", - "type": "string" + "description": "The ID of the Discount Condition", + "type": "string", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "customer_group": { + "description": "Available if the relation `customer_group` is expanded.", + "$ref": "#/components/schemas/customer_group" + }, + "discount_condition": { + "description": "Available if the relation `discount_condition` is expanded.", + "$ref": "#/components/schemas/discount_condition" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3265,33 +4221,45 @@ "title": "Product Collection Discount Condition", "description": "Associates a discount condition with a product collection", "x-resourceId": "discount_condition_product_collection", + "required": [ + "product_collection_id", + "condition_id" + ], "properties": { "product_collection_id": { - "description": "The id of the Product Collection", - "type": "string" + "description": "The ID of the Product Collection", + "type": "string", + "example": "pcol_01F0YESBFAZ0DV6V831JXWH0BG" }, "condition_id": { - "description": "The id of the Discount Condition", - "type": "string" + "description": "The ID of the Discount Condition", + "type": "string", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "product_collection": { + "description": "Available if the relation `product_collection` is expanded.", + "$ref": "#/components/schemas/product_collection" + }, + "discount_condition": { + "description": "Available if the relation `discount_condition` is expanded.", + "$ref": "#/components/schemas/discount_condition" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3299,33 +4267,45 @@ "title": "Product Tag Discount Condition", "description": "Associates a discount condition with a product tag", "x-resourceId": "discount_condition_product_tag", + "required": [ + "product_tag_id", + "condition_id" + ], "properties": { "product_tag_id": { - "description": "The id of the Product Tag", - "type": "string" + "description": "The ID of the Product Tag", + "type": "string", + "example": "ptag_01F0YESHPZYY3H4SJ3A5918SBN" }, "condition_id": { - "description": "The id of the Discount Condition", - "type": "string" + "description": "The ID of the Discount Condition", + "type": "string", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "product_tag": { + "description": "Available if the relation `product_tag` is expanded.", + "$ref": "#/components/schemas/product_tag" + }, + "discount_condition": { + "description": "Available if the relation `discount_condition` is expanded.", + "$ref": "#/components/schemas/discount_condition" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3333,33 +4313,45 @@ "title": "Product Type Discount Condition", "description": "Associates a discount condition with a product type", "x-resourceId": "discount_condition_product", + "required": [ + "product_type_id", + "condition_id" + ], "properties": { "product_type_id": { - "description": "The id of the Product Type", - "type": "string" + "description": "The ID of the Product Tag", + "type": "string", + "example": "ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A" }, "condition_id": { - "description": "The id of the Discount Condition", - "type": "string" + "description": "The ID of the Discount Condition", + "type": "string", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "product_type": { + "description": "Available if the relation `product_type` is expanded.", + "$ref": "#/components/schemas/product_type" + }, + "discount_condition": { + "description": "Available if the relation `discount_condition` is expanded.", + "$ref": "#/components/schemas/discount_condition" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3367,33 +4359,45 @@ "title": "Product Discount Condition", "description": "Associates a discount condition with a product", "x-resourceId": "discount_condition_product", + "required": [ + "product_id", + "condition_id" + ], "properties": { "product_id": { - "description": "The id of the Product", - "type": "string" + "description": "The ID of the Product Tag", + "type": "string", + "example": "prod_01G1G5V2MBA328390B5AXJ610F" }, "condition_id": { - "description": "The id of the Discount Condition", - "type": "string" + "description": "The ID of the Discount Condition", + "type": "string", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "product": { + "description": "Available if the relation `product` is expanded.", + "$ref": "#/components/schemas/product" + }, + "discount_condition": { + "description": "Available if the relation `discount_condition` is expanded.", + "$ref": "#/components/schemas/discount_condition" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3401,10 +4405,16 @@ "title": "Discount Condition", "description": "Holds rule conditions for when a discount is applicable", "x-resourceId": "discount_condition", + "required": [ + "type", + "operator", + "discount_rule_id" + ], "properties": { "id": { - "description": "The id of the Discount Condition. Will be prefixed by `discon_`.", - "type": "string" + "type": "string", + "description": "The discount condition's ID", + "example": "discon_01G8X9A7ESKAJXG2H0E6F1MW7A" }, "type": { "description": "The type of the Condition", @@ -3417,24 +4427,84 @@ "customer_groups" ] }, - "created_at": { - "description": "The date with timezone at which the resource was created.", + "operator": { + "description": "The operator of the Condition", "type": "string", + "enum": [ + "in", + "not_in" + ] + }, + "discount_rule_id": { + "type": "string", + "description": "The ID of the discount rule associated with the condition", + "example": "dru_01F0YESMVK96HVX7N419E3CJ7C" + }, + "discount_rule": { + "description": "Available if the relation `discount_rule` is expanded.", + "$ref": "#/components/schemas/discount_rule" + }, + "products": { + "description": "products associated with this condition if type = products. Available if the relation `products` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A product object." + } + }, + "product_types": { + "description": "product types associated with this condition if type = product_types. Available if the relation `product_types` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A product type object." + } + }, + "product_tags": { + "description": "product tags associated with this condition if type = product_tags. Available if the relation `product_tags` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A product tag object." + } + }, + "product_collections": { + "description": "product collections associated with this condition if type = product_collections. Available if the relation `product_collections` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A product collection object." + } + }, + "customer_groups": { + "description": "customer groups associated with this condition if type = customer_groups. Available if the relation `customer_groups` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A customer group object." + } + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, - "update_at": { - "description": "The date with timezone at which the resource was last updated.", + "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3442,10 +4512,15 @@ "title": "Discount Rule", "description": "Holds the rules that governs how a Discount is calculated when applied to a Cart.", "x-resourceId": "discount_rule", + "required": [ + "type", + "value" + ], "properties": { "id": { - "description": "The id of the Discount Rule. Will be prefixed by `dru_`.", - "type": "string" + "type": "string", + "description": "The discount rule's ID", + "example": "dru_01F0YESMVK96HVX7N419E3CJ7C" }, "type": { "description": "The type of the Discount, can be `fixed` for discounts that reduce the price by a fixed amount, `percentage` for percentage reductions or `free_shipping` for shipping vouchers.", @@ -3454,15 +4529,18 @@ "fixed", "percentage", "free_shipping" - ] + ], + "example": "percentage" }, "description": { "description": "A short description of the discount", - "type": "string" + "type": "string", + "example": "10 Percent" }, "value": { "description": "The value that the discount represents; this will depend on the type of the discount", - "type": "integer" + "type": "integer", + "example": 10 }, "allocation": { "description": "The scope that the discount should apply to.", @@ -3470,33 +4548,38 @@ "enum": [ "total", "item" - ] + ], + "example": "total" }, "conditions": { - "description": "A set of conditions that can be used to limit when the discount can be used", + "description": "A set of conditions that can be used to limit when the discount can be used. Available if the relation `conditions` is expanded.", "type": "array", "items": { - "$ref": "#/components/schemas/discount_condition" + "type": "object", + "description": "A discount condition object." } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, - "update_at": { - "description": "The date with timezone at which the resource was last updated.", + "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3504,34 +4587,48 @@ "title": "Discount", "description": "Represents a discount that can be applied to a cart for promotional purposes.", "x-resourceId": "discount", + "required": [ + "code", + "is_dynamic" + ], "properties": { "id": { - "description": "The id of the Discount. Will be prefixed by `disc_`.", - "type": "string" + "type": "string", + "description": "The discount's ID", + "example": "disc_01F0YESMW10MGHWJKZSDDMN0VN" }, "code": { "description": "A unique code for the discount - this will be used by the customer to apply the discount", - "type": "string" + "type": "string", + "example": "10DISC" }, "is_dynamic": { "description": "A flag to indicate if multiple instances of the discount can be generated. I.e. for newsletter discounts", - "type": "boolean" + "type": "boolean", + "example": false + }, + "rule_id": { + "type": "string", + "description": "The Discount Rule that governs the behaviour of the Discount", + "example": "dru_01F0YESMVK96HVX7N419E3CJ7C" }, "rule": { - "description": "The Discount Rule that governs the behaviour of the Discount", - "anyOf": [ - { - "$ref": "#/components/schemas/discount_rule" - } - ] + "description": "Available if the relation `rule` is expanded.", + "$ref": "#/components/schemas/discount_rule" }, "is_disabled": { "description": "Whether the Discount has been disabled. Disabled discounts cannot be applied to carts", - "type": "boolean" + "type": "boolean", + "example": false }, "parent_discount_id": { + "type": "string", "description": "The Discount that the discount was created from. This will always be a dynamic discount", - "type": "string" + "example": "disc_01G8ZH853YPY9B94857DY91YGW" + }, + "parent_discount": { + "description": "Available if the relation `parent_discount` is expanded.", + "$ref": "#/components/schemas/discount" }, "starts_at": { "description": "The time at which the discount can be used.", @@ -3543,39 +4640,51 @@ "type": "string", "format": "date-time" }, + "valid_duration": { + "type": "string", + "description": "Duration the discount runs between", + "example": "P3Y6M4DT12H30M5S" + }, "regions": { - "description": "The Regions in which the Discount can be used", + "description": "The Regions in which the Discount can be used. Available if the relation `regions` is expanded.", "type": "array", "items": { - "$ref": "#/components/schemas/region" + "type": "object", + "description": "A region object." } }, "usage_limit": { "description": "The maximum number of times that a discount can be used.", - "type": "integer" + "type": "integer", + "example": 100 }, "usage_count": { "description": "The number of times a discount has been used.", - "type": "integer" + "type": "integer", + "example": 50, + "default": 0 }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3585,66 +4694,86 @@ "x-resourceId": "draft-order", "properties": { "id": { - "type": "string" + "type": "string", + "description": "The draft order's ID", + "example": "dorder_01G8TJFKBG38YYFQ035MSVG03C" }, "status": { "type": "string", + "description": "The status of the draft order", "enum": [ "open", "completed" - ] + ], + "default": "open" }, "display_id": { - "type": "string" + "type": "string", + "description": "The draft order's display ID", + "example": 2 }, "cart_id": { - "type": "string" + "type": "string", + "description": "The ID of the cart associated with the draft order.", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" }, "cart": { - "anyOf": [ - { - "$ref": "#/components/schemas/cart" - } - ] + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "order_id": { - "type": "string" + "type": "string", + "description": "The ID of the order associated with the draft order.", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" }, "order": { - "anyOf": [ - { - "$ref": "#/components/schemas/order" - } - ] + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "canceled_at": { "type": "string", - "format": "date-time" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "update_at": { - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "type": "string", + "description": "The date the draft order was canceled at.", "format": "date-time" }, "completed_at": { "type": "string", + "description": "The date the draft order was completed at.", "format": "date-time" }, "no_notification_order": { - "type": "boolean" - }, - "metadata": { - "type": "object" + "type": "boolean", + "description": "Whether to send the customer notifications regarding order updates.", + "example": false }, "idempotency_key": { - "type": "string" + "type": "string", + "description": "Randomly generated key used to continue the completion of the cart associated with the draft order in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", + "format": "date-time" + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3652,26 +4781,34 @@ "title": "Fulfillment Item", "description": "Correlates a Line Item with a Fulfillment, keeping track of the quantity of the Line Item.", "x-resourceId": "fulfillment_item", + "required": [ + "fulfillment_id", + "item_id", + "quantity" + ], "properties": { "fulfillment_id": { "description": "The id of the Fulfillment that the Fulfillment Item belongs to.", - "type": "string" + "type": "string", + "example": "ful_01G8ZRTMQCA76TXNAT81KPJZRF" }, "item_id": { "description": "The id of the Line Item that the Fulfillment Item references.", - "type": "string" + "type": "string", + "example": "item_01G8ZC9GWT6B2GP5FSXRXNFNGN" + }, + "fulfillment": { + "description": "A fulfillment object. Available if the relation `fulfillment` is expanded.", + "type": "object" }, "item": { - "description": "The Line Item that the Fulfillment Item references.", - "anyOf": [ - { - "$ref": "#/components/schemas/line_item" - } - ] + "description": "Available if the relation `item` is expanded.", + "$ref": "#/components/schemas/line_item" }, "quantity": { "description": "The quantity of the Line Item that is included in the Fulfillment.", - "type": "integer" + "type": "integer", + "example": 1 } } }, @@ -3682,11 +4819,13 @@ "properties": { "id": { "description": "The id of the fulfillment provider as given by the plugin.", - "type": "string" + "type": "string", + "example": "manual" }, "is_installed": { "description": "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`.", - "type": "boolean" + "type": "boolean", + "example": true } } }, @@ -3694,36 +4833,60 @@ "title": "Fulfillment", "description": "Fulfillments are created once store operators can prepare the purchased goods. Fulfillments will eventually be shipped and hold information about how to track shipments. Fulfillments are created through a provider, which is typically an external shipping aggregator, shipping partner og 3PL, most plugins will have asynchronous communications with these providers through webhooks in order to automatically update and synchronize the state of Fulfillments.", "x-resourceId": "fulfillment", + "required": [ + "provider_id" + ], "properties": { "id": { - "description": "The id of the Fulfillment. This value will be prefixed by `ful_`.", - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "ful_01G8ZRTMQCA76TXNAT81KPJZRF" }, "claim_order_id": { "description": "The id of the Claim that the Fulfillment belongs to.", - "type": "string" + "type": "string", + "example": null + }, + "claim_order": { + "description": "A claim order object. Available if the relation `claim_order` is expanded.", + "type": "object" }, "swap_id": { "description": "The id of the Swap that the Fulfillment belongs to.", - "type": "string" + "type": "string", + "example": null + }, + "swap": { + "description": "A swap object. Available if the relation `swap` is expanded.", + "type": "object" }, "order_id": { "description": "The id of the Order that the Fulfillment belongs to.", - "type": "string" + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "provider_id": { "description": "The id of the Fulfillment Provider responsible for handling the fulfillment", - "type": "string" + "type": "string", + "example": "manual" + }, + "provider": { + "description": "Available if the relation `provider` is expanded.", + "$ref": "#/components/schemas/fulfillment_provider" }, "items": { - "description": "The Fulfillment Items in the Fulfillment - these hold information about how many of each Line Item has been fulfilled.", + "description": "The Fulfillment Items in the Fulfillment - these hold information about how many of each Line Item has been fulfilled. Available if the relation `items` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/fulfillment_item" } }, "tracking_links": { - "description": "The Tracking Links that can be used to track the status of the Fulfillment, these will usually be provided by the Fulfillment Provider.", + "description": "The Tracking Links that can be used to track the status of the Fulfillment, these will usually be provided by the Fulfillment Provider. Available if the relation `tracking_links` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/tracking_link" @@ -3737,6 +4900,11 @@ "type": "string" } }, + "data": { + "description": "This contains all the data necessary for the Fulfillment provider to handle the fulfillment.", + "type": "object", + "example": {} + }, "shipped_at": { "description": "The date with timezone at which the Fulfillment was shipped.", "type": "string", @@ -3744,26 +4912,43 @@ }, "no_notification": { "description": "Flag for describing whether or not notifications related to this should be send.", - "type": "boolean" + "type": "boolean", + "example": false }, "canceled_at": { "description": "The date with timezone at which the Fulfillment was canceled.", "type": "string", "format": "date-time" }, - "created_at": { - "description": "The date with timezone at which the resource was created.", + "idempotency_key": { "type": "string", + "description": "Randomly generated key used to continue the completion of the fulfillment in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3771,35 +4956,53 @@ "title": "Gift Card Transaction", "description": "Gift Card Transactions are created once a Customer uses a Gift Card to pay for their Order", "x-resourceId": "gift_card_transaction", + "required": [ + "gift_card_id", + "amount" + ], "properties": { "id": { - "description": "The id of the Gift Card Transaction. This value will be prefixed by `gct_`.", - "type": "string" + "type": "string", + "description": "The gift card transaction's ID", + "example": "gct_01G8X9A7ESKAJXG2H0E6F1MW7A" }, "gift_card_id": { - "description": "The id of the Gift Card that was used in the transaction.", - "type": "string" + "description": "The ID of the Gift Card that was used in the transaction.", + "type": "string", + "example": "gift_01G8XKBPBQY2R7RBET4J7E0XQZ" }, "gift_card": { - "description": "The Gift Card that was used in the transaction.", - "anyOf": [ - { - "$ref": "#/components/schemas/gift_card" - } - ] + "description": "A gift card object. Available if the relation `gift_card` is expanded.", + "type": "object" }, "order_id": { - "description": "The id of the Order that the Gift Card was used to pay for.", - "type": "string" + "description": "The ID of the Order that the Gift Card was used to pay for.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "amount": { "description": "The amount that was used from the Gift Card.", - "type": "integer" + "type": "integer", + "example": 10 }, "created_at": { "description": "The date with timezone at which the resource was created.", "type": "string", "format": "date-time" + }, + "is_taxable": { + "description": "Whether the transaction is taxable or not.", + "type": "boolean", + "example": false + }, + "tax_rate": { + "description": "The tax rate of the transaction", + "type": "number", + "example": 0 } } }, @@ -3807,42 +5010,55 @@ "title": "Gift Card", "description": "Gift Cards are redeemable and represent a value that can be used towards the payment of an Order.", "x-resourceId": "gift_card", + "required": [ + "code", + "value", + "balance", + "region_id" + ], "properties": { "id": { - "description": "The id of the Gift Card. This value will be prefixed by `gift_`.", - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "gift_01G8XKBPBQY2R7RBET4J7E0XQZ" }, "code": { "description": "The unique code that identifies the Gift Card. This is used by the Customer to redeem the value of the Gift Card.", - "type": "string" + "type": "string", + "example": "3RFT-MH2C-Y4YZ-XMN4" }, "value": { "description": "The value that the Gift Card represents.", - "type": "integer" + "type": "integer", + "example": 10 }, "balance": { "description": "The remaining value on the Gift Card.", - "type": "integer" + "type": "integer", + "example": 10 }, "region_id": { + "type": "string", "description": "The id of the Region in which the Gift Card is available.", - "type": "string" + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" }, "region": { - "description": "The Region in which the Gift Card is available.", - "anyOf": [ - { - "$ref": "#/components/schemas/region" - } - ] + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" }, "order_id": { + "type": "string", "description": "The id of the Order that the Gift Card was purchased in.", - "type": "string" + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "is_disabled": { "description": "Whether the Gift Card has been disabled. Disabled Gift Cards cannot be applied to carts.", - "type": "boolean" + "type": "boolean", + "example": false }, "ends_at": { "description": "The time at which the Gift Card can no longer be used.", @@ -3850,23 +5066,93 @@ "format": "date-time" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + } + } + }, + "idempotency_key": { + "title": "Idempotency Key", + "description": "Idempotency Key is used to continue a process in case of any failure that might occur.", + "x-resourceId": "idempotency_key", + "required": [ + "idempotency_key" + ], + "properties": { + "id": { + "type": "string", + "description": "The idempotency key's ID", + "example": "ikey_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "idempotency_key": { + "description": "The unique randomly generated key used to determine the state of a process.", + "type": "string", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "created_at": { + "description": "Date which the idempotency key was locked.", + "type": "string", + "format": "date-time" + }, + "locked_at": { + "description": "Date which the idempotency key was locked.", + "type": "string", + "format": "date-time" + }, + "request_method": { + "description": "The method of the request", + "type": "string", + "example": "POST" + }, + "request_params": { + "type": "object", + "description": "The parameters passed to the request", + "example": { + "id": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + } + }, + "request_path": { + "description": "The request's path", + "type": "string", + "example": "/store/carts/cart_01G8ZH853Y6TFXWPG5EYE81X63/complete" + }, + "response_code": { + "type": "string", + "description": "The response's code.", + "example": 200 + }, + "response_body": { + "type": "object", + "description": "The response's body", + "example": { + "id": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + } + }, + "recovery_point": { + "type": "string", + "description": "Where to continue from.", + "default": "started" } } }, @@ -3874,33 +5160,41 @@ "title": "Image", "description": "Images holds a reference to a URL at which the image file can be found.", "x-resourceId": "image", + "required": [ + "url" + ], "properties": { "id": { - "description": "The id of the Image. This value will be prefixed by `img_`.", - "type": "string" + "type": "string", + "description": "The image's ID", + "example": "img_01G749BFYR6T8JTVW6SGW3K3E6" }, "url": { "description": "The URL at which the image file can be found.", - "type": "string" + "type": "string", + "format": "uri" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, - "update_at": { - "description": "The date with timezone at which the resource was last updated.", + "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3908,45 +5202,175 @@ "title": "Invite", "description": "Represents an invite", "x-resourceId": "invite", + "required": [ + "user_email" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The invite's ID", + "example": "invite_01G8TKE4XYCTHSCK2GDEP47RE1" }, "user_email": { - "type": "string" + "type": "string", + "description": "The email of the user being invited.", + "format": "email" }, "role": { "type": "string", + "description": "The user's role.", "enum": [ "admin", "member", "developer" - ] + ], + "default": "member" }, "accepted": { - "type": "boolean" + "type": "boolean", + "description": "Whether the invite was accepted or not.", + "example": false }, "token": { - "type": "string" + "type": "string", + "description": "The token used to accept the invite." }, "expores_at": { "type": "string", + "description": "The date the invite expires at.", "format": "date-time" }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + } + } + }, + "line_item_adjustment": { + "title": "Line Item Adjustment", + "description": "Represents an Line Item Adjustment", + "x-resourceId": "line_item_adjustment", + "required": [ + "item_id", + "description", + "amount" + ], + "properties": { + "id": { + "type": "string", + "description": "The invite's ID", + "example": "lia_01G8TKE4XYCTHSCK2GDEP47RE1" + }, + "item_id": { + "type": "string", + "description": "The ID of the line item", + "example": "item_01G8ZC9GWT6B2GP5FSXRXNFNGN" + }, + "item": { + "description": "Available if the relation `item` is expanded.", + "$ref": "#/components/schemas/line_item" + }, + "description": { + "type": "string", + "description": "The line item's adjustment description", + "example": "Adjusted item's price." + }, + "discount_id": { + "type": "string", + "description": "The ID of the discount associated with the adjustment", + "example": "disc_01F0YESMW10MGHWJKZSDDMN0VN" + }, + "discount": { + "description": "Available if the relation `discount` is expanded.", + "$ref": "#/components/schemas/discount" + }, + "amount": { + "type": "number", + "description": "The adjustment amount", + "example": 1000 + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + } + } + }, + "line_item_tax_line": { + "title": "Line Item Tax Line", + "description": "Represents an Line Item Tax Line", + "x-resourceId": "line_item_tax_line", + "required": [ + "item_id", + "rate", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The line item tax line's ID", + "example": "litl_01G1G5V2DRX1SK6NQQ8VVX4HQ8" + }, + "item_id": { + "type": "string", + "description": "The ID of the line item", + "example": "item_01G8ZC9GWT6B2GP5FSXRXNFNGN" + }, + "item": { + "description": "Available if the relation `item` is expanded.", + "$ref": "#/components/schemas/line_item" + }, + "code": { + "description": "A code to identify the tax type by", + "type": "string", + "example": "tax01" + }, + "name": { + "description": "A human friendly name for the tax", + "type": "string", + "example": "Tax Example" + }, + "rate": { + "description": "The numeric rate to charge tax by", + "type": "number", + "example": 10 + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -3954,100 +5378,198 @@ "title": "Line Item", "description": "Line Items represent purchasable units that can be added to a Cart for checkout. When Line Items are purchased they will get copied to the resulting order and can eventually be referenced in Fulfillments and Returns. Line Items may also be created when processing Swaps and Claims.", "x-resourceId": "line_item", + "required": [ + "title", + "unit_price", + "quantity" + ], "properties": { "id": { - "description": "The id of the Line Item. This value will be prefixed by `item_`.", - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "item_01G8ZC9GWT6B2GP5FSXRXNFNGN" }, "cart_id": { - "description": "The id of the Cart that the Line Item belongs to.", - "type": "string" + "description": "The ID of the Cart that the Line Item belongs to.", + "type": "string", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "order_id": { - "description": "The id of the Order that the Line Item belongs to.", - "type": "string" + "description": "The ID of the Order that the Line Item belongs to.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "swap_id": { "description": "The id of the Swap that the Line Item belongs to.", - "type": "string" + "type": "string", + "example": null + }, + "swap": { + "description": "A swap object. Available if the relation `swap` is expanded.", + "type": "object" }, "claim_order_id": { "description": "The id of the Claim that the Line Item belongs to.", - "type": "string" + "type": "string", + "example": null + }, + "claim_order": { + "description": "A claim order object. Available if the relation `claim_order` is expanded.", + "type": "object" + }, + "tax_lines": { + "description": "Available if the relation `tax_lines` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/line_item_tax_line" + } + }, + "adjustments": { + "description": "Available if the relation `adjustments` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/line_item_adjustment" + } }, "title": { "description": "The title of the Line Item, this should be easily identifiable by the Customer.", - "type": "string" + "type": "string", + "example": "Medusa Coffee Mug" }, "description": { "description": "A more detailed description of the contents of the Line Item.", - "type": "string" + "type": "string", + "example": "One Size" }, "thumbnail": { "description": "A URL string to a small image of the contents of the Line Item.", - "type": "string" + "type": "string", + "format": "uri", + "example": "https://medusa-public-images.s3.eu-west-1.amazonaws.com/coffee-mug.png" + }, + "is_return": { + "description": "Is the item being returned", + "type": "boolean", + "example": false }, "is_giftcard": { "description": "Flag to indicate if the Line Item is a Gift Card.", - "type": "boolean" + "type": "boolean", + "example": false }, "should_merge": { "description": "Flag to indicate if new Line Items with the same variant should be merged or added as an additional Line Item.", - "type": "boolean" + "type": "boolean", + "example": false }, "allow_discounts": { "description": "Flag to indicate if the Line Item should be included when doing discount calculations.", - "type": "boolean" + "type": "boolean", + "example": false + }, + "has_shipping": { + "description": "Flag to indicate if the Line Item has fulfillment associated with it.", + "type": "boolean", + "example": false }, "unit_price": { "description": "The price of one unit of the content in the Line Item. This should be in the currency defined by the Cart/Order/Swap/Claim that the Line Item belongs to.", - "type": "boolean" + "type": "boolean", + "example": 8000 }, "variant_id": { "description": "The id of the Product Variant contained in the Line Item.", - "type": "string" + "type": "string", + "example": "variant_01G1G5V2MRX2V3PVSR2WXYPFB6" }, "variant": { - "description": "The Product Variant contained in the Line Item.", - "anyOf": [ - { - "$ref": "#/components/schemas/product_variant" - } - ] + "description": "A product variant object. The Product Variant contained in the Line Item. Available if the relation `variant` is expanded.", + "type": "object" }, "quantity": { "description": "The quantity of the content in the Line Item.", - "type": "integer" + "type": "integer", + "example": 1 }, "fulfilled_quantity": { "description": "The quantity of the Line Item that has been fulfilled.", - "type": "integer" + "type": "integer", + "example": 0 }, "returned_quantity": { "description": "The quantity of the Line Item that has been returned.", - "type": "integer" + "type": "integer", + "example": 0 }, "shipped_quantity": { "description": "The quantity of the Line Item that has been shipped.", - "type": "integer" - }, - "created_at": { - "description": "The date with timezone at which the resource was created.", - "type": "string", - "format": "date-time" - }, - "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "integer", + "example": 0 }, "refundable": { "description": "The amount that can be refunded from the given Line Item. Takes taxes and discounts into consideration.", - "type": "integer" + "type": "integer", + "example": 0 + }, + "subtotal": { + "type": "integer", + "description": "The subtotal of the line item", + "example": 8000 + }, + "tax_total": { + "type": "integer", + "description": "The total of tax of the line item", + "example": 0 + }, + "total": { + "type": "integer", + "description": "The total amount of the line item", + "example": 8000 + }, + "original_total": { + "type": "integer", + "description": "The original total amount of the line item", + "example": 8000 + }, + "original_tax_total": { + "type": "integer", + "description": "The original tax total amount of the line item", + "example": 0 + }, + "discount_total": { + "type": "integer", + "description": "The total of discount of the line item", + "example": 0 + }, + "gift_card_total": { + "type": "integer", + "description": "The total of the gift card of the line item", + "example": 0 + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4055,57 +5577,92 @@ "title": "Money Amount", "description": "Money Amounts represents an amount that a given Product Variant can be purcased for. Each Money Amount either has a Currency or Region associated with it to indicate the pricing in a given Currency or, for fully region-based pricing, the given price in a specific Region. If region-based pricing is used the amount will be in the currency defined for the Reigon.", "x-resourceId": "money_amount", + "required": [ + "currency_code", + "amount" + ], "properties": { "id": { - "description": "The id of the Money Amount. This value will be prefixed by `ma_`.", - "type": "string" + "type": "string", + "description": "The money amount's ID", + "example": "ma_01F0YESHRFQNH5S8Q0PK84YYZN" }, "currency_code": { "description": "The 3 character currency code that the Money Amount is given in.", - "type": "string" + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "currency": { + "description": "Available if the relation `currency` is expanded.", + "$ref": "#/components/schemas/currency" }, "amount": { "description": "The amount in the smallest currecny unit (e.g. cents 100 cents to charge $1) that the Product Variant will cost.", - "type": "integer" + "type": "integer", + "example": 100 }, "min_quantity": { "description": "The minimum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities.", - "type": "integer" + "type": "integer", + "example": 1 }, "max_quantity": { "description": "The maximum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities.", - "type": "integer" + "type": "integer", + "example": 1 + }, + "price_list_id": { + "type": "string", + "description": "The ID of the price list associated with the money amount", + "example": "pl_01G8X3CKJXCG5VXVZ87H9KC09W" + }, + "price_list": { + "description": "Available if the relation `price_list` is expanded.", + "$ref": "#/components/schemas/price_list" }, "variant_id": { - "description": "The id of the Product Variant that the Money Amount belongs to.", - "type": "string" + "description": "The id of the Product Variant contained in the Line Item.", + "type": "string", + "example": "variant_01G1G5V2MRX2V3PVSR2WXYPFB6" + }, + "variant": { + "description": "The Product Variant contained in the Line Item. Available if the relation `variant` is expanded.", + "type": "object" }, "region_id": { - "description": "The id of the Region that the Money Amount is defined for.", - "type": "string" + "type": "string", + "description": "The region's ID", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" }, "region": { - "description": "The Region that the Money Amount is defined for.", - "anyOf": [ - { - "$ref": "#/components/schemas/region" - } - ] + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" + }, + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4113,49 +5670,62 @@ "title": "Note", "description": "Notes are elements which we can use in association with different resources to allow users to describe additional information in relation to these.", "x-resourceId": "note", + "required": [ + "value", + "resource_type", + "resource_id" + ], "properties": { "id": { - "description": "The id of the Note. This value will be prefixed by `note_`.", - "type": "string" + "type": "string", + "description": "The note's ID", + "example": "note_01G8TM8ENBMC7R90XRR1G6H26Q" }, "resource_type": { "description": "The type of resource that the Note refers to.", - "type": "string" + "type": "string", + "example": "order" }, "resource_id": { - "description": "The id of the resource that the Note refers to.", - "type": "string" + "description": "The ID of the resource that the Note refers to.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" }, "value": { "description": "The contents of the note.", - "type": "string" + "type": "string", + "example": "This order must be fulfilled on Monday" + }, + "author_id": { + "type": "string", + "description": "The ID of the author (user)", + "example": "usr_01G1G5V26F5TB3GPAPNJ8X1S3V" }, "author": { - "description": "The author of the note.", - "anyOf": [ - { - "$ref": "#/components/schemas/user" - } - ] + "description": "Available if the relation `author` is expanded.", + "$ref": "#/components/schemas/user" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4163,14 +5733,19 @@ "title": "Notification Provider", "description": "Represents a notification provider plugin and holds its installation status.", "x-resourceId": "notification_provider", + "required": [ + "id" + ], "properties": { "id": { "description": "The id of the notification provider as given by the plugin.", - "type": "string" + "type": "string", + "example": "sendgrid" }, "is_installed": { "description": "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`.", - "type": "boolean" + "type": "boolean", + "default": true } } }, @@ -4178,46 +5753,50 @@ "title": "Notification", "description": "Notifications a communications sent via Notification Providers as a reaction to internal events such as `order.placed`. Notifications can be used to show a chronological timeline for communications sent to a Customer regarding an Order, and enables resends.", "x-resourceId": "notification", + "required": [ + "resource_type", + "resource_id", + "to" + ], "properties": { "id": { - "description": "The id of the Notification. This value will be prefixed by `noti_`.", - "type": "string" + "type": "string", + "description": "The notification's ID", + "example": "noti_01G53V9Y6CKMCGBM1P0X7C28RX" }, "event_name": { "description": "The name of the event that the notification was sent for.", - "type": "string" + "type": "string", + "example": "order.placed" }, "resource_type": { "description": "The type of resource that the Notification refers to.", - "type": "string" + "type": "string", + "example": "order" }, "resource_id": { - "description": "The id of the resource that the Notification refers to.", - "type": "string" + "description": "The ID of the resource that the Notification refers to.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" }, "customer_id": { - "description": "The id of the Customer that the Notification was sent to.", - "type": "string" + "description": "The ID of the Customer that the Notification was sent to.", + "type": "string", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" }, "customer": { - "description": "The Customer that the Notification was sent to.", - "anyOf": [ - { - "$ref": "#/components/schemas/customer" - } - ] + "description": "A customer object. Available if the relation `customer` is expanded.", + "type": "object" }, "to": { "description": "The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id", - "type": "string" + "type": "string", + "example": "user@example.com" }, "data": { "description": "The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend.", - "type": "object" - }, - "parent_id": { - "description": "The id of the Notification that was originally sent.", - "type": "string" + "type": "object", + "example": {} }, "resends": { "description": "The resends that have been completed after the original Notification.", @@ -4228,16 +5807,21 @@ }, "provider_id": { "description": "The id of the Notification Provider that handles the Notification.", - "type": "string" + "type": "string", + "example": "sengrid" + }, + "provider": { + "description": "Available if the relation `provider` is expanded.", + "$ref": "#/components/schemas/notification_provider" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" } } @@ -4248,45 +5832,70 @@ "x-resourceId": "notification_resend", "properties": { "id": { - "description": "The id of the Notification. This value will be prefixed by `noti_`.", - "type": "string" + "description": "The notification resend's ID", + "type": "string", + "example": "noti_01F0YET45G9NHP08Z66CE4QKBS" }, "event_name": { "description": "The name of the event that the notification was sent for.", - "type": "string" + "type": "string", + "example": "order.placed" }, "resource_type": { "description": "The type of resource that the Notification refers to.", - "type": "string" + "type": "string", + "example": "order" }, "resource_id": { - "description": "The id of the resource that the Notification refers to.", - "type": "string" + "description": "The ID of the resource that the Notification refers to.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "customer_id": { + "description": "The ID of the Customer that the Notification was sent to.", + "type": "string", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" + }, + "customer": { + "description": "A customer object. Available if the relation `customer` is expanded.", + "type": "object" }, "to": { "description": "The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id", - "type": "string" + "type": "string", + "example": "user@example.com" }, "data": { "description": "The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend.", - "type": "object" + "type": "object", + "example": {} }, "parent_id": { - "description": "The id of the Notification that was originally sent.", - "type": "string" + "description": "The ID of the Notification that was originally sent.", + "type": "string", + "example": "noti_01G53V9Y6CKMCGBM1P0X7C28RX" + }, + "parent_notification": { + "description": "Available if the relation `parent_notification` is expanded.", + "$ref": "#/components/schemas/notification" }, "provider_id": { - "description": "The id of the Notification Provider that handles the Notification.", - "type": "string" + "description": "The ID of the Notification Provider that handles the Notification.", + "type": "string", + "example": "sengrid" + }, + "provider": { + "description": "Available if the relation `provider` is expanded.", + "$ref": "#/components/schemas/notification_provider" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" } } @@ -4295,24 +5904,41 @@ "title": "OAuth", "description": "Represent an OAuth app", "x-resourceId": "OAuth", + "required": [ + "id", + "display_name", + "application_name" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The app's ID", + "example": "example_app" }, "display_name": { - "type": "string" + "type": "string", + "description": "The app's display name", + "example": "Example app" }, "application_name": { - "type": "string" + "type": "string", + "description": "The app's name", + "example": "example" }, "install_url": { - "type": "string" + "type": "string", + "description": "The URL to install the app", + "format": "uri" }, "uninstall_url": { - "type": "integer" + "type": "string", + "description": "The URL to uninstall the app", + "format": "uri" }, "data": { - "type": "object" + "type": "object", + "description": "Any data necessary to the app.", + "example": {} } } }, @@ -4320,22 +5946,33 @@ "title": "Order", "description": "Represents an order", "x-resourceId": "order", + "required": [ + "customer_id", + "email", + "region_id", + "currency_code" + ], "properties": { "id": { - "type": "string" + "type": "string", + "description": "The order's ID", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" }, "status": { "type": "string", + "description": "The order's status", "enum": [ "pending", "completed", "archived", "canceled", "requires_action" - ] + ], + "default": "pending" }, "fulfillment_status": { "type": "string", + "description": "The order's fulfillment status", "enum": [ "not_fulfilled", "partially_fulfilled", @@ -4346,10 +5983,12 @@ "returned", "canceled", "requires_action" - ] + ], + "default": "not_fulfilled" }, "payment_status": { "type": "string", + "description": "The order's payment status", "enum": [ "not_paid", "awaiting", @@ -4358,185 +5997,255 @@ "refuneded", "canceled", "requires_action" - ] + ], + "default": "not_paid" }, "display_id": { - "type": "integer" + "type": "integer", + "description": "The order's display ID", + "example": 2 }, "cart_id": { - "type": "string" + "type": "string", + "description": "The ID of the cart associated with the order", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" + }, + "customer_id": { + "type": "string", + "description": "The ID of the customer associated with the order", + "example": "cus_01G2SG30J8C85S4A5CHM2S1NS2" + }, + "customer": { + "description": "A customer object. Available if the relation `customer` is expanded.", + "type": "object" + }, + "email": { + "description": "The email associated with the order", + "type": "string", + "format": "email" + }, + "billing_address_id": { + "type": "string", + "description": "The ID of the billing address associated with the order", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" + }, + "billing_address": { + "description": "Available if the relation `billing_address` is expanded.", + "$ref": "#/components/schemas/address" + }, + "shipping_address_id": { + "type": "string", + "description": "The ID of the shipping address associated with the order", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" + }, + "shipping_address": { + "description": "Available if the relation `shipping_address` is expanded.", + "$ref": "#/components/schemas/address" + }, + "region_id": { + "type": "string", + "description": "The region's ID", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" + }, + "region": { + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" }, "currency_code": { - "type": "string" + "description": "The 3 character currency code that is used in the order", + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "currency": { + "description": "Available if the relation `currency` is expanded.", + "$ref": "#/components/schemas/currency" }, "tax_rate": { - "type": "number" + "description": "The order's tax rate", + "type": "number", + "example": 0 }, "discounts": { "type": "array", + "description": "The discounts used in the order. Available if the relation `discounts` is expanded.", "items": { - "$ref": "#/components/schemas/discount" + "type": "object", + "description": "A discount object." } }, - "email": { - "type": "string" - }, - "billing_address_id": { - "type": "string" - }, - "billing_address": { - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] - }, - "shipping_address_id": { - "type": "string" - }, - "shipping_address": { - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] - }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/line_item" - } - }, - "region_id": { - "type": "string" - }, - "region": { - "anyOf": [ - { - "$ref": "#/components/schemas/region" - } - ] - }, "gift_cards": { "type": "array", + "description": "The gift cards used in the order. Available if the relation `gift_cards` is expanded.", "items": { - "$ref": "#/components/schemas/gift_card" - } - }, - "customer_id": { - "type": "string" - }, - "customer": { - "anyOf": [ - { - "$ref": "#/components/schemas/customer" - } - ] - }, - "payment_session": { - "anyOf": [ - { - "$ref": "#/components/schemas/payment_session" - } - ] - }, - "payment_sessions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/payment_session" - } - }, - "payments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/payment" + "type": "object", + "description": "A gift card object." } }, "shipping_methods": { "type": "array", + "description": "The shipping methods used in the order. Available if the relation `shipping_methods` is expanded.", "items": { "$ref": "#/components/schemas/shipping_method" } }, + "payments": { + "type": "array", + "description": "The payments used in the order. Available if the relation `payments` is expanded.", + "items": { + "$ref": "#/components/schemas/payment" + } + }, "fulfillments": { "type": "array", + "description": "The fulfillments used in the order. Available if the relation `fulfillments` is expanded.", "items": { "$ref": "#/components/schemas/fulfillment" } }, "returns": { "type": "array", + "description": "The returns associated with the order. Available if the relation `returns` is expanded.", "items": { - "$ref": "#/components/schemas/return" + "type": "object", + "description": "A return object." } }, "claims": { "type": "array", + "description": "The claims associated with the order. Available if the relation `claims` is expanded.", "items": { - "$ref": "#/components/schemas/claim_order" + "type": "object", + "description": "A claim order object." } }, "refunds": { "type": "array", + "description": "The refunds associated with the order. Available if the relation `refunds` is expanded.", "items": { - "$ref": "#/components/schemas/refund" + "type": "object", + "description": "A refund object." } }, "swaps": { "type": "array", + "description": "The swaps associated with the order. Available if the relation `swaps` is expanded.", "items": { - "$ref": "#/components/schemas/refund" + "type": "object", + "description": "A swap object." + } + }, + "draft_order_id": { + "type": "string", + "description": "The ID of the draft order this order is associated with.", + "example": null + }, + "draft_order": { + "description": "A draft order object. Available if the relation `draft_order` is expanded.", + "type": "object" + }, + "items": { + "type": "array", + "description": "The line items that belong to the order. Available if the relation `items` is expanded.", + "items": { + "$ref": "#/components/schemas/line_item" } }, "gift_card_transactions": { "type": "array", + "description": "The gift card transactions used in the order. Available if the relation `gift_card_transactions` is expanded.", "items": { "$ref": "#/components/schemas/gift_card_transaction" } }, "canceled_at": { "type": "string", + "description": "The date the order was canceled on.", "format": "date-time" }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "update_at": { - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "type": "string", - "format": "date-time" - }, - "metadata": { - "type": "object" - }, - "shipping_total": { - "type": "integer" - }, - "discount_total": { - "type": "integer" - }, - "tax_total": { - "type": "integer" - }, - "subtotal": { - "type": "integer" - }, - "refundable_amount": { - "type": "integer" - }, - "gift_card_total": { - "type": "integer" - }, - "paid_total": { - "type": "integer" - }, "no_notification": { "description": "Flag for describing whether or not notifications related to this should be send.", - "type": "boolean" + "type": "boolean", + "example": false + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the processing of the order in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "external_id": { + "description": "The ID of an external order.", + "type": "string", + "example": null + }, + "sales_channel_id": { + "type": "string", + "description": "The ID of the sales channel this order is associated with.", + "example": null + }, + "sales_channel": { + "description": "A sales channel object. Available if the relation `sales_channel` is expanded.", + "type": "object" + }, + "shipping_total": { + "type": "integer", + "description": "The total of shipping", + "example": 1000 + }, + "discount_total": { + "type": "integer", + "description": "The total of discount", + "example": 800 + }, + "tax_total": { + "type": "integer", + "description": "The total of tax", + "example": 0 + }, + "refunded_total": { + "type": "integer", + "description": "The total amount refunded if the order is returned.", + "example": 0 + }, + "total": { + "type": "integer", + "description": "The total amount of the order", + "example": 8200 + }, + "subtotal": { + "type": "integer", + "description": "The subtotal of the order", + "example": 8000 + }, + "paid_total": { + "type": "integer", + "description": "The total amount paid", + "example": 8000 + }, + "refundable_amount": { + "type": "integer", + "description": "The amount that can be refunded", + "example": 8200 + }, + "gift_card_total": { + "type": "integer", + "description": "The total of gift cards", + "example": 0 + }, + "gift_card_tax_total": { + "type": "integer", + "description": "The total of gift cards with taxes", + "example": 0 } } }, @@ -4544,14 +6253,19 @@ "title": "Payment Provider", "description": "Represents a Payment Provider plugin and holds its installation status.", "x-resourceId": "payment_provider", + "required": [ + "id" + ], "properties": { "id": { "description": "The id of the payment provider as given by the plugin.", - "type": "string" + "type": "string", + "example": "manual" }, "is_installed": { "description": "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`.", - "type": "boolean" + "type": "boolean", + "default": true } } }, @@ -4559,22 +6273,35 @@ "title": "Payment Session", "description": "Payment Sessions are created when a Customer initilizes the checkout flow, and can be used to hold the state of a payment flow. Each Payment Session is controlled by a Payment Provider, who is responsible for the communication with external payment services. Authorized Payment Sessions will eventually get promoted to Payments to indicate that they are authorized for capture/refunds/etc.", "x-resourceId": "payment_session", + "required": [ + "cart_id", + "provider_id", + "status" + ], "properties": { "id": { - "description": "The id of the Payment Session. This value will be prefixed with `ps_`.", - "type": "string" + "type": "string", + "description": "The payment session's ID", + "example": "ps_01G901XNSRM2YS3ASN9H5KG3FZ" }, "cart_id": { "description": "The id of the Cart that the Payment Session is created for.", - "type": "string" + "type": "string", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "provider_id": { "description": "The id of the Payment Provider that is responsible for the Payment Session", - "type": "string" + "type": "string", + "example": "manual" }, "is_selected": { "description": "A flag to indicate if the Payment Session has been selected as the method that will be used to complete the purchase.", - "type": "boolean" + "type": "boolean", + "example": true }, "status": { "description": "Indicates the status of the Payment Session. Will default to `pending`, and will eventually become `authorized`. Payment Sessions may have the status of `requires_more` to indicate that further actions are to be completed by the Customer.", @@ -4585,20 +6312,30 @@ "requires_more", "error", "canceled" - ] + ], + "example": "pending" }, "data": { "description": "The data required for the Payment Provider to identify, modify and process the Payment Session. Typically this will be an object that holds an id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state.", - "type": "object" + "type": "object", + "example": {} + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of a cart in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" } } @@ -4607,42 +6344,75 @@ "title": "Payment", "description": "Payments represent an amount authorized with a given payment method, Payments can be captured, canceled or refunded.", "x-resourceId": "payment", + "required": [ + "amount", + "currency_code", + "provider_id" + ], "properties": { "id": { - "description": "The id of the Payment. This value will be prefixed with `pay_`.", - "type": "string" + "type": "string", + "description": "The payment's ID", + "example": "pay_01G2SJNT6DEEWDFNAJ4XWDTHKE" }, "swap_id": { - "description": "The id of the Swap that the Payment is used for.", - "type": "string" + "description": "The ID of the Swap that the Payment is used for.", + "type": "string", + "example": null }, - "order_id": { - "description": "The id of the Order that the Payment is used for.", - "type": "string" + "swap": { + "description": "A swap object. Available if the relation `swap` is expanded.", + "type": "object" }, "cart_id": { "description": "The id of the Cart that the Payment Session is created for.", "type": "string" }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" + }, + "order_id": { + "description": "The ID of the Order that the Payment is used for.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" + }, "amount": { "description": "The amount that the Payment has been authorized for.", - "type": "integer" + "type": "integer", + "example": 100 }, "currency_code": { "description": "The 3 character ISO currency code that the Payment is completed in.", - "type": "string" + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "currency": { + "description": "Available if the relation `currency` is expanded.", + "$ref": "#/components/schemas/currency" }, "amount_refunded": { "description": "The amount of the original Payment amount that has been refunded back to the Customer.", - "type": "integer" + "type": "integer", + "example": 0 }, "provider_id": { "description": "The id of the Payment Provider that is responsible for the Payment", - "type": "string" + "type": "string", + "example": "manual" }, "data": { "description": "The data required for the Payment Provider to identify, modify and process the Payment. Typically this will be an object that holds an id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state.", - "type": "object" + "type": "object", + "example": {} }, "captured_at": { "description": "The date with timezone at which the Payment was captured.", @@ -4654,19 +6424,30 @@ "type": "string", "format": "date-time" }, - "created_at": { - "description": "The date with timezone at which the resource was created.", + "idempotency_key": { "type": "string", + "description": "Randomly generated key used to continue the completion of a payment in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4674,10 +6455,25 @@ "title": "Price List", "description": "Price Lists represents a set of prices that overrides the default price for one or more product variants.", "x-resourceId": "price_list", + "required": [ + "name", + "description" + ], "properties": { "id": { - "description": "The id of the Price List. This value will be prefixed by `pl_`.", - "type": "string" + "type": "string", + "description": "The price list's ID", + "example": "pl_01G8X3CKJXCG5VXVZ87H9KC09W" + }, + "name": { + "type": "string", + "description": "The price list's name", + "example": "VIP Prices" + }, + "description": { + "type": "string", + "description": "The price list's description", + "example": "Prices for VIP customers" }, "type": { "description": "The type of Price List. This can be one of either `sale` or `override`.", @@ -4685,7 +6481,17 @@ "enum": [ "sale", "override" - ] + ], + "default": "sale" + }, + "status": { + "description": "The status of the Price List", + "type": "string", + "enum": [ + "active", + "draft" + ], + "default": "draft" }, "starts_at": { "description": "The date with timezone that the Price List starts being valid.", @@ -4698,25 +6504,33 @@ "format": "date-time" }, "customer_groups": { - "description": "The Customer Groups that the Price List applies to.", + "description": "The Customer Groups that the Price List applies to. Available if the relation `customer_groups` is expanded.", "type": "array", "items": { - "$ref": "#/components/schemas/customer_group" + "type": "object", + "description": "A customer group object." + } + }, + "prices": { + "description": "The Money Amounts that are associated with the Price List. Available if the relation `prices` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/money_amount" } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" } } @@ -4725,44 +6539,54 @@ "title": "Product Collection", "description": "Product Collections represents a group of Products that are related.", "x-resourceId": "product_collection", + "required": [ + "title" + ], "properties": { "id": { - "description": "The id of the Product Collection. This value will be prefixed with `pcol_`.", - "type": "string" + "type": "string", + "description": "The product collection's ID", + "example": "pcol_01F0YESBFAZ0DV6V831JXWH0BG" }, "title": { "description": "The title that the Product Collection is identified by.", - "type": "string" + "type": "string", + "example": "Summer Collection" }, "handle": { "description": "A unique string that identifies the Product Collection - can for example be used in slug structures.", - "type": "string" + "type": "string", + "example": "summer-collection" }, "products": { - "description": "The Products contained in the Product Collection.", + "description": "The Products contained in the Product Collection. Available if the relation `products` is expanded.", "type": "array", "items": { - "$ref": "#/components/schemas/product" + "type": "object", + "description": "A product collection object." } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4770,41 +6594,61 @@ "title": "Product Option Value", "description": "A value given to a Product Variant's option set. Product Variant have a Product Option Value for each of the Product Options defined on the Product.", "x-resourceId": "product_option_value", + "required": [ + "value", + "option_id", + "variant_id" + ], "properties": { "id": { - "description": "The id of the Product Option Value. This value will be prefixed with `optval_`.", - "type": "string" + "type": "string", + "description": "The product option value's ID", + "example": "optval_01F0YESHR7S6ECD03RF6W12DSJ" }, "value": { "description": "The value that the Product Variant has defined for the specific Product Option (e.g. if the Product Option is \"Size\" this value could be \"Small\", \"Medium\" or \"Large\").", - "type": "string" + "type": "string", + "example": "large" }, "option_id": { - "description": "The id of the Product Option that the Product Option Value is defined for.", - "type": "string" + "description": "The ID of the Product Option that the Product Option Value is defined for.", + "type": "string", + "example": "opt_01F0YESHQBZVKCEXJ24BS6PCX3" + }, + "option": { + "description": "Available if the relation `option` is expanded.", + "$ref": "#/components/schemas/product_option" }, "variant_id": { - "description": "The id of the Product Variant that the Product Option Value is defined for.", - "type": "string" + "description": "The ID of the Product Variant that the Product Option Value is defined for.", + "type": "string", + "example": "variant_01G1G5V2MRX2V3PVSR2WXYPFB6" + }, + "variant": { + "description": "Available if the relation `variant` is expanded.", + "$ref": "#/components/schemas/product_variant" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4812,44 +6656,58 @@ "title": "Product Option", "description": "Product Options define properties that may vary between different variants of a Product. Common Product Options are \"Size\" and \"Color\", but Medusa doesn't limit what Product Options that can be defined.", "x-resourceId": "product_option", + "required": [ + "title", + "product_id" + ], "properties": { "id": { - "description": "The id of the Product Option. This value will be prefixed with `opt_`.", - "type": "string" + "type": "string", + "description": "The product option's ID", + "example": "opt_01F0YESHQBZVKCEXJ24BS6PCX3" }, "title": { "description": "The title that the Product Option is defined by (e.g. \"Size\").", - "type": "string" + "type": "string", + "example": "Size" }, "values": { - "description": "The Product Option Values that are defined for the Product Option.", + "description": "The Product Option Values that are defined for the Product Option. Available if the relation `values` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/product_option_value" } }, "product_id": { - "description": "The id of the Product that the Product Option is defined for.", - "type": "string" + "description": "The ID of the Product that the Product Option is defined for.", + "type": "string", + "example": "prod_01G1G5V2MBA328390B5AXJ610F" + }, + "product": { + "description": "A product object. Available if the relation `product` is expanded.", + "type": "object" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4857,33 +6715,41 @@ "title": "Product Tag", "description": "Product Tags can be added to Products for easy filtering and grouping.", "x-resourceId": "product_tag", + "required": [ + "value" + ], "properties": { "id": { - "description": "The id of the Product Tag. This value will be prefixed with `ptag_`.", - "type": "string" + "type": "string", + "description": "The product tag's ID", + "example": "ptag_01G8K2MTMG9168F2B70S1TAVK3" }, "value": { - "description": "The value that the Product Tag represents (e.g. \"Pants\").", - "type": "string" + "description": "The value that the Product Tag represents", + "type": "string", + "example": "Pants" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4891,33 +6757,45 @@ "title": "Product Tax Rate", "description": "Associates a tax rate with a product to indicate that the product is taxed in a certain way", "x-resourceId": "product_tax_rate", + "required": [ + "product_id", + "rate_id" + ], "properties": { "product_id": { - "description": "The id of the Product", - "type": "string" + "description": "The ID of the Product", + "type": "string", + "example": "prod_01G1G5V2MBA328390B5AXJ610F" + }, + "product": { + "description": "Available if the relation `product` is expanded.", + "$ref": "#/components/schemas/product" }, "rate_id": { - "description": "The id of the Tax Rate", - "type": "string" + "description": "The ID of the Tax Rate", + "type": "string", + "example": "txr_01G8XDBAWKBHHJRKH0AV02KXBR" + }, + "tax_rate": { + "description": "Available if the relation `tax_rate` is expanded.", + "$ref": "#/components/schemas/tax_rate" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4925,33 +6803,45 @@ "title": "Product Type Tax Rate", "description": "Associates a tax rate with a product type to indicate that the product type is taxed in a certain way", "x-resourceId": "product_type_tax_rate", + "required": [ + "product_type_id", + "rate_id" + ], "properties": { "product_type_id": { - "description": "The id of the Product type", - "type": "string" + "description": "The ID of the Product type", + "type": "string", + "example": "ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "product_type": { + "description": "Available if the relation `product_type` is expanded.", + "$ref": "#/components/schemas/product_type" }, "rate_id": { "description": "The id of the Tax Rate", - "type": "string" + "type": "string", + "example": "txr_01G8XDBAWKBHHJRKH0AV02KXBR" + }, + "tax_rate": { + "description": "Available if the relation `tax_rate` is expanded.", + "$ref": "#/components/schemas/tax_rate" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4959,33 +6849,41 @@ "title": "Product Type", "description": "Product Type can be added to Products for filtering and reporting purposes.", "x-resourceId": "product_type", + "required": [ + "value" + ], "properties": { "id": { - "description": "The id of the Product Type. This value will be prefixed with `ptyp_`.", - "type": "string" + "type": "string", + "description": "The product type's ID", + "example": "ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A" }, "value": { - "description": "The value that the Product Type represents (e.g. \"Clothing\").", - "type": "string" + "description": "The value that the Product Type represents.", + "type": "string", + "example": "Clothing" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -4993,21 +6891,33 @@ "title": "Product Variant", "description": "Product Variants represent a Product with a specific set of Product Option configurations. The maximum number of Product Variants that a Product can have is given by the number of available Product Option combinations.", "x-resourceId": "product_variant", + "required": [ + "title", + "product_id", + "inventory_quantity" + ], "properties": { "id": { - "description": "The id of the Product Variant. This value will be prefixed with `variant_`.", - "type": "string" + "type": "string", + "description": "The product variant's ID", + "example": "variant_01G1G5V2MRX2V3PVSR2WXYPFB6" }, "title": { "description": "A title that can be displayed for easy identification of the Product Variant.", - "type": "string" + "type": "string", + "example": "Small" }, "product_id": { - "description": "The id of the Product that the Product Variant belongs to.", - "type": "string" + "description": "The ID of the Product that the Product Variant belongs to.", + "type": "string", + "example": "prod_01G1G5V2MBA328390B5AXJ610F" + }, + "product": { + "description": "A product object. Available if the relation `product` is expanded.", + "type": "object" }, "prices": { - "description": "The Money Amounts defined for the Product Variant. Each Money Amount represents a price in a given currency or a price in a specific Region.", + "description": "The Money Amounts defined for the Product Variant. Each Money Amount represents a price in a given currency or a price in a specific Region. Available if the relation `prices` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/money_amount" @@ -5015,89 +6925,112 @@ }, "sku": { "description": "The unique stock keeping unit used to identify the Product Variant. This will usually be a unqiue identifer for the item that is to be shipped, and can be referenced across multiple systems.", - "type": "string" + "type": "string", + "example": "shirt-123" }, "barcode": { "description": "A generic field for a GTIN number that can be used to identify the Product Variant.", - "type": "string" + "type": "string", + "example": null }, "ean": { "description": "An EAN barcode number that can be used to identify the Product Variant.", - "type": "string" + "type": "string", + "example": null }, "upc": { "description": "A UPC barcode number that can be used to identify the Product Variant.", - "type": "string" + "type": "string", + "example": null + }, + "variant_rank": { + "description": "The ranking of this variant", + "type": "number", + "default": 0 }, "inventory_quantity": { "description": "The current quantity of the item that is stocked.", - "type": "integer" + "type": "integer", + "example": 100 }, "allow_backorder": { "description": "Whether the Product Variant should be purchasable when `inventory_quantity` is 0.", - "type": "boolean" + "type": "boolean", + "default": false }, "manage_inventory": { "description": "Whether Medusa should manage inventory for the Product Variant.", - "type": "boolean" + "type": "boolean", + "default": true }, "hs_code": { "description": "The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" + "type": "string", + "example": null }, "origin_country": { "description": "The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" + "type": "string", + "example": null }, "mid_code": { "description": "The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" + "type": "string", + "example": null }, "material": { "description": "The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" + "type": "string", + "example": null }, "weight": { "description": "The weight of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "height": { "description": "The height of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "width": { "description": "The width of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "length": { "description": "The length of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "options": { - "description": "The Product Option Values specified for the Product Variant.", + "description": "The Product Option Values specified for the Product Variant. Available if the relation `options` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/product_option_value" } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5105,14 +7038,20 @@ "title": "Product", "description": "Products are a grouping of Product Variants that have common properties such as images and descriptions. Products can have multiple options which define the properties that Product Variants differ by.", "x-resourceId": "product", + "required": [ + "title", + "profile_id" + ], "properties": { "id": { - "description": "The id of the Product. This value will be prefixed with `prod_`.", - "type": "string" + "type": "string", + "description": "The product's ID", + "example": "prod_01G1G5V2MBA328390B5AXJ610F" }, "title": { "description": "A title that can be displayed for easy identification of the Product.", - "type": "string" + "type": "string", + "example": "Medusa Coffee Mug" }, "subtitle": { "description": "An optional subtitle that can be used to further specify the Product.", @@ -5120,22 +7059,32 @@ }, "description": { "description": "A short description of the Product.", - "type": "string" + "type": "string", + "example": "Every programmer's best friend." }, "handle": { "description": "A unique identifier for the Product (e.g. for slug structure).", - "type": "string" + "type": "string", + "example": "coffee-mug" }, "is_giftcard": { "description": "Whether the Product represents a Gift Card. Products that represent Gift Cards will automatically generate a redeemable Gift Card code once they are purchased.", - "type": "boolean" + "type": "boolean", + "default": false }, - "discountable": { - "description": "Whether the Product can be discounted. Discounts will not apply to Line Items of this Product when this flag is set to `false`.", - "type": "boolean" + "status": { + "description": "The status of the product", + "type": "string", + "enum": [ + "draft", + "proposed", + "published", + "rejected" + ], + "default": "draft" }, "images": { - "description": "Images of the Product", + "description": "Images of the Product. Available if the relation `images` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/image" @@ -5143,99 +7092,136 @@ }, "thumbnail": { "description": "A URL to an image file that can be used to identify the Product.", - "type": "string" + "type": "string", + "format": "uri" }, "options": { - "description": "The Product Options that are defined for the Product. Product Variants of the Product will have a unique combination of Product Option Values.", + "description": "The Product Options that are defined for the Product. Product Variants of the Product will have a unique combination of Product Option Values. Available if the relation `options` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/product_option" } }, "variants": { - "description": "The Product Variants that belong to the Product. Each will have a unique combination of Product Option Values.", + "description": "The Product Variants that belong to the Product. Each will have a unique combination of Product Option Values. Available if the relation `variants` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/product_variant" } }, "profile_id": { - "description": "The id of the Shipping Profile that the Product belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products.", - "type": "string" + "description": "The ID of the Shipping Profile that the Product belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products.", + "type": "string", + "example": "sp_01G1G5V239ENSZ5MV4JAR737BM" }, - "hs_code": { - "description": "The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" - }, - "origin_country": { - "description": "The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" - }, - "mid_code": { - "description": "The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" - }, - "material": { - "description": "The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers.", - "type": "string" + "profile": { + "description": "Available if the relation `profile` is expanded.", + "$ref": "#/components/schemas/shipping_profile" }, "weight": { "description": "The weight of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "height": { "description": "The height of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "width": { "description": "The width of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, "length": { "description": "The length of the Product Variant. May be used in shipping rate calculations.", - "type": "string" + "type": "number", + "example": null }, - "type": { - "description": "The Product Type of the Product (e.g. \"Clothing\")", - "anyOf": [ - { - "$ref": "#/components/schemas/product_type" - } - ] + "hs_code": { + "description": "The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", + "type": "string", + "example": null + }, + "origin_country": { + "description": "The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers.", + "type": "string", + "example": null + }, + "mid_code": { + "description": "The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers.", + "type": "string", + "example": null + }, + "material": { + "description": "The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers.", + "type": "string", + "example": null + }, + "collection_id": { + "type": "string", + "description": "The Product Collection that the Product belongs to", + "example": "pcol_01F0YESBFAZ0DV6V831JXWH0BG" }, "collection": { - "description": "The Product Collection that the Product belongs to (e.g. \"SS20\")", - "anyOf": [ - { - "$ref": "#/components/schemas/product_collection" - } - ] + "description": "A product collection object. Available if the relation `collection` is expanded.", + "type": "object" + }, + "type_id": { + "type": "string", + "description": "The Product type that the Product belongs to", + "example": "ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "type": { + "description": "Available if the relation `type` is expanded.", + "$ref": "#/components/schemas/product_type" }, "tags": { - "description": "The Product Tags assigned to the Product.", + "description": "The Product Tags assigned to the Product. Available if the relation `tags` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/product_tag" } }, - "created_at": { - "description": "The date with timezone at which the resource was created.", + "discountable": { + "description": "Whether the Product can be discounted. Discounts will not apply to Line Items of this Product when this flag is set to `false`.", + "type": "boolean", + "default": true + }, + "external_id": { + "description": "The external ID of the product", "type": "string", + "example": null + }, + "sales_channels": { + "description": "The sales channels the product is associated with. Available if the relation `sales_channels` is expanded.", + "type": "array", + "items": { + "type": "object", + "description": "A sales channel object." + } + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5243,22 +7229,30 @@ "title": "Refund", "description": "Refund represent an amount of money transfered back to the Customer for a given reason. Refunds may occur in relation to Returns, Swaps and Claims, but can also be initiated by a store operator.", "x-resourceId": "refund", + "required": [ + "order_id", + "amount" + ], "properties": { "id": { - "description": "The id of the Refund. This value will be prefixed with `ref_`.", - "type": "string" + "type": "string", + "description": "The refund's ID", + "example": "ref_01G1G5V27GYX4QXNARRQCW1N8T" }, "order_id": { "description": "The id of the Order that the Refund is related to.", - "type": "string" + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" }, "amount": { "description": "The amount that has be refunded to the Customer.", - "type": "integer" + "type": "integer", + "example": 1000 }, "note": { "description": "An optional note explaining why the amount was refunded.", - "type": "string" + "type": "string", + "example": "I didn't like it" }, "reason": { "description": "The reason given for the Refund, will automatically be set when processed as part of a Swap, Claim or Return.", @@ -5269,21 +7263,38 @@ "swap", "claim", "other" - ] + ], + "example": "return" + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of the refund in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5291,66 +7302,113 @@ "title": "Region", "description": "Regions hold settings for how Customers in a given geographical location shop. The is, for example, where currencies and tax rates are defined. A Region can consist of multiple countries to accomodate common shopping settings across countries.", "x-resourceId": "region", + "required": [ + "name", + "currency_code", + "tax_rate" + ], "properties": { "id": { - "description": "The id of the Region. This value will be prefixed with `reg_`.", - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" }, "name": { "description": "The name of the region as displayed to the customer. If the Region only has one country it is recommended to write the country name.", - "type": "string" + "type": "string", + "example": "EU" }, "currency_code": { - "description": "The 3 character ISO currency code that Customers will shop in in the Region.", - "type": "string" + "description": "The 3 character currency code that the Region uses.", + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "currency": { + "description": "Available if the relation `currency` is expanded.", + "$ref": "#/components/schemas/currency" }, "tax_rate": { "description": "The tax rate that should be charged on purchases in the Region.", - "type": "number" + "type": "number", + "example": 0 + }, + "tax_rates": { + "description": "The tax rates that are included in the Region. Available if the relation `tax_rates` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/tax_rate" + } }, "tax_code": { "description": "The tax code used on purchases in the Region. This may be used by other systems for accounting purposes.", - "type": "string" + "type": "string", + "example": null + }, + "gift_cards_taxable": { + "description": "Whether the gift cards are taxable or not in this region.", + "type": "boolean", + "default": true + }, + "automatic_taxes": { + "description": "Whether taxes should be automated in this region.", + "type": "boolean", + "default": true }, "countries": { - "description": "The countries that are included in the Region.", + "description": "The countries that are included in the Region. Available if the relation `countries` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/country" } }, + "tax_provider_id": { + "type": "string", + "description": "The ID of the tax provider used in this region", + "example": null + }, + "tax_provider": { + "description": "Available if the relation `tax_provider` is expanded.", + "$ref": "#/components/schemas/tax_provider" + }, "payment_providers": { - "description": "The Payment Providers that can be used to process Payments in the Region.", + "description": "The Payment Providers that can be used to process Payments in the Region. Available if the relation `payment_providers` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/payment_provider" } }, "fulfillment_providers": { - "description": "The Fulfillment Providers that can be used to fulfill orders in the Region.", + "description": "The Fulfillment Providers that can be used to fulfill orders in the Region. Available if the relation `payment_providers` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/fulfillment_provider" } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5358,54 +7416,69 @@ "title": "Return Item", "description": "Correlates a Line Item with a Return, keeping track of the quantity of the Line Item that will be returned.", "x-resourceId": "return_item", + "required": [ + "return_id", + "item_id" + ], "properties": { "return_id": { "description": "The id of the Return that the Return Item belongs to.", - "type": "string" + "type": "string", + "example": "ret_01F0YET7XPCMF8RZ0Y151NZV2V" + }, + "return_order": { + "description": "Available if the relation `return_order` is expanded.", + "$ref": "#/components/schemas/return" }, "item_id": { "description": "The id of the Line Item that the Return Item references.", - "type": "string" + "type": "string", + "example": "item_01G8ZC9GWT6B2GP5FSXRXNFNGN" }, "item": { - "description": "The Line Item that the Return Item references.", - "anyOf": [ - { - "$ref": "#/components/schemas/line_item" - } - ] + "description": "Available if the relation `item` is expanded.", + "$ref": "#/components/schemas/line_item" }, "quantity": { "description": "The quantity of the Line Item that is included in the Return.", - "type": "integer" + "type": "integer", + "example": 1 }, "is_requested": { "description": "Whether the Return Item was requested initially or received unexpectedly in the warehouse.", - "type": "boolean" + "type": "boolean", + "default": true }, "requested_quantity": { "description": "The quantity that was originally requested to be returned.", - "type": "integer" + "type": "integer", + "example": 1 }, "recieved_quantity": { "description": "The quantity that was received in the warehouse.", - "type": "integer" + "type": "integer", + "example": 1 + }, + "reason_id": { + "description": "The ID of the reason for returning the item.", + "type": "string", + "example": "rr_01G8X82GCCV2KSQHDBHSSAH5TQ" }, "reason": { - "description": "The reason for returning the item.", - "anyOf": [ - { - "$ref": "#/components/schemas/return_reason" - } - ] + "description": "Available if the relation `reason` is expanded.", + "$ref": "#/components/schemas/return_reason" }, "note": { "description": "An optional note with additional details about the Return.", - "type": "string" + "type": "string", + "example": "I didn't like it." }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5413,41 +7486,65 @@ "title": "Return Reason", "description": "A Reason for why a given product is returned. A Return Reason can be used on Return Items in order to indicate why a Line Item was returned.", "x-resourceId": "return_reason", + "required": [ + "value", + "label" + ], "properties": { "id": { - "description": "The id of the Return Reason will start with `rr_`.", - "type": "string" + "type": "string", + "description": "The cart's ID", + "example": "rr_01G8X82GCCV2KSQHDBHSSAH5TQ" }, "description": { "description": "A description of the Reason.", - "type": "string" + "type": "string", + "example": "Items that are damaged" }, "label": { "description": "A text that can be displayed to the Customer as a reason.", - "type": "string" + "type": "string", + "example": "Damaged goods" }, "value": { "description": "The value to identify the reason by.", - "type": "string" + "type": "string", + "example": "damaged" + }, + "parent_return_reason_id": { + "type": "string", + "description": "The ID of the parent reason.", + "example": null + }, + "parent_return_reason": { + "description": "Available if the relation `parent_return_reason` is expanded.", + "$ref": "#/components/schemas/return_reason" + }, + "return_reason_children": { + "description": "Available if the relation `return_reason_children` is expanded.", + "$ref": "#/components/schemas/return_reason" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5455,10 +7552,14 @@ "title": "Return", "description": "Return orders hold information about Line Items that a Customer wishes to send back, along with how the items will be returned. Returns can be used as part of a Swap.", "x-resourceId": "return", + "required": [ + "refund_amount" + ], "properties": { "id": { - "description": "The id of the Return. This value will be prefixed with `ret_`.", - "type": "string" + "type": "string", + "description": "The return's ID", + "example": "ret_01F0YET7XPCMF8RZ0Y151NZV2V" }, "status": { "description": "Status of the Return.", @@ -5466,39 +7567,74 @@ "enum": [ "requested", "received", - "requires_action" - ] + "requires_action", + "canceled" + ], + "default": "requested" }, "items": { - "description": "The Return Items that will be shipped back to the warehouse. type: array items: $ref: " + "description": "The Return Items that will be shipped back to the warehouse. Available if the relation `items` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/return_item" + } }, "swap_id": { - "description": "The id of the Swap that the Return is a part of.", - "type": "string" + "description": "The ID of the Swap that the Return is a part of.", + "type": "string", + "example": null + }, + "swap": { + "description": "A swap object. Available if the relation `swap` is expanded.", + "type": "object" }, "order_id": { - "description": "The id of the Order that the Return is made from.", - "type": "string" + "description": "The ID of the Order that the Return is made from.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "claim_order_id": { - "description": "The id of the Claim that the Return is a part of.", - "type": "string" + "description": "The ID of the Claim that the Return is a part of.", + "type": "string", + "example": null + }, + "claim_order": { + "description": "A claim order object. Available if the relation `claim_order` is expanded.", + "type": "object" }, "shipping_method": { - "description": "The Shipping Method that will be used to send the Return back. Can be null if the Customer facilitates the return shipment themselves.", - "anyOf": [ - { - "$ref": "#/components/schemas/shipping_method" - } - ] + "description": "The Shipping Method that will be used to send the Return back. Can be null if the Customer facilitates the return shipment themselves. Available if the relation `shipping_method` is expanded.", + "type": "array", + "items": { + "$ref": "#/components/schemas/shipping_method" + } }, "shipping_data": { "description": "Data about the return shipment as provided by the Fulfilment Provider that handles the return shipment.", - "type": "object" + "type": "object", + "example": {} }, "refund_amount": { "description": "The amount that should be refunded as a result of the return.", - "type": "integer" + "type": "integer", + "example": 1000 + }, + "no_notification": { + "description": "When set to true, no notification will be sent related to this return.", + "type": "boolean", + "example": false + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of the return in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } }, "received_at": { "description": "The date with timezone at which the return was received.", @@ -5506,22 +7642,124 @@ "format": "date-time" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, - "no_notification": { - "description": "When set to true, no notification will be sent related to this return.", - "type": "boolean" + "metadata": { + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + } + } + }, + "sales_channel": { + "title": "Sales Channel", + "description": "A Sales Channel", + "x-resourceId": "sales_channel", + "required": [ + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The sales channel's ID", + "example": "sc_01G8X9A7ESKAJXG2H0E6F1MW7A" + }, + "name": { + "description": "The name of the sales channel.", + "type": "string", + "example": "Market" + }, + "description": { + "description": "The description of the sales channel.", + "type": "string", + "example": "Multi-vendor market" + }, + "is_disabled": { + "description": "Specify if the sales channel is enabled or disabled.", + "type": "boolean", + "default": false + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", + "format": "date-time" + } + } + }, + "sales_channel_tax_line": { + "title": "Sales Channel", + "description": "A Sales Channel", + "x-resourceId": "sales_channel_tax_line", + "required": [ + "shipping_method_id", + "rate", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The line item tax line's ID", + "example": "smtl_01G1G5V2DRX1SK6NQQ8VVX4HQ8" + }, + "shipping_method_id": { + "type": "string", + "description": "The ID of the line item", + "example": "sm_01F0YET7DR2E7CYVSDHM593QG2" + }, + "shipping_method": { + "description": "Available if the relation `shipping_method` is expanded.", + "$ref": "#/components/schemas/shipping_method" + }, + "code": { + "description": "A code to identify the tax type by", + "type": "string", + "example": "tax01" + }, + "name": { + "description": "A human friendly name for the tax", + "type": "string", + "example": "Tax Example" + }, + "rate": { + "description": "The numeric rate to charge tax by", + "type": "number", + "example": 10 + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5529,50 +7767,86 @@ "title": "Shipping Method", "description": "Shipping Methods represent a way in which an Order or Return can be shipped. Shipping Methods are built from a Shipping Option, but may contain additional details, that can be necessary for the Fulfillment Provider to handle the shipment.", "x-resourceId": "shipping_method", + "required": [ + "shipping_option_id", + "price" + ], "properties": { "id": { - "description": "The id of the Shipping Method. This value will be prefixed with `sm_`.", - "type": "string" + "type": "string", + "description": "The shipping method's ID", + "example": "sm_01F0YET7DR2E7CYVSDHM593QG2" }, "shipping_option_id": { "description": "The id of the Shipping Option that the Shipping Method is built from.", - "type": "string" + "type": "string", + "example": "so_01G1G5V27GYX4QXNARRQCW1N8T" }, "shipping_option": { - "description": "The Shipping Option that the Shipping Method is built from.", - "anyOf": [ - { - "$ref": "#/components/schemas/shipping_option" - } - ] + "description": "Available if the relation `shipping_option` is expanded.", + "$ref": "#/components/schemas/shipping_option" }, "order_id": { "description": "The id of the Order that the Shipping Method is used on.", - "type": "string" + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "return_id": { "description": "The id of the Return that the Shipping Method is used on.", - "type": "string" + "type": "string", + "example": null + }, + "return_order": { + "description": "A return object. Available if the relation `return_order` is expanded.", + "type": "object" }, "swap_id": { "description": "The id of the Swap that the Shipping Method is used on.", - "type": "string" + "type": "string", + "example": null + }, + "swap": { + "description": "A swap object. Available if the relation `swap` is expanded.", + "type": "object" }, "cart_id": { "description": "The id of the Cart that the Shipping Method is used on.", - "type": "string" + "type": "string", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "claim_order_id": { "description": "The id of the Claim that the Shipping Method is used on.", - "type": "string" + "type": "string", + "example": null + }, + "claim_order": { + "description": "A claim order object. Available if the relation `claim_order` is expanded.", + "type": "object" + }, + "tax_lines": { + "type": "array", + "description": "Available if the relation `tax_lines` is expanded.", + "items": { + "$ref": "#/components/schemas/tax_line" + } }, "price": { "description": "The amount to charge for the Shipping Method. The currency of the price is defined by the Region that the Order that the Shipping Method belongs to is a part of.", - "type": "integer" + "type": "integer", + "example": 200 }, "data": { "description": "Additional data that the Fulfillment Provider needs to fulfill the shipment. This is used in combination with the Shipping Options data, and may contain information such as a drop point id.", - "type": "object" + "type": "object", + "example": {} } } }, @@ -5580,14 +7854,25 @@ "title": "Shipping Option Requirement", "description": "A requirement that a Cart must satisfy for the Shipping Option to be available to the Cart.", "x-resourceId": "shipping_option_requirement", + "required": [ + "shipping_option_id", + "type", + "amount" + ], "properties": { "id": { - "description": "The id of the Shipping Option Requirement. This value will be prefixed with `sor_`.", - "type": "string" + "type": "string", + "description": "The shipping option requirement's ID", + "example": "sor_01G1G5V29AB4CTNDRFSRWSRKWD" }, "shipping_option_id": { - "description": "The id of the Shipping Option that the Shipping Option Requirement belongs to.", - "type": "string" + "description": "The id of the Shipping Option that the hipping option requirement belongs to", + "type": "string", + "example": "so_01G1G5V27GYX4QXNARRQCW1N8T" + }, + "shipping_option": { + "description": "Available if the relation `shipping_option` is expanded.", + "$ref": "#/components/schemas/shipping_option" }, "type": { "description": "The type of the requirement, this defines how the value will be compared to the Cart's total. `min_subtotal` requirements define the minimum subtotal that is needed for the Shipping Option to be available, while the `max_subtotal` defines the maximum subtotal that the Cart can have for the Shipping Option to be available.", @@ -5595,11 +7880,18 @@ "enum": [ "min_subtotal", "max_subtotal" - ] + ], + "example": "min_subtotal" }, "amount": { "description": "The amount to compare the Cart subtotal to.", - "type": "integer" + "type": "integer", + "example": 100 + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", + "format": "date-time" } } }, @@ -5607,34 +7899,50 @@ "title": "Shipping Option", "description": "Shipping Options represent a way in which an Order or Return can be shipped. Shipping Options have an associated Fulfillment Provider that will be used when the fulfillment of an Order is initiated. Shipping Options themselves cannot be added to Carts, but serve as a template for Shipping Methods. This distinction makes it possible to customize individual Shipping Methods with additional information.", "x-resourceId": "shipping_option", + "required": [ + "name", + "region_id", + "profile_id", + "provider_id", + "price_type" + ], "properties": { "id": { - "description": "The id of the Shipping Option. This value will be prefixed with `so_`.", - "type": "string" + "type": "string", + "description": "The shipping option's ID", + "example": "so_01G1G5V27GYX4QXNARRQCW1N8T" }, "name": { "description": "The name given to the Shipping Option - this may be displayed to the Customer.", - "type": "string" + "type": "string", + "example": "PostFake Standard" }, "region_id": { - "description": "The id of the Region that the Shipping Option belongs to.", - "type": "string" + "type": "string", + "description": "The region's ID", + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" }, "region": { - "description": "The id of the Region that the Shipping Option belongs to.", - "anyOf": [ - { - "$ref": "#/components/schemas/region" - } - ] + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" }, "profile_id": { - "description": "The id of the Shipping Profile that the Shipping Option belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products.", - "type": "string" + "description": "The ID of the Shipping Profile that the shipping option belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products.", + "type": "string", + "example": "sp_01G1G5V239ENSZ5MV4JAR737BM" + }, + "profile": { + "description": "Available if the relation `profile` is expanded.", + "$ref": "#/components/schemas/shipping_profile" }, "provider_id": { "description": "The id of the Fulfillment Provider, that will be used to process Fulfillments from the Shipping Option.", - "type": "string" + "type": "string", + "example": "manual" + }, + "provider": { + "description": "Available if the relation `provider` is expanded.", + "$ref": "#/components/schemas/fulfillment_provider" }, "price_type": { "description": "The type of pricing calculation that is used when creatin Shipping Methods from the Shipping Option. Can be `flat_rate` for fixed prices or `calculated` if the Fulfillment Provider can provide price calulations.", @@ -5642,18 +7950,21 @@ "enum": [ "flat_rate", "calculated" - ] + ], + "example": "flat_rate" }, "amount": { "description": "The amount to charge for shipping when the Shipping Option price type is `flat_rate`.", - "type": "integer" + "type": "integer", + "example": 200 }, "is_return": { "description": "Flag to indicate if the Shipping Option can be used for Return shipments.", - "type": "boolean" + "type": "boolean", + "default": false }, "requirements": { - "description": "The requirements that must be satisfied for the Shipping Option to be available for a Cart.", + "description": "The requirements that must be satisfied for the Shipping Option to be available for a Cart. Available if the relation `requirements` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/shipping_option_requirement" @@ -5661,26 +7972,30 @@ }, "data": { "description": "The data needed for the Fulfillment Provider to identify the Shipping Option.", - "type": "object" + "type": "object", + "example": {} }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5688,14 +8003,20 @@ "title": "Shipping Profile", "description": "Shipping Profiles have a set of defined Shipping Options that can be used to fulfill a given set of Products.", "x-resourceId": "shipping_profile", + "required": [ + "name", + "type" + ], "properties": { "id": { - "description": "The id of the Shipping Profile. This value will be prefixed with `sp_`.", - "type": "string" + "type": "string", + "description": "The shipping profile's ID", + "example": "sp_01G1G5V239ENSZ5MV4JAR737BM" }, "name": { "description": "The name given to the Shipping profile - this may be displayed to the Customer.", - "type": "string" + "type": "string", + "example": "Default Shipping Profile" }, "type": { "description": "The type of the Shipping Profile, may be `default`, `gift_card` or `custom`.", @@ -5704,44 +8025,45 @@ "default", "gift_card", "custom" - ] + ], + "example": "default" }, "products": { - "description": "The Products that the Shipping Profile defines Shipping Options for.", + "description": "The Products that the Shipping Profile defines Shipping Options for. Available if the relation `products` is expanded.", "type": "array", "items": { - "$ref": "#/components/schemas/product" + "type": "object", + "description": "A product object." } }, "shipping_options": { - "description": "The Shipping Options that can be used to fulfill the Products in the Shipping Profile.", + "description": "The Shipping Options that can be used to fulfill the Products in the Shipping Profile. Available if the relation `shipping_options` is expanded.", "type": "array", "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/shipping_option" - } - ] + "$ref": "#/components/schemas/shipping_option" } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5749,33 +8071,70 @@ "title": "Shipping Tax Rate", "description": "Associates a tax rate with a shipping option to indicate that the shipping option is taxed in a certain way", "x-resourceId": "shipping_tax_rate", + "required": [ + "shipping_option_id", + "rate_id" + ], "properties": { "shipping_option_id": { - "description": "The id of the Shipping Option", - "type": "string" + "description": "The ID of the Shipping Option", + "type": "string", + "example": "so_01G1G5V27GYX4QXNARRQCW1N8T" + }, + "shipping_option": { + "description": "Available if the relation `shipping_option` is expanded.", + "$ref": "#/components/schemas/shipping_option" }, "rate_id": { - "description": "The id of the Tax Rate", - "type": "string" + "description": "The ID of the Tax Rate", + "type": "string", + "example": "txr_01G8XDBAWKBHHJRKH0AV02KXBR" + }, + "tax_rate": { + "description": "Available if the relation `tax_rate` is expanded.", + "$ref": "#/components/schemas/tax_rate" }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, - "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } + } + } + }, + "staged_job": { + "title": "Staged Job", + "description": "A staged job resource", + "x-resourceId": "staged_job", + "required": [ + "event_name" + ], + "properties": { + "id": { + "type": "string", + "description": "The staged job's ID", + "example": "job_01F0YET7BZTARY9MKN1SJ7AAXF" + }, + "event_name": { + "description": "The name of the event", + "type": "string", + "example": "order.placed" + }, + "data": { + "description": "Data necessary for the job", + "type": "object", + "example": {} } } }, @@ -5785,41 +8144,65 @@ "x-resourceId": "store", "properties": { "id": { - "description": "The id of the Store. This value will be prefixed with `store_`.", - "type": "string" + "type": "string", + "description": "The store's ID", + "example": "store_01G1G5V21KADXNGH29BJMAJ4B4" }, "name": { "description": "The name of the Store - this may be displayed to the Customer.", - "type": "string" + "type": "string", + "example": "Medusa Store" }, "default_currency_code": { - "description": "The default currency code used when no other currency code is specified.", - "type": "string" + "description": "The 3 character currency code that is the default of the store.", + "type": "string", + "example": "usd", + "externalDocs": { + "url": "https://en.wikipedia.org/wiki/ISO_4217#Active_codes", + "description": "See a list of codes." + } + }, + "default_currency": { + "description": "Available if the relation `default_currency` is expanded.", + "$ref": "#/components/schemas/currency" }, "currencies": { - "description": "The currencies that are enabled for the Store.", + "description": "The currencies that are enabled for the Store. Available if the relation `currencies` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/currency" } }, "swap_link_template": { - "description": "A template to generate Swap links from use {{cart_id}} to include the Swap's `cart_id` in the link.", - "type": "string" - }, - "created_at": { - "description": "The date with timezone at which the resource was created.", + "description": "A template to generate Swap links from. Use {{cart_id}} to include the Swap's `cart_id` in the link.", "type": "string", - "format": "date-time" + "example": null }, - "updated_at": { - "description": "The date with timezone at which the resource was last updated.", + "payment_link_template": { + "description": "A template to generate Payment links from. Use {{cart_id}} to include the payment's `cart_id` in the link.", "type": "string", - "format": "date-time" + "example": null + }, + "invite_link_template": { + "description": "A template to generate Invite links from", + "type": "string", + "example": null + }, + "default_sales_channel_id": { + "type": "string", + "description": "The sales channel ID the cart is associated with.", + "example": null + }, + "default_sales_channel": { + "description": "A sales channel object. Available if the relation `default_sales_channel` is expanded.", + "type": "object" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5827,25 +8210,28 @@ "title": "Swap", "description": "Swaps can be created when a Customer wishes to exchange Products that they have purchased to different Products. Swaps consist of a Return of previously purchased Products and a Fulfillment of new Products, the amount paid for the Products being returned will be used towards payment for the new Products. In the case where the amount paid for the the Products being returned exceed the amount to be paid for the new Products, a Refund will be issued for the difference.", "x-resourceId": "swap", + "required": [ + "fulfillment_status", + "payment_status", + "order_id" + ], "properties": { "id": { - "description": "The id of the Swap. This value will be prefixed with `swap_`.", - "type": "string" + "type": "string", + "description": "The swap's ID", + "example": "swap_01F0YET86Y9G92D3YDR9Y6V676" }, "fulfillment_status": { "description": "The status of the Fulfillment of the Swap.", "type": "string", "enum": [ "not_fulfilled", - "partially_fulfilled", "fulfilled", - "partially_shipped", "shipped", - "partially_returned", - "returned", "canceled", "requires_action" - ] + ], + "example": "not_fulfilled" }, "payment_status": { "description": "The status of the Payment of the Swap. The payment may either refer to the refund of an amount or the authorization of a new amount.", @@ -5854,59 +8240,62 @@ "not_paid", "awaiting", "captured", + "confirmed", "canceled", "difference_refunded", + "partially_refunded", + "refunded", "requires_action" - ] + ], + "example": "not_paid" }, "order_id": { - "description": "The id of the Order where the Line Items to be returned where purchased.", - "type": "string" + "description": "The ID of the Order where the Line Items to be returned where purchased.", + "type": "string", + "example": "order_01G8TJSYT9M6AVS5N4EMNFS1EK" + }, + "order": { + "description": "An order object. Available if the relation `order` is expanded.", + "type": "object" }, "additional_items": { - "description": "The new Line Items to ship to the Customer.", + "description": "The new Line Items to ship to the Customer. Available if the relation `additional_items` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/line_item" } }, "return_order": { - "description": "The Return that is issued for the return part of the Swap.", - "anyOf": [ - { - "$ref": "#/components/schemas/return" - } - ] + "description": "A return order object. The Return that is issued for the return part of the Swap. Available if the relation `return_order` is expanded.", + "type": "object" }, "fulfillments": { - "description": "The Fulfillments used to send the new Line Items.", + "description": "The Fulfillments used to send the new Line Items. Available if the relation `fulfillments` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/fulfillment" } }, "payment": { - "description": "The Payment authorized when the Swap requires an additional amount to be charged from the Customer.", - "anyOf": [ - { - "$ref": "#/components/schemas/payment" - } - ] + "description": "The Payment authorized when the Swap requires an additional amount to be charged from the Customer. Available if the relation `payment` is expanded.", + "$ref": "#/components/schemas/payment" }, "difference_due": { "description": "The difference that is paid or refunded as a result of the Swap. May be negative when the amount paid for the returned items exceed the total of the new Products.", - "type": "integer" + "type": "integer", + "example": 0 + }, + "shipping_address_id": { + "description": "The Address to send the new Line Items to - in most cases this will be the same as the shipping address on the Order.", + "type": "string", + "example": "addr_01G8ZH853YPY9B94857DY91YGW" }, "shipping_address": { - "description": "The Address to send the new Line Items to - in most cases this will be the same as the shipping address on the Order.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "description": "Available if the relation `shipping_address` is expanded.", + "$ref": "#/components/schemas/address" }, "shipping_methods": { - "description": "The Shipping Methods used to fulfill the addtional items purchased.", + "description": "The Shipping Methods used to fulfill the addtional items purchased. Available if the relation `shipping_methods` is expanded.", "type": "array", "items": { "$ref": "#/components/schemas/shipping_method" @@ -5914,27 +8303,31 @@ }, "cart_id": { "description": "The id of the Cart that the Customer will use to confirm the Swap.", - "type": "string" + "type": "string", + "example": "cart_01G8ZH853Y6TFXWPG5EYE81X63" + }, + "cart": { + "description": "A cart object. Available if the relation `cart` is expanded.", + "type": "object" }, "allow_backorder": { "description": "If true, swaps can be completed with items out of stock", - "type": "boolean" + "type": "boolean", + "default": false + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of the swap in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } }, "confirmed_at": { "description": "The date with timezone at which the Swap was confirmed by the Customer.", "type": "string", "format": "date-time" }, - "created_at": { - "description": "The date with timezone at which the resource was created.", - "type": "string", - "format": "date-time" - }, - "updated_at": { - "description": "The date with timezone at which the resource was last updated.", - "type": "string", - "format": "date-time" - }, "canceled_at": { "description": "The date with timezone at which the Swap was canceled.", "type": "string", @@ -5942,11 +8335,30 @@ }, "no_notification": { "description": "If set to true, no notification will be sent related to this swap", - "type": "boolean" + "type": "boolean", + "example": false + }, + "created_at": { + "type": "string", + "description": "The date with timezone at which the resource was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The date with timezone at which the resource was updated.", + "format": "date-time" + }, + "deleted_at": { + "type": "string", + "description": "The date with timezone at which the resource was deleted.", + "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5954,36 +8366,47 @@ "title": "Tax Line", "description": "Line item that specifies an amount of tax to add to a line item.", "x-resourceId": "tax_line", + "required": [ + "rate", + "name" + ], "properties": { "id": { - "description": "The id of the Tax Line. This value will be prefixed by `tl_`.", - "type": "string" + "type": "string", + "description": "The tax line's ID", + "example": "tl_01G1G5V2DRX1SK6NQQ8VVX4HQ8" }, "code": { "description": "A code to identify the tax type by", - "type": "string" + "type": "string", + "example": "tax01" }, "name": { "description": "A human friendly name for the tax", - "type": "string" + "type": "string", + "example": "Tax Example" }, "rate": { "description": "The numeric rate to charge tax by", - "type": "number" + "type": "number", + "example": 10 }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -5994,11 +8417,13 @@ "properties": { "id": { "description": "The id of the tax provider as given by the plugin.", - "type": "string" + "type": "string", + "example": "manual" }, "is_installed": { "description": "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`.", - "type": "boolean" + "type": "boolean", + "default": true } } }, @@ -6006,44 +8431,95 @@ "title": "Tax Rate", "description": "A Tax Rate can be used to associate a certain rate to charge on products within a given Region", "x-resourceId": "line_item", + "required": [ + "name", + "region_id" + ], "properties": { "id": { - "description": "The id of the Tax Rate. This value will be prefixed by `txr_`.", - "type": "string" + "type": "string", + "description": "The tax rate's ID", + "example": "txr_01G8XDBAWKBHHJRKH0AV02KXBR" }, "rate": { "description": "The numeric rate to charge", - "type": "number" + "type": "number", + "example": 10 }, "code": { "description": "A code to identify the tax type by", - "type": "string" + "type": "string", + "example": "tax01" }, "name": { "description": "A human friendly name for the tax", - "type": "string" + "type": "string", + "example": "Tax Example" }, "region_id": { + "type": "string", "description": "The id of the Region that the rate belongs to", - "type": "string" + "example": "reg_01G1G5V26T9H8Y0M4JNE3YGA4G" + }, + "region": { + "description": "A region object. Available if the relation `region` is expanded.", + "type": "object" + }, + "products": { + "type": "array", + "description": "The products that belong to this tax rate. Available if the relation `products` is expanded.", + "items": { + "type": "object", + "description": "A product object." + } + }, + "product_types": { + "type": "array", + "description": "The product types that belong to this tax rate. Available if the relation `product_types` is expanded.", + "items": { + "type": "object", + "description": "A product type object." + } + }, + "shipping_options": { + "type": "array", + "description": "The shipping options that belong to this tax rate. Available if the relation `shipping_options` is expanded.", + "items": { + "type": "object", + "description": "A shipping option object." + } + }, + "product_count": { + "description": "The count of products", + "type": "integer", + "example": null + }, + "product_type_count": { + "description": "The count of product types", + "type": "integer", + "example": null + }, + "shipping_option_count": { + "description": "The count of shipping options", + "type": "integer", + "example": null }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" - }, - "refundable": { - "description": "The amount that can be refunded from the given Line Item. Takes taxes and discounts into consideration.", - "type": "integer" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -6051,41 +8527,64 @@ "title": "Tracking Link", "description": "Tracking Link holds information about tracking numbers for a Fulfillment. Tracking Links can optionally contain a URL that can be visited to see the status of the shipment.", "x-resourceId": "tracking_link", + "required": [ + "tracking_number", + "fulfillment_id" + ], "properties": { "id": { - "description": "The id of the Tracking Link. This value will be prefixed with `tlink_`.", - "type": "string" + "type": "string", + "description": "The tracking link's ID", + "example": "tlink_01G8ZH853Y6TFXWPG5EYE81X63" }, "url": { "description": "The URL at which the status of the shipment can be tracked.", - "type": "string" + "type": "string", + "format": "uri" }, "tracking_number": { "description": "The tracking number given by the shipping carrier.", - "type": "string" + "type": "string", + "format": "RH370168054CN" }, "fulfillment_id": { + "type": "string", "description": "The id of the Fulfillment that the Tracking Link references.", - "type": "string" + "example": "ful_01G8ZRTMQCA76TXNAT81KPJZRF" + }, + "fulfillment": { + "description": "Available if the relation `fulfillment` is expanded.", + "$ref": "#/components/schemas/fulfillment" + }, + "idempotency_key": { + "type": "string", + "description": "Randomly generated key used to continue the completion of a process in case of failure.", + "externalDocs": { + "url": "https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key", + "description": "Learn more how to use the idempotency key." + } }, "created_at": { - "description": "The date with timezone at which the resource was created.", "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { - "description": "The date with timezone at which the resource was last updated.", "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { - "description": "The date with timezone at which the resource was deleted.", "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "description": "An optional key-value map with additional information.", - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } }, @@ -6093,40 +8592,56 @@ "title": "User", "description": "Represents a User who can manage store settings.", "x-resourceId": "user", + "required": [ + "email" + ], "properties": { "id": { - "description": "The unique id of the User. This will be prefixed with `usr_`", - "type": "string" + "type": "string", + "description": "The user's ID", + "example": "usr_01G1G5V26F5TB3GPAPNJ8X1S3V" }, "email": { "description": "The email of the User", - "type": "string" + "type": "string", + "format": "email" }, "first_name": { - "type": "string" + "description": "The first name of the User", + "type": "string", + "example": "Levi" }, "last_name": { - "description": "The Customer's billing address.", - "anyOf": [ - { - "$ref": "#/components/schemas/address" - } - ] + "description": "The last name of the User", + "type": "string", + "example": "Bogan" + }, + "api_token": { + "description": "An API token associated with the user.", + "type": "string", + "example": null }, "created_at": { "type": "string", + "description": "The date with timezone at which the resource was created.", "format": "date-time" }, "updated_at": { "type": "string", + "description": "The date with timezone at which the resource was updated.", "format": "date-time" }, "deleted_at": { "type": "string", + "description": "The date with timezone at which the resource was deleted.", "format": "date-time" }, "metadata": { - "type": "object" + "type": "object", + "description": "An optional key-value map with additional details", + "example": { + "car": "white" + } } } } diff --git a/docs/api/store-spec3.yaml b/docs/api/store-spec3.yaml index 81da5403dc..ae016ea75f 100644 --- a/docs/api/store-spec3.yaml +++ b/docs/api/store-spec3.yaml @@ -2,41 +2,53 @@ openapi: 3.0.0 info: version: 1.0.0 title: Medusa Storefront API + description: >- + API reference for Medusa's Storefront endpoints. All endpoints are prefixed + with `/store`. license: name: MIT + url: 'https://github.com/medusajs/medusa/blob/master/LICENSE' tags: - name: Auth description: >- - Auth endpoints allows authorization of admin Users and manages their + Auth endpoints that allow authorization of customers and manages their sessions. - name: Cart + description: Cart endpoints that allow handling carts in Medusa. x-resourceId: cart - name: Collection + description: Collection endpoints that allow handling collections in Medusa. x-resourceId: product_collection - name: Customer + description: Customer endpoints that allow handling customers in Medusa. x-resourceId: customer - - name: Discount - x-resourceId: discount - name: Gift Card + description: Gift Card endpoints that allow handling gift cards in Medusa. x-resourceId: gift_card - - name: Notification - x-resourceId: notification - name: Order + description: Order endpoints that allow handling orders in Medusa. x-resourceId: order - name: Product + description: Product endpoints that allow handling products in Medusa. x-resourceId: product + - name: Product Variant + description: Product Variant endpoints that allow handling product variants in Medusa. + x-resourceId: product_variant - name: Region + description: Region endpoints that allow handling regions in Medusa. x-resourceId: region + - name: Return Reason + description: Return Reason endpoints that allow handling return reasons in Medusa. + x-resourceId: return_reason - name: Return + description: Return endpoints that allow handling returns in Medusa. x-resourceId: return - name: Shipping Option + description: Shipping Option endpoints that allow handling shipping options in Medusa. x-resourceId: shipping_option - - name: Shipping Profile - x-resourceId: shipping_profile - name: Swap + description: Swap endpoints that allow handling swaps in Medusa. x-resourceId: swap - - name: Product Variant - x-resourceId: product_variant servers: - url: 'https://api.medusa-commerce.com/store' paths: @@ -99,6 +111,8 @@ paths: properties: customer: $ref: '#/components/schemas/customer' + '401': + description: Unauthorized '/auth/{email}': get: operationId: GetAuthEmail @@ -107,10 +121,11 @@ paths: parameters: - in: path name: email - required: true - description: The Customer's email. schema: type: string + format: email + required: true + description: The email to check if exists. tags: - Auth responses: @@ -122,6 +137,7 @@ paths: properties: exists: type: boolean + description: Whether email exists or not. '/collections/{id}': get: operationId: GetCollectionsCollection @@ -165,6 +181,50 @@ paths: schema: type: integer default: 10 + - in: query + name: created_at + description: Date comparison for when resulting collections were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting collections were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date tags: - Collection responses: @@ -174,8 +234,19 @@ paths: application/json: schema: properties: - collection: - $ref: '#/components/schemas/product_collection' + collections: + type: array + items: + $ref: '#/components/schemas/product_collection' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page '/gift-cards/{code}': get: operationId: GetGiftCardsCode @@ -197,618 +268,8 @@ paths: application/json: schema: properties: - id: - description: The id of the Gift Card - code: - description: The code of the Gift Card - value: - description: The original value of the Gift Card. - balance: - description: The current balanace of the Gift Card - region: - $ref: '#/components/schemas/region' - /customers/me/addresses: - post: - operationId: PostCustomersCustomerAddresses - summary: Add a Shipping Address - description: Adds a Shipping Address to a Customer's saved addresses. - x-authenticated: true - requestBody: - content: - application/json: - schema: - required: - - address - properties: - address: - description: The Address to add to the Customer. - anyOf: - - $ref: '#/components/schemas/address' - tags: - - Customer - responses: - '200': - description: A successful response - content: - application/json: - schema: - properties: - customer: - $ref: '#/components/schemas/customer' - /customers: - post: - operationId: PostCustomers - summary: Create a Customer - description: Creates a Customer account. - parameters: [] - tags: - - Customer - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - customer: - $ref: '#/components/schemas/customer' - requestBody: - content: - application/json: - schema: - type: object - required: - - email - - first_name - - last_name - - password - properties: - email: - type: string - description: The Customer's email address. - first_name: - type: string - description: The Customer's first name. - last_name: - type: string - description: The Customer's last name. - password: - type: string - description: The Customer's password for login. - phone: - type: string - description: The Customer's phone number. - '/customers/me/addresses/{address_id}': - delete: - operationId: DeleteCustomersCustomerAddressesAddress - summary: Delete an Address - description: Removes an Address from the Customer's saved addresse. - x-authenticated: true - parameters: - - in: path - name: address_id - required: true - description: The id of the Address to remove. - schema: - type: string - tags: - - Customer - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - customer: - $ref: '#/components/schemas/customer' - post: - operationId: PostCustomersCustomerAddressesAddress - summary: Update a Shipping Address - description: Updates a Customer's saved Shipping Address. - x-authenticated: true - parameters: - - in: path - name: address_id - required: true - description: The id of the Address to update. - schema: - type: string - requestBody: - content: - application/json: - schema: - properties: - address: - description: The updated Address. - anyOf: - - $ref: '#/components/schemas/address' - tags: - - Customer - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - customer: - $ref: '#/components/schemas/customer' - /customers/me: - get: - operationId: GetCustomersCustomer - summary: Retrieves a Customer - description: >- - Retrieves a Customer - the Customer must be logged in to retrieve their - details. - x-authenticated: true - tags: - - Customer - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - customer: - $ref: '#/components/schemas/customer' - post: - operationId: PostCustomersCustomer - summary: Update Customer details - description: Updates a Customer's saved details. - x-authenticated: true - requestBody: - content: - application/json: - schema: - properties: - first_name: - description: The Customer's first name. - type: string - last_name: - description: The Customer's last name. - type: string - billing_address: - description: The Address to be used for billing purposes. - anyOf: - - $ref: '#/components/schemas/address' - password: - description: The Customer's password. - type: string - phone: - description: The Customer's phone number. - type: string - email: - description: The email of the customer. - type: string - metadata: - description: Metadata about the customer. - type: object - tags: - - Customer - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - customer: - $ref: '#/components/schemas/customer' - /customers/me/payment-methods: - get: - operationId: GetCustomersCustomerPaymentMethods - summary: Retrieve saved payment methods - description: >- - Retrieves a list of a Customer's saved payment methods. Payment methods - are saved with Payment Providers and it is their responsibility to fetch - saved methods. - x-authenticated: true - tags: - - Customer - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - payment_methods: - type: array - items: - properties: - provider_id: - type: string - description: >- - The id of the Payment Provider where the payment - method is saved. - data: - type: object - description: >- - The data needed for the Payment Provider to use the - saved payment method. - /customers/me/orders: - get: - operationId: GetCustomersCustomerOrders - summary: Retrieve Customer Orders - description: Retrieves a list of a Customer's Orders. - x-authenticated: true - parameters: - - in: query - name: limit - description: How many addresses to return. - schema: - type: integer - - in: query - name: offset - description: The offset in the resulting addresses. - schema: - type: integer - - in: query - name: fields - description: >- - (Comma separated string) Which fields should be included in the - resulting addresses. - schema: - type: string - - in: query - name: expand - description: >- - (Comma separated string) Which relations should be expanded in the - resulting addresses. - schema: - type: string - tags: - - Customer - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - count: - description: The total number of Orders. - type: integer - offset: - description: The offset for pagination. - type: integer - limit: - description: 'The maxmimum number of Orders to return,' - type: integer - orders: - type: array - items: - $ref: '#/components/schemas/order' - /customers/password-token: - post: - operationId: PostCustomersCustomerPasswordToken - summary: Creates a reset password token - description: >- - Creates a reset password token to be used in a subsequent - /reset-password request. The password token should be sent out of band - e.g. via email and will not be returned. - parameters: [] - tags: - - Customer - responses: - '204': - description: OK - requestBody: - content: - application/json: - schema: - type: object - required: - - email - properties: - email: - type: string - description: Email of the user whose password should be reset. - /customers/reset-password: - post: - operationId: PostCustomersResetPassword - summary: Resets Customer password - description: >- - Resets a Customer's password using a password token created by a - previous /password-token request. - parameters: [] - tags: - - Customer - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - customer: - $ref: '#/components/schemas/customer' - requestBody: - content: - application/json: - schema: - type: object - required: - - email - - token - - password - properties: - email: - type: string - description: The Customer's email. - token: - type: string - description: The password token created by a /password-token request. - password: - type: string - description: The new password to set for the Customer. - '/orders/cart/{cart_id}': - get: - operationId: GetOrdersOrderCartId - summary: Retrieves Order by Cart id - description: >- - Retrieves an Order by the id of the Cart that was used to create the - Order. - parameters: - - in: path - name: cart_id - required: true - description: The id of Cart. - schema: - type: string - tags: - - Order - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - order: - $ref: '#/components/schemas/order' - '/orders/{id}': - get: - operationId: GetOrdersOrder - summary: Retrieves an Order - description: Retrieves an Order - parameters: - - in: path - name: id - required: true - description: The id of the Order. - schema: - type: string - tags: - - Order - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - customer: - $ref: '#/components/schemas/customer' - /orders: - get: - operationId: GetOrders - summary: Look Up an Order - description: >- - Looks for an Order with a given `display_id`, `email` pair. The - `display_id`, `email` pair must match in order for the Order to be - returned. - parameters: - - in: query - name: display_id - required: true - description: The display id given to the Order. - schema: - type: number - - in: query - name: email - required: true - description: The email of the Order with the given display_id. - schema: - type: string - tags: - - Order - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - order: - $ref: '#/components/schemas/order' - '/products/{id}': - get: - operationId: GetProductsProduct - summary: Retrieves a Product - description: Retrieves a Product. - parameters: - - in: path - name: id - required: true - description: The id of the Product. - schema: - type: string - tags: - - Product - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - product: - $ref: '#/components/schemas/product' - /products: - get: - operationId: GetProducts - summary: List Products - description: Retrieves a list of Products. - parameters: - - in: query - name: q - description: Query used for searching products. - schema: - type: string - - in: query - name: id - description: Id of the product to search for. - schema: - type: string - - in: query - name: collection_id - style: form - explode: false - description: Collection ids to search for - schema: - type: array - items: - type: string - - in: query - name: tags - style: form - explode: false - description: Tags to search for - schema: - type: array - items: - type: string - - in: query - name: title - description: to search for. - schema: - type: string - - in: query - name: description - description: to search for. - schema: - type: string - - in: query - name: handle - description: to search for. - schema: - type: string - - in: query - name: is_giftcard - description: Search for giftcards using is_giftcard=true. - schema: - type: string - - in: query - name: type - description: to search for. - schema: - type: string - - in: query - name: created_at - description: >- - Date comparison for when resulting products was created, i.e. less - than, greater than etc. - schema: - type: object - - in: query - name: updated_at - description: >- - Date comparison for when resulting products was updated, i.e. less - than, greater than etc. - schema: - type: object - - in: query - name: deleted_at - description: >- - Date comparison for when resulting products was deleted, i.e. less - than, greater than etc. - schema: - type: object - - in: query - name: offset - description: How many products to skip in the result. - schema: - type: string - - in: query - name: limit - description: Limit the number of products returned. - schema: - type: string - tags: - - Product - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - count: - description: The total number of Products. - type: integer - offset: - description: The offset for pagination. - type: integer - limit: - description: 'The maxmimum number of Products to return,' - type: integer - products: - type: array - items: - $ref: '#/components/schemas/product' - '/regions/{id}': - get: - operationId: GetRegionsRegion - summary: Retrieves a Region - description: Retrieves a Region. - parameters: - - in: path - name: id - required: true - description: The id of the Region. - schema: - type: string - tags: - - Region - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - region: - $ref: '#/components/schemas/region' - /regions: - get: - operationId: GetRegions - summary: List Regions - description: Retrieves a list of Regions. - tags: - - Region - responses: - '200': - description: OK - content: - application/json: - schema: - properties: - count: - description: The total number of regions. - type: integer - offset: - description: The offset for pagination. - type: integer - limit: - description: 'The maxmimum number of regions to return,' - type: integer - regions: - type: array - items: - $ref: '#/components/schemas/region' + gift_card: + $ref: '#/components/schemas/gift_card' '/carts/{id}/shipping-methods': post: operationId: PostCartsCartShippingMethod @@ -820,12 +281,12 @@ paths: - in: path name: id required: true - description: The cart id. + description: The cart ID. schema: type: string responses: '200': - description: A successful response + description: OK content: application/json: schema: @@ -842,7 +303,7 @@ paths: properties: option_id: type: string - description: id of the shipping option to create the method from + description: ID of the shipping option to create the method from data: type: object description: >- @@ -861,22 +322,20 @@ paths: - in: path name: id required: true - description: The Cart id. + description: The Cart ID. schema: type: string tags: - Cart responses: '200': - description: A cart object with the tax_total field populated + description: OK content: application/json: schema: - oneOf: - - type: object - properties: - cart: - $ref: '#/components/schemas/cart' + properties: + cart: + $ref: '#/components/schemas/cart' '/carts/{id}/complete': post: summary: Complete a Cart @@ -907,19 +366,41 @@ paths: content: application/json: schema: - oneOf: - - type: object - properties: - order: - $ref: '#/components/schemas/order' - - type: object - properties: - cart: - $ref: '#/components/schemas/cart' - - type: object - properties: - cart: - $ref: '#/components/schemas/swap' + properties: + type: + type: string + description: The type of the data property. + enum: + - order + - cart + - swap + data: + type: object + description: >- + The data of the result object. Its type depends on the + type field. + oneOf: + - type: object + description: >- + Cart was successfully authorized and order was placed + successfully. + properties: + order: + $ref: '#/components/schemas/order' + - type: object + description: >- + Cart was successfully authorized but requires further + actions. + properties: + cart: + $ref: '#/components/schemas/cart' + - type: object + description: >- + When cart is used for a swap and it has been completed + successfully. + properties: + cart: + $ref: '#/components/schemas/swap' /carts: post: summary: Create a Cart @@ -937,16 +418,28 @@ paths: properties: region_id: type: string - description: The id of the Region to create the Cart in. + description: The ID of the Region to create the Cart in. + sales_channel_id: + type: string + description: >- + [EXPERIMENTAL] The ID of the Sales channel to create the + Cart in. country_code: type: string description: The 2 character ISO country code to create the Cart in. + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. items: description: >- An optional array of `variant_id`, `quantity` pairs to generate Line Items from. type: array items: + required: + - variant_id + - quantity properties: variant_id: description: >- @@ -962,6 +455,9 @@ paths: `context` field is automatically populated with `ip` and `user_agent` type: object + example: + ip: '::1' + user_agent: Chrome tags: - Cart responses: @@ -1237,6 +733,93 @@ paths: properties: cart: $ref: '#/components/schemas/cart' + post: + operationId: PostCartsCart + summary: Update a Cart + description: Updates a Cart. + parameters: + - in: path + name: id + required: true + description: The id of the Cart. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + region_id: + type: string + description: The id of the Region to create the Cart in. + country_code: + type: string + description: The 2 character ISO country code to create the Cart in. + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + email: + type: string + description: An email to be used on the Cart. + format: email + sales_channel_id: + type: string + description: The ID of the Sales channel to update the Cart with. + billing_address: + description: The Address to be used for billing purposes. + anyOf: + - $ref: '#/components/schemas/address' + description: A full billing address object. + - type: string + description: The billing address ID + shipping_address: + description: The Address to be used for shipping. + anyOf: + - $ref: '#/components/schemas/address' + description: A full shipping address object. + - type: string + description: The shipping address ID + gift_cards: + description: An array of Gift Card codes to add to the Cart. + type: array + items: + required: + - code + properties: + code: + description: The code that a Gift Card is identified by. + type: string + discounts: + description: An array of Discount codes to add to the Cart. + type: array + items: + required: + - code + properties: + code: + description: The code that a Discount is identifed by. + type: string + customer_id: + description: The ID of the Customer to associate the Cart with. + type: string + context: + description: An optional object to provide context to the Cart. + type: object + example: + ip: '::1' + user_agent: Chrome + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: '#/components/schemas/cart' '/carts/{id}/payment-sessions/{provider_id}/refresh': post: operationId: PostCartsCartPaymentSessionsSession @@ -1281,7 +864,7 @@ paths: - in: path name: id required: true - description: The id of the Cart. + description: The ID of the Cart. schema: type: string tags: @@ -1305,69 +888,69 @@ paths: properties: provider_id: type: string - description: The id of the Payment Provider. - '/store/carts/{id}': + description: The ID of the Payment Provider. + /customers/me/addresses: post: - operationId: PostCartsCart - summary: Update a Cart" - description: Updates a Cart. - parameters: - - in: path - name: id - required: true - description: The id of the Cart. - schema: - type: string + operationId: PostCustomersCustomerAddresses + summary: Add a Shipping Address + description: Adds a Shipping Address to a Customer's saved addresses. + x-authenticated: true requestBody: content: application/json: schema: + required: + - address properties: - region_id: - type: string - description: The id of the Region to create the Cart in. - country_code: - type: string - description: The 2 character ISO country code to create the Cart in. - email: - type: string - description: An email to be used on the Cart. - billing_address: - description: The Address to be used for billing purposes. + address: + description: The Address to add to the Customer. anyOf: - $ref: '#/components/schemas/address' - shipping_address: - description: The Address to be used for shipping. - anyOf: - - $ref: '#/components/schemas/address' - gift_cards: - description: An array of Gift Card codes to add to the Cart. - type: array - items: - required: - - code - properties: - code: - description: The code that a Gift Card is identified by. - type: string - discounts: - description: An array of Discount codes to add to the Cart. - type: array - items: - required: - - code - properties: - code: - description: The code that a Discount is identifed by. - type: string - customer_id: - description: The id of the Customer to associate the Cart with. - type: string - context: - description: An optional object to provide context to the Cart. - type: object tags: - - Cart + - Customer + responses: + '200': + description: A successful response + content: + application/json: + schema: + properties: + customer: + $ref: '#/components/schemas/customer' + /customers: + post: + operationId: PostCustomers + summary: Create a Customer + description: Creates a Customer account. + requestBody: + content: + application/json: + schema: + required: + - first_name + - last_name + - email + - password + properties: + first_name: + description: The Customer's first name. + type: string + last_name: + description: The Customer's last name. + type: string + email: + description: The email of the customer. + type: string + format: email + password: + description: The Customer's password. + type: string + format: password + phone: + description: The Customer's phone number. + type: string + tags: + - Customer responses: '200': description: OK @@ -1375,8 +958,705 @@ paths: application/json: schema: properties: - cart: - $ref: '#/components/schemas/cart' + customer: + $ref: '#/components/schemas/customer' + '422': + description: A customer with the same email exists + content: + application/json: + schema: + properties: + code: + type: string + description: The error code + type: + type: string + description: The type of error + message: + type: string + description: Human-readable message with details about the error + example: + code: invalid_request_error + type: duplicate_error + message: >- + A customer with the given email already has an account. Log in + instead + '/customers/me/addresses/{address_id}': + delete: + operationId: DeleteCustomersCustomerAddressesAddress + summary: Delete an Address + description: Removes an Address from the Customer's saved addresses. + x-authenticated: true + parameters: + - in: path + name: address_id + required: true + description: The id of the Address to remove. + schema: + type: string + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: '#/components/schemas/customer' + post: + operationId: PostCustomersCustomerAddressesAddress + summary: Update a Shipping Address + description: Updates a Customer's saved Shipping Address. + x-authenticated: true + parameters: + - in: path + name: address_id + required: true + description: The id of the Address to update. + schema: + type: string + requestBody: + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/address' + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: '#/components/schemas/customer' + /customers/me: + get: + operationId: GetCustomersCustomer + summary: Retrieves a Customer + description: >- + Retrieves a Customer - the Customer must be logged in to retrieve their + details. + x-authenticated: true + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: '#/components/schemas/customer' + post: + operationId: PostCustomersCustomer + summary: Update Customer details + description: Updates a Customer's saved details. + x-authenticated: true + requestBody: + content: + application/json: + schema: + properties: + first_name: + description: The Customer's first name. + type: string + last_name: + description: The Customer's last name. + type: string + billing_address: + description: The Address to be used for billing purposes. + anyOf: + - $ref: '#/components/schemas/address' + description: The full billing address object + - type: string + description: The ID of an existing billing address + password: + description: The Customer's password. + type: string + phone: + description: The Customer's phone number. + type: string + email: + description: The email of the customer. + type: string + metadata: + description: Metadata about the customer. + type: object + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: '#/components/schemas/customer' + /customers/me/payment-methods: + get: + operationId: GetCustomersCustomerPaymentMethods + summary: Retrieve saved payment methods + description: >- + Retrieves a list of a Customer's saved payment methods. Payment methods + are saved with Payment Providers and it is their responsibility to fetch + saved methods. + x-authenticated: true + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + payment_methods: + type: array + items: + properties: + provider_id: + type: string + description: >- + The id of the Payment Provider where the payment + method is saved. + data: + type: object + description: >- + The data needed for the Payment Provider to use the + saved payment method. + /customers/me/orders: + get: + operationId: GetCustomersCustomerOrders + summary: Retrieve Customer Orders + description: Retrieves a list of a Customer's Orders. + x-authenticated: true + parameters: + - in: query + name: limit + description: How many orders to return. + schema: + type: integer + default: 10 + - in: query + name: offset + description: The offset in the resulting orders. + schema: + type: integer + default: 0 + - in: query + name: fields + description: >- + (Comma separated string) Which fields should be included in the + resulting orders. + schema: + type: string + - in: query + name: expand + description: >- + (Comma separated string) Which relations should be expanded in the + resulting orders. + schema: + type: string + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + orders: + type: array + items: + $ref: '#/components/schemas/order' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page + /customers/password-token: + post: + operationId: PostCustomersCustomerPasswordToken + summary: Creates a reset password token + description: >- + Creates a reset password token to be used in a subsequent + /reset-password request. The password token should be sent out of band + e.g. via email and will not be returned. + requestBody: + content: + application/json: + schema: + required: + - email + properties: + email: + description: The email of the customer. + type: string + format: email + tags: + - Customer + responses: + '204': + description: OK + /customers/password-reset: + post: + operationId: PostCustomersResetPassword + summary: Resets Customer password + description: >- + Resets a Customer's password using a password token created by a + previous /password-token request. + requestBody: + content: + application/json: + schema: + required: + - email + - password + - token + properties: + email: + description: The email of the customer. + type: string + format: email + password: + description: The Customer's password. + type: string + format: password + token: + description: The reset password token + type: string + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: '#/components/schemas/customer' + '/orders/cart/{cart_id}': + get: + operationId: GetOrdersOrderCartId + summary: Retrieves Order by Cart id + description: >- + Retrieves an Order by the id of the Cart that was used to create the + Order. + parameters: + - in: path + name: cart_id + required: true + description: The ID of Cart. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: '#/components/schemas/order' + '/orders/{id}': + get: + operationId: GetOrdersOrder + summary: Retrieves an Order + description: Retrieves an Order + parameters: + - in: path + name: id + required: true + description: The id of the Order. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: '#/components/schemas/order' + /orders: + get: + operationId: GetOrders + summary: Look Up an Order + description: Look up an order using filters. + parameters: + - in: query + name: display_id + required: true + description: The display id given to the Order. + schema: + type: number + - in: query + name: email + style: form + explode: false + description: The email associated with this order. + required: true + schema: + type: string + format: email + - in: query + name: shipping_address + style: form + explode: false + description: The shipping address associated with this order. + schema: + type: object + properties: + postal_code: + type: string + description: The postal code of the shipping address + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: '#/components/schemas/order' + '/products/{id}': + get: + operationId: GetProductsProduct + summary: Retrieves a Product + description: Retrieves a Product. + parameters: + - in: path + name: id + required: true + description: The id of the Product. + schema: + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product: + $ref: '#/components/schemas/product' + /products: + get: + operationId: GetProducts + summary: List Products + description: Retrieves a list of Products. + parameters: + - in: query + name: q + description: >- + Query used for searching products by title, description, variant's + title, variant's sku, and collection's title + schema: + type: string + - in: query + name: id + style: form + explode: false + description: product IDs to search for. + schema: + oneOf: + - type: string + - type: array + items: + type: string + - in: query + name: collection_id + style: form + explode: false + description: Collection IDs to search for + schema: + type: array + items: + type: string + - in: query + name: tags + style: form + explode: false + description: Tag IDs to search for + schema: + type: array + items: + type: string + - in: query + name: title + description: title to search for. + schema: + type: string + - in: query + name: description + description: description to search for. + schema: + type: string + - in: query + name: handle + description: handle to search for. + schema: + type: string + - in: query + name: is_giftcard + description: Search for giftcards using is_giftcard=true. + schema: + type: boolean + - in: query + name: type + description: type to search for. + schema: + type: string + - in: query + name: created_at + description: Date comparison for when resulting products were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting products were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: offset + description: How many products to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of products returned. + schema: + type: integer + default: 100 + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each order of + the result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each order of + the result. + schema: + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + products: + type: array + items: + $ref: '#/components/schemas/product' + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page + /products/search: + get: + operationId: GetProductsSearch + summary: Search Products + description: >- + Run a search query on products using the search engine installed on + Medusa + parameters: + - in: query + name: q + required: true + description: The query to run the search with. + schema: + type: string + - in: query + name: offset + description: How many products to skip in the result. + schema: + type: integer + - in: query + name: limit + description: Limit the number of products returned. + schema: + type: integer + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + hits: + type: array + description: >- + Array of results. The format of the items depends on the + search engine installed on the server. + '/regions/{id}': + get: + operationId: GetRegionsRegion + summary: Retrieves a Region + description: Retrieves a Region. + parameters: + - in: path + name: id + required: true + description: The id of the Region. + schema: + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: '#/components/schemas/region' + /regions: + get: + operationId: GetRegions + summary: List Regions + description: Retrieves a list of Regions. + parameters: + - in: query + name: offset + description: How many regions to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of regions returned. + schema: + type: integer + default: 100 + - in: query + name: created_at + description: Date comparison for when resulting regions were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting regions were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + regions: + type: array + items: + $ref: '#/components/schemas/region' '/return-reasons/{id}': get: operationId: GetReturnReasonsReason @@ -1427,41 +1707,47 @@ paths: content: application/json: schema: + required: + - order_id + - items properties: order_id: type: string - description: The id of the Order to create the Return from. + description: The ID of the Order to create the Return from. items: description: The items to include in the Return. type: array items: + required: + - item_id + - quantity properties: item_id: - description: The id of the Line Item from the Order. + description: The ID of the Line Item from the Order. type: string quantity: description: The quantity to return. type: integer - required: - - item_id - - quantity + reason_id: + description: The ID of the return reason. + type: string + note: + description: A note to add to the item returned. + type: string return_shipping: description: >- If the Return is to be handled by the store operator the Customer can choose a Return Shipping Method. Alternatvely the Customer can handle the Return themselves. type: object + required: + - option_id properties: option_id: type: string description: >- - The id of the Shipping Option to create the Shipping + The ID of the Shipping Option to create the Shipping Method from. - required: - - option_id - required: - - order_id - - items tags: - Return responses: @@ -1552,7 +1838,7 @@ paths: properties: order_id: type: string - description: The id of the Order to create the Swap for. + description: The ID of the Order to create the Swap for. return_items: description: The items to include in the Return. type: array @@ -1562,21 +1848,21 @@ paths: - quantity properties: item_id: - description: The id of the Line Item from the Order. + description: The ID of the Line Item from the Order. type: string quantity: - description: The quantity to return. + description: The quantity to swap. type: integer reason_id: - description: The id of the reason of this return + description: The ID of the reason of this return. type: string - note_id: - description: The id of the note + note: + description: The note to add to the item being swapped. type: string return_shipping_option: type: string description: >- - The id of the Shipping Option to create the Shipping Method + The ID of the Shipping Option to create the Shipping Method from. additional_items: description: The items to exchange the returned items to. @@ -1587,7 +1873,7 @@ paths: - quantity properties: variant_id: - description: The id of the Product Variant to send. + description: The ID of the Product Variant to send. type: string quantity: description: The quantity to send of the variant. @@ -1638,6 +1924,26 @@ paths: description: The id of the Product Variant. schema: type: string + - in: query + name: cart_id + description: The id of the Cart to set prices based on. + schema: + type: string + - in: query + name: region_id + description: The id of the Region to set prices based on. + schema: + type: string + - in: query + name: currency_code + style: form + explode: false + description: The 3 character ISO currency code to set prices based on. + schema: + type: string + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. tags: - Product Variant responses: @@ -1667,13 +1973,55 @@ paths: type: string - in: query name: offset + description: How many product variants to skip in the result. schema: type: number + default: '0' - in: query name: limit description: Maximum number of Product Variants to return. schema: type: number + default: '100' + - in: query + name: title + style: form + explode: false + description: product variant title to search for. + schema: + oneOf: + - type: string + description: a single title to search by + - type: array + description: multiple titles to search by + items: + type: string + - in: query + name: inventory_quantity + description: Filter by available inventory quantity + schema: + oneOf: + - type: number + description: a specific number to search by. + - type: object + description: search using less and greater than comparisons. + properties: + lt: + type: number + description: filter by inventory quantity less than this number + gt: + type: number + description: filter by inventory quantity greater than this number + lte: + type: number + description: >- + filter by inventory quantity less than or equal to this + number + gte: + type: number + description: >- + filter by inventory quantity greater than or equal to this + number tags: - Product Variant responses: @@ -1696,90 +2044,223 @@ components: properties: id: type: string + description: ID of the address + example: addr_01G8ZC9VS1XVE149MGH2J7QSSH customer_id: type: string + description: ID of the customer this address belongs to + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: Available if the relation `customer` is expanded. + type: array + items: + type: object + description: A customer object. company: type: string + description: Company name + example: Acme first_name: type: string + description: First name + example: Arno last_name: type: string + description: Last name + example: Willms address_1: type: string + description: Address line 1 + example: 14433 Kemmer Court address_2: type: string + description: Address line 2 + example: Suite 369 city: type: string + description: City + example: South Geoffreyview country_code: type: string + description: The 2 character ISO code of the country in lower case + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + example: st country: - $ref: '#/components/schemas/country' + description: A country object. Available if the relation `country` is expanded. + type: object + province: + type: string + description: Province + example: Kentucky + postal_code: + type: string + description: Postal Code + example: 72093 + phone: + type: string + description: Phone Number + example: 16128234334802 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white batch_job: title: Batch Job description: A Batch Job. x-resourceId: batch_job + required: + - type properties: id: + type: string description: The unique identifier for the batch job. - type: string + example: batch_01G8T782965PYFG0751G0Z38B4 type: + type: string description: The type of batch job. - type: string enum: - - product_import - - product_export + - product-import + - product-export status: - description: The status of the batch job. type: string + description: The status of the batch job. enum: - created - pre_processed + - confirmed - processing - completed - canceled - failed + default: created created_by: - description: The unique identifier of the user that created the batch job. type: string + description: The unique identifier of the user that created the batch job. + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + created_by_user: + description: >- + A user object. Available if the relation `created_by_user` is + expanded. + type: object context: + type: object description: >- The context of the batch job, the type of the batch job determines what the context should contain. - type: object + example: + shape: + prices: + - region: null + currency_code: eur + dynamicImageColumnCount: 4 + dynamicOptionColumnCount: 2 + list_config: + skip: 0 + take: 50 + order: + created_at: DESC + relations: + - variants + - variant.prices + - images dry_run: - description: Specify if the job must apply the modifications or not. type: boolean + description: Specify if the job must apply the modifications or not. default: false result: - description: The result of the batch job. type: object + description: The result of the batch job. + properties: + count: + type: number + advancement_count: + type: number + progress: + type: number + errors: + type: object + properties: + message: + type: string + code: + oneOf: + - type: string + - type: number + err: + type: array + stat_descriptors: + type: object + properties: + key: + type: string + name: + type: string + message: + type: string + file_key: + type: string + file_size: + type: number + example: + errors: + - err: [] + code: unknown + message: Method not implemented. + stat_descriptors: + - key: product-export-count + name: Product count to export + message: There will be 8 products exported by this action pre_processed_at: - description: The date from which the job has been pre processed. type: string + description: The date from which the job has been pre processed. + format: date-time + processing_at: + type: string + description: The date the job is processing at. format: date-time confirmed_at: - description: The date when the confirmation has been done. type: string + description: The date when the confirmation has been done. format: date-time completed_at: - description: The date of the completion. type: string + description: The date of the completion. format: date-time canceled_at: - description: The date of the concellation. type: string + description: The date of the concellation. + format: date-time + failed_at: + type: string + description: The date when the job failed. format: date-time created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was last updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time cart: title: Cart @@ -1788,127 +2269,261 @@ components: properties: id: type: string + description: The cart's ID + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 email: type: string + description: The email associated with the cart + format: email billing_address_id: type: string + description: The billing address's ID + example: addr_01G8ZH853YPY9B94857DY91YGW billing_address: + description: Available if the relation `billing_address` is expanded. $ref: '#/components/schemas/address' shipping_address_id: type: string + description: The shipping address's ID + example: addr_01G8ZH853YPY9B94857DY91YGW shipping_address: + description: Available if the relation `shipping_address` is expanded. $ref: '#/components/schemas/address' items: + description: Available if the relation `items` is expanded. type: array items: $ref: '#/components/schemas/line_item' region_id: type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G region: - $ref: '#/components/schemas/region' + description: A region object. Available if the relation `region` is expanded. + type: object discounts: type: array + description: Available if the relation `discounts` is expanded. items: - $ref: '#/components/schemas/region' + type: object + description: A discount object. gift_cards: type: array + description: Available if the relation `gift_cards` is expanded. items: - $ref: '#/components/schemas/gift_card' + type: object + description: A gift card object. customer_id: type: string + description: The customer's ID + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 customer: - $ref: '#/components/schemas/customer' + description: A customer object. Available if the relation `customer` is expanded. + type: object payment_session: + description: The selected payment session in the cart. $ref: '#/components/schemas/payment_session' payment_sessions: type: array + description: The payment sessions created on the cart. items: $ref: '#/components/schemas/payment_session' + payment_id: + type: string + description: The payment's ID if available + example: pay_01G8ZCC5W42ZNY842124G7P5R9 payment: + description: Available if the relation `payment` is expanded. $ref: '#/components/schemas/payment' shipping_methods: type: array + description: The shipping methods added to the cart. items: $ref: '#/components/schemas/shipping_method' type: type: string + description: The cart's type. enum: - default - swap + - draft_order - payment_link + - claim + default: default completed_at: type: string + description: The date with timezone at which the cart was completed. format: date-time + payment_authorized_at: + type: string + description: The date with timezone at which the payment was authorized. + format: date-time + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of a cart in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + context: + type: object + description: >- + The context of the cart which can include info like IP or user + agent. + example: + ip: '::1' + user_agent: PostmanRuntime/7.29.2 + sales_channel_id: + type: string + description: The sales channel ID the cart is associated with. + example: null + sales_channel: + description: >- + A sales channel object. Available if the relation `sales_channel` is + expanded. + type: object created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white shipping_total: type: integer + description: The total of shipping + example: 1000 discount_total: type: integer + description: The total of discount + example: 800 tax_total: type: integer + description: The total of tax + example: 0 + refunded_total: + type: integer + description: >- + The total amount refunded if the order associated with this cart is + returned. + example: 0 + total: + type: integer + description: The total amount of the cart + example: 8200 subtotal: type: integer + description: The subtotal of the cart + example: 8000 refundable_amount: type: integer + description: The amount that can be refunded + example: 8200 gift_card_total: type: integer + description: The total of gift cards + example: 0 + gift_card_tax_total: + type: integer + description: The total of gift cards with taxes + example: 0 claim_image: title: Claim Image description: Represents photo documentation of a claim. x-resourceId: claim_image + required: + - claim_item_id + - url properties: id: type: string + description: The claim image's ID + example: cimg_01G8ZH853Y6TFXWPG5EYE81X63 claim_item_id: type: string + description: The ID of the claim item associated with the image + claim_item: + description: >- + A claim item object. Available if the relation `claim_item` is + expanded. + type: object url: type: string + description: The URL of the image + format: uri created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white claim_item: title: Claim Item description: >- Represents a claimed item along with information about the reasons for the claim. x-resourceId: claim_item + required: + - claim_order_id + - item_id + - variant_id + - reason + - quantity properties: id: type: string + description: The claim item's ID + example: citm_01G8ZH853Y6TFXWPG5EYE81X63 images: type: array + description: Available if the relation `images` is expanded. items: $ref: '#/components/schemas/claim_image' claim_order_id: + description: The ID of the claim this item is associated with. type: string + claim_order: + description: >- + A claim order object. Available if the relation `claim_order` is + expanded. + type: object item_id: + description: The ID of the line item that the claim item refers to. type: string + example: item_01G8ZM25TN49YV9EQBE2NC27KC item: - description: The Line Item that the claim refers to + description: Available if the relation `item` is expanded. $ref: '#/components/schemas/line_item' variant_id: + description: The ID of the product variant that is claimed. type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 variant: - description: The Product Variant that is claimed. - $ref: '#/components/schemas/product_variant' + description: A variant object. Available if the relation `variant` is expanded. + type: object reason: description: The reason for the claim type: string @@ -1920,27 +2535,37 @@ components: note: description: 'An optional note about the claim, for additional information' type: string + example: I don't like it. quantity: description: >- The quantity of the item that is being claimed; must be less than or equal to the amount purchased in the original order. type: integer + example: 1 tags: - description: User defined tags for easy filtering and grouping. + description: >- + User defined tags for easy filtering and grouping. Available if the + relation 'tags' is expanded. type: array items: $ref: '#/components/schemas/claim_tag' created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white claim_order: title: Claim Order description: >- @@ -1948,9 +2573,14 @@ components: order consists of a subset of items associated with an original order, and can contain additional information about fulfillments and returns. x-resourceId: claim_order + required: + - type + - order_id properties: id: type: string + description: The claim's ID + example: claim_01G8ZH853Y6TFXWPG5EYE81X63 type: type: string enum: @@ -1958,10 +2588,12 @@ components: - replace payment_status: type: string + description: The status of the claim's payment enum: - na - not_refunded - refunded + default: na fulfillment_status: type: string enum: @@ -1974,6 +2606,7 @@ components: - returned - canceled - requires_action + default: not_fulfilled claim_items: description: The items that have been claimed type: array @@ -1987,16 +2620,23 @@ components: items: $ref: '#/components/schemas/line_item' order_id: - description: The id of the order that the claim comes from. + description: The ID of the order that the claim comes from. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object return_order: - description: Holds information about the return if the claim is to be returned - $ref: '#/components/schemas/return' + description: >- + A return object. Holds information about the return if the claim is + to be returned. Available if the relation 'return_order' is expanded + type: object shipping_address_id: - description: The id of the address that the new items should be shipped to + description: The ID of the address that the new items should be shipped to type: string + example: addr_01G8ZH853YPY9B94857DY91YGW shipping_address: - description: The address that the new items should be shipped to + description: Available if the relation `shipping_address` is expanded. $ref: '#/components/schemas/address' shipping_methods: description: The shipping methods that the claim order will be shipped with. @@ -2011,94 +2651,160 @@ components: refund_amount: description: The amount that will be refunded in conjunction with the claim type: integer + example: 1000 canceled_at: - description: The date with timezone at which the Swap was canceled. + description: The date with timezone at which the claim was canceled. type: string format: date-time created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white no_notification: description: >- Flag for describing whether or not notifications related to this should be send. type: boolean - metadata: - type: object + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the cart + associated with the claim in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. claim_tag: title: Claim Tag description: >- Claim Tags are user defined tags that can be assigned to claim items for easy filtering and grouping. x-resourceId: claim_tag + required: + - value properties: id: - description: The id of the claim tag. Will be prefixed by `ctag_`. type: string + description: The claim tag's ID + example: ctag_01G8ZCC5Y63B95V6B5SHBZ91S4 value: description: The value that the claim tag holds type: string + example: Damaged created_at: + type: string description: The date with timezone at which the resource was created. - type: string format: date-time - update_at: - description: The date with timezone at which the resource was last updated. + updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white country: title: Country description: Country details x-resourceId: country + required: + - iso_2 + - iso_3 + - num_code + - name + - display_name properties: id: - description: The database id of the country - type: integer + type: string + description: The country's ID + example: 109 iso_2: - description: The 2 character ISO code for the country. type: string + description: The 2 character ISO code of the country in lower case + example: it + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. iso_3: - description: The 3 character ISO code for the country. type: string + description: The 2 character ISO code of the country in lower case + example: ita + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements + description: See a list of codes. num_code: description: The numerical ISO code for the country. type: string + example: 380 + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_numeric#Officially_assigned_code_elements + description: See a list of codes. name: - description: The normalized country name; in upper case. + description: The normalized country name in upper case. type: string + example: ITALY display_name: description: The country name appropriate for display. type: string + example: Italy + region_id: + type: string + description: The region ID this country is associated with. + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object currency: title: Currency description: Currency x-resourceId: currency + required: + - code + - symbol + - symbol_native + - name properties: code: description: The 3 character ISO code for the currency. type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. symbol: description: The symbol used to indicate the currency. type: string + example: $ symbol_native: description: The native symbol used to indicate the currency. type: string + example: $ name: description: The written name of the currency type: string + example: US Dollar custom_shipping_option: title: Custom Shipping Option description: >- @@ -2106,242 +2812,363 @@ components: can attach a Custom Shipping Option to a cart in order to set a custom price for a particular Shipping Option x-resourceId: custom_shipping_option + required: + - price + - shipping_option_id properties: id: - description: >- - The id of the Custom Shipping Option. This value will be prefixed - with `cso_`. type: string + description: The custom shipping option's ID + example: cso_01G8X99XNB77DMFBJFWX6DN9V9 price: description: >- The custom price set that will override the shipping option's original price type: integer + example: 1000 shipping_option_id: description: >- - The id of the Shipping Option that the custom shipping option + The ID of the Shipping Option that the custom shipping option overrides - anyOf: - - $ref: '#/components/schemas/shipping_option' - cart_id: - description: The id of the Cart that the custom shipping option is attached to - anyOf: - - $ref: '#/components/schemas/cart' - created_at: - description: The date with timezone at which the resource was created. type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: >- + A shipping option object. Available if the relation + `shipping_option` is expanded. + type: object + cart_id: + description: The ID of the Cart that the custom shipping option is attached to + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white customer_group: title: Customer Group description: Represents a customer group x-resourceId: customer_group + required: + - name properties: id: type: string + description: The customer group's ID + example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63 name: type: string + description: The name of the customer group + example: VIP customers: type: array + description: >- + The customers that belong to the customer group. Available if the + relation `customers` is expanded. items: - $ref: '#/components/schemas/customer' + type: object + description: A customer object. + price_lists: + type: array + description: >- + The price lists that are associated with the customer group. + Available if the relation `price_lists` is expanded. + items: + $ref: '#/components/schemas/price_list' created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white customer: title: Customer description: Represents a customer x-resourceId: customer + required: + - email properties: id: type: string + description: The customer's ID + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 email: type: string + description: The customer's email + format: email + first_name: + type: string + description: The customer's first name + example: Arno + last_name: + type: string + description: The customer's first name + example: Willms billing_address_id: type: string + description: The customer's billing address ID + example: addr_01G8ZH853YPY9B94857DY91YGW billing_address: - description: The Customer's billing address. - anyOf: - - $ref: '#/components/schemas/address' + description: Available if the relation `billing_address` is expanded. + $ref: '#/components/schemas/address' shipping_addresses: + description: Available if the relation `shipping_addresses` is expanded. type: array items: $ref: '#/components/schemas/address' - first_name: - type: string - last_name: - type: string phone: type: string + description: The customer's phone number + example: 16128234334802 has_account: type: boolean + description: Whether the customer has an account or not + default: false + orders: + description: Available if the relation `orders` is expanded. + type: array + items: + type: object + description: An order object. + groups: + description: >- + The customer groups the customer belongs to. Available if the + relation `groups` is expanded. + type: array + items: + $ref: '#/components/schemas/customer_group' created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white discount_condition_customer_group: title: Product Tag Discount Condition description: Associates a discount condition with a customer group x-resourceId: discount_condition_customer_group + required: + - customer_group_id + - condition_id properties: customer_group_id: - description: The id of the Product Tag + description: The ID of the Product Tag type: string + example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63 condition_id: - description: The id of the Discount Condition + description: The ID of the Discount Condition type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + customer_group: + description: Available if the relation `customer_group` is expanded. + $ref: '#/components/schemas/customer_group' + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: '#/components/schemas/discount_condition' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_condition_product_collection: title: Product Collection Discount Condition description: Associates a discount condition with a product collection x-resourceId: discount_condition_product_collection + required: + - product_collection_id + - condition_id properties: product_collection_id: - description: The id of the Product Collection + description: The ID of the Product Collection type: string + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG condition_id: - description: The id of the Discount Condition + description: The ID of the Discount Condition type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_collection: + description: Available if the relation `product_collection` is expanded. + $ref: '#/components/schemas/product_collection' + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: '#/components/schemas/discount_condition' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_condition_product_tag: title: Product Tag Discount Condition description: Associates a discount condition with a product tag x-resourceId: discount_condition_product_tag + required: + - product_tag_id + - condition_id properties: product_tag_id: - description: The id of the Product Tag + description: The ID of the Product Tag type: string + example: ptag_01F0YESHPZYY3H4SJ3A5918SBN condition_id: - description: The id of the Discount Condition + description: The ID of the Discount Condition type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_tag: + description: Available if the relation `product_tag` is expanded. + $ref: '#/components/schemas/product_tag' + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: '#/components/schemas/discount_condition' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_condition_product_type: title: Product Type Discount Condition description: Associates a discount condition with a product type x-resourceId: discount_condition_product + required: + - product_type_id + - condition_id properties: product_type_id: - description: The id of the Product Type + description: The ID of the Product Tag type: string + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A condition_id: - description: The id of the Discount Condition + description: The ID of the Discount Condition type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_type: + description: Available if the relation `product_type` is expanded. + $ref: '#/components/schemas/product_type' + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: '#/components/schemas/discount_condition' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_condition_product: title: Product Discount Condition description: Associates a discount condition with a product x-resourceId: discount_condition_product + required: + - product_id + - condition_id properties: product_id: - description: The id of the Product + description: The ID of the Product Tag type: string + example: prod_01G1G5V2MBA328390B5AXJ610F condition_id: - description: The id of the Discount Condition + description: The ID of the Discount Condition type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product: + description: Available if the relation `product` is expanded. + $ref: '#/components/schemas/product' + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: '#/components/schemas/discount_condition' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_condition: title: Discount Condition description: Holds rule conditions for when a discount is applicable x-resourceId: discount_condition + required: + - type + - operator + - discount_rule_id properties: id: - description: The id of the Discount Condition. Will be prefixed by `discon_`. type: string + description: The discount condition's ID + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A type: description: The type of the Condition type: string @@ -2351,31 +3178,93 @@ components: - product_collections - product_tags - customer_groups + operator: + description: The operator of the Condition + type: string + enum: + - in + - not_in + discount_rule_id: + type: string + description: The ID of the discount rule associated with the condition + example: dru_01F0YESMVK96HVX7N419E3CJ7C + discount_rule: + description: Available if the relation `discount_rule` is expanded. + $ref: '#/components/schemas/discount_rule' + products: + description: >- + products associated with this condition if type = products. + Available if the relation `products` is expanded. + type: array + items: + type: object + description: A product object. + product_types: + description: >- + product types associated with this condition if type = + product_types. Available if the relation `product_types` is + expanded. + type: array + items: + type: object + description: A product type object. + product_tags: + description: >- + product tags associated with this condition if type = product_tags. + Available if the relation `product_tags` is expanded. + type: array + items: + type: object + description: A product tag object. + product_collections: + description: >- + product collections associated with this condition if type = + product_collections. Available if the relation `product_collections` + is expanded. + type: array + items: + type: object + description: A product collection object. + customer_groups: + description: >- + customer groups associated with this condition if type = + customer_groups. Available if the relation `customer_groups` is + expanded. + type: array + items: + type: object + description: A customer group object. created_at: + type: string description: The date with timezone at which the resource was created. - type: string format: date-time - update_at: - description: The date with timezone at which the resource was last updated. + updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount_rule: title: Discount Rule description: >- Holds the rules that governs how a Discount is calculated when applied to a Cart. x-resourceId: discount_rule + required: + - type + - value properties: id: - description: The id of the Discount Rule. Will be prefixed by `dru_`. type: string + description: The discount rule's ID + example: dru_01F0YESMVK96HVX7N419E3CJ7C type: description: >- The type of the Discount, can be `fixed` for discounts that reduce @@ -2386,76 +3275,97 @@ components: - fixed - percentage - free_shipping + example: percentage description: description: A short description of the discount type: string + example: 10 Percent value: description: >- The value that the discount represents; this will depend on the type of the discount type: integer + example: 10 allocation: description: The scope that the discount should apply to. type: string enum: - total - item + example: total conditions: description: >- A set of conditions that can be used to limit when the discount can - be used + be used. Available if the relation `conditions` is expanded. type: array items: - $ref: '#/components/schemas/discount_condition' + type: object + description: A discount condition object. created_at: + type: string description: The date with timezone at which the resource was created. - type: string format: date-time - update_at: - description: The date with timezone at which the resource was last updated. + updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white discount: title: Discount description: >- Represents a discount that can be applied to a cart for promotional purposes. x-resourceId: discount + required: + - code + - is_dynamic properties: id: - description: The id of the Discount. Will be prefixed by `disc_`. type: string + description: The discount's ID + example: disc_01F0YESMW10MGHWJKZSDDMN0VN code: description: >- A unique code for the discount - this will be used by the customer to apply the discount type: string + example: 10DISC is_dynamic: description: >- A flag to indicate if multiple instances of the discount can be generated. I.e. for newsletter discounts type: boolean - rule: + example: false + rule_id: + type: string description: The Discount Rule that governs the behaviour of the Discount - anyOf: - - $ref: '#/components/schemas/discount_rule' + example: dru_01F0YESMVK96HVX7N419E3CJ7C + rule: + description: Available if the relation `rule` is expanded. + $ref: '#/components/schemas/discount_rule' is_disabled: description: >- Whether the Discount has been disabled. Disabled discounts cannot be applied to carts type: boolean + example: false parent_discount_id: + type: string description: >- The Discount that the discount was created from. This will always be a dynamic discount - type: string + example: disc_01G8ZH853YPY9B94857DY91YGW + parent_discount: + description: Available if the relation `parent_discount` is expanded. + $ref: '#/components/schemas/discount' starts_at: description: The time at which the discount can be used. type: string @@ -2464,32 +3374,44 @@ components: description: The time at which the discount can no longer be used. type: string format: date-time + valid_duration: + type: string + description: Duration the discount runs between + example: P3Y6M4DT12H30M5S regions: - description: The Regions in which the Discount can be used + description: >- + The Regions in which the Discount can be used. Available if the + relation `regions` is expanded. type: array items: - $ref: '#/components/schemas/region' + type: object + description: A region object. usage_limit: description: The maximum number of times that a discount can be used. type: integer + example: 100 usage_count: description: The number of times a discount has been used. type: integer + example: 50 + default: 0 created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white draft-order: title: DraftOrder description: Represents a draft order @@ -2497,64 +3419,102 @@ components: properties: id: type: string + description: The draft order's ID + example: dorder_01G8TJFKBG38YYFQ035MSVG03C status: type: string + description: The status of the draft order enum: - open - completed + default: open display_id: type: string + description: The draft order's display ID + example: 2 cart_id: type: string + description: The ID of the cart associated with the draft order. + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 cart: - anyOf: - - $ref: '#/components/schemas/cart' + description: A cart object. Available if the relation `cart` is expanded. + type: object order_id: type: string + description: The ID of the order associated with the draft order. + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK order: - anyOf: - - $ref: '#/components/schemas/order' + description: An order object. Available if the relation `order` is expanded. + type: object canceled_at: type: string - format: date-time - created_at: - type: string - format: date-time - update_at: - type: string - format: date-time - deleted_at: - type: string + description: The date the draft order was canceled at. format: date-time completed_at: type: string + description: The date the draft order was completed at. format: date-time no_notification_order: type: boolean - metadata: - type: object + description: Whether to send the customer notifications regarding order updates. + example: false idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of the cart + associated with the draft order in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white fulfillment_item: title: Fulfillment Item description: >- Correlates a Line Item with a Fulfillment, keeping track of the quantity of the Line Item. x-resourceId: fulfillment_item + required: + - fulfillment_id + - item_id + - quantity properties: fulfillment_id: description: The id of the Fulfillment that the Fulfillment Item belongs to. type: string + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF item_id: description: The id of the Line Item that the Fulfillment Item references. type: string + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + fulfillment: + description: >- + A fulfillment object. Available if the relation `fulfillment` is + expanded. + type: object item: - description: The Line Item that the Fulfillment Item references. - anyOf: - - $ref: '#/components/schemas/line_item' + description: Available if the relation `item` is expanded. + $ref: '#/components/schemas/line_item' quantity: description: The quantity of the Line Item that is included in the Fulfillment. type: integer + example: 1 fulfillment_provider: title: Fulfillment Provider description: >- @@ -2565,12 +3525,14 @@ components: id: description: The id of the fulfillment provider as given by the plugin. type: string + example: manual is_installed: description: >- Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`. type: boolean + example: true fulfillment: title: Fulfillment description: >- @@ -2582,28 +3544,50 @@ components: these providers through webhooks in order to automatically update and synchronize the state of Fulfillments. x-resourceId: fulfillment + required: + - provider_id properties: id: - description: The id of the Fulfillment. This value will be prefixed by `ful_`. type: string + description: The cart's ID + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF claim_order_id: description: The id of the Claim that the Fulfillment belongs to. type: string + example: null + claim_order: + description: >- + A claim order object. Available if the relation `claim_order` is + expanded. + type: object swap_id: description: The id of the Swap that the Fulfillment belongs to. type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object order_id: description: The id of the Order that the Fulfillment belongs to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object provider_id: description: >- The id of the Fulfillment Provider responsible for handling the fulfillment type: string + example: manual + provider: + description: Available if the relation `provider` is expanded. + $ref: '#/components/schemas/fulfillment_provider' items: description: >- The Fulfillment Items in the Fulfillment - these hold information - about how many of each Line Item has been fulfilled. + about how many of each Line Item has been fulfilled. Available if + the relation `items` is expanded. type: array items: $ref: '#/components/schemas/fulfillment_item' @@ -2611,7 +3595,7 @@ components: description: >- The Tracking Links that can be used to track the status of the Fulfillment, these will usually be provided by the Fulfillment - Provider. + Provider. Available if the relation `tracking_links` is expanded. type: array items: $ref: '#/components/schemas/tracking_link' @@ -2623,6 +3607,12 @@ components: type: array items: type: string + data: + description: >- + This contains all the data necessary for the Fulfillment provider to + handle the fulfillment. + type: object + example: {} shipped_at: description: The date with timezone at which the Fulfillment was shipped. type: string @@ -2632,164 +3622,378 @@ components: Flag for describing whether or not notifications related to this should be send. type: boolean + example: false canceled_at: description: The date with timezone at which the Fulfillment was canceled. type: string format: date-time - created_at: - description: The date with timezone at which the resource was created. + idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of the + fulfillment in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white gift_card_transaction: title: Gift Card Transaction description: >- Gift Card Transactions are created once a Customer uses a Gift Card to pay for their Order x-resourceId: gift_card_transaction + required: + - gift_card_id + - amount properties: id: - description: >- - The id of the Gift Card Transaction. This value will be prefixed by - `gct_`. type: string + description: The gift card transaction's ID + example: gct_01G8X9A7ESKAJXG2H0E6F1MW7A gift_card_id: - description: The id of the Gift Card that was used in the transaction. + description: The ID of the Gift Card that was used in the transaction. type: string + example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ gift_card: - description: The Gift Card that was used in the transaction. - anyOf: - - $ref: '#/components/schemas/gift_card' + description: >- + A gift card object. Available if the relation `gift_card` is + expanded. + type: object order_id: - description: The id of the Order that the Gift Card was used to pay for. + description: The ID of the Order that the Gift Card was used to pay for. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object amount: description: The amount that was used from the Gift Card. type: integer + example: 10 created_at: description: The date with timezone at which the resource was created. type: string format: date-time + is_taxable: + description: Whether the transaction is taxable or not. + type: boolean + example: false + tax_rate: + description: The tax rate of the transaction + type: number + example: 0 gift_card: title: Gift Card description: >- Gift Cards are redeemable and represent a value that can be used towards the payment of an Order. x-resourceId: gift_card + required: + - code + - value + - balance + - region_id properties: id: - description: The id of the Gift Card. This value will be prefixed by `gift_`. type: string + description: The cart's ID + example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ code: description: >- The unique code that identifies the Gift Card. This is used by the Customer to redeem the value of the Gift Card. type: string + example: 3RFT-MH2C-Y4YZ-XMN4 value: description: The value that the Gift Card represents. type: integer + example: 10 balance: description: The remaining value on the Gift Card. type: integer + example: 10 region_id: + type: string description: The id of the Region in which the Gift Card is available. - type: string + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G region: - description: The Region in which the Gift Card is available. - anyOf: - - $ref: '#/components/schemas/region' + description: A region object. Available if the relation `region` is expanded. + type: object order_id: - description: The id of the Order that the Gift Card was purchased in. type: string + description: The id of the Order that the Gift Card was purchased in. + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object is_disabled: description: >- Whether the Gift Card has been disabled. Disabled Gift Cards cannot be applied to carts. type: boolean + example: false ends_at: description: The time at which the Gift Card can no longer be used. type: string format: date-time created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white + idempotency_key: + title: Idempotency Key + description: >- + Idempotency Key is used to continue a process in case of any failure + that might occur. + x-resourceId: idempotency_key + required: + - idempotency_key + properties: + id: + type: string + description: The idempotency key's ID + example: ikey_01G8X9A7ESKAJXG2H0E6F1MW7A + idempotency_key: + description: >- + The unique randomly generated key used to determine the state of a + process. + type: string + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + description: Date which the idempotency key was locked. + type: string + format: date-time + locked_at: + description: Date which the idempotency key was locked. + type: string + format: date-time + request_method: + description: The method of the request + type: string + example: POST + request_params: + type: object + description: The parameters passed to the request + example: + id: cart_01G8ZH853Y6TFXWPG5EYE81X63 + request_path: + description: The request's path + type: string + example: /store/carts/cart_01G8ZH853Y6TFXWPG5EYE81X63/complete + response_code: + type: string + description: The response's code. + example: 200 + response_body: + type: object + description: The response's body + example: + id: cart_01G8ZH853Y6TFXWPG5EYE81X63 + recovery_point: + type: string + description: Where to continue from. + default: started image: title: Image description: Images holds a reference to a URL at which the image file can be found. x-resourceId: image + required: + - url properties: id: - description: The id of the Image. This value will be prefixed by `img_`. type: string + description: The image's ID + example: img_01G749BFYR6T8JTVW6SGW3K3E6 url: description: The URL at which the image file can be found. type: string + format: uri created_at: + type: string description: The date with timezone at which the resource was created. - type: string format: date-time - update_at: - description: The date with timezone at which the resource was last updated. + updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white invite: title: Invite description: Represents an invite x-resourceId: invite + required: + - user_email properties: id: type: string + description: The invite's ID + example: invite_01G8TKE4XYCTHSCK2GDEP47RE1 user_email: type: string + description: The email of the user being invited. + format: email role: type: string + description: The user's role. enum: - admin - member - developer + default: member accepted: type: boolean + description: Whether the invite was accepted or not. + example: false token: type: string + description: The token used to accept the invite. expores_at: type: string + description: The date the invite expires at. format: date-time created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white + line_item_adjustment: + title: Line Item Adjustment + description: Represents an Line Item Adjustment + x-resourceId: line_item_adjustment + required: + - item_id + - description + - amount + properties: + id: + type: string + description: The invite's ID + example: lia_01G8TKE4XYCTHSCK2GDEP47RE1 + item_id: + type: string + description: The ID of the line item + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + item: + description: Available if the relation `item` is expanded. + $ref: '#/components/schemas/line_item' + description: + type: string + description: The line item's adjustment description + example: Adjusted item's price. + discount_id: + type: string + description: The ID of the discount associated with the adjustment + example: disc_01F0YESMW10MGHWJKZSDDMN0VN + discount: + description: Available if the relation `discount` is expanded. + $ref: '#/components/schemas/discount' + amount: + type: number + description: The adjustment amount + example: 1000 + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white + line_item_tax_line: + title: Line Item Tax Line + description: Represents an Line Item Tax Line + x-resourceId: line_item_tax_line + required: + - item_id + - rate + - name + properties: + id: + type: string + description: The line item tax line's ID + example: litl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + item_id: + type: string + description: The ID of the line item + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + item: + description: Available if the relation `item` is expanded. + $ref: '#/components/schemas/line_item' + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + rate: + description: The numeric rate to charge tax by + type: number + example: 10 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white line_item: title: Line Item description: >- @@ -2799,87 +4003,176 @@ components: Returns. Line Items may also be created when processing Swaps and Claims. x-resourceId: line_item + required: + - title + - unit_price + - quantity properties: id: - description: The id of the Line Item. This value will be prefixed by `item_`. type: string + description: The cart's ID + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN cart_id: - description: The id of the Cart that the Line Item belongs to. + description: The ID of the Cart that the Line Item belongs to. type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object order_id: - description: The id of the Order that the Line Item belongs to. + description: The ID of the Order that the Line Item belongs to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object swap_id: description: The id of the Swap that the Line Item belongs to. type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object claim_order_id: description: The id of the Claim that the Line Item belongs to. type: string + example: null + claim_order: + description: >- + A claim order object. Available if the relation `claim_order` is + expanded. + type: object + tax_lines: + description: Available if the relation `tax_lines` is expanded. + type: array + items: + $ref: '#/components/schemas/line_item_tax_line' + adjustments: + description: Available if the relation `adjustments` is expanded. + type: array + items: + $ref: '#/components/schemas/line_item_adjustment' title: description: >- The title of the Line Item, this should be easily identifiable by the Customer. type: string + example: Medusa Coffee Mug description: description: A more detailed description of the contents of the Line Item. type: string + example: One Size thumbnail: description: A URL string to a small image of the contents of the Line Item. type: string + format: uri + example: >- + https://medusa-public-images.s3.eu-west-1.amazonaws.com/coffee-mug.png + is_return: + description: Is the item being returned + type: boolean + example: false is_giftcard: description: Flag to indicate if the Line Item is a Gift Card. type: boolean + example: false should_merge: description: >- Flag to indicate if new Line Items with the same variant should be merged or added as an additional Line Item. type: boolean + example: false allow_discounts: description: >- Flag to indicate if the Line Item should be included when doing discount calculations. type: boolean + example: false + has_shipping: + description: >- + Flag to indicate if the Line Item has fulfillment associated with + it. + type: boolean + example: false unit_price: description: >- The price of one unit of the content in the Line Item. This should be in the currency defined by the Cart/Order/Swap/Claim that the Line Item belongs to. type: boolean + example: 8000 variant_id: description: The id of the Product Variant contained in the Line Item. type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 variant: - description: The Product Variant contained in the Line Item. - anyOf: - - $ref: '#/components/schemas/product_variant' + description: >- + A product variant object. The Product Variant contained in the Line + Item. Available if the relation `variant` is expanded. + type: object quantity: description: The quantity of the content in the Line Item. type: integer + example: 1 fulfilled_quantity: description: The quantity of the Line Item that has been fulfilled. type: integer + example: 0 returned_quantity: description: The quantity of the Line Item that has been returned. type: integer + example: 0 shipped_quantity: description: The quantity of the Line Item that has been shipped. type: integer - created_at: - description: The date with timezone at which the resource was created. - type: string - format: date-time - updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - metadata: - description: An optional key-value map with additional information. - type: object + example: 0 refundable: description: >- The amount that can be refunded from the given Line Item. Takes taxes and discounts into consideration. type: integer + example: 0 + subtotal: + type: integer + description: The subtotal of the line item + example: 8000 + tax_total: + type: integer + description: The total of tax of the line item + example: 0 + total: + type: integer + description: The total amount of the line item + example: 8000 + original_total: + type: integer + description: The original total amount of the line item + example: 8000 + original_tax_total: + type: integer + description: The original tax total amount of the line item + example: 0 + discount_total: + type: integer + description: The total of discount of the line item + example: 0 + gift_card_total: + type: integer + description: The total of the gift card of the line item + example: 0 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white money_amount: title: Money Amount description: >- @@ -2890,50 +4183,82 @@ components: region-based pricing is used the amount will be in the currency defined for the Reigon. x-resourceId: money_amount + required: + - currency_code + - amount properties: id: - description: The id of the Money Amount. This value will be prefixed by `ma_`. type: string + description: The money amount's ID + example: ma_01F0YESHRFQNH5S8Q0PK84YYZN currency_code: description: The 3 character currency code that the Money Amount is given in. type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: '#/components/schemas/currency' amount: description: >- The amount in the smallest currecny unit (e.g. cents 100 cents to charge $1) that the Product Variant will cost. type: integer + example: 100 min_quantity: description: >- The minimum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities. type: integer + example: 1 max_quantity: description: >- The maximum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities. type: integer + example: 1 + price_list_id: + type: string + description: The ID of the price list associated with the money amount + example: pl_01G8X3CKJXCG5VXVZ87H9KC09W + price_list: + description: Available if the relation `price_list` is expanded. + $ref: '#/components/schemas/price_list' variant_id: - description: The id of the Product Variant that the Money Amount belongs to. + description: The id of the Product Variant contained in the Line Item. type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: >- + The Product Variant contained in the Line Item. Available if the + relation `variant` is expanded. + type: object region_id: - description: The id of the Region that the Money Amount is defined for. type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G region: - description: The Region that the Money Amount is defined for. - anyOf: - - $ref: '#/components/schemas/region' + description: A region object. Available if the relation `region` is expanded. + type: object created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white note: title: Note description: >- @@ -2941,54 +4266,71 @@ components: resources to allow users to describe additional information in relation to these. x-resourceId: note + required: + - value + - resource_type + - resource_id properties: id: - description: The id of the Note. This value will be prefixed by `note_`. type: string + description: The note's ID + example: note_01G8TM8ENBMC7R90XRR1G6H26Q resource_type: description: The type of resource that the Note refers to. type: string + example: order resource_id: - description: The id of the resource that the Note refers to. + description: The ID of the resource that the Note refers to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK value: description: The contents of the note. type: string - author: - description: The author of the note. - anyOf: - - $ref: '#/components/schemas/user' - created_at: - description: The date with timezone at which the resource was created. + example: This order must be fulfilled on Monday + author_id: type: string + description: The ID of the author (user) + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + author: + description: Available if the relation `author` is expanded. + $ref: '#/components/schemas/user' + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white notification_provider: title: Notification Provider description: >- Represents a notification provider plugin and holds its installation status. x-resourceId: notification_provider + required: + - id properties: id: description: The id of the notification provider as given by the plugin. type: string + example: sendgrid is_installed: description: >- Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`. type: boolean + default: true notification: title: Notification description: >- @@ -2997,40 +4339,47 @@ components: used to show a chronological timeline for communications sent to a Customer regarding an Order, and enables resends. x-resourceId: notification + required: + - resource_type + - resource_id + - to properties: id: - description: The id of the Notification. This value will be prefixed by `noti_`. type: string + description: The notification's ID + example: noti_01G53V9Y6CKMCGBM1P0X7C28RX event_name: description: The name of the event that the notification was sent for. type: string + example: order.placed resource_type: description: The type of resource that the Notification refers to. type: string + example: order resource_id: - description: The id of the resource that the Notification refers to. + description: The ID of the resource that the Notification refers to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK customer_id: - description: The id of the Customer that the Notification was sent to. + description: The ID of the Customer that the Notification was sent to. type: string + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 customer: - description: The Customer that the Notification was sent to. - anyOf: - - $ref: '#/components/schemas/customer' + description: A customer object. Available if the relation `customer` is expanded. + type: object to: description: >- The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id type: string + example: user@example.com data: description: >- The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend. type: object - parent_id: - description: The id of the Notification that was originally sent. - type: string + example: {} resends: description: >- The resends that have been completed after the original @@ -3041,13 +4390,17 @@ components: provider_id: description: The id of the Notification Provider that handles the Notification. type: string + example: sengrid + provider: + description: Available if the relation `provider` is expanded. + $ref: '#/components/schemas/notification_provider' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time notification_resend: title: Notification Resend @@ -3055,76 +4408,123 @@ components: x-resourceId: notification_resend properties: id: - description: The id of the Notification. This value will be prefixed by `noti_`. + description: The notification resend's ID type: string + example: noti_01F0YET45G9NHP08Z66CE4QKBS event_name: description: The name of the event that the notification was sent for. type: string + example: order.placed resource_type: description: The type of resource that the Notification refers to. type: string + example: order resource_id: - description: The id of the resource that the Notification refers to. + description: The ID of the resource that the Notification refers to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + customer_id: + description: The ID of the Customer that the Notification was sent to. + type: string + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: A customer object. Available if the relation `customer` is expanded. + type: object to: description: >- The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id type: string + example: user@example.com data: description: >- The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend. type: object + example: {} parent_id: - description: The id of the Notification that was originally sent. + description: The ID of the Notification that was originally sent. type: string + example: noti_01G53V9Y6CKMCGBM1P0X7C28RX + parent_notification: + description: Available if the relation `parent_notification` is expanded. + $ref: '#/components/schemas/notification' provider_id: - description: The id of the Notification Provider that handles the Notification. + description: The ID of the Notification Provider that handles the Notification. type: string + example: sengrid + provider: + description: Available if the relation `provider` is expanded. + $ref: '#/components/schemas/notification_provider' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time OAuth: title: OAuth description: Represent an OAuth app x-resourceId: OAuth + required: + - id + - display_name + - application_name properties: id: type: string + description: The app's ID + example: example_app display_name: type: string + description: The app's display name + example: Example app application_name: type: string + description: The app's name + example: example install_url: type: string + description: The URL to install the app + format: uri uninstall_url: - type: integer + type: string + description: The URL to uninstall the app + format: uri data: type: object + description: Any data necessary to the app. + example: {} order: title: Order description: Represents an order x-resourceId: order + required: + - customer_id + - email + - region_id + - currency_code properties: id: type: string + description: The order's ID + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK status: type: string + description: The order's status enum: - pending - completed - archived - canceled - requires_action + default: pending fulfillment_status: type: string + description: The order's fulfillment status enum: - not_fulfilled - partially_fulfilled @@ -3135,8 +4535,10 @@ components: - returned - canceled - requires_action + default: not_fulfilled payment_status: type: string + description: The order's payment status enum: - not_paid - awaiting @@ -3145,134 +4547,246 @@ components: - refuneded - canceled - requires_action + default: not_paid display_id: type: integer + description: The order's display ID + example: 2 cart_id: type: string - currency_code: - type: string - tax_rate: - type: number - discounts: - type: array - items: - $ref: '#/components/schemas/discount' - email: - type: string - billing_address_id: - type: string - billing_address: - anyOf: - - $ref: '#/components/schemas/address' - shipping_address_id: - type: string - shipping_address: - anyOf: - - $ref: '#/components/schemas/address' - items: - type: array - items: - $ref: '#/components/schemas/line_item' - region_id: - type: string - region: - anyOf: - - $ref: '#/components/schemas/region' - gift_cards: - type: array - items: - $ref: '#/components/schemas/gift_card' + description: The ID of the cart associated with the order + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object customer_id: type: string + description: The ID of the customer associated with the order + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 customer: - anyOf: - - $ref: '#/components/schemas/customer' - payment_session: - anyOf: - - $ref: '#/components/schemas/payment_session' - payment_sessions: + description: A customer object. Available if the relation `customer` is expanded. + type: object + email: + description: The email associated with the order + type: string + format: email + billing_address_id: + type: string + description: The ID of the billing address associated with the order + example: addr_01G8ZH853YPY9B94857DY91YGW + billing_address: + description: Available if the relation `billing_address` is expanded. + $ref: '#/components/schemas/address' + shipping_address_id: + type: string + description: The ID of the shipping address associated with the order + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: '#/components/schemas/address' + region_id: + type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + currency_code: + description: The 3 character currency code that is used in the order + type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: '#/components/schemas/currency' + tax_rate: + description: The order's tax rate + type: number + example: 0 + discounts: type: array + description: >- + The discounts used in the order. Available if the relation + `discounts` is expanded. items: - $ref: '#/components/schemas/payment_session' - payments: + type: object + description: A discount object. + gift_cards: type: array + description: >- + The gift cards used in the order. Available if the relation + `gift_cards` is expanded. items: - $ref: '#/components/schemas/payment' + type: object + description: A gift card object. shipping_methods: type: array + description: >- + The shipping methods used in the order. Available if the relation + `shipping_methods` is expanded. items: $ref: '#/components/schemas/shipping_method' + payments: + type: array + description: >- + The payments used in the order. Available if the relation `payments` + is expanded. + items: + $ref: '#/components/schemas/payment' fulfillments: type: array + description: >- + The fulfillments used in the order. Available if the relation + `fulfillments` is expanded. items: $ref: '#/components/schemas/fulfillment' returns: type: array + description: >- + The returns associated with the order. Available if the relation + `returns` is expanded. items: - $ref: '#/components/schemas/return' + type: object + description: A return object. claims: type: array + description: >- + The claims associated with the order. Available if the relation + `claims` is expanded. items: - $ref: '#/components/schemas/claim_order' + type: object + description: A claim order object. refunds: type: array + description: >- + The refunds associated with the order. Available if the relation + `refunds` is expanded. items: - $ref: '#/components/schemas/refund' + type: object + description: A refund object. swaps: type: array + description: >- + The swaps associated with the order. Available if the relation + `swaps` is expanded. items: - $ref: '#/components/schemas/refund' + type: object + description: A swap object. + draft_order_id: + type: string + description: The ID of the draft order this order is associated with. + example: null + draft_order: + description: >- + A draft order object. Available if the relation `draft_order` is + expanded. + type: object + items: + type: array + description: >- + The line items that belong to the order. Available if the relation + `items` is expanded. + items: + $ref: '#/components/schemas/line_item' gift_card_transactions: type: array + description: >- + The gift card transactions used in the order. Available if the + relation `gift_card_transactions` is expanded. items: $ref: '#/components/schemas/gift_card_transaction' canceled_at: type: string + description: The date the order was canceled on. format: date-time - created_at: - type: string - format: date-time - update_at: - type: string - format: date-time - deleted_at: - type: string - format: date-time - metadata: - type: object - shipping_total: - type: integer - discount_total: - type: integer - tax_total: - type: integer - subtotal: - type: integer - refundable_amount: - type: integer - gift_card_total: - type: integer - paid_total: - type: integer no_notification: description: >- Flag for describing whether or not notifications related to this should be send. type: boolean + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the processing of the order + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + external_id: + description: The ID of an external order. + type: string + example: null + sales_channel_id: + type: string + description: The ID of the sales channel this order is associated with. + example: null + sales_channel: + description: >- + A sales channel object. Available if the relation `sales_channel` is + expanded. + type: object + shipping_total: + type: integer + description: The total of shipping + example: 1000 + discount_total: + type: integer + description: The total of discount + example: 800 + tax_total: + type: integer + description: The total of tax + example: 0 + refunded_total: + type: integer + description: The total amount refunded if the order is returned. + example: 0 + total: + type: integer + description: The total amount of the order + example: 8200 + subtotal: + type: integer + description: The subtotal of the order + example: 8000 + paid_total: + type: integer + description: The total amount paid + example: 8000 + refundable_amount: + type: integer + description: The amount that can be refunded + example: 8200 + gift_card_total: + type: integer + description: The total of gift cards + example: 0 + gift_card_tax_total: + type: integer + description: The total of gift cards with taxes + example: 0 payment_provider: title: Payment Provider description: Represents a Payment Provider plugin and holds its installation status. x-resourceId: payment_provider + required: + - id properties: id: description: The id of the payment provider as given by the plugin. type: string + example: manual is_installed: description: >- Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`. type: boolean + default: true payment_session: title: Payment Session description: >- @@ -3283,25 +4797,34 @@ components: Sessions will eventually get promoted to Payments to indicate that they are authorized for capture/refunds/etc. x-resourceId: payment_session + required: + - cart_id + - provider_id + - status properties: id: - description: >- - The id of the Payment Session. This value will be prefixed with - `ps_`. type: string + description: The payment session's ID + example: ps_01G901XNSRM2YS3ASN9H5KG3FZ cart_id: description: The id of the Cart that the Payment Session is created for. type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object provider_id: description: >- The id of the Payment Provider that is responsible for the Payment Session type: string + example: manual is_selected: description: >- A flag to indicate if the Payment Session has been selected as the method that will be used to complete the purchase. type: boolean + example: true status: description: >- Indicates the status of the Payment Session. Will default to @@ -3315,6 +4838,7 @@ components: - requires_more - error - canceled + example: pending data: description: >- The data required for the Payment Provider to identify, modify and @@ -3322,13 +4846,23 @@ components: holds an id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state. type: object - created_at: - description: The date with timezone at which the resource was created. + example: {} + idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of a cart in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time payment: title: Payment @@ -3336,33 +4870,59 @@ components: Payments represent an amount authorized with a given payment method, Payments can be captured, canceled or refunded. x-resourceId: payment + required: + - amount + - currency_code + - provider_id properties: id: - description: The id of the Payment. This value will be prefixed with `pay_`. type: string + description: The payment's ID + example: pay_01G2SJNT6DEEWDFNAJ4XWDTHKE swap_id: - description: The id of the Swap that the Payment is used for. - type: string - order_id: - description: The id of the Order that the Payment is used for. + description: The ID of the Swap that the Payment is used for. type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object cart_id: description: The id of the Cart that the Payment Session is created for. type: string + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + order_id: + description: The ID of the Order that the Payment is used for. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object amount: description: The amount that the Payment has been authorized for. type: integer + example: 100 currency_code: description: The 3 character ISO currency code that the Payment is completed in. type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: '#/components/schemas/currency' amount_refunded: description: >- The amount of the original Payment amount that has been refunded back to the Customer. type: integer + example: 0 provider_id: description: The id of the Payment Provider that is responsible for the Payment type: string + example: manual data: description: >- The data required for the Payment Provider to identify, modify and @@ -3370,6 +4930,7 @@ components: id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state. type: object + example: {} captured_at: description: The date with timezone at which the Payment was captured. type: string @@ -3378,27 +4939,50 @@ components: description: The date with timezone at which the Payment was canceled. type: string format: date-time - created_at: - description: The date with timezone at which the resource was created. + idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of a payment + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white price_list: title: Price List description: >- Price Lists represents a set of prices that overrides the default price for one or more product variants. x-resourceId: price_list + required: + - name + - description properties: id: - description: The id of the Price List. This value will be prefixed by `pl_`. type: string + description: The price list's ID + example: pl_01G8X3CKJXCG5VXVZ87H9KC09W + name: + type: string + description: The price list's name + example: VIP Prices + description: + type: string + description: The price list's description + example: Prices for VIP customers type: description: >- The type of Price List. This can be one of either `sale` or @@ -3407,6 +4991,14 @@ components: enum: - sale - override + default: sale + status: + description: The status of the Price List + type: string + enum: + - active + - draft + default: draft starts_at: description: The date with timezone that the Price List starts being valid. type: string @@ -3416,60 +5008,78 @@ components: type: string format: date-time customer_groups: - description: The Customer Groups that the Price List applies to. + description: >- + The Customer Groups that the Price List applies to. Available if the + relation `customer_groups` is expanded. type: array items: - $ref: '#/components/schemas/customer_group' + type: object + description: A customer group object. + prices: + description: >- + The Money Amounts that are associated with the Price List. Available + if the relation `prices` is expanded. + type: array + items: + $ref: '#/components/schemas/money_amount' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time product_collection: title: Product Collection description: Product Collections represents a group of Products that are related. x-resourceId: product_collection + required: + - title properties: id: - description: >- - The id of the Product Collection. This value will be prefixed with - `pcol_`. type: string + description: The product collection's ID + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG title: description: The title that the Product Collection is identified by. type: string + example: Summer Collection handle: description: >- A unique string that identifies the Product Collection - can for example be used in slug structures. type: string + example: summer-collection products: - description: The Products contained in the Product Collection. + description: >- + The Products contained in the Product Collection. Available if the + relation `products` is expanded. type: array items: - $ref: '#/components/schemas/product' + type: object + description: A product collection object. created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_option_value: title: Product Option Value description: >- @@ -3477,43 +5087,57 @@ components: Product Option Value for each of the Product Options defined on the Product. x-resourceId: product_option_value + required: + - value + - option_id + - variant_id properties: id: - description: >- - The id of the Product Option Value. This value will be prefixed with - `optval_`. type: string + description: The product option value's ID + example: optval_01F0YESHR7S6ECD03RF6W12DSJ value: description: >- The value that the Product Variant has defined for the specific Product Option (e.g. if the Product Option is "Size" this value could be "Small", "Medium" or "Large"). type: string + example: large option_id: description: >- - The id of the Product Option that the Product Option Value is + The ID of the Product Option that the Product Option Value is defined for. type: string + example: opt_01F0YESHQBZVKCEXJ24BS6PCX3 + option: + description: Available if the relation `option` is expanded. + $ref: '#/components/schemas/product_option' variant_id: description: >- - The id of the Product Variant that the Product Option Value is + The ID of the Product Variant that the Product Option Value is defined for. type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: Available if the relation `variant` is expanded. + $ref: '#/components/schemas/product_variant' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_option: title: Product Option description: >- @@ -3521,150 +5145,189 @@ components: variants of a Product. Common Product Options are "Size" and "Color", but Medusa doesn't limit what Product Options that can be defined. x-resourceId: product_option + required: + - title + - product_id properties: id: - description: >- - The id of the Product Option. This value will be prefixed with - `opt_`. type: string + description: The product option's ID + example: opt_01F0YESHQBZVKCEXJ24BS6PCX3 title: description: The title that the Product Option is defined by (e.g. "Size"). type: string + example: Size values: - description: The Product Option Values that are defined for the Product Option. + description: >- + The Product Option Values that are defined for the Product Option. + Available if the relation `values` is expanded. type: array items: $ref: '#/components/schemas/product_option_value' product_id: - description: The id of the Product that the Product Option is defined for. + description: The ID of the Product that the Product Option is defined for. type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: A product object. Available if the relation `product` is expanded. + type: object created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_tag: title: Product Tag description: Product Tags can be added to Products for easy filtering and grouping. x-resourceId: product_tag + required: + - value properties: id: - description: The id of the Product Tag. This value will be prefixed with `ptag_`. type: string + description: The product tag's ID + example: ptag_01G8K2MTMG9168F2B70S1TAVK3 value: - description: The value that the Product Tag represents (e.g. "Pants"). + description: The value that the Product Tag represents type: string + example: Pants created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_tax_rate: title: Product Tax Rate description: >- Associates a tax rate with a product to indicate that the product is taxed in a certain way x-resourceId: product_tax_rate + required: + - product_id + - rate_id properties: product_id: - description: The id of the Product + description: The ID of the Product type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: Available if the relation `product` is expanded. + $ref: '#/components/schemas/product' rate_id: - description: The id of the Tax Rate + description: The ID of the Tax Rate type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: '#/components/schemas/tax_rate' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_type_tax_rate: title: Product Type Tax Rate description: >- Associates a tax rate with a product type to indicate that the product type is taxed in a certain way x-resourceId: product_type_tax_rate + required: + - product_type_id + - rate_id properties: product_type_id: - description: The id of the Product type + description: The ID of the Product type type: string + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + product_type: + description: Available if the relation `product_type` is expanded. + $ref: '#/components/schemas/product_type' rate_id: description: The id of the Tax Rate type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: '#/components/schemas/tax_rate' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_type: title: Product Type description: >- Product Type can be added to Products for filtering and reporting purposes. x-resourceId: product_type + required: + - value properties: id: - description: >- - The id of the Product Type. This value will be prefixed with - `ptyp_`. type: string + description: The product type's ID + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A value: - description: The value that the Product Type represents (e.g. "Clothing"). + description: The value that the Product Type represents. type: string + example: Clothing created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product_variant: title: Product Variant description: >- @@ -3673,25 +5336,33 @@ components: Product can have is given by the number of available Product Option combinations. x-resourceId: product_variant + required: + - title + - product_id + - inventory_quantity properties: id: - description: >- - The id of the Product Variant. This value will be prefixed with - `variant_`. type: string + description: The product variant's ID + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 title: description: >- A title that can be displayed for easy identification of the Product Variant. type: string + example: Small product_id: - description: The id of the Product that the Product Variant belongs to. + description: The ID of the Product that the Product Variant belongs to. type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: A product object. Available if the relation `product` is expanded. + type: object prices: description: >- The Money Amounts defined for the Product Variant. Each Money Amount represents a price in a given currency or a price in a specific - Region. + Region. Available if the relation `prices` is expanded. type: array items: $ref: '#/components/schemas/money_amount' @@ -3701,96 +5372,119 @@ components: This will usually be a unqiue identifer for the item that is to be shipped, and can be referenced across multiple systems. type: string + example: shirt-123 barcode: description: >- A generic field for a GTIN number that can be used to identify the Product Variant. type: string + example: null ean: description: >- An EAN barcode number that can be used to identify the Product Variant. type: string + example: null upc: description: >- A UPC barcode number that can be used to identify the Product Variant. type: string + example: null + variant_rank: + description: The ranking of this variant + type: number + default: 0 inventory_quantity: description: The current quantity of the item that is stocked. type: integer + example: 100 allow_backorder: description: >- Whether the Product Variant should be purchasable when `inventory_quantity` is 0. type: boolean + default: false manage_inventory: description: Whether Medusa should manage inventory for the Product Variant. type: boolean + default: true hs_code: description: >- The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null origin_country: description: >- The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null mid_code: description: >- The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null material: description: >- The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null weight: description: >- The weight of the Product Variant. May be used in shipping rate calculations. - type: string + type: number + example: null height: description: >- The height of the Product Variant. May be used in shipping rate calculations. - type: string + type: number + example: null width: description: >- The width of the Product Variant. May be used in shipping rate calculations. - type: string + type: number + example: null length: description: >- The length of the Product Variant. May be used in shipping rate calculations. - type: string + type: number + example: null options: - description: The Product Option Values specified for the Product Variant. + description: >- + The Product Option Values specified for the Product Variant. + Available if the relation `options` is expanded. type: array items: $ref: '#/components/schemas/product_option_value' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white product: title: Product description: >- @@ -3798,15 +5492,20 @@ components: such as images and descriptions. Products can have multiple options which define the properties that Product Variants differ by. x-resourceId: product + required: + - title + - profile_id properties: id: - description: The id of the Product. This value will be prefixed with `prod_`. type: string + description: The product's ID + example: prod_01G1G5V2MBA328390B5AXJ610F title: description: >- A title that can be displayed for easy identification of the Product. type: string + example: Medusa Coffee Mug subtitle: description: >- An optional subtitle that can be used to further specify the @@ -3815,121 +5514,174 @@ components: description: description: A short description of the Product. type: string + example: Every programmer's best friend. handle: description: A unique identifier for the Product (e.g. for slug structure). type: string + example: coffee-mug is_giftcard: description: >- Whether the Product represents a Gift Card. Products that represent Gift Cards will automatically generate a redeemable Gift Card code once they are purchased. type: boolean - discountable: - description: >- - Whether the Product can be discounted. Discounts will not apply to - Line Items of this Product when this flag is set to `false`. - type: boolean + default: false + status: + description: The status of the product + type: string + enum: + - draft + - proposed + - published + - rejected + default: draft images: - description: Images of the Product + description: >- + Images of the Product. Available if the relation `images` is + expanded. type: array items: $ref: '#/components/schemas/image' thumbnail: description: A URL to an image file that can be used to identify the Product. type: string + format: uri options: description: >- The Product Options that are defined for the Product. Product Variants of the Product will have a unique combination of Product - Option Values. + Option Values. Available if the relation `options` is expanded. type: array items: $ref: '#/components/schemas/product_option' variants: description: >- The Product Variants that belong to the Product. Each will have a - unique combination of Product Option Values. + unique combination of Product Option Values. Available if the + relation `variants` is expanded. type: array items: $ref: '#/components/schemas/product_variant' profile_id: description: >- - The id of the Shipping Profile that the Product belongs to. Shipping + The ID of the Shipping Profile that the Product belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products. type: string + example: sp_01G1G5V239ENSZ5MV4JAR737BM + profile: + description: Available if the relation `profile` is expanded. + $ref: '#/components/schemas/shipping_profile' + weight: + description: >- + The weight of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + height: + description: >- + The height of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + width: + description: >- + The width of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + length: + description: >- + The length of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null hs_code: description: >- The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null origin_country: description: >- The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null mid_code: description: >- The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string + example: null material: description: >- The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers. type: string - weight: - description: >- - The weight of the Product Variant. May be used in shipping rate - calculations. + example: null + collection_id: type: string - height: - description: >- - The height of the Product Variant. May be used in shipping rate - calculations. - type: string - width: - description: >- - The width of the Product Variant. May be used in shipping rate - calculations. - type: string - length: - description: >- - The length of the Product Variant. May be used in shipping rate - calculations. - type: string - type: - description: The Product Type of the Product (e.g. "Clothing") - anyOf: - - $ref: '#/components/schemas/product_type' + description: The Product Collection that the Product belongs to + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG collection: - description: The Product Collection that the Product belongs to (e.g. "SS20") - anyOf: - - $ref: '#/components/schemas/product_collection' + description: >- + A product collection object. Available if the relation `collection` + is expanded. + type: object + type_id: + type: string + description: The Product type that the Product belongs to + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + type: + description: Available if the relation `type` is expanded. + $ref: '#/components/schemas/product_type' tags: - description: The Product Tags assigned to the Product. + description: >- + The Product Tags assigned to the Product. Available if the relation + `tags` is expanded. type: array items: $ref: '#/components/schemas/product_tag' - created_at: - description: The date with timezone at which the resource was created. + discountable: + description: >- + Whether the Product can be discounted. Discounts will not apply to + Line Items of this Product when this flag is set to `false`. + type: boolean + default: true + external_id: + description: The external ID of the product type: string + example: null + sales_channels: + description: >- + The sales channels the product is associated with. Available if the + relation `sales_channels` is expanded. + type: array + items: + type: object + description: A sales channel object. + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white refund: title: Refund description: >- @@ -3937,19 +5689,26 @@ components: a given reason. Refunds may occur in relation to Returns, Swaps and Claims, but can also be initiated by a store operator. x-resourceId: refund + required: + - order_id + - amount properties: id: - description: The id of the Refund. This value will be prefixed with `ref_`. type: string + description: The refund's ID + example: ref_01G1G5V27GYX4QXNARRQCW1N8T order_id: description: The id of the Order that the Refund is related to. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK amount: description: The amount that has be refunded to the Customer. type: integer + example: 1000 note: description: An optional note explaining why the amount was refunded. type: string + example: I didn't like it reason: description: >- The reason given for the Refund, will automatically be set when @@ -3961,17 +5720,33 @@ components: - swap - claim - other - created_at: - description: The date with timezone at which the resource was created. + example: return + idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of the refund + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white region: title: Region description: >- @@ -3980,137 +5755,212 @@ components: Region can consist of multiple countries to accomodate common shopping settings across countries. x-resourceId: region + required: + - name + - currency_code + - tax_rate properties: id: - description: The id of the Region. This value will be prefixed with `reg_`. type: string + description: The cart's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G name: description: >- The name of the region as displayed to the customer. If the Region only has one country it is recommended to write the country name. type: string + example: EU currency_code: - description: >- - The 3 character ISO currency code that Customers will shop in in the - Region. + description: The 3 character currency code that the Region uses. type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: '#/components/schemas/currency' tax_rate: description: The tax rate that should be charged on purchases in the Region. type: number + example: 0 + tax_rates: + description: >- + The tax rates that are included in the Region. Available if the + relation `tax_rates` is expanded. + type: array + items: + $ref: '#/components/schemas/tax_rate' tax_code: description: >- The tax code used on purchases in the Region. This may be used by other systems for accounting purposes. type: string + example: null + gift_cards_taxable: + description: Whether the gift cards are taxable or not in this region. + type: boolean + default: true + automatic_taxes: + description: Whether taxes should be automated in this region. + type: boolean + default: true countries: - description: The countries that are included in the Region. + description: >- + The countries that are included in the Region. Available if the + relation `countries` is expanded. type: array items: $ref: '#/components/schemas/country' + tax_provider_id: + type: string + description: The ID of the tax provider used in this region + example: null + tax_provider: + description: Available if the relation `tax_provider` is expanded. + $ref: '#/components/schemas/tax_provider' payment_providers: description: >- The Payment Providers that can be used to process Payments in the - Region. + Region. Available if the relation `payment_providers` is expanded. type: array items: $ref: '#/components/schemas/payment_provider' fulfillment_providers: description: >- The Fulfillment Providers that can be used to fulfill orders in the - Region. + Region. Available if the relation `payment_providers` is expanded. type: array items: $ref: '#/components/schemas/fulfillment_provider' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white return_item: title: Return Item description: >- Correlates a Line Item with a Return, keeping track of the quantity of the Line Item that will be returned. x-resourceId: return_item + required: + - return_id + - item_id properties: return_id: description: The id of the Return that the Return Item belongs to. type: string + example: ret_01F0YET7XPCMF8RZ0Y151NZV2V + return_order: + description: Available if the relation `return_order` is expanded. + $ref: '#/components/schemas/return' item_id: description: The id of the Line Item that the Return Item references. type: string + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN item: - description: The Line Item that the Return Item references. - anyOf: - - $ref: '#/components/schemas/line_item' + description: Available if the relation `item` is expanded. + $ref: '#/components/schemas/line_item' quantity: description: The quantity of the Line Item that is included in the Return. type: integer + example: 1 is_requested: description: >- Whether the Return Item was requested initially or received unexpectedly in the warehouse. type: boolean + default: true requested_quantity: description: The quantity that was originally requested to be returned. type: integer + example: 1 recieved_quantity: description: The quantity that was received in the warehouse. type: integer + example: 1 + reason_id: + description: The ID of the reason for returning the item. + type: string + example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ reason: - description: The reason for returning the item. - anyOf: - - $ref: '#/components/schemas/return_reason' + description: Available if the relation `reason` is expanded. + $ref: '#/components/schemas/return_reason' note: description: An optional note with additional details about the Return. type: string + example: I didn't like it. metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white return_reason: title: Return Reason description: >- A Reason for why a given product is returned. A Return Reason can be used on Return Items in order to indicate why a Line Item was returned. x-resourceId: return_reason + required: + - value + - label properties: id: - description: The id of the Return Reason will start with `rr_`. type: string + description: The cart's ID + example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ description: description: A description of the Reason. type: string + example: Items that are damaged label: description: A text that can be displayed to the Customer as a reason. type: string + example: Damaged goods value: description: The value to identify the reason by. type: string - created_at: - description: The date with timezone at which the resource was created. + example: damaged + parent_return_reason_id: type: string + description: The ID of the parent reason. + example: null + parent_return_reason: + description: Available if the relation `parent_return_reason` is expanded. + $ref: '#/components/schemas/return_reason' + return_reason_children: + description: Available if the relation `return_reason_children` is expanded. + $ref: '#/components/schemas/return_reason' + created_at: + type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white return: title: Return description: >- @@ -4118,10 +5968,13 @@ components: to send back, along with how the items will be returned. Returns can be used as part of a Swap. x-resourceId: return + required: + - refund_amount properties: id: - description: The id of the Return. This value will be prefixed with `ret_`. type: string + description: The return's ID + example: ret_01F0YET7XPCMF8RZ0Y151NZV2V status: description: Status of the Return. type: string @@ -4129,53 +5982,168 @@ components: - requested - received - requires_action + - canceled + default: requested items: description: >- - The Return Items that will be shipped back to the warehouse. type: - array items: $ref: + The Return Items that will be shipped back to the warehouse. + Available if the relation `items` is expanded. + type: array + items: + $ref: '#/components/schemas/return_item' swap_id: - description: The id of the Swap that the Return is a part of. + description: The ID of the Swap that the Return is a part of. type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object order_id: - description: The id of the Order that the Return is made from. + description: The ID of the Order that the Return is made from. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object claim_order_id: - description: The id of the Claim that the Return is a part of. + description: The ID of the Claim that the Return is a part of. type: string + example: null + claim_order: + description: >- + A claim order object. Available if the relation `claim_order` is + expanded. + type: object shipping_method: description: >- The Shipping Method that will be used to send the Return back. Can be null if the Customer facilitates the return shipment themselves. - anyOf: - - $ref: '#/components/schemas/shipping_method' + Available if the relation `shipping_method` is expanded. + type: array + items: + $ref: '#/components/schemas/shipping_method' shipping_data: description: >- Data about the return shipment as provided by the Fulfilment Provider that handles the return shipment. type: object + example: {} refund_amount: description: The amount that should be refunded as a result of the return. type: integer - received_at: - description: The date with timezone at which the return was received. - type: string - format: date-time - created_at: - description: The date with timezone at which the resource was created. - type: string - format: date-time - updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time + example: 1000 no_notification: description: >- When set to true, no notification will be sent related to this return. type: boolean + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the return + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + received_at: + description: The date with timezone at which the return was received. + type: string + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white + sales_channel: + title: Sales Channel + description: A Sales Channel + x-resourceId: sales_channel + required: + - name + properties: + id: + type: string + description: The sales channel's ID + example: sc_01G8X9A7ESKAJXG2H0E6F1MW7A + name: + description: The name of the sales channel. + type: string + example: Market + description: + description: The description of the sales channel. + type: string + example: Multi-vendor market + is_disabled: + description: Specify if the sales channel is enabled or disabled. + type: boolean + default: false + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + sales_channel_tax_line: + title: Sales Channel + description: A Sales Channel + x-resourceId: sales_channel_tax_line + required: + - shipping_method_id + - rate + - name + properties: + id: + type: string + description: The line item tax line's ID + example: smtl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + shipping_method_id: + type: string + description: The ID of the line item + example: sm_01F0YET7DR2E7CYVSDHM593QG2 + shipping_method: + description: Available if the relation `shipping_method` is expanded. + $ref: '#/components/schemas/shipping_method' + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + rate: + description: The numeric rate to charge tax by + type: number + example: 10 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white shipping_method: title: Shipping Method description: >- @@ -4184,65 +6152,105 @@ components: contain additional details, that can be necessary for the Fulfillment Provider to handle the shipment. x-resourceId: shipping_method + required: + - shipping_option_id + - price properties: id: - description: >- - The id of the Shipping Method. This value will be prefixed with - `sm_`. type: string + description: The shipping method's ID + example: sm_01F0YET7DR2E7CYVSDHM593QG2 shipping_option_id: description: >- The id of the Shipping Option that the Shipping Method is built from. type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T shipping_option: - description: The Shipping Option that the Shipping Method is built from. - anyOf: - - $ref: '#/components/schemas/shipping_option' + description: Available if the relation `shipping_option` is expanded. + $ref: '#/components/schemas/shipping_option' order_id: description: The id of the Order that the Shipping Method is used on. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object return_id: description: The id of the Return that the Shipping Method is used on. type: string + example: null + return_order: + description: >- + A return object. Available if the relation `return_order` is + expanded. + type: object swap_id: description: The id of the Swap that the Shipping Method is used on. type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object cart_id: description: The id of the Cart that the Shipping Method is used on. type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object claim_order_id: description: The id of the Claim that the Shipping Method is used on. type: string + example: null + claim_order: + description: >- + A claim order object. Available if the relation `claim_order` is + expanded. + type: object + tax_lines: + type: array + description: Available if the relation `tax_lines` is expanded. + items: + $ref: '#/components/schemas/tax_line' price: description: >- The amount to charge for the Shipping Method. The currency of the price is defined by the Region that the Order that the Shipping Method belongs to is a part of. type: integer + example: 200 data: description: >- Additional data that the Fulfillment Provider needs to fulfill the shipment. This is used in combination with the Shipping Options data, and may contain information such as a drop point id. type: object + example: {} shipping_option_requirement: title: Shipping Option Requirement description: >- A requirement that a Cart must satisfy for the Shipping Option to be available to the Cart. x-resourceId: shipping_option_requirement + required: + - shipping_option_id + - type + - amount properties: id: - description: >- - The id of the Shipping Option Requirement. This value will be - prefixed with `sor_`. type: string + description: The shipping option requirement's ID + example: sor_01G1G5V29AB4CTNDRFSRWSRKWD shipping_option_id: description: >- - The id of the Shipping Option that the Shipping Option Requirement - belongs to. + The id of the Shipping Option that the hipping option requirement + belongs to type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: Available if the relation `shipping_option` is expanded. + $ref: '#/components/schemas/shipping_option' type: description: >- The type of the requirement, this defines how the value will be @@ -4254,9 +6262,15 @@ components: enum: - min_subtotal - max_subtotal + example: min_subtotal amount: description: The amount to compare the Cart subtotal to. type: integer + example: 100 + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time shipping_option: title: Shipping Option description: >- @@ -4267,35 +6281,49 @@ components: Shipping Methods. This distinction makes it possible to customize individual Shipping Methods with additional information. x-resourceId: shipping_option + required: + - name + - region_id + - profile_id + - provider_id + - price_type properties: id: - description: >- - The id of the Shipping Option. This value will be prefixed with - `so_`. type: string + description: The shipping option's ID + example: so_01G1G5V27GYX4QXNARRQCW1N8T name: description: >- The name given to the Shipping Option - this may be displayed to the Customer. type: string + example: PostFake Standard region_id: - description: The id of the Region that the Shipping Option belongs to. type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G region: - description: The id of the Region that the Shipping Option belongs to. - anyOf: - - $ref: '#/components/schemas/region' + description: A region object. Available if the relation `region` is expanded. + type: object profile_id: description: >- - The id of the Shipping Profile that the Shipping Option belongs to. + The ID of the Shipping Profile that the shipping option belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products. type: string + example: sp_01G1G5V239ENSZ5MV4JAR737BM + profile: + description: Available if the relation `profile` is expanded. + $ref: '#/components/schemas/shipping_profile' provider_id: description: >- The id of the Fulfillment Provider, that will be used to process Fulfillments from the Shipping Option. type: string + example: manual + provider: + description: Available if the relation `provider` is expanded. + $ref: '#/components/schemas/fulfillment_provider' price_type: description: >- The type of pricing calculation that is used when creatin Shipping @@ -4306,20 +6334,24 @@ components: enum: - flat_rate - calculated + example: flat_rate amount: description: >- The amount to charge for shipping when the Shipping Option price type is `flat_rate`. type: integer + example: 200 is_return: description: >- Flag to indicate if the Shipping Option can be used for Return shipments. type: boolean + default: false requirements: description: >- The requirements that must be satisfied for the Shipping Option to - be available for a Cart. + be available for a Cart. Available if the relation `requirements` is + expanded. type: array items: $ref: '#/components/schemas/shipping_option_requirement' @@ -4328,38 +6360,44 @@ components: The data needed for the Fulfillment Provider to identify the Shipping Option. type: object + example: {} created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white shipping_profile: title: Shipping Profile description: >- Shipping Profiles have a set of defined Shipping Options that can be used to fulfill a given set of Products. x-resourceId: shipping_profile + required: + - name + - type properties: id: - description: >- - The id of the Shipping Profile. This value will be prefixed with - `sp_`. type: string + description: The shipping profile's ID + example: sp_01G1G5V239ENSZ5MV4JAR737BM name: description: >- The name given to the Shipping profile - this may be displayed to the Customer. type: string + example: Default Shipping Profile type: description: >- The type of the Shipping Profile, may be `default`, `gift_card` or @@ -4369,99 +6407,156 @@ components: - default - gift_card - custom + example: default products: - description: The Products that the Shipping Profile defines Shipping Options for. + description: >- + The Products that the Shipping Profile defines Shipping Options for. + Available if the relation `products` is expanded. type: array items: - $ref: '#/components/schemas/product' + type: object + description: A product object. shipping_options: description: >- The Shipping Options that can be used to fulfill the Products in the - Shipping Profile. + Shipping Profile. Available if the relation `shipping_options` is + expanded. type: array items: - anyOf: - - $ref: '#/components/schemas/shipping_option' + $ref: '#/components/schemas/shipping_option' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white shipping_tax_rate: title: Shipping Tax Rate description: >- Associates a tax rate with a shipping option to indicate that the shipping option is taxed in a certain way x-resourceId: shipping_tax_rate + required: + - shipping_option_id + - rate_id properties: shipping_option_id: - description: The id of the Shipping Option + description: The ID of the Shipping Option type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: Available if the relation `shipping_option` is expanded. + $ref: '#/components/schemas/shipping_option' rate_id: - description: The id of the Tax Rate + description: The ID of the Tax Rate type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: '#/components/schemas/tax_rate' created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time - deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white + staged_job: + title: Staged Job + description: A staged job resource + x-resourceId: staged_job + required: + - event_name + properties: + id: + type: string + description: The staged job's ID + example: job_01F0YET7BZTARY9MKN1SJ7AAXF + event_name: + description: The name of the event + type: string + example: order.placed + data: + description: Data necessary for the job + type: object + example: {} store: title: Store description: 'Holds settings for the Store, such as name, currencies, etc.' x-resourceId: store properties: id: - description: The id of the Store. This value will be prefixed with `store_`. type: string + description: The store's ID + example: store_01G1G5V21KADXNGH29BJMAJ4B4 name: description: The name of the Store - this may be displayed to the Customer. type: string + example: Medusa Store default_currency_code: - description: >- - The default currency code used when no other currency code is - specified. + description: The 3 character currency code that is the default of the store. type: string + example: usd + externalDocs: + url: 'https://en.wikipedia.org/wiki/ISO_4217#Active_codes' + description: See a list of codes. + default_currency: + description: Available if the relation `default_currency` is expanded. + $ref: '#/components/schemas/currency' currencies: - description: The currencies that are enabled for the Store. + description: >- + The currencies that are enabled for the Store. Available if the + relation `currencies` is expanded. type: array items: $ref: '#/components/schemas/currency' swap_link_template: description: >- - A template to generate Swap links from use {{cart_id}} to include + A template to generate Swap links from. Use {{cart_id}} to include the Swap's `cart_id` in the link. type: string - created_at: - description: The date with timezone at which the resource was created. + example: null + payment_link_template: + description: >- + A template to generate Payment links from. Use {{cart_id}} to + include the payment's `cart_id` in the link. type: string - format: date-time - updated_at: - description: The date with timezone at which the resource was last updated. + example: null + invite_link_template: + description: A template to generate Invite links from type: string - format: date-time - metadata: - description: An optional key-value map with additional information. + example: null + default_sales_channel_id: + type: string + description: The sales channel ID the cart is associated with. + example: null + default_sales_channel: + description: >- + A sales channel object. Available if the relation + `default_sales_channel` is expanded. type: object + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white swap: title: Swap description: >- @@ -4473,23 +6568,25 @@ components: Products being returned exceed the amount to be paid for the new Products, a Refund will be issued for the difference. x-resourceId: swap + required: + - fulfillment_status + - payment_status + - order_id properties: id: - description: The id of the Swap. This value will be prefixed with `swap_`. type: string + description: The swap's ID + example: swap_01F0YET86Y9G92D3YDR9Y6V676 fulfillment_status: description: The status of the Fulfillment of the Swap. type: string enum: - not_fulfilled - - partially_fulfilled - fulfilled - - partially_shipped - shipped - - partially_returned - - returned - canceled - requires_action + example: not_fulfilled payment_status: description: >- The status of the Payment of the Swap. The payment may either refer @@ -4499,71 +6596,96 @@ components: - not_paid - awaiting - captured + - confirmed - canceled - difference_refunded + - partially_refunded + - refunded - requires_action + example: not_paid order_id: description: >- - The id of the Order where the Line Items to be returned where + The ID of the Order where the Line Items to be returned where purchased. type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object additional_items: - description: The new Line Items to ship to the Customer. + description: >- + The new Line Items to ship to the Customer. Available if the + relation `additional_items` is expanded. type: array items: $ref: '#/components/schemas/line_item' return_order: - description: The Return that is issued for the return part of the Swap. - anyOf: - - $ref: '#/components/schemas/return' + description: >- + A return order object. The Return that is issued for the return part + of the Swap. Available if the relation `return_order` is expanded. + type: object fulfillments: - description: The Fulfillments used to send the new Line Items. + description: >- + The Fulfillments used to send the new Line Items. Available if the + relation `fulfillments` is expanded. type: array items: $ref: '#/components/schemas/fulfillment' payment: description: >- The Payment authorized when the Swap requires an additional amount - to be charged from the Customer. - anyOf: - - $ref: '#/components/schemas/payment' + to be charged from the Customer. Available if the relation `payment` + is expanded. + $ref: '#/components/schemas/payment' difference_due: description: >- The difference that is paid or refunded as a result of the Swap. May be negative when the amount paid for the returned items exceed the total of the new Products. type: integer - shipping_address: + example: 0 + shipping_address_id: description: >- The Address to send the new Line Items to - in most cases this will be the same as the shipping address on the Order. - anyOf: - - $ref: '#/components/schemas/address' + type: string + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: '#/components/schemas/address' shipping_methods: - description: The Shipping Methods used to fulfill the addtional items purchased. + description: >- + The Shipping Methods used to fulfill the addtional items purchased. + Available if the relation `shipping_methods` is expanded. type: array items: $ref: '#/components/schemas/shipping_method' cart_id: description: The id of the Cart that the Customer will use to confirm the Swap. type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object allow_backorder: description: 'If true, swaps can be completed with items out of stock' type: boolean + default: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the swap + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. confirmed_at: description: >- The date with timezone at which the Swap was confirmed by the Customer. type: string format: date-time - created_at: - description: The date with timezone at which the resource was created. - type: string - format: date-time - updated_at: - description: The date with timezone at which the resource was last updated. - type: string - format: date-time canceled_at: description: The date with timezone at which the Swap was canceled. type: string @@ -4571,37 +6693,61 @@ components: no_notification: description: 'If set to true, no notification will be sent related to this swap' type: boolean + example: false + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white tax_line: title: Tax Line description: Line item that specifies an amount of tax to add to a line item. x-resourceId: tax_line + required: + - rate + - name properties: id: - description: The id of the Tax Line. This value will be prefixed by `tl_`. type: string + description: The tax line's ID + example: tl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 code: description: A code to identify the tax type by type: string + example: tax01 name: description: A human friendly name for the tax type: string + example: Tax Example rate: description: The numeric rate to charge tax by type: number + example: 10 created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white tax_provider: title: Tax Provider description: The tax service used to calculate taxes @@ -4610,50 +6756,96 @@ components: id: description: The id of the tax provider as given by the plugin. type: string + example: manual is_installed: description: >- Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`. type: boolean + default: true tax_rate: title: Tax Rate description: >- A Tax Rate can be used to associate a certain rate to charge on products within a given Region x-resourceId: line_item + required: + - name + - region_id properties: id: - description: The id of the Tax Rate. This value will be prefixed by `txr_`. type: string + description: The tax rate's ID + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR rate: description: The numeric rate to charge type: number + example: 10 code: description: A code to identify the tax type by type: string + example: tax01 name: description: A human friendly name for the tax type: string + example: Tax Example region_id: + type: string description: The id of the Region that the rate belongs to - type: string + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + products: + type: array + description: >- + The products that belong to this tax rate. Available if the relation + `products` is expanded. + items: + type: object + description: A product object. + product_types: + type: array + description: >- + The product types that belong to this tax rate. Available if the + relation `product_types` is expanded. + items: + type: object + description: A product type object. + shipping_options: + type: array + description: >- + The shipping options that belong to this tax rate. Available if the + relation `shipping_options` is expanded. + items: + type: object + description: A shipping option object. + product_count: + description: The count of products + type: integer + example: null + product_type_count: + description: The count of product types + type: integer + example: null + shipping_option_count: + description: The count of shipping options + type: integer + example: null created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time metadata: - description: An optional key-value map with additional information. type: object - refundable: - description: >- - The amount that can be refunded from the given Line Item. Takes - taxes and discounts into consideration. - type: integer + description: An optional key-value map with additional details + example: + car: white tracking_link: title: Tracking Link description: >- @@ -4661,61 +6853,96 @@ components: Fulfillment. Tracking Links can optionally contain a URL that can be visited to see the status of the shipment. x-resourceId: tracking_link + required: + - tracking_number + - fulfillment_id properties: id: - description: >- - The id of the Tracking Link. This value will be prefixed with - `tlink_`. type: string + description: The tracking link's ID + example: tlink_01G8ZH853Y6TFXWPG5EYE81X63 url: description: The URL at which the status of the shipment can be tracked. type: string + format: uri tracking_number: description: The tracking number given by the shipping carrier. type: string + format: RH370168054CN fulfillment_id: + type: string description: The id of the Fulfillment that the Tracking Link references. + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF + fulfillment: + description: Available if the relation `fulfillment` is expanded. + $ref: '#/components/schemas/fulfillment' + idempotency_key: type: string + description: >- + Randomly generated key used to continue the completion of a process + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. created_at: - description: The date with timezone at which the resource was created. type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: - description: The date with timezone at which the resource was last updated. type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: - description: The date with timezone at which the resource was deleted. type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: - description: An optional key-value map with additional information. type: object + description: An optional key-value map with additional details + example: + car: white user: title: User description: Represents a User who can manage store settings. x-resourceId: user + required: + - email properties: id: - description: The unique id of the User. This will be prefixed with `usr_` type: string + description: The user's ID + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V email: description: The email of the User type: string + format: email first_name: + description: The first name of the User type: string + example: Levi last_name: - description: The Customer's billing address. - anyOf: - - $ref: '#/components/schemas/address' + description: The last name of the User + type: string + example: Bogan + api_token: + description: An API token associated with the user. + type: string + example: null created_at: type: string + description: The date with timezone at which the resource was created. format: date-time updated_at: type: string + description: The date with timezone at which the resource was updated. format: date-time deleted_at: type: string + description: The date with timezone at which the resource was deleted. format: date-time metadata: type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/OAuth.yaml b/docs/api/store/components/schemas/OAuth.yaml new file mode 100644 index 0000000000..a9afba0974 --- /dev/null +++ b/docs/api/store/components/schemas/OAuth.yaml @@ -0,0 +1,32 @@ +title: OAuth +description: Represent an OAuth app +x-resourceId: OAuth +required: + - id + - display_name + - application_name +properties: + id: + type: string + description: The app's ID + example: example_app + display_name: + type: string + description: The app's display name + example: Example app + application_name: + type: string + description: The app's name + example: example + install_url: + type: string + description: The URL to install the app + format: uri + uninstall_url: + type: string + description: The URL to uninstall the app + format: uri + data: + type: object + description: Any data necessary to the app. + example: {} diff --git a/docs/api/store/components/schemas/address.yaml b/docs/api/store/components/schemas/address.yaml new file mode 100644 index 0000000000..ff413792f1 --- /dev/null +++ b/docs/api/store/components/schemas/address.yaml @@ -0,0 +1,82 @@ +title: Address +description: An address. +x-resourceId: address +properties: + id: + type: string + description: ID of the address + example: addr_01G8ZC9VS1XVE149MGH2J7QSSH + customer_id: + type: string + description: ID of the customer this address belongs to + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: Available if the relation `customer` is expanded. + type: array + items: + type: object + description: A customer object. + company: + type: string + description: Company name + example: Acme + first_name: + type: string + description: First name + example: Arno + last_name: + type: string + description: Last name + example: Willms + address_1: + type: string + description: Address line 1 + example: 14433 Kemmer Court + address_2: + type: string + description: Address line 2 + example: Suite 369 + city: + type: string + description: City + example: South Geoffreyview + country_code: + type: string + description: The 2 character ISO code of the country in lower case + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + example: st + country: + description: A country object. Available if the relation `country` is expanded. + type: object + province: + type: string + description: Province + example: Kentucky + postal_code: + type: string + description: Postal Code + example: 72093 + phone: + type: string + description: Phone Number + example: 16128234334802 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/batch_job.yaml b/docs/api/store/components/schemas/batch_job.yaml new file mode 100644 index 0000000000..dcb63d5f55 --- /dev/null +++ b/docs/api/store/components/schemas/batch_job.yaml @@ -0,0 +1,139 @@ +title: Batch Job +description: A Batch Job. +x-resourceId: batch_job +required: + - type +properties: + id: + type: string + description: The unique identifier for the batch job. + example: batch_01G8T782965PYFG0751G0Z38B4 + type: + type: string + description: The type of batch job. + enum: + - product-import + - product-export + status: + type: string + description: The status of the batch job. + enum: + - created + - pre_processed + - confirmed + - processing + - completed + - canceled + - failed + default: created + created_by: + type: string + description: The unique identifier of the user that created the batch job. + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + created_by_user: + description: A user object. Available if the relation `created_by_user` is expanded. + type: object + context: + type: object + description: >- + The context of the batch job, the type of the batch job determines what + the context should contain. + example: + shape: + prices: + - region: null + currency_code: eur + dynamicImageColumnCount: 4 + dynamicOptionColumnCount: 2 + list_config: + skip: 0 + take: 50 + order: + created_at: DESC + relations: + - variants + - variant.prices + - images + dry_run: + type: boolean + description: Specify if the job must apply the modifications or not. + default: false + result: + type: object + description: The result of the batch job. + properties: + count: + type: number + advancement_count: + type: number + progress: + type: number + errors: + type: object + properties: + message: + type: string + code: + oneOf: + - type: string + - type: number + err: + type: array + stat_descriptors: + type: object + properties: + key: + type: string + name: + type: string + message: + type: string + file_key: + type: string + file_size: + type: number + example: + errors: + - err: [] + code: unknown + message: Method not implemented. + stat_descriptors: + - key: product-export-count + name: Product count to export + message: There will be 8 products exported by this action + pre_processed_at: + type: string + description: The date from which the job has been pre processed. + format: date-time + processing_at: + type: string + description: The date the job is processing at. + format: date-time + confirmed_at: + type: string + description: The date when the confirmation has been done. + format: date-time + completed_at: + type: string + description: The date of the completion. + format: date-time + canceled_at: + type: string + description: The date of the concellation. + format: date-time + failed_at: + type: string + description: The date when the job failed. + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was last updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time diff --git a/docs/api/store/components/schemas/cart.yaml b/docs/api/store/components/schemas/cart.yaml new file mode 100644 index 0000000000..0881621115 --- /dev/null +++ b/docs/api/store/components/schemas/cart.yaml @@ -0,0 +1,174 @@ +title: Cart +description: Represents a user cart +x-resourceId: cart +properties: + id: + type: string + description: The cart's ID + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + email: + type: string + description: The email associated with the cart + format: email + billing_address_id: + type: string + description: The billing address's ID + example: addr_01G8ZH853YPY9B94857DY91YGW + billing_address: + description: Available if the relation `billing_address` is expanded. + $ref: ./address.yaml + shipping_address_id: + type: string + description: The shipping address's ID + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: ./address.yaml + items: + description: Available if the relation `items` is expanded. + type: array + items: + $ref: ./line_item.yaml + region_id: + type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + discounts: + type: array + description: Available if the relation `discounts` is expanded. + items: + type: object + description: A discount object. + gift_cards: + type: array + description: Available if the relation `gift_cards` is expanded. + items: + type: object + description: A gift card object. + customer_id: + type: string + description: The customer's ID + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: A customer object. Available if the relation `customer` is expanded. + type: object + payment_session: + description: The selected payment session in the cart. + $ref: ./payment_session.yaml + payment_sessions: + type: array + description: The payment sessions created on the cart. + items: + $ref: ./payment_session.yaml + payment_id: + type: string + description: The payment's ID if available + example: pay_01G8ZCC5W42ZNY842124G7P5R9 + payment: + description: Available if the relation `payment` is expanded. + $ref: ./payment.yaml + shipping_methods: + type: array + description: The shipping methods added to the cart. + items: + $ref: ./shipping_method.yaml + type: + type: string + description: The cart's type. + enum: + - default + - swap + - draft_order + - payment_link + - claim + default: default + completed_at: + type: string + description: The date with timezone at which the cart was completed. + format: date-time + payment_authorized_at: + type: string + description: The date with timezone at which the payment was authorized. + format: date-time + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of a cart in case + of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + context: + type: object + description: The context of the cart which can include info like IP or user agent. + example: + ip: '::1' + user_agent: PostmanRuntime/7.29.2 + sales_channel_id: + type: string + description: The sales channel ID the cart is associated with. + example: null + sales_channel: + description: >- + A sales channel object. Available if the relation `sales_channel` is + expanded. + type: object + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white + shipping_total: + type: integer + description: The total of shipping + example: 1000 + discount_total: + type: integer + description: The total of discount + example: 800 + tax_total: + type: integer + description: The total of tax + example: 0 + refunded_total: + type: integer + description: >- + The total amount refunded if the order associated with this cart is + returned. + example: 0 + total: + type: integer + description: The total amount of the cart + example: 8200 + subtotal: + type: integer + description: The subtotal of the cart + example: 8000 + refundable_amount: + type: integer + description: The amount that can be refunded + example: 8200 + gift_card_total: + type: integer + description: The total of gift cards + example: 0 + gift_card_tax_total: + type: integer + description: The total of gift cards with taxes + example: 0 diff --git a/docs/api/store/components/schemas/claim_image.yaml b/docs/api/store/components/schemas/claim_image.yaml new file mode 100644 index 0000000000..5b2d04e74b --- /dev/null +++ b/docs/api/store/components/schemas/claim_image.yaml @@ -0,0 +1,38 @@ +title: Claim Image +description: Represents photo documentation of a claim. +x-resourceId: claim_image +required: + - claim_item_id + - url +properties: + id: + type: string + description: The claim image's ID + example: cimg_01G8ZH853Y6TFXWPG5EYE81X63 + claim_item_id: + type: string + description: The ID of the claim item associated with the image + claim_item: + description: A claim item object. Available if the relation `claim_item` is expanded. + type: object + url: + type: string + description: The URL of the image + format: uri + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/claim_item.yaml b/docs/api/store/components/schemas/claim_item.yaml new file mode 100644 index 0000000000..ccec3c8ebf --- /dev/null +++ b/docs/api/store/components/schemas/claim_item.yaml @@ -0,0 +1,83 @@ +title: Claim Item +description: >- + Represents a claimed item along with information about the reasons for the + claim. +x-resourceId: claim_item +required: + - claim_order_id + - item_id + - variant_id + - reason + - quantity +properties: + id: + type: string + description: The claim item's ID + example: citm_01G8ZH853Y6TFXWPG5EYE81X63 + images: + type: array + description: Available if the relation `images` is expanded. + items: + $ref: ./claim_image.yaml + claim_order_id: + description: The ID of the claim this item is associated with. + type: string + claim_order: + description: A claim order object. Available if the relation `claim_order` is expanded. + type: object + item_id: + description: The ID of the line item that the claim item refers to. + type: string + example: item_01G8ZM25TN49YV9EQBE2NC27KC + item: + description: Available if the relation `item` is expanded. + $ref: ./line_item.yaml + variant_id: + description: The ID of the product variant that is claimed. + type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: A variant object. Available if the relation `variant` is expanded. + type: object + reason: + description: The reason for the claim + type: string + enum: + - missing_item + - wrong_item + - production_failure + - other + note: + description: An optional note about the claim, for additional information + type: string + example: I don't like it. + quantity: + description: >- + The quantity of the item that is being claimed; must be less than or equal + to the amount purchased in the original order. + type: integer + example: 1 + tags: + description: >- + User defined tags for easy filtering and grouping. Available if the + relation 'tags' is expanded. + type: array + items: + $ref: ./claim_tag.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/claim_order.yaml b/docs/api/store/components/schemas/claim_order.yaml new file mode 100644 index 0000000000..1d26758cec --- /dev/null +++ b/docs/api/store/components/schemas/claim_order.yaml @@ -0,0 +1,121 @@ +title: Claim Order +description: >- + Claim Orders represent a group of faulty or missing items. Each claim order + consists of a subset of items associated with an original order, and can + contain additional information about fulfillments and returns. +x-resourceId: claim_order +required: + - type + - order_id +properties: + id: + type: string + description: The claim's ID + example: claim_01G8ZH853Y6TFXWPG5EYE81X63 + type: + type: string + enum: + - refund + - replace + payment_status: + type: string + description: The status of the claim's payment + enum: + - na + - not_refunded + - refunded + default: na + fulfillment_status: + type: string + enum: + - not_fulfilled + - partially_fulfilled + - fulfilled + - partially_shipped + - shipped + - partially_returned + - returned + - canceled + - requires_action + default: not_fulfilled + claim_items: + description: The items that have been claimed + type: array + items: + $ref: ./claim_item.yaml + additional_items: + description: >- + Refers to the new items to be shipped when the claim order has the type + `replace` + type: array + items: + $ref: ./line_item.yaml + order_id: + description: The ID of the order that the claim comes from. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + return_order: + description: >- + A return object. Holds information about the return if the claim is to be + returned. Available if the relation 'return_order' is expanded + type: object + shipping_address_id: + description: The ID of the address that the new items should be shipped to + type: string + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: ./address.yaml + shipping_methods: + description: The shipping methods that the claim order will be shipped with. + type: array + items: + $ref: ./shipping_method.yaml + fulfillments: + description: The fulfillments of the new items to be shipped + type: array + items: + $ref: ./fulfillment.yaml + refund_amount: + description: The amount that will be refunded in conjunction with the claim + type: integer + example: 1000 + canceled_at: + description: The date with timezone at which the claim was canceled. + type: string + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white + no_notification: + description: >- + Flag for describing whether or not notifications related to this should be + send. + type: boolean + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the cart + associated with the claim in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. diff --git a/docs/api/store/components/schemas/claim_tag.yaml b/docs/api/store/components/schemas/claim_tag.yaml new file mode 100644 index 0000000000..bf7b96a3db --- /dev/null +++ b/docs/api/store/components/schemas/claim_tag.yaml @@ -0,0 +1,33 @@ +title: Claim Tag +description: >- + Claim Tags are user defined tags that can be assigned to claim items for easy + filtering and grouping. +x-resourceId: claim_tag +required: + - value +properties: + id: + type: string + description: The claim tag's ID + example: ctag_01G8ZCC5Y63B95V6B5SHBZ91S4 + value: + description: The value that the claim tag holds + type: string + example: Damaged + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/country.yaml b/docs/api/store/components/schemas/country.yaml new file mode 100644 index 0000000000..8bd271c77c --- /dev/null +++ b/docs/api/store/components/schemas/country.yaml @@ -0,0 +1,53 @@ +title: Country +description: Country details +x-resourceId: country +required: + - iso_2 + - iso_3 + - num_code + - name + - display_name +properties: + id: + type: string + description: The country's ID + example: 109 + iso_2: + type: string + description: The 2 character ISO code of the country in lower case + example: it + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + iso_3: + type: string + description: The 2 character ISO code of the country in lower case + example: ita + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements + description: See a list of codes. + num_code: + description: The numerical ISO code for the country. + type: string + example: 380 + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_numeric#Officially_assigned_code_elements + description: See a list of codes. + name: + description: The normalized country name in upper case. + type: string + example: ITALY + display_name: + description: The country name appropriate for display. + type: string + example: Italy + region_id: + type: string + description: The region ID this country is associated with. + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object diff --git a/docs/api/store/components/schemas/currency.yaml b/docs/api/store/components/schemas/currency.yaml new file mode 100644 index 0000000000..aecf3200e2 --- /dev/null +++ b/docs/api/store/components/schemas/currency.yaml @@ -0,0 +1,28 @@ +title: Currency +description: Currency +x-resourceId: currency +required: + - code + - symbol + - symbol_native + - name +properties: + code: + description: The 3 character ISO code for the currency. + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + symbol: + description: The symbol used to indicate the currency. + type: string + example: $ + symbol_native: + description: The native symbol used to indicate the currency. + type: string + example: $ + name: + description: The written name of the currency + type: string + example: US Dollar diff --git a/docs/api/store/components/schemas/custom_shipping_option.yaml b/docs/api/store/components/schemas/custom_shipping_option.yaml new file mode 100644 index 0000000000..488258a5cb --- /dev/null +++ b/docs/api/store/components/schemas/custom_shipping_option.yaml @@ -0,0 +1,53 @@ +title: Custom Shipping Option +description: >- + Custom Shipping Options are 'overriden' Shipping Options. Store managers can + attach a Custom Shipping Option to a cart in order to set a custom price for a + particular Shipping Option +x-resourceId: custom_shipping_option +required: + - price + - shipping_option_id +properties: + id: + type: string + description: The custom shipping option's ID + example: cso_01G8X99XNB77DMFBJFWX6DN9V9 + price: + description: >- + The custom price set that will override the shipping option's original + price + type: integer + example: 1000 + shipping_option_id: + description: The ID of the Shipping Option that the custom shipping option overrides + type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: >- + A shipping option object. Available if the relation `shipping_option` is + expanded. + type: object + cart_id: + description: The ID of the Cart that the custom shipping option is attached to + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/customer.yaml b/docs/api/store/components/schemas/customer.yaml new file mode 100644 index 0000000000..e3df6d690b --- /dev/null +++ b/docs/api/store/components/schemas/customer.yaml @@ -0,0 +1,72 @@ +title: Customer +description: Represents a customer +x-resourceId: customer +required: + - email +properties: + id: + type: string + description: The customer's ID + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + email: + type: string + description: The customer's email + format: email + first_name: + type: string + description: The customer's first name + example: Arno + last_name: + type: string + description: The customer's first name + example: Willms + billing_address_id: + type: string + description: The customer's billing address ID + example: addr_01G8ZH853YPY9B94857DY91YGW + billing_address: + description: Available if the relation `billing_address` is expanded. + $ref: ./address.yaml + shipping_addresses: + description: Available if the relation `shipping_addresses` is expanded. + type: array + items: + $ref: ./address.yaml + phone: + type: string + description: The customer's phone number + example: 16128234334802 + has_account: + type: boolean + description: Whether the customer has an account or not + default: false + orders: + description: Available if the relation `orders` is expanded. + type: array + items: + type: object + description: An order object. + groups: + description: >- + The customer groups the customer belongs to. Available if the relation + `groups` is expanded. + type: array + items: + $ref: ./customer_group.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/customer_group.yaml b/docs/api/store/components/schemas/customer_group.yaml new file mode 100644 index 0000000000..d99e3a5923 --- /dev/null +++ b/docs/api/store/components/schemas/customer_group.yaml @@ -0,0 +1,46 @@ +title: Customer Group +description: Represents a customer group +x-resourceId: customer_group +required: + - name +properties: + id: + type: string + description: The customer group's ID + example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63 + name: + type: string + description: The name of the customer group + example: VIP + customers: + type: array + description: >- + The customers that belong to the customer group. Available if the relation + `customers` is expanded. + items: + type: object + description: A customer object. + price_lists: + type: array + description: >- + The price lists that are associated with the customer group. Available if + the relation `price_lists` is expanded. + items: + $ref: ./price_list.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/discount.yaml b/docs/api/store/components/schemas/discount.yaml new file mode 100644 index 0000000000..48f090532a --- /dev/null +++ b/docs/api/store/components/schemas/discount.yaml @@ -0,0 +1,91 @@ +title: Discount +description: Represents a discount that can be applied to a cart for promotional purposes. +x-resourceId: discount +required: + - code + - is_dynamic +properties: + id: + type: string + description: The discount's ID + example: disc_01F0YESMW10MGHWJKZSDDMN0VN + code: + description: >- + A unique code for the discount - this will be used by the customer to + apply the discount + type: string + example: 10DISC + is_dynamic: + description: >- + A flag to indicate if multiple instances of the discount can be generated. + I.e. for newsletter discounts + type: boolean + example: false + rule_id: + type: string + description: The Discount Rule that governs the behaviour of the Discount + example: dru_01F0YESMVK96HVX7N419E3CJ7C + rule: + description: Available if the relation `rule` is expanded. + $ref: ./discount_rule.yaml + is_disabled: + description: >- + Whether the Discount has been disabled. Disabled discounts cannot be + applied to carts + type: boolean + example: false + parent_discount_id: + type: string + description: >- + The Discount that the discount was created from. This will always be a + dynamic discount + example: disc_01G8ZH853YPY9B94857DY91YGW + parent_discount: + description: Available if the relation `parent_discount` is expanded. + $ref: ./discount.yaml + starts_at: + description: The time at which the discount can be used. + type: string + format: date-time + ends_at: + description: The time at which the discount can no longer be used. + type: string + format: date-time + valid_duration: + type: string + description: Duration the discount runs between + example: P3Y6M4DT12H30M5S + regions: + description: >- + The Regions in which the Discount can be used. Available if the relation + `regions` is expanded. + type: array + items: + type: object + description: A region object. + usage_limit: + description: The maximum number of times that a discount can be used. + type: integer + example: 100 + usage_count: + description: The number of times a discount has been used. + type: integer + example: 50 + default: 0 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/discount_condition.yaml b/docs/api/store/components/schemas/discount_condition.yaml new file mode 100644 index 0000000000..57a0dea0b9 --- /dev/null +++ b/docs/api/store/components/schemas/discount_condition.yaml @@ -0,0 +1,92 @@ +title: Discount Condition +description: Holds rule conditions for when a discount is applicable +x-resourceId: discount_condition +required: + - type + - operator + - discount_rule_id +properties: + id: + type: string + description: The discount condition's ID + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + type: + description: The type of the Condition + type: string + enum: + - products + - product_types + - product_collections + - product_tags + - customer_groups + operator: + description: The operator of the Condition + type: string + enum: + - in + - not_in + discount_rule_id: + type: string + description: The ID of the discount rule associated with the condition + example: dru_01F0YESMVK96HVX7N419E3CJ7C + discount_rule: + description: Available if the relation `discount_rule` is expanded. + $ref: ./discount_rule.yaml + products: + description: >- + products associated with this condition if type = products. Available if + the relation `products` is expanded. + type: array + items: + type: object + description: A product object. + product_types: + description: >- + product types associated with this condition if type = product_types. + Available if the relation `product_types` is expanded. + type: array + items: + type: object + description: A product type object. + product_tags: + description: >- + product tags associated with this condition if type = product_tags. + Available if the relation `product_tags` is expanded. + type: array + items: + type: object + description: A product tag object. + product_collections: + description: >- + product collections associated with this condition if type = + product_collections. Available if the relation `product_collections` is + expanded. + type: array + items: + type: object + description: A product collection object. + customer_groups: + description: >- + customer groups associated with this condition if type = customer_groups. + Available if the relation `customer_groups` is expanded. + type: array + items: + type: object + description: A customer group object. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/discount_condition_customer_group.yaml b/docs/api/store/components/schemas/discount_condition_customer_group.yaml new file mode 100644 index 0000000000..ad6527d260 --- /dev/null +++ b/docs/api/store/components/schemas/discount_condition_customer_group.yaml @@ -0,0 +1,34 @@ +title: Product Tag Discount Condition +description: Associates a discount condition with a customer group +x-resourceId: discount_condition_customer_group +required: + - customer_group_id + - condition_id +properties: + customer_group_id: + description: The ID of the Product Tag + type: string + example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63 + condition_id: + description: The ID of the Discount Condition + type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + customer_group: + description: Available if the relation `customer_group` is expanded. + $ref: ./customer_group.yaml + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: ./discount_condition.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/discount_condition_product.yaml b/docs/api/store/components/schemas/discount_condition_product.yaml new file mode 100644 index 0000000000..77f4fa6b9e --- /dev/null +++ b/docs/api/store/components/schemas/discount_condition_product.yaml @@ -0,0 +1,34 @@ +title: Product Discount Condition +description: Associates a discount condition with a product +x-resourceId: discount_condition_product +required: + - product_id + - condition_id +properties: + product_id: + description: The ID of the Product Tag + type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + condition_id: + description: The ID of the Discount Condition + type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product: + description: Available if the relation `product` is expanded. + $ref: ./product.yaml + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: ./discount_condition.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/discount_condition_product_collection.yaml b/docs/api/store/components/schemas/discount_condition_product_collection.yaml new file mode 100644 index 0000000000..43c7548e34 --- /dev/null +++ b/docs/api/store/components/schemas/discount_condition_product_collection.yaml @@ -0,0 +1,34 @@ +title: Product Collection Discount Condition +description: Associates a discount condition with a product collection +x-resourceId: discount_condition_product_collection +required: + - product_collection_id + - condition_id +properties: + product_collection_id: + description: The ID of the Product Collection + type: string + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG + condition_id: + description: The ID of the Discount Condition + type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_collection: + description: Available if the relation `product_collection` is expanded. + $ref: ./product_collection.yaml + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: ./discount_condition.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/discount_condition_product_tag.yaml b/docs/api/store/components/schemas/discount_condition_product_tag.yaml new file mode 100644 index 0000000000..ed3a8b2e79 --- /dev/null +++ b/docs/api/store/components/schemas/discount_condition_product_tag.yaml @@ -0,0 +1,34 @@ +title: Product Tag Discount Condition +description: Associates a discount condition with a product tag +x-resourceId: discount_condition_product_tag +required: + - product_tag_id + - condition_id +properties: + product_tag_id: + description: The ID of the Product Tag + type: string + example: ptag_01F0YESHPZYY3H4SJ3A5918SBN + condition_id: + description: The ID of the Discount Condition + type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_tag: + description: Available if the relation `product_tag` is expanded. + $ref: ./product_tag.yaml + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: ./discount_condition.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/discount_condition_product_type.yaml b/docs/api/store/components/schemas/discount_condition_product_type.yaml new file mode 100644 index 0000000000..3125b2119c --- /dev/null +++ b/docs/api/store/components/schemas/discount_condition_product_type.yaml @@ -0,0 +1,34 @@ +title: Product Type Discount Condition +description: Associates a discount condition with a product type +x-resourceId: discount_condition_product +required: + - product_type_id + - condition_id +properties: + product_type_id: + description: The ID of the Product Tag + type: string + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + condition_id: + description: The ID of the Discount Condition + type: string + example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + product_type: + description: Available if the relation `product_type` is expanded. + $ref: ./product_type.yaml + discount_condition: + description: Available if the relation `discount_condition` is expanded. + $ref: ./discount_condition.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/discount_rule.yaml b/docs/api/store/components/schemas/discount_rule.yaml new file mode 100644 index 0000000000..328171368f --- /dev/null +++ b/docs/api/store/components/schemas/discount_rule.yaml @@ -0,0 +1,66 @@ +title: Discount Rule +description: >- + Holds the rules that governs how a Discount is calculated when applied to a + Cart. +x-resourceId: discount_rule +required: + - type + - value +properties: + id: + type: string + description: The discount rule's ID + example: dru_01F0YESMVK96HVX7N419E3CJ7C + type: + description: >- + The type of the Discount, can be `fixed` for discounts that reduce the + price by a fixed amount, `percentage` for percentage reductions or + `free_shipping` for shipping vouchers. + type: string + enum: + - fixed + - percentage + - free_shipping + example: percentage + description: + description: A short description of the discount + type: string + example: 10 Percent + value: + description: >- + The value that the discount represents; this will depend on the type of + the discount + type: integer + example: 10 + allocation: + description: The scope that the discount should apply to. + type: string + enum: + - total + - item + example: total + conditions: + description: >- + A set of conditions that can be used to limit when the discount can be + used. Available if the relation `conditions` is expanded. + type: array + items: + type: object + description: A discount condition object. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/draft-order.yaml b/docs/api/store/components/schemas/draft-order.yaml new file mode 100644 index 0000000000..12152dc3e0 --- /dev/null +++ b/docs/api/store/components/schemas/draft-order.yaml @@ -0,0 +1,71 @@ +title: DraftOrder +description: Represents a draft order +x-resourceId: draft-order +properties: + id: + type: string + description: The draft order's ID + example: dorder_01G8TJFKBG38YYFQ035MSVG03C + status: + type: string + description: The status of the draft order + enum: + - open + - completed + default: open + display_id: + type: string + description: The draft order's display ID + example: 2 + cart_id: + type: string + description: The ID of the cart associated with the draft order. + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + order_id: + type: string + description: The ID of the order associated with the draft order. + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + canceled_at: + type: string + description: The date the draft order was canceled at. + format: date-time + completed_at: + type: string + description: The date the draft order was completed at. + format: date-time + no_notification_order: + type: boolean + description: Whether to send the customer notifications regarding order updates. + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the cart + associated with the draft order in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/fulfillment.yaml b/docs/api/store/components/schemas/fulfillment.yaml new file mode 100644 index 0000000000..0ea09f97e5 --- /dev/null +++ b/docs/api/store/components/schemas/fulfillment.yaml @@ -0,0 +1,117 @@ +title: Fulfillment +description: >- + Fulfillments are created once store operators can prepare the purchased goods. + Fulfillments will eventually be shipped and hold information about how to + track shipments. Fulfillments are created through a provider, which is + typically an external shipping aggregator, shipping partner og 3PL, most + plugins will have asynchronous communications with these providers through + webhooks in order to automatically update and synchronize the state of + Fulfillments. +x-resourceId: fulfillment +required: + - provider_id +properties: + id: + type: string + description: The cart's ID + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF + claim_order_id: + description: The id of the Claim that the Fulfillment belongs to. + type: string + example: null + claim_order: + description: A claim order object. Available if the relation `claim_order` is expanded. + type: object + swap_id: + description: The id of the Swap that the Fulfillment belongs to. + type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object + order_id: + description: The id of the Order that the Fulfillment belongs to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + provider_id: + description: >- + The id of the Fulfillment Provider responsible for handling the + fulfillment + type: string + example: manual + provider: + description: Available if the relation `provider` is expanded. + $ref: ./fulfillment_provider.yaml + items: + description: >- + The Fulfillment Items in the Fulfillment - these hold information about + how many of each Line Item has been fulfilled. Available if the relation + `items` is expanded. + type: array + items: + $ref: ./fulfillment_item.yaml + tracking_links: + description: >- + The Tracking Links that can be used to track the status of the + Fulfillment, these will usually be provided by the Fulfillment Provider. + Available if the relation `tracking_links` is expanded. + type: array + items: + $ref: ./tracking_link.yaml + tracking_numbers: + deprecated: true + description: >- + The tracking numbers that can be used to track the status of the + fulfillment. + type: array + items: + type: string + data: + description: >- + This contains all the data necessary for the Fulfillment provider to + handle the fulfillment. + type: object + example: {} + shipped_at: + description: The date with timezone at which the Fulfillment was shipped. + type: string + format: date-time + no_notification: + description: >- + Flag for describing whether or not notifications related to this should be + send. + type: boolean + example: false + canceled_at: + description: The date with timezone at which the Fulfillment was canceled. + type: string + format: date-time + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the fulfillment + in case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/fulfillment_item.yaml b/docs/api/store/components/schemas/fulfillment_item.yaml new file mode 100644 index 0000000000..29fe0f87b9 --- /dev/null +++ b/docs/api/store/components/schemas/fulfillment_item.yaml @@ -0,0 +1,28 @@ +title: Fulfillment Item +description: >- + Correlates a Line Item with a Fulfillment, keeping track of the quantity of + the Line Item. +x-resourceId: fulfillment_item +required: + - fulfillment_id + - item_id + - quantity +properties: + fulfillment_id: + description: The id of the Fulfillment that the Fulfillment Item belongs to. + type: string + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF + item_id: + description: The id of the Line Item that the Fulfillment Item references. + type: string + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + fulfillment: + description: A fulfillment object. Available if the relation `fulfillment` is expanded. + type: object + item: + description: Available if the relation `item` is expanded. + $ref: ./line_item.yaml + quantity: + description: The quantity of the Line Item that is included in the Fulfillment. + type: integer + example: 1 diff --git a/docs/api/store/components/schemas/fulfillment_provider.yaml b/docs/api/store/components/schemas/fulfillment_provider.yaml new file mode 100644 index 0000000000..d6fdd8ce64 --- /dev/null +++ b/docs/api/store/components/schemas/fulfillment_provider.yaml @@ -0,0 +1,15 @@ +title: Fulfillment Provider +description: Represents a fulfillment provider plugin and holds its installation status. +x-resourceId: fulfillment_provider +properties: + id: + description: The id of the fulfillment provider as given by the plugin. + type: string + example: manual + is_installed: + description: >- + Whether the plugin is installed in the current version. Plugins that are + no longer installed are not deleted by will have this field set to + `false`. + type: boolean + example: true diff --git a/docs/api/store/components/schemas/gift_card.yaml b/docs/api/store/components/schemas/gift_card.yaml new file mode 100644 index 0000000000..713a2a39fc --- /dev/null +++ b/docs/api/store/components/schemas/gift_card.yaml @@ -0,0 +1,70 @@ +title: Gift Card +description: >- + Gift Cards are redeemable and represent a value that can be used towards the + payment of an Order. +x-resourceId: gift_card +required: + - code + - value + - balance + - region_id +properties: + id: + type: string + description: The cart's ID + example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ + code: + description: >- + The unique code that identifies the Gift Card. This is used by the + Customer to redeem the value of the Gift Card. + type: string + example: 3RFT-MH2C-Y4YZ-XMN4 + value: + description: The value that the Gift Card represents. + type: integer + example: 10 + balance: + description: The remaining value on the Gift Card. + type: integer + example: 10 + region_id: + type: string + description: The id of the Region in which the Gift Card is available. + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + order_id: + type: string + description: The id of the Order that the Gift Card was purchased in. + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + is_disabled: + description: >- + Whether the Gift Card has been disabled. Disabled Gift Cards cannot be + applied to carts. + type: boolean + example: false + ends_at: + description: The time at which the Gift Card can no longer be used. + type: string + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/gift_card_transaction.yaml b/docs/api/store/components/schemas/gift_card_transaction.yaml new file mode 100644 index 0000000000..0d923b3653 --- /dev/null +++ b/docs/api/store/components/schemas/gift_card_transaction.yaml @@ -0,0 +1,43 @@ +title: Gift Card Transaction +description: >- + Gift Card Transactions are created once a Customer uses a Gift Card to pay for + their Order +x-resourceId: gift_card_transaction +required: + - gift_card_id + - amount +properties: + id: + type: string + description: The gift card transaction's ID + example: gct_01G8X9A7ESKAJXG2H0E6F1MW7A + gift_card_id: + description: The ID of the Gift Card that was used in the transaction. + type: string + example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ + gift_card: + description: A gift card object. Available if the relation `gift_card` is expanded. + type: object + order_id: + description: The ID of the Order that the Gift Card was used to pay for. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + amount: + description: The amount that was used from the Gift Card. + type: integer + example: 10 + created_at: + description: The date with timezone at which the resource was created. + type: string + format: date-time + is_taxable: + description: Whether the transaction is taxable or not. + type: boolean + example: false + tax_rate: + description: The tax rate of the transaction + type: number + example: 0 diff --git a/docs/api/store/components/schemas/idempotency_key.yaml b/docs/api/store/components/schemas/idempotency_key.yaml new file mode 100644 index 0000000000..ac4f6b63b7 --- /dev/null +++ b/docs/api/store/components/schemas/idempotency_key.yaml @@ -0,0 +1,55 @@ +title: Idempotency Key +description: >- + Idempotency Key is used to continue a process in case of any failure that + might occur. +x-resourceId: idempotency_key +required: + - idempotency_key +properties: + id: + type: string + description: The idempotency key's ID + example: ikey_01G8X9A7ESKAJXG2H0E6F1MW7A + idempotency_key: + description: >- + The unique randomly generated key used to determine the state of a + process. + type: string + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + description: Date which the idempotency key was locked. + type: string + format: date-time + locked_at: + description: Date which the idempotency key was locked. + type: string + format: date-time + request_method: + description: The method of the request + type: string + example: POST + request_params: + type: object + description: The parameters passed to the request + example: + id: cart_01G8ZH853Y6TFXWPG5EYE81X63 + request_path: + description: The request's path + type: string + example: /store/carts/cart_01G8ZH853Y6TFXWPG5EYE81X63/complete + response_code: + type: string + description: The response's code. + example: 200 + response_body: + type: object + description: The response's body + example: + id: cart_01G8ZH853Y6TFXWPG5EYE81X63 + recovery_point: + type: string + description: Where to continue from. + default: started diff --git a/docs/api/store/components/schemas/image.yaml b/docs/api/store/components/schemas/image.yaml new file mode 100644 index 0000000000..24bf973e75 --- /dev/null +++ b/docs/api/store/components/schemas/image.yaml @@ -0,0 +1,31 @@ +title: Image +description: Images holds a reference to a URL at which the image file can be found. +x-resourceId: image +required: + - url +properties: + id: + type: string + description: The image's ID + example: img_01G749BFYR6T8JTVW6SGW3K3E6 + url: + description: The URL at which the image file can be found. + type: string + format: uri + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/invite.yaml b/docs/api/store/components/schemas/invite.yaml new file mode 100644 index 0000000000..492a71eeb2 --- /dev/null +++ b/docs/api/store/components/schemas/invite.yaml @@ -0,0 +1,50 @@ +title: Invite +description: Represents an invite +x-resourceId: invite +required: + - user_email +properties: + id: + type: string + description: The invite's ID + example: invite_01G8TKE4XYCTHSCK2GDEP47RE1 + user_email: + type: string + description: The email of the user being invited. + format: email + role: + type: string + description: The user's role. + enum: + - admin + - member + - developer + default: member + accepted: + type: boolean + description: Whether the invite was accepted or not. + example: false + token: + type: string + description: The token used to accept the invite. + expores_at: + type: string + description: The date the invite expires at. + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/line_item.yaml b/docs/api/store/components/schemas/line_item.yaml new file mode 100644 index 0000000000..d949a50d95 --- /dev/null +++ b/docs/api/store/components/schemas/line_item.yaml @@ -0,0 +1,172 @@ +title: Line Item +description: >- + Line Items represent purchasable units that can be added to a Cart for + checkout. When Line Items are purchased they will get copied to the resulting + order and can eventually be referenced in Fulfillments and Returns. Line Items + may also be created when processing Swaps and Claims. +x-resourceId: line_item +required: + - title + - unit_price + - quantity +properties: + id: + type: string + description: The cart's ID + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + cart_id: + description: The ID of the Cart that the Line Item belongs to. + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + order_id: + description: The ID of the Order that the Line Item belongs to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + swap_id: + description: The id of the Swap that the Line Item belongs to. + type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object + claim_order_id: + description: The id of the Claim that the Line Item belongs to. + type: string + example: null + claim_order: + description: A claim order object. Available if the relation `claim_order` is expanded. + type: object + tax_lines: + description: Available if the relation `tax_lines` is expanded. + type: array + items: + $ref: ./line_item_tax_line.yaml + adjustments: + description: Available if the relation `adjustments` is expanded. + type: array + items: + $ref: ./line_item_adjustment.yaml + title: + description: >- + The title of the Line Item, this should be easily identifiable by the + Customer. + type: string + example: Medusa Coffee Mug + description: + description: A more detailed description of the contents of the Line Item. + type: string + example: One Size + thumbnail: + description: A URL string to a small image of the contents of the Line Item. + type: string + format: uri + example: https://medusa-public-images.s3.eu-west-1.amazonaws.com/coffee-mug.png + is_return: + description: Is the item being returned + type: boolean + example: false + is_giftcard: + description: Flag to indicate if the Line Item is a Gift Card. + type: boolean + example: false + should_merge: + description: >- + Flag to indicate if new Line Items with the same variant should be merged + or added as an additional Line Item. + type: boolean + example: false + allow_discounts: + description: >- + Flag to indicate if the Line Item should be included when doing discount + calculations. + type: boolean + example: false + has_shipping: + description: Flag to indicate if the Line Item has fulfillment associated with it. + type: boolean + example: false + unit_price: + description: >- + The price of one unit of the content in the Line Item. This should be in + the currency defined by the Cart/Order/Swap/Claim that the Line Item + belongs to. + type: boolean + example: 8000 + variant_id: + description: The id of the Product Variant contained in the Line Item. + type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: >- + A product variant object. The Product Variant contained in the Line Item. + Available if the relation `variant` is expanded. + type: object + quantity: + description: The quantity of the content in the Line Item. + type: integer + example: 1 + fulfilled_quantity: + description: The quantity of the Line Item that has been fulfilled. + type: integer + example: 0 + returned_quantity: + description: The quantity of the Line Item that has been returned. + type: integer + example: 0 + shipped_quantity: + description: The quantity of the Line Item that has been shipped. + type: integer + example: 0 + refundable: + description: >- + The amount that can be refunded from the given Line Item. Takes taxes and + discounts into consideration. + type: integer + example: 0 + subtotal: + type: integer + description: The subtotal of the line item + example: 8000 + tax_total: + type: integer + description: The total of tax of the line item + example: 0 + total: + type: integer + description: The total amount of the line item + example: 8000 + original_total: + type: integer + description: The original total amount of the line item + example: 8000 + original_tax_total: + type: integer + description: The original tax total amount of the line item + example: 0 + discount_total: + type: integer + description: The total of discount of the line item + example: 0 + gift_card_total: + type: integer + description: The total of the gift card of the line item + example: 0 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/line_item_adjustment.yaml b/docs/api/store/components/schemas/line_item_adjustment.yaml new file mode 100644 index 0000000000..8ae889c8dc --- /dev/null +++ b/docs/api/store/components/schemas/line_item_adjustment.yaml @@ -0,0 +1,39 @@ +title: Line Item Adjustment +description: Represents an Line Item Adjustment +x-resourceId: line_item_adjustment +required: + - item_id + - description + - amount +properties: + id: + type: string + description: The invite's ID + example: lia_01G8TKE4XYCTHSCK2GDEP47RE1 + item_id: + type: string + description: The ID of the line item + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + item: + description: Available if the relation `item` is expanded. + $ref: ./line_item.yaml + description: + type: string + description: The line item's adjustment description + example: Adjusted item's price. + discount_id: + type: string + description: The ID of the discount associated with the adjustment + example: disc_01F0YESMW10MGHWJKZSDDMN0VN + discount: + description: Available if the relation `discount` is expanded. + $ref: ./discount.yaml + amount: + type: number + description: The adjustment amount + example: 1000 + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/line_item_tax_line.yaml b/docs/api/store/components/schemas/line_item_tax_line.yaml new file mode 100644 index 0000000000..9320de67e3 --- /dev/null +++ b/docs/api/store/components/schemas/line_item_tax_line.yaml @@ -0,0 +1,44 @@ +title: Line Item Tax Line +description: Represents an Line Item Tax Line +x-resourceId: line_item_tax_line +required: + - item_id + - rate + - name +properties: + id: + type: string + description: The line item tax line's ID + example: litl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + item_id: + type: string + description: The ID of the line item + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + item: + description: Available if the relation `item` is expanded. + $ref: ./line_item.yaml + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + rate: + description: The numeric rate to charge tax by + type: number + example: 10 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/money_amount.yaml b/docs/api/store/components/schemas/money_amount.yaml new file mode 100644 index 0000000000..f54d7e4a7a --- /dev/null +++ b/docs/api/store/components/schemas/money_amount.yaml @@ -0,0 +1,84 @@ +title: Money Amount +description: >- + Money Amounts represents an amount that a given Product Variant can be + purcased for. Each Money Amount either has a Currency or Region associated + with it to indicate the pricing in a given Currency or, for fully region-based + pricing, the given price in a specific Region. If region-based pricing is used + the amount will be in the currency defined for the Reigon. +x-resourceId: money_amount +required: + - currency_code + - amount +properties: + id: + type: string + description: The money amount's ID + example: ma_01F0YESHRFQNH5S8Q0PK84YYZN + currency_code: + description: The 3 character currency code that the Money Amount is given in. + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: ./currency.yaml + amount: + description: >- + The amount in the smallest currecny unit (e.g. cents 100 cents to charge + $1) that the Product Variant will cost. + type: integer + example: 100 + min_quantity: + description: >- + The minimum quantity that the Money Amount applies to. If this value is + not set, the Money Amount applies to all quantities. + type: integer + example: 1 + max_quantity: + description: >- + The maximum quantity that the Money Amount applies to. If this value is + not set, the Money Amount applies to all quantities. + type: integer + example: 1 + price_list_id: + type: string + description: The ID of the price list associated with the money amount + example: pl_01G8X3CKJXCG5VXVZ87H9KC09W + price_list: + description: Available if the relation `price_list` is expanded. + $ref: ./price_list.yaml + variant_id: + description: The id of the Product Variant contained in the Line Item. + type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: >- + The Product Variant contained in the Line Item. Available if the relation + `variant` is expanded. + type: object + region_id: + type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/note.yaml b/docs/api/store/components/schemas/note.yaml new file mode 100644 index 0000000000..9333e49472 --- /dev/null +++ b/docs/api/store/components/schemas/note.yaml @@ -0,0 +1,50 @@ +title: Note +description: >- + Notes are elements which we can use in association with different resources to + allow users to describe additional information in relation to these. +x-resourceId: note +required: + - value + - resource_type + - resource_id +properties: + id: + type: string + description: The note's ID + example: note_01G8TM8ENBMC7R90XRR1G6H26Q + resource_type: + description: The type of resource that the Note refers to. + type: string + example: order + resource_id: + description: The ID of the resource that the Note refers to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + value: + description: The contents of the note. + type: string + example: This order must be fulfilled on Monday + author_id: + type: string + description: The ID of the author (user) + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + author: + description: Available if the relation `author` is expanded. + $ref: ./user.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/notification.yaml b/docs/api/store/components/schemas/notification.yaml new file mode 100644 index 0000000000..559d58d79a --- /dev/null +++ b/docs/api/store/components/schemas/notification.yaml @@ -0,0 +1,67 @@ +title: Notification +description: >- + Notifications a communications sent via Notification Providers as a reaction + to internal events such as `order.placed`. Notifications can be used to show a + chronological timeline for communications sent to a Customer regarding an + Order, and enables resends. +x-resourceId: notification +required: + - resource_type + - resource_id + - to +properties: + id: + type: string + description: The notification's ID + example: noti_01G53V9Y6CKMCGBM1P0X7C28RX + event_name: + description: The name of the event that the notification was sent for. + type: string + example: order.placed + resource_type: + description: The type of resource that the Notification refers to. + type: string + example: order + resource_id: + description: The ID of the resource that the Notification refers to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + customer_id: + description: The ID of the Customer that the Notification was sent to. + type: string + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: A customer object. Available if the relation `customer` is expanded. + type: object + to: + description: >- + The address that the Notification was sent to. This will usually be an + email address, but represent other addresses such as a chat bot user id + type: string + example: user@example.com + data: + description: >- + The data that the Notification was sent with. This contains all the data + necessary for the Notification Provider to initiate a resend. + type: object + example: {} + resends: + description: The resends that have been completed after the original Notification. + type: array + items: + $ref: ./notification_resend.yaml + provider_id: + description: The id of the Notification Provider that handles the Notification. + type: string + example: sengrid + provider: + description: Available if the relation `provider` is expanded. + $ref: ./notification_provider.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time diff --git a/docs/api/store/components/schemas/notification_provider.yaml b/docs/api/store/components/schemas/notification_provider.yaml new file mode 100644 index 0000000000..6ac490109f --- /dev/null +++ b/docs/api/store/components/schemas/notification_provider.yaml @@ -0,0 +1,17 @@ +title: Notification Provider +description: Represents a notification provider plugin and holds its installation status. +x-resourceId: notification_provider +required: + - id +properties: + id: + description: The id of the notification provider as given by the plugin. + type: string + example: sendgrid + is_installed: + description: >- + Whether the plugin is installed in the current version. Plugins that are + no longer installed are not deleted by will have this field set to + `false`. + type: boolean + default: true diff --git a/docs/api/store/components/schemas/notification_resend.yaml b/docs/api/store/components/schemas/notification_resend.yaml new file mode 100644 index 0000000000..c5cfe4431f --- /dev/null +++ b/docs/api/store/components/schemas/notification_resend.yaml @@ -0,0 +1,61 @@ +title: Notification Resend +description: A resend of a Notification. +x-resourceId: notification_resend +properties: + id: + description: The notification resend's ID + type: string + example: noti_01F0YET45G9NHP08Z66CE4QKBS + event_name: + description: The name of the event that the notification was sent for. + type: string + example: order.placed + resource_type: + description: The type of resource that the Notification refers to. + type: string + example: order + resource_id: + description: The ID of the resource that the Notification refers to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + customer_id: + description: The ID of the Customer that the Notification was sent to. + type: string + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: A customer object. Available if the relation `customer` is expanded. + type: object + to: + description: >- + The address that the Notification was sent to. This will usually be an + email address, but represent other addresses such as a chat bot user id + type: string + example: user@example.com + data: + description: >- + The data that the Notification was sent with. This contains all the data + necessary for the Notification Provider to initiate a resend. + type: object + example: {} + parent_id: + description: The ID of the Notification that was originally sent. + type: string + example: noti_01G53V9Y6CKMCGBM1P0X7C28RX + parent_notification: + description: Available if the relation `parent_notification` is expanded. + $ref: ./notification.yaml + provider_id: + description: The ID of the Notification Provider that handles the Notification. + type: string + example: sengrid + provider: + description: Available if the relation `provider` is expanded. + $ref: ./notification_provider.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time diff --git a/docs/api/store/components/schemas/order.yaml b/docs/api/store/components/schemas/order.yaml new file mode 100644 index 0000000000..45e495fab3 --- /dev/null +++ b/docs/api/store/components/schemas/order.yaml @@ -0,0 +1,268 @@ +title: Order +description: Represents an order +x-resourceId: order +required: + - customer_id + - email + - region_id + - currency_code +properties: + id: + type: string + description: The order's ID + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + status: + type: string + description: The order's status + enum: + - pending + - completed + - archived + - canceled + - requires_action + default: pending + fulfillment_status: + type: string + description: The order's fulfillment status + enum: + - not_fulfilled + - partially_fulfilled + - fulfilled + - partially_shipped + - shipped + - partially_returned + - returned + - canceled + - requires_action + default: not_fulfilled + payment_status: + type: string + description: The order's payment status + enum: + - not_paid + - awaiting + - captured + - partially_refunded + - refuneded + - canceled + - requires_action + default: not_paid + display_id: + type: integer + description: The order's display ID + example: 2 + cart_id: + type: string + description: The ID of the cart associated with the order + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + customer_id: + type: string + description: The ID of the customer associated with the order + example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + customer: + description: A customer object. Available if the relation `customer` is expanded. + type: object + email: + description: The email associated with the order + type: string + format: email + billing_address_id: + type: string + description: The ID of the billing address associated with the order + example: addr_01G8ZH853YPY9B94857DY91YGW + billing_address: + description: Available if the relation `billing_address` is expanded. + $ref: ./address.yaml + shipping_address_id: + type: string + description: The ID of the shipping address associated with the order + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: ./address.yaml + region_id: + type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + currency_code: + description: The 3 character currency code that is used in the order + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: ./currency.yaml + tax_rate: + description: The order's tax rate + type: number + example: 0 + discounts: + type: array + description: >- + The discounts used in the order. Available if the relation `discounts` is + expanded. + items: + type: object + description: A discount object. + gift_cards: + type: array + description: >- + The gift cards used in the order. Available if the relation `gift_cards` + is expanded. + items: + type: object + description: A gift card object. + shipping_methods: + type: array + description: >- + The shipping methods used in the order. Available if the relation + `shipping_methods` is expanded. + items: + $ref: ./shipping_method.yaml + payments: + type: array + description: >- + The payments used in the order. Available if the relation `payments` is + expanded. + items: + $ref: ./payment.yaml + fulfillments: + type: array + description: >- + The fulfillments used in the order. Available if the relation + `fulfillments` is expanded. + items: + $ref: ./fulfillment.yaml + returns: + type: array + description: >- + The returns associated with the order. Available if the relation `returns` + is expanded. + items: + type: object + description: A return object. + claims: + type: array + description: >- + The claims associated with the order. Available if the relation `claims` + is expanded. + items: + type: object + description: A claim order object. + refunds: + type: array + description: >- + The refunds associated with the order. Available if the relation `refunds` + is expanded. + items: + type: object + description: A refund object. + swaps: + type: array + description: >- + The swaps associated with the order. Available if the relation `swaps` is + expanded. + items: + type: object + description: A swap object. + draft_order_id: + type: string + description: The ID of the draft order this order is associated with. + example: null + draft_order: + description: A draft order object. Available if the relation `draft_order` is expanded. + type: object + items: + type: array + description: >- + The line items that belong to the order. Available if the relation `items` + is expanded. + items: + $ref: ./line_item.yaml + gift_card_transactions: + type: array + description: >- + The gift card transactions used in the order. Available if the relation + `gift_card_transactions` is expanded. + items: + $ref: ./gift_card_transaction.yaml + canceled_at: + type: string + description: The date the order was canceled on. + format: date-time + no_notification: + description: >- + Flag for describing whether or not notifications related to this should be + send. + type: boolean + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the processing of the order in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + external_id: + description: The ID of an external order. + type: string + example: null + sales_channel_id: + type: string + description: The ID of the sales channel this order is associated with. + example: null + sales_channel: + description: >- + A sales channel object. Available if the relation `sales_channel` is + expanded. + type: object + shipping_total: + type: integer + description: The total of shipping + example: 1000 + discount_total: + type: integer + description: The total of discount + example: 800 + tax_total: + type: integer + description: The total of tax + example: 0 + refunded_total: + type: integer + description: The total amount refunded if the order is returned. + example: 0 + total: + type: integer + description: The total amount of the order + example: 8200 + subtotal: + type: integer + description: The subtotal of the order + example: 8000 + paid_total: + type: integer + description: The total amount paid + example: 8000 + refundable_amount: + type: integer + description: The amount that can be refunded + example: 8200 + gift_card_total: + type: integer + description: The total of gift cards + example: 0 + gift_card_tax_total: + type: integer + description: The total of gift cards with taxes + example: 0 diff --git a/docs/api/store/components/schemas/payment.yaml b/docs/api/store/components/schemas/payment.yaml new file mode 100644 index 0000000000..92294bd2e6 --- /dev/null +++ b/docs/api/store/components/schemas/payment.yaml @@ -0,0 +1,96 @@ +title: Payment +description: >- + Payments represent an amount authorized with a given payment method, Payments + can be captured, canceled or refunded. +x-resourceId: payment +required: + - amount + - currency_code + - provider_id +properties: + id: + type: string + description: The payment's ID + example: pay_01G2SJNT6DEEWDFNAJ4XWDTHKE + swap_id: + description: The ID of the Swap that the Payment is used for. + type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object + cart_id: + description: The id of the Cart that the Payment Session is created for. + type: string + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + order_id: + description: The ID of the Order that the Payment is used for. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + amount: + description: The amount that the Payment has been authorized for. + type: integer + example: 100 + currency_code: + description: The 3 character ISO currency code that the Payment is completed in. + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: ./currency.yaml + amount_refunded: + description: >- + The amount of the original Payment amount that has been refunded back to + the Customer. + type: integer + example: 0 + provider_id: + description: The id of the Payment Provider that is responsible for the Payment + type: string + example: manual + data: + description: >- + The data required for the Payment Provider to identify, modify and process + the Payment. Typically this will be an object that holds an id to the + external payment session, but can be an empty object if the Payment + Provider doesn't hold any state. + type: object + example: {} + captured_at: + description: The date with timezone at which the Payment was captured. + type: string + format: date-time + canceled_at: + description: The date with timezone at which the Payment was canceled. + type: string + format: date-time + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of a payment in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/payment_provider.yaml b/docs/api/store/components/schemas/payment_provider.yaml new file mode 100644 index 0000000000..7f39ed6355 --- /dev/null +++ b/docs/api/store/components/schemas/payment_provider.yaml @@ -0,0 +1,17 @@ +title: Payment Provider +description: Represents a Payment Provider plugin and holds its installation status. +x-resourceId: payment_provider +required: + - id +properties: + id: + description: The id of the payment provider as given by the plugin. + type: string + example: manual + is_installed: + description: >- + Whether the plugin is installed in the current version. Plugins that are + no longer installed are not deleted by will have this field set to + `false`. + type: boolean + default: true diff --git a/docs/api/store/components/schemas/payment_session.yaml b/docs/api/store/components/schemas/payment_session.yaml new file mode 100644 index 0000000000..c9f52a749b --- /dev/null +++ b/docs/api/store/components/schemas/payment_session.yaml @@ -0,0 +1,74 @@ +title: Payment Session +description: >- + Payment Sessions are created when a Customer initilizes the checkout flow, and + can be used to hold the state of a payment flow. Each Payment Session is + controlled by a Payment Provider, who is responsible for the communication + with external payment services. Authorized Payment Sessions will eventually + get promoted to Payments to indicate that they are authorized for + capture/refunds/etc. +x-resourceId: payment_session +required: + - cart_id + - provider_id + - status +properties: + id: + type: string + description: The payment session's ID + example: ps_01G901XNSRM2YS3ASN9H5KG3FZ + cart_id: + description: The id of the Cart that the Payment Session is created for. + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + provider_id: + description: The id of the Payment Provider that is responsible for the Payment Session + type: string + example: manual + is_selected: + description: >- + A flag to indicate if the Payment Session has been selected as the method + that will be used to complete the purchase. + type: boolean + example: true + status: + description: >- + Indicates the status of the Payment Session. Will default to `pending`, + and will eventually become `authorized`. Payment Sessions may have the + status of `requires_more` to indicate that further actions are to be + completed by the Customer. + type: string + enum: + - authorized + - pending + - requires_more + - error + - canceled + example: pending + data: + description: >- + The data required for the Payment Provider to identify, modify and process + the Payment Session. Typically this will be an object that holds an id to + the external payment session, but can be an empty object if the Payment + Provider doesn't hold any state. + type: object + example: {} + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of a cart in case + of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time diff --git a/docs/api/store/components/schemas/price_list.yaml b/docs/api/store/components/schemas/price_list.yaml new file mode 100644 index 0000000000..a39b820583 --- /dev/null +++ b/docs/api/store/components/schemas/price_list.yaml @@ -0,0 +1,70 @@ +title: Price List +description: >- + Price Lists represents a set of prices that overrides the default price for + one or more product variants. +x-resourceId: price_list +required: + - name + - description +properties: + id: + type: string + description: The price list's ID + example: pl_01G8X3CKJXCG5VXVZ87H9KC09W + name: + type: string + description: The price list's name + example: VIP Prices + description: + type: string + description: The price list's description + example: Prices for VIP customers + type: + description: The type of Price List. This can be one of either `sale` or `override`. + type: string + enum: + - sale + - override + default: sale + status: + description: The status of the Price List + type: string + enum: + - active + - draft + default: draft + starts_at: + description: The date with timezone that the Price List starts being valid. + type: string + format: date-time + ends_at: + description: The date with timezone that the Price List stops being valid. + type: string + format: date-time + customer_groups: + description: >- + The Customer Groups that the Price List applies to. Available if the + relation `customer_groups` is expanded. + type: array + items: + type: object + description: A customer group object. + prices: + description: >- + The Money Amounts that are associated with the Price List. Available if + the relation `prices` is expanded. + type: array + items: + $ref: ./money_amount.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time diff --git a/docs/api/store/components/schemas/product.yaml b/docs/api/store/components/schemas/product.yaml new file mode 100644 index 0000000000..41bf53f444 --- /dev/null +++ b/docs/api/store/components/schemas/product.yaml @@ -0,0 +1,188 @@ +title: Product +description: >- + Products are a grouping of Product Variants that have common properties such + as images and descriptions. Products can have multiple options which define + the properties that Product Variants differ by. +x-resourceId: product +required: + - title + - profile_id +properties: + id: + type: string + description: The product's ID + example: prod_01G1G5V2MBA328390B5AXJ610F + title: + description: A title that can be displayed for easy identification of the Product. + type: string + example: Medusa Coffee Mug + subtitle: + description: An optional subtitle that can be used to further specify the Product. + type: string + description: + description: A short description of the Product. + type: string + example: Every programmer's best friend. + handle: + description: A unique identifier for the Product (e.g. for slug structure). + type: string + example: coffee-mug + is_giftcard: + description: >- + Whether the Product represents a Gift Card. Products that represent Gift + Cards will automatically generate a redeemable Gift Card code once they + are purchased. + type: boolean + default: false + status: + description: The status of the product + type: string + enum: + - draft + - proposed + - published + - rejected + default: draft + images: + description: Images of the Product. Available if the relation `images` is expanded. + type: array + items: + $ref: ./image.yaml + thumbnail: + description: A URL to an image file that can be used to identify the Product. + type: string + format: uri + options: + description: >- + The Product Options that are defined for the Product. Product Variants of + the Product will have a unique combination of Product Option Values. + Available if the relation `options` is expanded. + type: array + items: + $ref: ./product_option.yaml + variants: + description: >- + The Product Variants that belong to the Product. Each will have a unique + combination of Product Option Values. Available if the relation `variants` + is expanded. + type: array + items: + $ref: ./product_variant.yaml + profile_id: + description: >- + The ID of the Shipping Profile that the Product belongs to. Shipping + Profiles have a set of defined Shipping Options that can be used to + Fulfill a given set of Products. + type: string + example: sp_01G1G5V239ENSZ5MV4JAR737BM + profile: + description: Available if the relation `profile` is expanded. + $ref: ./shipping_profile.yaml + weight: + description: >- + The weight of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + height: + description: >- + The height of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + width: + description: >- + The width of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + length: + description: >- + The length of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + hs_code: + description: >- + The Harmonized System code of the Product Variant. May be used by + Fulfillment Providers to pass customs information to shipping carriers. + type: string + example: null + origin_country: + description: >- + The country in which the Product Variant was produced. May be used by + Fulfillment Providers to pass customs information to shipping carriers. + type: string + example: null + mid_code: + description: >- + The Manufacturers Identification code that identifies the manufacturer of + the Product Variant. May be used by Fulfillment Providers to pass customs + information to shipping carriers. + type: string + example: null + material: + description: >- + The material and composition that the Product Variant is made of, May be + used by Fulfillment Providers to pass customs information to shipping + carriers. + type: string + example: null + collection_id: + type: string + description: The Product Collection that the Product belongs to + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG + collection: + description: >- + A product collection object. Available if the relation `collection` is + expanded. + type: object + type_id: + type: string + description: The Product type that the Product belongs to + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + type: + description: Available if the relation `type` is expanded. + $ref: ./product_type.yaml + tags: + description: >- + The Product Tags assigned to the Product. Available if the relation `tags` + is expanded. + type: array + items: + $ref: ./product_tag.yaml + discountable: + description: >- + Whether the Product can be discounted. Discounts will not apply to Line + Items of this Product when this flag is set to `false`. + type: boolean + default: true + external_id: + description: The external ID of the product + type: string + example: null + sales_channels: + description: >- + The sales channels the product is associated with. Available if the + relation `sales_channels` is expanded. + type: array + items: + type: object + description: A sales channel object. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/product_collection.yaml b/docs/api/store/components/schemas/product_collection.yaml new file mode 100644 index 0000000000..711acc6c10 --- /dev/null +++ b/docs/api/store/components/schemas/product_collection.yaml @@ -0,0 +1,45 @@ +title: Product Collection +description: Product Collections represents a group of Products that are related. +x-resourceId: product_collection +required: + - title +properties: + id: + type: string + description: The product collection's ID + example: pcol_01F0YESBFAZ0DV6V831JXWH0BG + title: + description: The title that the Product Collection is identified by. + type: string + example: Summer Collection + handle: + description: >- + A unique string that identifies the Product Collection - can for example + be used in slug structures. + type: string + example: summer-collection + products: + description: >- + The Products contained in the Product Collection. Available if the + relation `products` is expanded. + type: array + items: + type: object + description: A product collection object. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/product_option.yaml b/docs/api/store/components/schemas/product_option.yaml new file mode 100644 index 0000000000..66fd46f4fd --- /dev/null +++ b/docs/api/store/components/schemas/product_option.yaml @@ -0,0 +1,49 @@ +title: Product Option +description: >- + Product Options define properties that may vary between different variants of + a Product. Common Product Options are "Size" and "Color", but Medusa doesn't + limit what Product Options that can be defined. +x-resourceId: product_option +required: + - title + - product_id +properties: + id: + type: string + description: The product option's ID + example: opt_01F0YESHQBZVKCEXJ24BS6PCX3 + title: + description: The title that the Product Option is defined by (e.g. "Size"). + type: string + example: Size + values: + description: >- + The Product Option Values that are defined for the Product Option. + Available if the relation `values` is expanded. + type: array + items: + $ref: ./product_option_value.yaml + product_id: + description: The ID of the Product that the Product Option is defined for. + type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: A product object. Available if the relation `product` is expanded. + type: object + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/product_option_value.yaml b/docs/api/store/components/schemas/product_option_value.yaml new file mode 100644 index 0000000000..3b8606ea53 --- /dev/null +++ b/docs/api/store/components/schemas/product_option_value.yaml @@ -0,0 +1,54 @@ +title: Product Option Value +description: >- + A value given to a Product Variant's option set. Product Variant have a + Product Option Value for each of the Product Options defined on the Product. +x-resourceId: product_option_value +required: + - value + - option_id + - variant_id +properties: + id: + type: string + description: The product option value's ID + example: optval_01F0YESHR7S6ECD03RF6W12DSJ + value: + description: >- + The value that the Product Variant has defined for the specific Product + Option (e.g. if the Product Option is "Size" this value could be "Small", + "Medium" or "Large"). + type: string + example: large + option_id: + description: The ID of the Product Option that the Product Option Value is defined for. + type: string + example: opt_01F0YESHQBZVKCEXJ24BS6PCX3 + option: + description: Available if the relation `option` is expanded. + $ref: ./product_option.yaml + variant_id: + description: >- + The ID of the Product Variant that the Product Option Value is defined + for. + type: string + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + variant: + description: Available if the relation `variant` is expanded. + $ref: ./product_variant.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/product_tag.yaml b/docs/api/store/components/schemas/product_tag.yaml new file mode 100644 index 0000000000..cdfa21d4ad --- /dev/null +++ b/docs/api/store/components/schemas/product_tag.yaml @@ -0,0 +1,31 @@ +title: Product Tag +description: Product Tags can be added to Products for easy filtering and grouping. +x-resourceId: product_tag +required: + - value +properties: + id: + type: string + description: The product tag's ID + example: ptag_01G8K2MTMG9168F2B70S1TAVK3 + value: + description: The value that the Product Tag represents + type: string + example: Pants + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/product_tax_rate.yaml b/docs/api/store/components/schemas/product_tax_rate.yaml new file mode 100644 index 0000000000..f72e8896a8 --- /dev/null +++ b/docs/api/store/components/schemas/product_tax_rate.yaml @@ -0,0 +1,36 @@ +title: Product Tax Rate +description: >- + Associates a tax rate with a product to indicate that the product is taxed in + a certain way +x-resourceId: product_tax_rate +required: + - product_id + - rate_id +properties: + product_id: + description: The ID of the Product + type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: Available if the relation `product` is expanded. + $ref: ./product.yaml + rate_id: + description: The ID of the Tax Rate + type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: ./tax_rate.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/product_type.yaml b/docs/api/store/components/schemas/product_type.yaml new file mode 100644 index 0000000000..e2be2bf920 --- /dev/null +++ b/docs/api/store/components/schemas/product_type.yaml @@ -0,0 +1,31 @@ +title: Product Type +description: Product Type can be added to Products for filtering and reporting purposes. +x-resourceId: product_type +required: + - value +properties: + id: + type: string + description: The product type's ID + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + value: + description: The value that the Product Type represents. + type: string + example: Clothing + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/product_type_tax_rate.yaml b/docs/api/store/components/schemas/product_type_tax_rate.yaml new file mode 100644 index 0000000000..5bc7d5c302 --- /dev/null +++ b/docs/api/store/components/schemas/product_type_tax_rate.yaml @@ -0,0 +1,36 @@ +title: Product Type Tax Rate +description: >- + Associates a tax rate with a product type to indicate that the product type is + taxed in a certain way +x-resourceId: product_type_tax_rate +required: + - product_type_id + - rate_id +properties: + product_type_id: + description: The ID of the Product type + type: string + example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + product_type: + description: Available if the relation `product_type` is expanded. + $ref: ./product_type.yaml + rate_id: + description: The id of the Tax Rate + type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: ./tax_rate.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/product_variant.yaml b/docs/api/store/components/schemas/product_variant.yaml new file mode 100644 index 0000000000..aa7386d615 --- /dev/null +++ b/docs/api/store/components/schemas/product_variant.yaml @@ -0,0 +1,149 @@ +title: Product Variant +description: >- + Product Variants represent a Product with a specific set of Product Option + configurations. The maximum number of Product Variants that a Product can have + is given by the number of available Product Option combinations. +x-resourceId: product_variant +required: + - title + - product_id + - inventory_quantity +properties: + id: + type: string + description: The product variant's ID + example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + title: + description: >- + A title that can be displayed for easy identification of the Product + Variant. + type: string + example: Small + product_id: + description: The ID of the Product that the Product Variant belongs to. + type: string + example: prod_01G1G5V2MBA328390B5AXJ610F + product: + description: A product object. Available if the relation `product` is expanded. + type: object + prices: + description: >- + The Money Amounts defined for the Product Variant. Each Money Amount + represents a price in a given currency or a price in a specific Region. + Available if the relation `prices` is expanded. + type: array + items: + $ref: ./money_amount.yaml + sku: + description: >- + The unique stock keeping unit used to identify the Product Variant. This + will usually be a unqiue identifer for the item that is to be shipped, and + can be referenced across multiple systems. + type: string + example: shirt-123 + barcode: + description: >- + A generic field for a GTIN number that can be used to identify the Product + Variant. + type: string + example: null + ean: + description: An EAN barcode number that can be used to identify the Product Variant. + type: string + example: null + upc: + description: A UPC barcode number that can be used to identify the Product Variant. + type: string + example: null + variant_rank: + description: The ranking of this variant + type: number + default: 0 + inventory_quantity: + description: The current quantity of the item that is stocked. + type: integer + example: 100 + allow_backorder: + description: >- + Whether the Product Variant should be purchasable when + `inventory_quantity` is 0. + type: boolean + default: false + manage_inventory: + description: Whether Medusa should manage inventory for the Product Variant. + type: boolean + default: true + hs_code: + description: >- + The Harmonized System code of the Product Variant. May be used by + Fulfillment Providers to pass customs information to shipping carriers. + type: string + example: null + origin_country: + description: >- + The country in which the Product Variant was produced. May be used by + Fulfillment Providers to pass customs information to shipping carriers. + type: string + example: null + mid_code: + description: >- + The Manufacturers Identification code that identifies the manufacturer of + the Product Variant. May be used by Fulfillment Providers to pass customs + information to shipping carriers. + type: string + example: null + material: + description: >- + The material and composition that the Product Variant is made of, May be + used by Fulfillment Providers to pass customs information to shipping + carriers. + type: string + example: null + weight: + description: >- + The weight of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + height: + description: >- + The height of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + width: + description: >- + The width of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + length: + description: >- + The length of the Product Variant. May be used in shipping rate + calculations. + type: number + example: null + options: + description: >- + The Product Option Values specified for the Product Variant. Available if + the relation `options` is expanded. + type: array + items: + $ref: ./product_option_value.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/refund.yaml b/docs/api/store/components/schemas/refund.yaml new file mode 100644 index 0000000000..c1fc4cfc0f --- /dev/null +++ b/docs/api/store/components/schemas/refund.yaml @@ -0,0 +1,64 @@ +title: Refund +description: >- + Refund represent an amount of money transfered back to the Customer for a + given reason. Refunds may occur in relation to Returns, Swaps and Claims, but + can also be initiated by a store operator. +x-resourceId: refund +required: + - order_id + - amount +properties: + id: + type: string + description: The refund's ID + example: ref_01G1G5V27GYX4QXNARRQCW1N8T + order_id: + description: The id of the Order that the Refund is related to. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + amount: + description: The amount that has be refunded to the Customer. + type: integer + example: 1000 + note: + description: An optional note explaining why the amount was refunded. + type: string + example: I didn't like it + reason: + description: >- + The reason given for the Refund, will automatically be set when processed + as part of a Swap, Claim or Return. + type: string + enum: + - discount + - return + - swap + - claim + - other + example: return + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the refund in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/region.yaml b/docs/api/store/components/schemas/region.yaml new file mode 100644 index 0000000000..877489af02 --- /dev/null +++ b/docs/api/store/components/schemas/region.yaml @@ -0,0 +1,102 @@ +title: Region +description: >- + Regions hold settings for how Customers in a given geographical location shop. + The is, for example, where currencies and tax rates are defined. A Region can + consist of multiple countries to accomodate common shopping settings across + countries. +x-resourceId: region +required: + - name + - currency_code + - tax_rate +properties: + id: + type: string + description: The cart's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + name: + description: >- + The name of the region as displayed to the customer. If the Region only + has one country it is recommended to write the country name. + type: string + example: EU + currency_code: + description: The 3 character currency code that the Region uses. + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + currency: + description: Available if the relation `currency` is expanded. + $ref: ./currency.yaml + tax_rate: + description: The tax rate that should be charged on purchases in the Region. + type: number + example: 0 + tax_rates: + description: >- + The tax rates that are included in the Region. Available if the relation + `tax_rates` is expanded. + type: array + items: + $ref: ./tax_rate.yaml + tax_code: + description: >- + The tax code used on purchases in the Region. This may be used by other + systems for accounting purposes. + type: string + example: null + gift_cards_taxable: + description: Whether the gift cards are taxable or not in this region. + type: boolean + default: true + automatic_taxes: + description: Whether taxes should be automated in this region. + type: boolean + default: true + countries: + description: >- + The countries that are included in the Region. Available if the relation + `countries` is expanded. + type: array + items: + $ref: ./country.yaml + tax_provider_id: + type: string + description: The ID of the tax provider used in this region + example: null + tax_provider: + description: Available if the relation `tax_provider` is expanded. + $ref: ./tax_provider.yaml + payment_providers: + description: >- + The Payment Providers that can be used to process Payments in the Region. + Available if the relation `payment_providers` is expanded. + type: array + items: + $ref: ./payment_provider.yaml + fulfillment_providers: + description: >- + The Fulfillment Providers that can be used to fulfill orders in the + Region. Available if the relation `payment_providers` is expanded. + type: array + items: + $ref: ./fulfillment_provider.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/return.yaml b/docs/api/store/components/schemas/return.yaml new file mode 100644 index 0000000000..a475900106 --- /dev/null +++ b/docs/api/store/components/schemas/return.yaml @@ -0,0 +1,98 @@ +title: Return +description: >- + Return orders hold information about Line Items that a Customer wishes to send + back, along with how the items will be returned. Returns can be used as part + of a Swap. +x-resourceId: return +required: + - refund_amount +properties: + id: + type: string + description: The return's ID + example: ret_01F0YET7XPCMF8RZ0Y151NZV2V + status: + description: Status of the Return. + type: string + enum: + - requested + - received + - requires_action + - canceled + default: requested + items: + description: >- + The Return Items that will be shipped back to the warehouse. Available if + the relation `items` is expanded. + type: array + items: + $ref: ./return_item.yaml + swap_id: + description: The ID of the Swap that the Return is a part of. + type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object + order_id: + description: The ID of the Order that the Return is made from. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + claim_order_id: + description: The ID of the Claim that the Return is a part of. + type: string + example: null + claim_order: + description: A claim order object. Available if the relation `claim_order` is expanded. + type: object + shipping_method: + description: >- + The Shipping Method that will be used to send the Return back. Can be null + if the Customer facilitates the return shipment themselves. Available if + the relation `shipping_method` is expanded. + type: array + items: + $ref: ./shipping_method.yaml + shipping_data: + description: >- + Data about the return shipment as provided by the Fulfilment Provider that + handles the return shipment. + type: object + example: {} + refund_amount: + description: The amount that should be refunded as a result of the return. + type: integer + example: 1000 + no_notification: + description: When set to true, no notification will be sent related to this return. + type: boolean + example: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the return in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + received_at: + description: The date with timezone at which the return was received. + type: string + format: date-time + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/return_item.yaml b/docs/api/store/components/schemas/return_item.yaml new file mode 100644 index 0000000000..3c45a35003 --- /dev/null +++ b/docs/api/store/components/schemas/return_item.yaml @@ -0,0 +1,57 @@ +title: Return Item +description: >- + Correlates a Line Item with a Return, keeping track of the quantity of the + Line Item that will be returned. +x-resourceId: return_item +required: + - return_id + - item_id +properties: + return_id: + description: The id of the Return that the Return Item belongs to. + type: string + example: ret_01F0YET7XPCMF8RZ0Y151NZV2V + return_order: + description: Available if the relation `return_order` is expanded. + $ref: ./return.yaml + item_id: + description: The id of the Line Item that the Return Item references. + type: string + example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + item: + description: Available if the relation `item` is expanded. + $ref: ./line_item.yaml + quantity: + description: The quantity of the Line Item that is included in the Return. + type: integer + example: 1 + is_requested: + description: >- + Whether the Return Item was requested initially or received unexpectedly + in the warehouse. + type: boolean + default: true + requested_quantity: + description: The quantity that was originally requested to be returned. + type: integer + example: 1 + recieved_quantity: + description: The quantity that was received in the warehouse. + type: integer + example: 1 + reason_id: + description: The ID of the reason for returning the item. + type: string + example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ + reason: + description: Available if the relation `reason` is expanded. + $ref: ./return_reason.yaml + note: + description: An optional note with additional details about the Return. + type: string + example: I didn't like it. + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/return_reason.yaml b/docs/api/store/components/schemas/return_reason.yaml new file mode 100644 index 0000000000..7873cfc3f2 --- /dev/null +++ b/docs/api/store/components/schemas/return_reason.yaml @@ -0,0 +1,52 @@ +title: Return Reason +description: >- + A Reason for why a given product is returned. A Return Reason can be used on + Return Items in order to indicate why a Line Item was returned. +x-resourceId: return_reason +required: + - value + - label +properties: + id: + type: string + description: The cart's ID + example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ + description: + description: A description of the Reason. + type: string + example: Items that are damaged + label: + description: A text that can be displayed to the Customer as a reason. + type: string + example: Damaged goods + value: + description: The value to identify the reason by. + type: string + example: damaged + parent_return_reason_id: + type: string + description: The ID of the parent reason. + example: null + parent_return_reason: + description: Available if the relation `parent_return_reason` is expanded. + $ref: ./return_reason.yaml + return_reason_children: + description: Available if the relation `return_reason_children` is expanded. + $ref: ./return_reason.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/sales_channel.yaml b/docs/api/store/components/schemas/sales_channel.yaml new file mode 100644 index 0000000000..0523299105 --- /dev/null +++ b/docs/api/store/components/schemas/sales_channel.yaml @@ -0,0 +1,34 @@ +title: Sales Channel +description: A Sales Channel +x-resourceId: sales_channel +required: + - name +properties: + id: + type: string + description: The sales channel's ID + example: sc_01G8X9A7ESKAJXG2H0E6F1MW7A + name: + description: The name of the sales channel. + type: string + example: Market + description: + description: The description of the sales channel. + type: string + example: Multi-vendor market + is_disabled: + description: Specify if the sales channel is enabled or disabled. + type: boolean + default: false + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time diff --git a/docs/api/store/components/schemas/sales_channel_tax_line.yaml b/docs/api/store/components/schemas/sales_channel_tax_line.yaml new file mode 100644 index 0000000000..8aac42859c --- /dev/null +++ b/docs/api/store/components/schemas/sales_channel_tax_line.yaml @@ -0,0 +1,44 @@ +title: Sales Channel +description: A Sales Channel +x-resourceId: sales_channel_tax_line +required: + - shipping_method_id + - rate + - name +properties: + id: + type: string + description: The line item tax line's ID + example: smtl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + shipping_method_id: + type: string + description: The ID of the line item + example: sm_01F0YET7DR2E7CYVSDHM593QG2 + shipping_method: + description: Available if the relation `shipping_method` is expanded. + $ref: ./shipping_method.yaml + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + rate: + description: The numeric rate to charge tax by + type: number + example: 10 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/shipping_method.yaml b/docs/api/store/components/schemas/shipping_method.yaml new file mode 100644 index 0000000000..d53bafb241 --- /dev/null +++ b/docs/api/store/components/schemas/shipping_method.yaml @@ -0,0 +1,76 @@ +title: Shipping Method +description: >- + Shipping Methods represent a way in which an Order or Return can be shipped. + Shipping Methods are built from a Shipping Option, but may contain additional + details, that can be necessary for the Fulfillment Provider to handle the + shipment. +x-resourceId: shipping_method +required: + - shipping_option_id + - price +properties: + id: + type: string + description: The shipping method's ID + example: sm_01F0YET7DR2E7CYVSDHM593QG2 + shipping_option_id: + description: The id of the Shipping Option that the Shipping Method is built from. + type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: Available if the relation `shipping_option` is expanded. + $ref: ./shipping_option.yaml + order_id: + description: The id of the Order that the Shipping Method is used on. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + return_id: + description: The id of the Return that the Shipping Method is used on. + type: string + example: null + return_order: + description: A return object. Available if the relation `return_order` is expanded. + type: object + swap_id: + description: The id of the Swap that the Shipping Method is used on. + type: string + example: null + swap: + description: A swap object. Available if the relation `swap` is expanded. + type: object + cart_id: + description: The id of the Cart that the Shipping Method is used on. + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + claim_order_id: + description: The id of the Claim that the Shipping Method is used on. + type: string + example: null + claim_order: + description: A claim order object. Available if the relation `claim_order` is expanded. + type: object + tax_lines: + type: array + description: Available if the relation `tax_lines` is expanded. + items: + $ref: ./tax_line.yaml + price: + description: >- + The amount to charge for the Shipping Method. The currency of the price is + defined by the Region that the Order that the Shipping Method belongs to + is a part of. + type: integer + example: 200 + data: + description: >- + Additional data that the Fulfillment Provider needs to fulfill the + shipment. This is used in combination with the Shipping Options data, and + may contain information such as a drop point id. + type: object + example: {} diff --git a/docs/api/store/components/schemas/shipping_option.yaml b/docs/api/store/components/schemas/shipping_option.yaml new file mode 100644 index 0000000000..61f298af6f --- /dev/null +++ b/docs/api/store/components/schemas/shipping_option.yaml @@ -0,0 +1,103 @@ +title: Shipping Option +description: >- + Shipping Options represent a way in which an Order or Return can be shipped. + Shipping Options have an associated Fulfillment Provider that will be used + when the fulfillment of an Order is initiated. Shipping Options themselves + cannot be added to Carts, but serve as a template for Shipping Methods. This + distinction makes it possible to customize individual Shipping Methods with + additional information. +x-resourceId: shipping_option +required: + - name + - region_id + - profile_id + - provider_id + - price_type +properties: + id: + type: string + description: The shipping option's ID + example: so_01G1G5V27GYX4QXNARRQCW1N8T + name: + description: >- + The name given to the Shipping Option - this may be displayed to the + Customer. + type: string + example: PostFake Standard + region_id: + type: string + description: The region's ID + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + profile_id: + description: >- + The ID of the Shipping Profile that the shipping option belongs to. + Shipping Profiles have a set of defined Shipping Options that can be used + to Fulfill a given set of Products. + type: string + example: sp_01G1G5V239ENSZ5MV4JAR737BM + profile: + description: Available if the relation `profile` is expanded. + $ref: ./shipping_profile.yaml + provider_id: + description: >- + The id of the Fulfillment Provider, that will be used to process + Fulfillments from the Shipping Option. + type: string + example: manual + provider: + description: Available if the relation `provider` is expanded. + $ref: ./fulfillment_provider.yaml + price_type: + description: >- + The type of pricing calculation that is used when creatin Shipping Methods + from the Shipping Option. Can be `flat_rate` for fixed prices or + `calculated` if the Fulfillment Provider can provide price calulations. + type: string + enum: + - flat_rate + - calculated + example: flat_rate + amount: + description: >- + The amount to charge for shipping when the Shipping Option price type is + `flat_rate`. + type: integer + example: 200 + is_return: + description: Flag to indicate if the Shipping Option can be used for Return shipments. + type: boolean + default: false + requirements: + description: >- + The requirements that must be satisfied for the Shipping Option to be + available for a Cart. Available if the relation `requirements` is + expanded. + type: array + items: + $ref: ./shipping_option_requirement.yaml + data: + description: >- + The data needed for the Fulfillment Provider to identify the Shipping + Option. + type: object + example: {} + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/shipping_option_requirement.yaml b/docs/api/store/components/schemas/shipping_option_requirement.yaml new file mode 100644 index 0000000000..559d21de44 --- /dev/null +++ b/docs/api/store/components/schemas/shipping_option_requirement.yaml @@ -0,0 +1,43 @@ +title: Shipping Option Requirement +description: >- + A requirement that a Cart must satisfy for the Shipping Option to be available + to the Cart. +x-resourceId: shipping_option_requirement +required: + - shipping_option_id + - type + - amount +properties: + id: + type: string + description: The shipping option requirement's ID + example: sor_01G1G5V29AB4CTNDRFSRWSRKWD + shipping_option_id: + description: >- + The id of the Shipping Option that the hipping option requirement belongs + to + type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: Available if the relation `shipping_option` is expanded. + $ref: ./shipping_option.yaml + type: + description: >- + The type of the requirement, this defines how the value will be compared + to the Cart's total. `min_subtotal` requirements define the minimum + subtotal that is needed for the Shipping Option to be available, while the + `max_subtotal` defines the maximum subtotal that the Cart can have for the + Shipping Option to be available. + type: string + enum: + - min_subtotal + - max_subtotal + example: min_subtotal + amount: + description: The amount to compare the Cart subtotal to. + type: integer + example: 100 + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time diff --git a/docs/api/store/components/schemas/shipping_profile.yaml b/docs/api/store/components/schemas/shipping_profile.yaml new file mode 100644 index 0000000000..cb55e4f134 --- /dev/null +++ b/docs/api/store/components/schemas/shipping_profile.yaml @@ -0,0 +1,62 @@ +title: Shipping Profile +description: >- + Shipping Profiles have a set of defined Shipping Options that can be used to + fulfill a given set of Products. +x-resourceId: shipping_profile +required: + - name + - type +properties: + id: + type: string + description: The shipping profile's ID + example: sp_01G1G5V239ENSZ5MV4JAR737BM + name: + description: >- + The name given to the Shipping profile - this may be displayed to the + Customer. + type: string + example: Default Shipping Profile + type: + description: >- + The type of the Shipping Profile, may be `default`, `gift_card` or + `custom`. + type: string + enum: + - default + - gift_card + - custom + example: default + products: + description: >- + The Products that the Shipping Profile defines Shipping Options for. + Available if the relation `products` is expanded. + type: array + items: + type: object + description: A product object. + shipping_options: + description: >- + The Shipping Options that can be used to fulfill the Products in the + Shipping Profile. Available if the relation `shipping_options` is + expanded. + type: array + items: + $ref: ./shipping_option.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/shipping_tax_rate.yaml b/docs/api/store/components/schemas/shipping_tax_rate.yaml new file mode 100644 index 0000000000..ddf13f172a --- /dev/null +++ b/docs/api/store/components/schemas/shipping_tax_rate.yaml @@ -0,0 +1,36 @@ +title: Shipping Tax Rate +description: >- + Associates a tax rate with a shipping option to indicate that the shipping + option is taxed in a certain way +x-resourceId: shipping_tax_rate +required: + - shipping_option_id + - rate_id +properties: + shipping_option_id: + description: The ID of the Shipping Option + type: string + example: so_01G1G5V27GYX4QXNARRQCW1N8T + shipping_option: + description: Available if the relation `shipping_option` is expanded. + $ref: ./shipping_option.yaml + rate_id: + description: The ID of the Tax Rate + type: string + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + tax_rate: + description: Available if the relation `tax_rate` is expanded. + $ref: ./tax_rate.yaml + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/staged_job.yaml b/docs/api/store/components/schemas/staged_job.yaml new file mode 100644 index 0000000000..95fd6aaf34 --- /dev/null +++ b/docs/api/store/components/schemas/staged_job.yaml @@ -0,0 +1,18 @@ +title: Staged Job +description: A staged job resource +x-resourceId: staged_job +required: + - event_name +properties: + id: + type: string + description: The staged job's ID + example: job_01F0YET7BZTARY9MKN1SJ7AAXF + event_name: + description: The name of the event + type: string + example: order.placed + data: + description: Data necessary for the job + type: object + example: {} diff --git a/docs/api/store/components/schemas/store.yaml b/docs/api/store/components/schemas/store.yaml new file mode 100644 index 0000000000..09844ff155 --- /dev/null +++ b/docs/api/store/components/schemas/store.yaml @@ -0,0 +1,59 @@ +title: Store +description: Holds settings for the Store, such as name, currencies, etc. +x-resourceId: store +properties: + id: + type: string + description: The store's ID + example: store_01G1G5V21KADXNGH29BJMAJ4B4 + name: + description: The name of the Store - this may be displayed to the Customer. + type: string + example: Medusa Store + default_currency_code: + description: The 3 character currency code that is the default of the store. + type: string + example: usd + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + default_currency: + description: Available if the relation `default_currency` is expanded. + $ref: ./currency.yaml + currencies: + description: >- + The currencies that are enabled for the Store. Available if the relation + `currencies` is expanded. + type: array + items: + $ref: ./currency.yaml + swap_link_template: + description: >- + A template to generate Swap links from. Use {{cart_id}} to include the + Swap's `cart_id` in the link. + type: string + example: null + payment_link_template: + description: >- + A template to generate Payment links from. Use {{cart_id}} to include the + payment's `cart_id` in the link. + type: string + example: null + invite_link_template: + description: A template to generate Invite links from + type: string + example: null + default_sales_channel_id: + type: string + description: The sales channel ID the cart is associated with. + example: null + default_sales_channel: + description: >- + A sales channel object. Available if the relation `default_sales_channel` + is expanded. + type: object + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/swap.yaml b/docs/api/store/components/schemas/swap.yaml new file mode 100644 index 0000000000..35a81eed87 --- /dev/null +++ b/docs/api/store/components/schemas/swap.yaml @@ -0,0 +1,149 @@ +title: Swap +description: >- + Swaps can be created when a Customer wishes to exchange Products that they + have purchased to different Products. Swaps consist of a Return of previously + purchased Products and a Fulfillment of new Products, the amount paid for the + Products being returned will be used towards payment for the new Products. In + the case where the amount paid for the the Products being returned exceed the + amount to be paid for the new Products, a Refund will be issued for the + difference. +x-resourceId: swap +required: + - fulfillment_status + - payment_status + - order_id +properties: + id: + type: string + description: The swap's ID + example: swap_01F0YET86Y9G92D3YDR9Y6V676 + fulfillment_status: + description: The status of the Fulfillment of the Swap. + type: string + enum: + - not_fulfilled + - fulfilled + - shipped + - canceled + - requires_action + example: not_fulfilled + payment_status: + description: >- + The status of the Payment of the Swap. The payment may either refer to the + refund of an amount or the authorization of a new amount. + type: string + enum: + - not_paid + - awaiting + - captured + - confirmed + - canceled + - difference_refunded + - partially_refunded + - refunded + - requires_action + example: not_paid + order_id: + description: The ID of the Order where the Line Items to be returned where purchased. + type: string + example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + order: + description: An order object. Available if the relation `order` is expanded. + type: object + additional_items: + description: >- + The new Line Items to ship to the Customer. Available if the relation + `additional_items` is expanded. + type: array + items: + $ref: ./line_item.yaml + return_order: + description: >- + A return order object. The Return that is issued for the return part of + the Swap. Available if the relation `return_order` is expanded. + type: object + fulfillments: + description: >- + The Fulfillments used to send the new Line Items. Available if the + relation `fulfillments` is expanded. + type: array + items: + $ref: ./fulfillment.yaml + payment: + description: >- + The Payment authorized when the Swap requires an additional amount to be + charged from the Customer. Available if the relation `payment` is + expanded. + $ref: ./payment.yaml + difference_due: + description: >- + The difference that is paid or refunded as a result of the Swap. May be + negative when the amount paid for the returned items exceed the total of + the new Products. + type: integer + example: 0 + shipping_address_id: + description: >- + The Address to send the new Line Items to - in most cases this will be the + same as the shipping address on the Order. + type: string + example: addr_01G8ZH853YPY9B94857DY91YGW + shipping_address: + description: Available if the relation `shipping_address` is expanded. + $ref: ./address.yaml + shipping_methods: + description: >- + The Shipping Methods used to fulfill the addtional items purchased. + Available if the relation `shipping_methods` is expanded. + type: array + items: + $ref: ./shipping_method.yaml + cart_id: + description: The id of the Cart that the Customer will use to confirm the Swap. + type: string + example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + cart: + description: A cart object. Available if the relation `cart` is expanded. + type: object + allow_backorder: + description: If true, swaps can be completed with items out of stock + type: boolean + default: false + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of the swap in case + of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + confirmed_at: + description: The date with timezone at which the Swap was confirmed by the Customer. + type: string + format: date-time + canceled_at: + description: The date with timezone at which the Swap was canceled. + type: string + format: date-time + no_notification: + description: If set to true, no notification will be sent related to this swap + type: boolean + example: false + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/tax_line.yaml b/docs/api/store/components/schemas/tax_line.yaml new file mode 100644 index 0000000000..491a7e0c00 --- /dev/null +++ b/docs/api/store/components/schemas/tax_line.yaml @@ -0,0 +1,36 @@ +title: Tax Line +description: Line item that specifies an amount of tax to add to a line item. +x-resourceId: tax_line +required: + - rate + - name +properties: + id: + type: string + description: The tax line's ID + example: tl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + rate: + description: The numeric rate to charge tax by + type: number + example: 10 + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/tax_provider.yaml b/docs/api/store/components/schemas/tax_provider.yaml new file mode 100644 index 0000000000..267d162eae --- /dev/null +++ b/docs/api/store/components/schemas/tax_provider.yaml @@ -0,0 +1,15 @@ +title: Tax Provider +description: The tax service used to calculate taxes +x-resourceId: tax_provider +properties: + id: + description: The id of the tax provider as given by the plugin. + type: string + example: manual + is_installed: + description: >- + Whether the plugin is installed in the current version. Plugins that are + no longer installed are not deleted by will have this field set to + `false`. + type: boolean + default: true diff --git a/docs/api/store/components/schemas/tax_rate.yaml b/docs/api/store/components/schemas/tax_rate.yaml new file mode 100644 index 0000000000..29f7e0e0a9 --- /dev/null +++ b/docs/api/store/components/schemas/tax_rate.yaml @@ -0,0 +1,81 @@ +title: Tax Rate +description: >- + A Tax Rate can be used to associate a certain rate to charge on products + within a given Region +x-resourceId: line_item +required: + - name + - region_id +properties: + id: + type: string + description: The tax rate's ID + example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + rate: + description: The numeric rate to charge + type: number + example: 10 + code: + description: A code to identify the tax type by + type: string + example: tax01 + name: + description: A human friendly name for the tax + type: string + example: Tax Example + region_id: + type: string + description: The id of the Region that the rate belongs to + example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + region: + description: A region object. Available if the relation `region` is expanded. + type: object + products: + type: array + description: >- + The products that belong to this tax rate. Available if the relation + `products` is expanded. + items: + type: object + description: A product object. + product_types: + type: array + description: >- + The product types that belong to this tax rate. Available if the relation + `product_types` is expanded. + items: + type: object + description: A product type object. + shipping_options: + type: array + description: >- + The shipping options that belong to this tax rate. Available if the + relation `shipping_options` is expanded. + items: + type: object + description: A shipping option object. + product_count: + description: The count of products + type: integer + example: null + product_type_count: + description: The count of product types + type: integer + example: null + shipping_option_count: + description: The count of shipping options + type: integer + example: null + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/tracking_link.yaml b/docs/api/store/components/schemas/tracking_link.yaml new file mode 100644 index 0000000000..2a79689722 --- /dev/null +++ b/docs/api/store/components/schemas/tracking_link.yaml @@ -0,0 +1,55 @@ +title: Tracking Link +description: >- + Tracking Link holds information about tracking numbers for a Fulfillment. + Tracking Links can optionally contain a URL that can be visited to see the + status of the shipment. +x-resourceId: tracking_link +required: + - tracking_number + - fulfillment_id +properties: + id: + type: string + description: The tracking link's ID + example: tlink_01G8ZH853Y6TFXWPG5EYE81X63 + url: + description: The URL at which the status of the shipment can be tracked. + type: string + format: uri + tracking_number: + description: The tracking number given by the shipping carrier. + type: string + format: RH370168054CN + fulfillment_id: + type: string + description: The id of the Fulfillment that the Tracking Link references. + example: ful_01G8ZRTMQCA76TXNAT81KPJZRF + fulfillment: + description: Available if the relation `fulfillment` is expanded. + $ref: ./fulfillment.yaml + idempotency_key: + type: string + description: >- + Randomly generated key used to continue the completion of a process in + case of failure. + externalDocs: + url: >- + https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + description: Learn more how to use the idempotency key. + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/components/schemas/user.yaml b/docs/api/store/components/schemas/user.yaml new file mode 100644 index 0000000000..5083be44de --- /dev/null +++ b/docs/api/store/components/schemas/user.yaml @@ -0,0 +1,43 @@ +title: User +description: Represents a User who can manage store settings. +x-resourceId: user +required: + - email +properties: + id: + type: string + description: The user's ID + example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + email: + description: The email of the User + type: string + format: email + first_name: + description: The first name of the User + type: string + example: Levi + last_name: + description: The last name of the User + type: string + example: Bogan + api_token: + description: An API token associated with the user. + type: string + example: null + created_at: + type: string + description: The date with timezone at which the resource was created. + format: date-time + updated_at: + type: string + description: The date with timezone at which the resource was updated. + format: date-time + deleted_at: + type: string + description: The date with timezone at which the resource was deleted. + format: date-time + metadata: + type: object + description: An optional key-value map with additional details + example: + car: white diff --git a/docs/api/store/endpoints/carts.yaml b/docs/api/store/endpoints/carts.yaml deleted file mode 100644 index 60915a9b7e..0000000000 --- a/docs/api/store/endpoints/carts.yaml +++ /dev/null @@ -1,349 +0,0 @@ -title: Carts -domain: store -routes: - - method: GET - path: /carts/:id - - method: POST - path: /carts - - method: POST - path: /carts/:id - - method: POST - path: /carts/:id/complete-cart - - method: POST - path: /carts/:id/line-items - - method: POST - path: /carts/:id/line-items/:line_id - - method: POST - path: /carts/:id/payment-sessions - - method: POST - path: /carts/:id/payment-session/update - - method: POST - path: /carts/:id/payment-sessions/:provider_id/refresh - - method: POST - path: /carts/:id/payment-session - - method: POST - path: /carts/:id/shipping-methods - - method: DELETE - path: /carts/:id/payment-sessions/:provider_id - - method: DELETE - path: /carts/:id/line-items/:line_id - - method: DELETE - path: /carts/:id/discounts/:code -route: /carts -description: > - A Cart is the preliminary step to an Order. The Cart holds a collection of - items that the customer wishes to purchase, along with the customer's - preferred payment and shipping method. -endpoints: - - path: / - method: POST - title: Create a Cart - body: - - name: region_id - type: String - required: false - description: Id of the region to associate the cart with. - - name: items - type: List - required: false - description: List of objects with `variant_id` and `quantity`. - description: > - Creates a Cart within the given region and with the initial items. If no - `region_id` is provided the cart will be associated with the first Region - available. If no items are provided the cart will be empty after creation. - If a user is logged in the cart's customer id and email will be set. - - path: /:id - method: GET - title: Retrieve a Cart - description: > - Retrieves an existing cart. - - path: /:id - method: POST - title: Update a Cart - body: - - name: region_id - type: String - description: Id of a region. - - name: email - type: String - description: > - Customer's email where they will receive transactional emails etc. - - name: billing_address - type: Address - description: > - The billing address for the order. - - name: shipping_address - type: Address - description: > - The shipping address for the order. Will be sent to the fulfillment - provider when the items are ready to be shipped. - - name: discounts - type: List - description: > - A list of objects with `code` that represents a discount code to be - applied to the cart. - - name: customer_id - type: String - description: > - A list of objects with `code` that represents a discount code to be - applied to the cart. - description: > - Updates an existing cart with the provided data. Updating the `region_id` - will change the prices of the items in the cart to match the prices - defined for the region. You can apply multiple discounts at once by - calling the endpoint with an array of discounts. - - path: /:id/complete-cart - method: POST - title: Complete cart - description: > - Completes a cart. The following steps will be performed. Payment authorization - is attempted and if more work is required, we simply return the cart for further updates. - If payment is authorized and order is not yet created, we make sure to do so. - The completion of a cart can be performed idempotently with a provided header `Idempotency-Key`. - If not provided, we will generate one for the request. - - path: /:id/line-items - method: POST - title: Add line item - body: - - name: variant_id - type: String - required: true - description: The id of the variant that should be added to the cart. - - name: quantity - type: Integer - required: true - description: > - The quantity of the variant to add to the cart. Must be - greater than 0. - - name: metadata - type: Object - description: > - Optional metadata that may be needed for display purposes or other - functionality. - - path: /:id/line-items/:line_id - method: POST - title: Update line item - body: - - name: quantity - type: Integer - description: The desired quantity of the line item. - description: > - Updates the quantity of a line item. If the variant associated with the - line item is stock managed, the endpoint will respond with an error when - the inventory level cannot fulfill the desired quantity. - - path: /:id/line-items/:line_id - method: DELETE - title: Remove line item - description: > - Removes a the given line item from the cart. - - path: /:id/discounts/:code - method: DELETE - title: Remove discount code - description: Removes a discount code from the cart. - - path: /:id/payment-sessions - method: POST - title: Create payment sessions - description: > - Initializes the payment sessions that can be used to pay for the items of - the cart. This is usually called when a customer proceeds to checkout. - - path: /:id/payment-sessions/:provider_id - method: DELETE - title: Delete payment session - description: > - Deletes a payment session. Note that this will initialize a new payment - session with the provider. This is usually used if the payment session - reaches a state that cannot be recovered from. - - path: /:id/payment-session - method: POST - title: Set payment session on cart - params: - - name: provider_id - type: String - required: true - description: Id of the provider (e.g. stripe). - description: > - Adds or updates the payment method that will be used to pay for the items - in the cart. The payment is not processed until the payment provider's - authorization functionality is called. You should consult with your - installed payment plugins to find information about how to authorize a - payment. - - path: /:id/payment-session/update - method: POST - title: Update payment session on cart - params: - - name: session - type: Dictionary - required: true - description: > - The session object needs to have a `provider_id` (e.g. stripe) and `data`, that holds the update data for the session. - The data object can be anything that might be needed for the payment provider to process the - payment. The requirements of `data` will be different across payment - methods, and you should look at your installed payment providers to - find out what to send.. - description: > - Updates the payment session that will be used to pay for the items - in the cart. The payment is not processed until the payment provider's - authorization functionality is called. You should consult with your - installed payment plugins to find information about how to authorize a - payment. - - path: /:id/shipping-methods - method: POST - title: Add shipping method - body: - - name: option_id - type: String - required: true - description: The id of the shipping option to use. - - name: data - type: Dictionary - description: > - Used to hold any data that the shipping method may need to process the - fulfillment of the order. Look at the documentation for your installed - fulfillment providers to find out what to send. - description: > - Adds a shipping method to the cart. -response: | - { - "cart": { - "id": "cart_1234", - "email": null, - "billing_address_id": null, - "billing_address": null, - "shipping_address_id": "addr_1234", - "shipping_address": { - "id": "addr_1234", - "customer_id": null, - "company": null, - "first_name": null, - "last_name": null, - "address_1": null, - "address_2": null, - "city": null, - "country_code": "dk", - "province": null, - "postal_code": null, - "phone": null, - "created_at": "2021-02-04T15:40:54.691Z", - "updated_at": "2021-02-04T15:40:54.691Z", - "deleted_at": null, - "metadata": null - }, - "items": [{ - "id": "item_1234", - "cart_id": "cart_1234", - "order_id": null, - "swap_id": null, - "claim_order_id": null, - "title": "Terry Towel", - "description": "30x30", - "thumbnail": "", - "is_giftcard": false, - "should_merge": true, - "allow_discounts": true, - "has_shipping": false, - "unit_price": 6000, - "variant_id": "variant_1234", - "variant": { - "id": "variant_1234", - "title": "30x30", - "product_id": "prod_1234", - "sku": null, - "barcode": null, - "ean": null, - "upc": null, - "inventory_quantity": 9999, - "allow_backorder": false, - "manage_inventory": true, - "hs_code": null, - "origin_country": null, - "mid_code": null, - "material": null, - "weight": null, - "length": null, - "height": null, - "width": null, - "created_at": "2021-01-19T17:09:01.864Z", - "updated_at": "2021-02-02T02:43:17.718Z", - "deleted_at": null, - "metadata": null - }, - "quantity": 1, - "fulfilled_quantity": null, - "returned_quantity": null, - "shipped_quantity": null, - "created_at": "2021-02-04T15:42:12.514Z", - "updated_at": "2021-02-04T15:42:12.514Z", - "metadata": {} - }], - "region_id": "reg_1234", - "region": { - "id": "reg_1234", - "name": "Denmark", - "currency_code": "dkk", - "tax_rate": "25", - "tax_code": null, - "countries": [{ - "id": 60, - "iso_2": "dk", - "iso_3": "dnk", - "num_code": 208, - "name": "DENMARK", - "display_name": "Denmark", - "region_id": "reg_1234" - }], - "payment_providers": [{ - "id": "stripe", - "is_installed": true - }], - "fulfillment_providers": [{ - "id": "manual", - "is_installed": true - }], - "created_at": "2021-01-19T17:09:01.864Z", - "updated_at": "2021-01-21T15:44:05.492Z", - "deleted_at": null, - "metadata": null - }, - "discounts": [], - "gift_cards": [], - "customer_id": null, - "payment_sessions": [{ - "id": "ps_1234", - "cart_id": "cart_1234", - "provider_id": "stripe", - "is_selected": true, - "status": "pending", - "data": {}, - "created_at": "2021-02-08T11:37:17.906Z", - "updated_at": "2021-02-08T11:37:17.906Z", - "idempotency_key": null - }], - "payment_id": null, - "payment": null, - "shipping_methods": [], - "type": "default", - "completed_at": null, - "created_at": "2021-02-04T15:40:54.691Z", - "updated_at": "2021-02-04T15:40:54.691Z", - "deleted_at": null, - "metadata": null, - "idempotency_key": null, - "payment_session": { - "id": "ps_1234", - "cart_id": "cart_1234", - "provider_id": "stripe", - "is_selected": true, - "status": "pending", - "data": {}, - "created_at": "2021-02-08T11:37:17.906Z", - "updated_at": "2021-02-08T11:37:17.906Z", - "idempotency_key": null - }, - "shipping_total": 0, - "discount_total": 0, - "tax_total": 1500, - "gift_card_total": 0, - "subtotal": 6000, - "total": 7500 - } - } diff --git a/docs/api/store/endpoints/customers.yaml b/docs/api/store/endpoints/customers.yaml deleted file mode 100644 index d70f0034d5..0000000000 --- a/docs/api/store/endpoints/customers.yaml +++ /dev/null @@ -1,226 +0,0 @@ -title: Customers -domain: store -routes: - - method: POST - path: /customers - - method: GET - path: /customers/:id - - method: POST - path: /customers/:id - - method: POST - path: /customers/:id/addresses - - method: POST - path: /customers/:id/:address_id - - method: POST - path: /customers/:id/payment-methods - - method: POST - path: /customers/:id/reset-password - - method: POST - path: /customers/:id/reset-password-token -route: /customers -description: > - Customers can create a login to view order history and manage details. - Customers must have unique emails. -endpoints: - - path: / - method: POST - title: Create customer - body: - - name: email - type: String - required: true - description: The Customer's email; must be unique. - - name: first_name - type: String - required: true - description: The Customer's first name. - - name: last_name - type: String - required: true - description: The Customer's last name. - - name: password - type: String - required: true - description: The Customer's desired password. - - name: phone - type: String - description: The customer's phone number. - description: > - Creates a customer profile with the given details. If the email has been - used on previous orders the newly created Customer profile will be able to - view the order history associated with this email. - - path: /:id - method: GET - title: Retrieve customer - params: - - name: id - type: String - description: The id of the Customer to retrieve. - description: > - Retrieves the customer's details. The Customer identified by `id` must be - authenticated. - - - path: /:id - method: POST - title: Update customer - params: - - name: id - type: String - description: The id of the customer. - body: - - name: first_name - type: String - description: The Customer's first name. - - name: last_name - type: String - description: The Customer's last name. - - name: password - type: String - description: > - The Customer's password. Will create a hashed value for the database. - - name: phone - type: String - description: The Customer's phone number. - description: > - Updates the customer's details. The customer identified by `id` must be - authenticated in order to call this endpoint. - - path: /:id/addresses - method: POST - title: Create customer shipping address - params: - - name: id - type: String - description: The id of the Customer. - body: - - name: address - type: Address - description: The address to add. - description: > - Adds an address to the customer's saved addresses. The customer must be - authenticated prior to making this call. - - - path: /:id/addresses/:address_id - method: POST - title: Update customer shipping address - params: - - name: id - type: String - description: The id of the Customer. - - name: address_id - type: String - description: The id of the saved address to update. - body: - - name: address - type: Address - description: The address to update. - description: > - Updates a saved customer address. The customer must be authenticated prior - to making this call. - - - path: /:id/payment-methods - method: GET - title: Retrieve saved payment methods - params: - - name: id - type: String - description: The id of the customer. - description: > - Asks each payment provider for saved payment methods if any exist. This - will only return in methods in the case where the payment provider allows - payment methods to be saved. The customer must be authenticated in order - to call this endpoint. - - path: /password-reset - method: POST - title: Reset password - body: - - name: email - type: String - required: true - description: The email of the Customer. - - name: token - type: String - required: true - description: > - The token that will be used to reset the password. Should be generated - with a prior call to `/password-token`. - - name: password - type: String - required: true - description: > - The new password to authenticate the user with. - description: > - Resets a customer's password. The reset call requires a valid token - - - path: /password-token - method: POST - title: Generate password reset token - body: - - name: email - type: String - required: true - description: The email of the Customer profile to reset password for. - description: > - Generates a reset password token. The token should be sent to the customer - via an email provider. Note that this doesn't send any emails it only - generates the token and informs listeners to - `customer.password_token_generated` that the token was created. - -response: | - { - "customer": { - "id": "cus_4eThzYSuGv", - "email": "iron@man.com", - "first_name": "Tony", - "last_name": "Stark", - "billing_address": { - "id": "addr_WgNn0BSfIu", - "customer_id": "cus_4eThzYSuGv", - "company": "Stark Industries", - "first_name": "Tony", - "last_name": "Stark", - "address_1": "Hollywood Boulevard 1", - "address_2": null, - "city": "Los Angeles", - "country_code": "US", - "province": "CA", - "postal_code": "90046", - "phone": null, - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "deleted_at": null, - "metadata": null - }, - "shipping_addresses": [{ - "id": "addr_WgNn0BSfIu", - "customer_id": "cus_4eThzYSuGv", - "company": "Stark Industries", - "first_name": "Tony", - "last_name": "Stark", - "address_1": "Hollywood Boulevard 1", - "address_2": null, - "city": "Los Angeles", - "country_code": "US", - "province": "CA", - "postal_code": "90046", - "phone": null, - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "deleted_at": null, - "metadata": null - }], - "phone": "4242424242", - "has_account": false, - "orders": [{ - "id": "order_fi13oadpo2r3vc2g4592", - "status": "pending", - "fulfillment_status": "shipped", - "payment_status": "captured", - "display_id": 50433, - "total": 4004000, - "metadata": null - }], - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "metadata": {} - } - } diff --git a/docs/api/store/endpoints/orders.yaml b/docs/api/store/endpoints/orders.yaml deleted file mode 100644 index 29bb53634e..0000000000 --- a/docs/api/store/endpoints/orders.yaml +++ /dev/null @@ -1,137 +0,0 @@ -title: Orders -domain: store -routes: - - method: POST - path: /orders - - method: GET - path: /orders/:id -route: /orders -description: > - An Order represents a selection of items purchased and holds information about - how the items have been purchased and will be fulfilled. -endpoints: - - path: /:id - method: GET - title: Retrieve an Order - params: - - name: id - type: String - description: The id of the order. - description: > - Retrieves an order. - - path: / - method: POST - title: Creates an order - body: - - name: cart_id - type: String - required: true - description: Id of the cart from which the order should be created. - description: > - Creates an order from a cart. - -response: | - { - "order": { - "id": "order_fi13oadpo2r3vc2g4592", - "status": "pending", - "fulfillment_status": "shipped", - "payment_status": "captured", - "email": "iron@man.com", - "billing_address": { - "id": "addr_WgNn0BSfIu", - "customer_id": "cus_4eThzYSuGv", - "company": "Stark Industries", - "first_name": "Tony", - "last_name": "Stark", - "address_1": "Hollywood Boulevard 1", - "address_2": null, - "city": "Los Angeles", - "country_code": "US", - "province": "CA", - "postal_code": "90046", - "phone": null, - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "deleted_at": null, - "metadata": null - }, - "shipping_address": { - "id": "addr_WgNn0BSfIu", - "customer_id": "cus_4eThzYSuGv", - "company": "Stark Industries", - "first_name": "Tony", - "last_name": "Stark", - "address_1": "Hollywood Boulevard 1", - "address_2": null, - "city": "Los Angeles", - "country_code": "US", - "province": "CA", - "postal_code": "90046", - "phone": null, - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "deleted_at": null, - "metadata": null - }, - "items": [ - { - "id": "item_fn2uaQH95vG9ZMnhj2aU03xg", - "cart_id": null, - "order_id": "order_s9RojwCU2AM8RztcldM2Uof7", - "swap_id": null, - "title": "Ironman suit", - "description": "Awesome Ironman suit", - "thumbnail": null, - "is_giftcard": false, - "should_merge": false, - "allow_discounts": true, - "unit_price": 119600, - "variant_id": "variant_rdEH6PykBuH57giw", - "quantity": 1, - "fulfilled_quantity": 1, - "returned_quantity": 0, - "shipped_quantity": 0, - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "metadata": null - } - ], - "discounts": [ - { - "id": "disc_OpYQN4H8MOWHN2en", - "code": "CCC3C4LL88", - "is_dynamic": true, - "discount_rule_id": "dru_MDyr3lJLa00uxOsY", - "parent_discount_id": "disc_ubtdlkASI7bfUj81", - "metadata": null - } - ], - "customer_id": "cus_4eThzYSuGv", - "shipping_methods": [ - { - "id": "sm_77bEapbO8tkCqw3yo1NBuCUl", - "shipping_option_id": "so_nRvwHhEdZw", - "order_id": "order_s9RojwCU2AM8RztcldM2Uof7", - "cart_id": null, - "swap_id": null, - "return_id": null, - "price": 0, - "data": { - "id": "Parcel shop", - "city": "Los Angeles", - "postal": "90046" - } - } - ], - "metadata": null, - "display_id": 50433, - "currency_code": "dkk", - "region_id": "reg_HMnixPlOicAs7aBlXuchAGxd", - "shipping_total": 0, - "discount_total": 0, - "tax_total": 3850000, - "subtotal": 154000, - "total": 4004000 - } - } diff --git a/docs/api/store/endpoints/product-variants.yaml b/docs/api/store/endpoints/product-variants.yaml deleted file mode 100644 index 8a752120e6..0000000000 --- a/docs/api/store/endpoints/product-variants.yaml +++ /dev/null @@ -1,61 +0,0 @@ -title: Product variants -domain: store -routes: - - method: GET - path: /product-variants - - method: GET - path: /product-variants/:id -route: /product-variants -description: > - A product variant represents a specific type of product. E.g. a variant can differ from other variants based on size and color. A variant will always belong to a product. -endpoints: - - path: /:id - method: GET - title: Retrieve product variant - params: - - name: id - type: String - description: Id of the product variant. - description: > - Retrieves product variant - - path: / - method: GET - title: List product variants - params: - - name: ids - optional: true - type: String - description: String of product variant ids. Id's needs to be separated by comma. - description: > - Retrieves product variants. Specific variants can be retrieved using `ids` query param in the request. - -response: | - { - "region": { - "id": "reg_HMnixPlOicAs7aBlXuchAGxd", - "name": "Denmark", - "currency_code": "DKK", - "currency": "DKK", - "tax_rate": 0.25, - "tax_code": null, - "countries": [{ - "id": "1001", - "iso_2": "DK", - "iso_3": "DNK", - "num_code": "208", - "name": "denmark", - "display_name": "Denmark" - }], - "payment_providers": [{ - "id": "stripe", - "is_installed": true - }], - "fulfillment_providers": [{ - "id": "manual", - "is_installed": true - }], - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "metadata": null - } - } diff --git a/docs/api/store/endpoints/products.yaml b/docs/api/store/endpoints/products.yaml deleted file mode 100644 index 29251734b6..0000000000 --- a/docs/api/store/endpoints/products.yaml +++ /dev/null @@ -1,56 +0,0 @@ -title: Products -domain: store -routes: - - method: POST - path: /products - - method: GET - path: /products/:id -route: /products -description: > - A product represents the object, that are to be sold on the website. A product can have variants, that differ by e.g. size and color. -endpoints: - - path: /:id - method: GET - title: Retrieve product - params: - - name: id - type: String - description: Id of the product. - description: > - Retrieves a product - - path: / - method: GET - title: List products - description: > - Retrieves the products for the configured store. - -response: | - { - "region": { - "id": "reg_HMnixPlOicAs7aBlXuchAGxd", - "name": "Denmark", - "currency_code": "DKK", - "currency": "DKK", - "tax_rate": 0.25, - "tax_code": null, - "countries": [{ - "id": "1001", - "iso_2": "DK", - "iso_3": "DNK", - "num_code": "208", - "name": "denmark", - "display_name": "Denmark" - }], - "payment_providers": [{ - "id": "stripe", - "is_installed": true - }], - "fulfillment_providers": [{ - "id": "manual", - "is_installed": true - }], - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "metadata": null - } - } diff --git a/docs/api/store/endpoints/regions.yaml b/docs/api/store/endpoints/regions.yaml deleted file mode 100644 index e0a1e2d52e..0000000000 --- a/docs/api/store/endpoints/regions.yaml +++ /dev/null @@ -1,58 +0,0 @@ -title: Regions -domain: store -routes: - - method: POST - path: /regions - - method: GET - path: /regions/:id -route: /regions -description: > - A region represents a collection of countries that have common pricing - schemes, shipping options, tax schemes, etc. Carts must have a region - associated. -endpoints: - - path: /:id - method: GET - title: Retrieve region - params: - - name: id - type: String - description: Id of the region. - description: > - Retrieves a region - - path: / - method: GET - title: List regions - description: > - Retrieves the regions configured for the store. - -response: | - { - "region": { - "id": "reg_HMnixPlOicAs7aBlXuchAGxd", - "name": "Denmark", - "currency_code": "DKK", - "currency": "DKK", - "tax_rate": 0.25, - "tax_code": null, - "countries": [{ - "id": "1001", - "iso_2": "DK", - "iso_3": "DNK", - "num_code": "208", - "name": "denmark", - "display_name": "Denmark" - }], - "payment_providers": [{ - "id": "stripe", - "is_installed": true - }], - "fulfillment_providers": [{ - "id": "manual", - "is_installed": true - }], - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "metadata": null - } - } diff --git a/docs/api/store/endpoints/shipping-options.yaml b/docs/api/store/endpoints/shipping-options.yaml deleted file mode 100644 index 0b5b478701..0000000000 --- a/docs/api/store/endpoints/shipping-options.yaml +++ /dev/null @@ -1,53 +0,0 @@ -title: Shipping options -domain: store -routes: - - method: GET - path: /shipping-options -route: /shipping-options -description: > - A shipping option represents a delivery method for products and belongs to a region. -endpoints: - - path: / - method: GET - title: List shipping options - params: - - name: product_ids - optional: true - type: String - description: String of product ids. Id's needs to be separated by comma. - - name: region_id - type: String - description: Id of region - description: > - Retrieves shipping options in a given region. Shipping options for specific products can be retrieved using the `product_ids` query param. - -response: | - { - "region": { - "id": "reg_HMnixPlOicAs7aBlXuchAGxd", - "name": "Denmark", - "currency_code": "DKK", - "currency": "DKK", - "tax_rate": 0.25, - "tax_code": null, - "countries": [{ - "id": "1001", - "iso_2": "DK", - "iso_3": "DNK", - "num_code": "208", - "name": "denmark", - "display_name": "Denmark" - }], - "payment_providers": [{ - "id": "stripe", - "is_installed": true - }], - "fulfillment_providers": [{ - "id": "manual", - "is_installed": true - }], - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "metadata": null - } - } diff --git a/docs/api/store/endpoints/swaps.yaml b/docs/api/store/endpoints/swaps.yaml deleted file mode 100644 index 3588f28f6a..0000000000 --- a/docs/api/store/endpoints/swaps.yaml +++ /dev/null @@ -1,56 +0,0 @@ -title: Swaps -domain: store -routes: - - method: GET - path: /swaps/:cart_id - - method: POST - path: /swaps -route: /swaps -description: > - A swap represents an order, that are created in the process of swapping items in an existing order. In the context of the store, the swap can be retrieved in order to make the payment (if relevant). Furthermore, it is possible to create / complete a swap in the store. -endpoints: - - path: / - method: GET - title: Get swap by cart - params: - - name: cart_id - type: String - description: Id of cart to retrieve swap for. - description: > - Retrieves swap by cart id. - - path: / - method: POST - title: Create swap - description: > - Creates / completes a swap. - -response: | - { - "region": { - "id": "reg_HMnixPlOicAs7aBlXuchAGxd", - "name": "Denmark", - "currency_code": "DKK", - "currency": "DKK", - "tax_rate": 0.25, - "tax_code": null, - "countries": [{ - "id": "1001", - "iso_2": "DK", - "iso_3": "DNK", - "num_code": "208", - "name": "denmark", - "display_name": "Denmark" - }], - "payment_providers": [{ - "id": "stripe", - "is_installed": true - }], - "fulfillment_providers": [{ - "id": "manual", - "is_installed": true - }], - "created_at": "2020-12-11T17:03:54.458Z", - "updated_at": "2020-12-11T17:03:54.458Z", - "metadata": null - } - } diff --git a/docs/api/store/openapi.yaml b/docs/api/store/openapi.yaml new file mode 100644 index 0000000000..09e3890872 --- /dev/null +++ b/docs/api/store/openapi.yaml @@ -0,0 +1,138 @@ +openapi: 3.0.0 +info: + version: 1.0.0 + title: Medusa Storefront API + description: >- + API reference for Medusa's Storefront endpoints. All endpoints are prefixed + with `/store`. + license: + name: MIT + url: https://github.com/medusajs/medusa/blob/master/LICENSE +tags: + - name: Auth + description: >- + Auth endpoints that allow authorization of customers and manages their + sessions. + - name: Cart + description: Cart endpoints that allow handling carts in Medusa. + x-resourceId: cart + - name: Collection + description: Collection endpoints that allow handling collections in Medusa. + x-resourceId: product_collection + - name: Customer + description: Customer endpoints that allow handling customers in Medusa. + x-resourceId: customer + - name: Gift Card + description: Gift Card endpoints that allow handling gift cards in Medusa. + x-resourceId: gift_card + - name: Order + description: Order endpoints that allow handling orders in Medusa. + x-resourceId: order + - name: Product + description: Product endpoints that allow handling products in Medusa. + x-resourceId: product + - name: Product Variant + description: Product Variant endpoints that allow handling product variants in Medusa. + x-resourceId: product_variant + - name: Region + description: Region endpoints that allow handling regions in Medusa. + x-resourceId: region + - name: Return Reason + description: Return Reason endpoints that allow handling return reasons in Medusa. + x-resourceId: return_reason + - name: Return + description: Return endpoints that allow handling returns in Medusa. + x-resourceId: return + - name: Shipping Option + description: Shipping Option endpoints that allow handling shipping options in Medusa. + x-resourceId: shipping_option + - name: Swap + description: Swap endpoints that allow handling swaps in Medusa. + x-resourceId: swap +servers: + - url: https://api.medusa-commerce.com/store +paths: + /auth: + $ref: paths/auth.yaml + /auth/{email}: + $ref: paths/auth_{email}.yaml + /collections/{id}: + $ref: paths/collections_{id}.yaml + /collections: + $ref: paths/collections.yaml + /gift-cards/{code}: + $ref: paths/gift-cards_{code}.yaml + /carts/{id}/shipping-methods: + $ref: paths/carts_{id}_shipping-methods.yaml + /carts/{id}/taxes: + $ref: paths/carts_{id}_taxes.yaml + /carts/{id}/complete: + $ref: paths/carts_{id}_complete.yaml + /carts: + $ref: paths/carts.yaml + /carts/{id}/line-items: + $ref: paths/carts_{id}_line-items.yaml + /carts/{id}/payment-sessions: + $ref: paths/carts_{id}_payment-sessions.yaml + /carts/{id}/discounts/{code}: + $ref: paths/carts_{id}_discounts_{code}.yaml + /carts/{id}/line-items/{line_id}: + $ref: paths/carts_{id}_line-items_{line_id}.yaml + /carts/{id}/payment-sessions/{provider_id}: + $ref: paths/carts_{id}_payment-sessions_{provider_id}.yaml + /carts/{id}: + $ref: paths/carts_{id}.yaml + /carts/{id}/payment-sessions/{provider_id}/refresh: + $ref: paths/carts_{id}_payment-sessions_{provider_id}_refresh.yaml + /carts/{id}/payment-session: + $ref: paths/carts_{id}_payment-session.yaml + /customers/me/addresses: + $ref: paths/customers_me_addresses.yaml + /customers: + $ref: paths/customers.yaml + /customers/me/addresses/{address_id}: + $ref: paths/customers_me_addresses_{address_id}.yaml + /customers/me: + $ref: paths/customers_me.yaml + /customers/me/payment-methods: + $ref: paths/customers_me_payment-methods.yaml + /customers/me/orders: + $ref: paths/customers_me_orders.yaml + /customers/password-token: + $ref: paths/customers_password-token.yaml + /customers/password-reset: + $ref: paths/customers_password-reset.yaml + /orders/cart/{cart_id}: + $ref: paths/orders_cart_{cart_id}.yaml + /orders/{id}: + $ref: paths/orders_{id}.yaml + /orders: + $ref: paths/orders.yaml + /products/{id}: + $ref: paths/products_{id}.yaml + /products: + $ref: paths/products.yaml + /products/search: + $ref: paths/products_search.yaml + /regions/{id}: + $ref: paths/regions_{id}.yaml + /regions: + $ref: paths/regions.yaml + /return-reasons/{id}: + $ref: paths/return-reasons_{id}.yaml + /return-reasons: + $ref: paths/return-reasons.yaml + /returns: + $ref: paths/returns.yaml + /shipping-options: + $ref: paths/shipping-options.yaml + /shipping-options/{cart_id}: + $ref: paths/shipping-options_{cart_id}.yaml + /swaps: + $ref: paths/swaps.yaml + /swaps/{cart_id}: + $ref: paths/swaps_{cart_id}.yaml + /variants/{variant_id}: + $ref: paths/variants_{variant_id}.yaml + /variants: + $ref: paths/variants.yaml diff --git a/docs/api/store/paths/auth.yaml b/docs/api/store/paths/auth.yaml new file mode 100644 index 0000000000..73909588ae --- /dev/null +++ b/docs/api/store/paths/auth.yaml @@ -0,0 +1,60 @@ +post: + operationId: PostAuth + summary: Authenticate Customer + description: >- + Logs a Customer in and authorizes them to view their details. Successful + authentication will set a session cookie in the Customer's browser. + parameters: [] + tags: + - Auth + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml + requestBody: + content: + application/json: + schema: + type: object + required: + - email + - password + properties: + email: + type: string + description: The Customer's email. + password: + type: string + description: The Customer's password. +delete: + operationId: DeleteAuth + summary: Log out + description: Destroys a Customer's authenticated session. + tags: + - Auth + responses: + '200': + description: OK +get: + operationId: GetAuth + summary: Get Session + description: Gets the currently logged in Customer. + x-authenticated: true + tags: + - Auth + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml + '401': + description: Unauthorized diff --git a/docs/api/store/paths/auth_{email}.yaml b/docs/api/store/paths/auth_{email}.yaml new file mode 100644 index 0000000000..574126c113 --- /dev/null +++ b/docs/api/store/paths/auth_{email}.yaml @@ -0,0 +1,24 @@ +get: + operationId: GetAuthEmail + summary: Check if email has account + description: Checks if a Customer with the given email has signed up. + parameters: + - in: path + name: email + schema: + type: string + format: email + required: true + description: The email to check if exists. + tags: + - Auth + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + exists: + type: boolean + description: Whether email exists or not. diff --git a/docs/api/store/paths/carts.yaml b/docs/api/store/paths/carts.yaml new file mode 100644 index 0000000000..0c75e60b3b --- /dev/null +++ b/docs/api/store/paths/carts.yaml @@ -0,0 +1,65 @@ +post: + summary: Create a Cart + operationId: PostCart + description: >- + Creates a Cart within the given region and with the initial items. If no + `region_id` is provided the cart will be associated with the first Region + available. If no items are provided the cart will be empty after creation. + If a user is logged in the cart's customer id and email will be set. + requestBody: + content: + application/json: + schema: + properties: + region_id: + type: string + description: The ID of the Region to create the Cart in. + sales_channel_id: + type: string + description: >- + [EXPERIMENTAL] The ID of the Sales channel to create the Cart + in. + country_code: + type: string + description: The 2 character ISO country code to create the Cart in. + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + items: + description: >- + An optional array of `variant_id`, `quantity` pairs to generate + Line Items from. + type: array + items: + required: + - variant_id + - quantity + properties: + variant_id: + description: >- + The id of the Product Variant to generate a Line Item + from. + type: string + quantity: + description: The quantity of the Product Variant to add + type: integer + context: + description: >- + An optional object to provide context to the Cart. The `context` + field is automatically populated with `ip` and `user_agent` + type: object + example: + ip: '::1' + user_agent: Chrome + tags: + - Cart + responses: + '200': + description: Successfully created a new Cart + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml diff --git a/docs/api/store/paths/carts_{id}.yaml b/docs/api/store/paths/carts_{id}.yaml new file mode 100644 index 0000000000..469a20338c --- /dev/null +++ b/docs/api/store/paths/carts_{id}.yaml @@ -0,0 +1,109 @@ +get: + operationId: GetCartsCart + summary: Retrieve a Cart + description: Retrieves a Cart. + parameters: + - in: path + name: id + required: true + description: The id of the Cart. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml +post: + operationId: PostCartsCart + summary: Update a Cart + description: Updates a Cart. + parameters: + - in: path + name: id + required: true + description: The id of the Cart. + schema: + type: string + requestBody: + content: + application/json: + schema: + properties: + region_id: + type: string + description: The id of the Region to create the Cart in. + country_code: + type: string + description: The 2 character ISO country code to create the Cart in. + externalDocs: + url: >- + https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + description: See a list of codes. + email: + type: string + description: An email to be used on the Cart. + format: email + sales_channel_id: + type: string + description: The ID of the Sales channel to update the Cart with. + billing_address: + description: The Address to be used for billing purposes. + anyOf: + - $ref: ../components/schemas/address.yaml + description: A full billing address object. + - type: string + description: The billing address ID + shipping_address: + description: The Address to be used for shipping. + anyOf: + - $ref: ../components/schemas/address.yaml + description: A full shipping address object. + - type: string + description: The shipping address ID + gift_cards: + description: An array of Gift Card codes to add to the Cart. + type: array + items: + required: + - code + properties: + code: + description: The code that a Gift Card is identified by. + type: string + discounts: + description: An array of Discount codes to add to the Cart. + type: array + items: + required: + - code + properties: + code: + description: The code that a Discount is identifed by. + type: string + customer_id: + description: The ID of the Customer to associate the Cart with. + type: string + context: + description: An optional object to provide context to the Cart. + type: object + example: + ip: '::1' + user_agent: Chrome + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml diff --git a/docs/api/store/paths/carts_{id}_complete.yaml b/docs/api/store/paths/carts_{id}_complete.yaml new file mode 100644 index 0000000000..9814feb4ff --- /dev/null +++ b/docs/api/store/paths/carts_{id}_complete.yaml @@ -0,0 +1,64 @@ +post: + summary: Complete a Cart + operationId: PostCartsCartComplete + description: >- + Completes a cart. The following steps will be performed. Payment + authorization is attempted and if more work is required, we simply return + the cart for further updates. If payment is authorized and order is not yet + created, we make sure to do so. The completion of a cart can be performed + idempotently with a provided header `Idempotency-Key`. If not provided, we + will generate one for the request. + parameters: + - in: path + name: id + required: true + description: The Cart id. + schema: + type: string + tags: + - Cart + responses: + '200': + description: >- + If a cart was successfully authorized, but requires further action from + the user the response body will contain the cart with an updated payment + session. If the Cart was successfully completed the response body will + contain the newly created Order. + content: + application/json: + schema: + properties: + type: + type: string + description: The type of the data property. + enum: + - order + - cart + - swap + data: + type: object + description: >- + The data of the result object. Its type depends on the type + field. + oneOf: + - type: object + description: >- + Cart was successfully authorized and order was placed + successfully. + properties: + order: + $ref: ../components/schemas/order.yaml + - type: object + description: >- + Cart was successfully authorized but requires further + actions. + properties: + cart: + $ref: ../components/schemas/cart.yaml + - type: object + description: >- + When cart is used for a swap and it has been completed + successfully. + properties: + cart: + $ref: ../components/schemas/swap.yaml diff --git a/docs/api/store/paths/carts_{id}_discounts_{code}.yaml b/docs/api/store/paths/carts_{id}_discounts_{code}.yaml new file mode 100644 index 0000000000..cdb4c10fe1 --- /dev/null +++ b/docs/api/store/paths/carts_{id}_discounts_{code}.yaml @@ -0,0 +1,28 @@ +delete: + operationId: DeleteCartsCartDiscountsDiscount + description: Removes a Discount from a Cart. + summary: Remove Discount from Cart + parameters: + - in: path + name: id + required: true + description: The id of the Cart. + schema: + type: string + - in: path + name: code + required: true + description: The unique Discount code. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml diff --git a/docs/api/store/paths/carts_{id}_line-items.yaml b/docs/api/store/paths/carts_{id}_line-items.yaml new file mode 100644 index 0000000000..b7ac4f1a36 --- /dev/null +++ b/docs/api/store/paths/carts_{id}_line-items.yaml @@ -0,0 +1,42 @@ +post: + operationId: PostCartsCartLineItems + summary: Add a Line Item + description: Generates a Line Item with a given Product Variant and adds it to the Cart + parameters: + - in: path + name: id + required: true + description: The id of the Cart to add the Line Item to. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml + requestBody: + content: + application/json: + schema: + type: object + required: + - variant_id + - quantity + properties: + variant_id: + type: string + description: The id of the Product Variant to generate the Line Item from. + quantity: + type: integer + description: The quantity of the Product Variant to add to the Line Item. + metadata: + type: object + description: >- + An optional key-value map with additional details about the Line + Item. diff --git a/docs/api/store/paths/carts_{id}_line-items_{line_id}.yaml b/docs/api/store/paths/carts_{id}_line-items_{line_id}.yaml new file mode 100644 index 0000000000..de972a6909 --- /dev/null +++ b/docs/api/store/paths/carts_{id}_line-items_{line_id}.yaml @@ -0,0 +1,67 @@ +delete: + operationId: DeleteCartsCartLineItemsItem + summary: Delete a Line Item + description: Removes a Line Item from a Cart. + parameters: + - in: path + name: id + required: true + description: The id of the Cart. + schema: + type: string + - in: path + name: line_id + required: true + description: The id of the Line Item. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml +post: + operationId: PostCartsCartLineItemsItem + summary: Update a Line Item + description: Updates a Line Item if the desired quantity can be fulfilled. + parameters: + - in: path + name: id + required: true + description: The id of the Cart. + schema: + type: string + - in: path + name: line_id + required: true + description: The id of the Line Item. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml + requestBody: + content: + application/json: + schema: + type: object + required: + - quantity + properties: + quantity: + type: integer + description: The quantity to set the Line Item to. diff --git a/docs/api/store/paths/carts_{id}_payment-session.yaml b/docs/api/store/paths/carts_{id}_payment-session.yaml new file mode 100644 index 0000000000..8c545a6705 --- /dev/null +++ b/docs/api/store/paths/carts_{id}_payment-session.yaml @@ -0,0 +1,35 @@ +post: + operationId: PostCartsCartPaymentSession + summary: Select a Payment Session + description: >- + Selects a Payment Session as the session intended to be used towards the + completion of the Cart. + parameters: + - in: path + name: id + required: true + description: The ID of the Cart. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml + requestBody: + content: + application/json: + schema: + type: object + required: + - provider_id + properties: + provider_id: + type: string + description: The ID of the Payment Provider. diff --git a/docs/api/store/paths/carts_{id}_payment-sessions.yaml b/docs/api/store/paths/carts_{id}_payment-sessions.yaml new file mode 100644 index 0000000000..e9c4b299a4 --- /dev/null +++ b/docs/api/store/paths/carts_{id}_payment-sessions.yaml @@ -0,0 +1,24 @@ +post: + operationId: PostCartsCartPaymentSessions + summary: Initialize Payment Sessions + description: >- + Creates Payment Sessions for each of the available Payment Providers in the + Cart's Region. + parameters: + - in: path + name: id + required: true + description: The id of the Cart. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml diff --git a/docs/api/store/paths/carts_{id}_payment-sessions_{provider_id}.yaml b/docs/api/store/paths/carts_{id}_payment-sessions_{provider_id}.yaml new file mode 100644 index 0000000000..138acff81e --- /dev/null +++ b/docs/api/store/paths/carts_{id}_payment-sessions_{provider_id}.yaml @@ -0,0 +1,69 @@ +delete: + operationId: DeleteCartsCartPaymentSessionsSession + summary: Delete a Payment Session + description: Deletes a Payment Session on a Cart. May be useful if a payment has failed. + parameters: + - in: path + name: id + required: true + description: The id of the Cart. + schema: + type: string + - in: path + name: provider_id + required: true + description: >- + The id of the Payment Provider used to create the Payment Session to be + deleted. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml +post: + operationId: PostCartsCartPaymentSessionUpdate + summary: Update a Payment Session + description: Updates a Payment Session with additional data. + parameters: + - in: path + name: id + required: true + description: The id of the Cart. + schema: + type: string + - in: path + name: provider_id + required: true + description: The id of the payment provider. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml + requestBody: + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + description: The data to update the payment session with. diff --git a/docs/api/store/paths/carts_{id}_payment-sessions_{provider_id}_refresh.yaml b/docs/api/store/paths/carts_{id}_payment-sessions_{provider_id}_refresh.yaml new file mode 100644 index 0000000000..b5a7de6600 --- /dev/null +++ b/docs/api/store/paths/carts_{id}_payment-sessions_{provider_id}_refresh.yaml @@ -0,0 +1,32 @@ +post: + operationId: PostCartsCartPaymentSessionsSession + summary: Refresh a Payment Session + description: >- + Refreshes a Payment Session to ensure that it is in sync with the Cart - + this is usually not necessary. + parameters: + - in: path + name: id + required: true + description: The id of the Cart. + schema: + type: string + - in: path + name: provider_id + required: true + description: >- + The id of the Payment Provider that created the Payment Session to be + refreshed. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml diff --git a/docs/api/store/paths/carts_{id}_shipping-methods.yaml b/docs/api/store/paths/carts_{id}_shipping-methods.yaml new file mode 100644 index 0000000000..0ea9ae45fe --- /dev/null +++ b/docs/api/store/paths/carts_{id}_shipping-methods.yaml @@ -0,0 +1,40 @@ +post: + operationId: PostCartsCartShippingMethod + description: Adds a Shipping Method to the Cart. + summary: Add a Shipping Method + tags: + - Cart + parameters: + - in: path + name: id + required: true + description: The cart ID. + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml + requestBody: + content: + application/json: + schema: + type: object + required: + - option_id + properties: + option_id: + type: string + description: ID of the shipping option to create the method from + data: + type: object + description: >- + Used to hold any data that the shipping method may need to + process the fulfillment of the order. Look at the documentation + for your installed fulfillment providers to find out what to + send. diff --git a/docs/api/store/paths/carts_{id}_taxes.yaml b/docs/api/store/paths/carts_{id}_taxes.yaml new file mode 100644 index 0000000000..e85afe3fde --- /dev/null +++ b/docs/api/store/paths/carts_{id}_taxes.yaml @@ -0,0 +1,24 @@ +post: + summary: Calculate Cart Taxes + operationId: PostCartsCartTaxes + description: >- + Calculates taxes for a cart. Depending on the cart's region this may involve + making 3rd party API calls to a Tax Provider service. + parameters: + - in: path + name: id + required: true + description: The Cart ID. + schema: + type: string + tags: + - Cart + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + cart: + $ref: ../components/schemas/cart.yaml diff --git a/docs/api/store/paths/collections.yaml b/docs/api/store/paths/collections.yaml new file mode 100644 index 0000000000..7b877a2093 --- /dev/null +++ b/docs/api/store/paths/collections.yaml @@ -0,0 +1,85 @@ +get: + operationId: GetCollections + summary: List Product Collections + description: Retrieve a list of Product Collection. + parameters: + - in: query + name: offset + description: >- + The number of collections to skip before starting to collect the + collections set + schema: + type: integer + default: 0 + - in: query + name: limit + description: The number of collections to return + schema: + type: integer + default: 10 + - in: query + name: created_at + description: Date comparison for when resulting collections were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting collections were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + tags: + - Collection + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + collections: + type: array + items: + $ref: ../components/schemas/product_collection.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/store/paths/collections_{id}.yaml b/docs/api/store/paths/collections_{id}.yaml new file mode 100644 index 0000000000..94778954a4 --- /dev/null +++ b/docs/api/store/paths/collections_{id}.yaml @@ -0,0 +1,22 @@ +get: + operationId: GetCollectionsCollection + summary: Retrieve a Product Collection + description: Retrieves a Product Collection. + parameters: + - in: path + name: id + required: true + description: The id of the Product Collection + schema: + type: string + tags: + - Collection + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + collection: + $ref: ../components/schemas/product_collection.yaml diff --git a/docs/api/store/paths/customers.yaml b/docs/api/store/paths/customers.yaml new file mode 100644 index 0000000000..82a4f6e32e --- /dev/null +++ b/docs/api/store/paths/customers.yaml @@ -0,0 +1,63 @@ +post: + operationId: PostCustomers + summary: Create a Customer + description: Creates a Customer account. + requestBody: + content: + application/json: + schema: + required: + - first_name + - last_name + - email + - password + properties: + first_name: + description: The Customer's first name. + type: string + last_name: + description: The Customer's last name. + type: string + email: + description: The email of the customer. + type: string + format: email + password: + description: The Customer's password. + type: string + format: password + phone: + description: The Customer's phone number. + type: string + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml + '422': + description: A customer with the same email exists + content: + application/json: + schema: + properties: + code: + type: string + description: The error code + type: + type: string + description: The type of error + message: + type: string + description: Human-readable message with details about the error + example: + code: invalid_request_error + type: duplicate_error + message: >- + A customer with the given email already has an account. Log in + instead diff --git a/docs/api/store/paths/customers_me.yaml b/docs/api/store/paths/customers_me.yaml new file mode 100644 index 0000000000..239dd92c9d --- /dev/null +++ b/docs/api/store/paths/customers_me.yaml @@ -0,0 +1,64 @@ +get: + operationId: GetCustomersCustomer + summary: Retrieves a Customer + description: >- + Retrieves a Customer - the Customer must be logged in to retrieve their + details. + x-authenticated: true + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml +post: + operationId: PostCustomersCustomer + summary: Update Customer details + description: Updates a Customer's saved details. + x-authenticated: true + requestBody: + content: + application/json: + schema: + properties: + first_name: + description: The Customer's first name. + type: string + last_name: + description: The Customer's last name. + type: string + billing_address: + description: The Address to be used for billing purposes. + anyOf: + - $ref: ../components/schemas/address.yaml + description: The full billing address object + - type: string + description: The ID of an existing billing address + password: + description: The Customer's password. + type: string + phone: + description: The Customer's phone number. + type: string + email: + description: The email of the customer. + type: string + metadata: + description: Metadata about the customer. + type: object + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml diff --git a/docs/api/store/paths/customers_me_addresses.yaml b/docs/api/store/paths/customers_me_addresses.yaml new file mode 100644 index 0000000000..852fa74b76 --- /dev/null +++ b/docs/api/store/paths/customers_me_addresses.yaml @@ -0,0 +1,27 @@ +post: + operationId: PostCustomersCustomerAddresses + summary: Add a Shipping Address + description: Adds a Shipping Address to a Customer's saved addresses. + x-authenticated: true + requestBody: + content: + application/json: + schema: + required: + - address + properties: + address: + description: The Address to add to the Customer. + anyOf: + - $ref: ../components/schemas/address.yaml + tags: + - Customer + responses: + '200': + description: A successful response + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml diff --git a/docs/api/store/paths/customers_me_addresses_{address_id}.yaml b/docs/api/store/paths/customers_me_addresses_{address_id}.yaml new file mode 100644 index 0000000000..e8c248228f --- /dev/null +++ b/docs/api/store/paths/customers_me_addresses_{address_id}.yaml @@ -0,0 +1,52 @@ +delete: + operationId: DeleteCustomersCustomerAddressesAddress + summary: Delete an Address + description: Removes an Address from the Customer's saved addresses. + x-authenticated: true + parameters: + - in: path + name: address_id + required: true + description: The id of the Address to remove. + schema: + type: string + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml +post: + operationId: PostCustomersCustomerAddressesAddress + summary: Update a Shipping Address + description: Updates a Customer's saved Shipping Address. + x-authenticated: true + parameters: + - in: path + name: address_id + required: true + description: The id of the Address to update. + schema: + type: string + requestBody: + content: + application/json: + schema: + anyOf: + - $ref: ../components/schemas/address.yaml + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml diff --git a/docs/api/store/paths/customers_me_orders.yaml b/docs/api/store/paths/customers_me_orders.yaml new file mode 100644 index 0000000000..e1af64470b --- /dev/null +++ b/docs/api/store/paths/customers_me_orders.yaml @@ -0,0 +1,54 @@ +get: + operationId: GetCustomersCustomerOrders + summary: Retrieve Customer Orders + description: Retrieves a list of a Customer's Orders. + x-authenticated: true + parameters: + - in: query + name: limit + description: How many orders to return. + schema: + type: integer + default: 10 + - in: query + name: offset + description: The offset in the resulting orders. + schema: + type: integer + default: 0 + - in: query + name: fields + description: >- + (Comma separated string) Which fields should be included in the + resulting orders. + schema: + type: string + - in: query + name: expand + description: >- + (Comma separated string) Which relations should be expanded in the + resulting orders. + schema: + type: string + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + orders: + type: array + items: + $ref: ../components/schemas/order.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/store/paths/customers_me_payment-methods.yaml b/docs/api/store/paths/customers_me_payment-methods.yaml new file mode 100644 index 0000000000..ed8fd4e188 --- /dev/null +++ b/docs/api/store/paths/customers_me_payment-methods.yaml @@ -0,0 +1,31 @@ +get: + operationId: GetCustomersCustomerPaymentMethods + summary: Retrieve saved payment methods + description: >- + Retrieves a list of a Customer's saved payment methods. Payment methods are + saved with Payment Providers and it is their responsibility to fetch saved + methods. + x-authenticated: true + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + payment_methods: + type: array + items: + properties: + provider_id: + type: string + description: >- + The id of the Payment Provider where the payment method + is saved. + data: + type: object + description: >- + The data needed for the Payment Provider to use the + saved payment method. diff --git a/docs/api/store/paths/customers_password-reset.yaml b/docs/api/store/paths/customers_password-reset.yaml new file mode 100644 index 0000000000..e882f146a2 --- /dev/null +++ b/docs/api/store/paths/customers_password-reset.yaml @@ -0,0 +1,37 @@ +post: + operationId: PostCustomersResetPassword + summary: Resets Customer password + description: >- + Resets a Customer's password using a password token created by a previous + /password-token request. + requestBody: + content: + application/json: + schema: + required: + - email + - password + - token + properties: + email: + description: The email of the customer. + type: string + format: email + password: + description: The Customer's password. + type: string + format: password + token: + description: The reset password token + type: string + tags: + - Customer + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + customer: + $ref: ../components/schemas/customer.yaml diff --git a/docs/api/store/paths/customers_password-token.yaml b/docs/api/store/paths/customers_password-token.yaml new file mode 100644 index 0000000000..1b46ffaa2f --- /dev/null +++ b/docs/api/store/paths/customers_password-token.yaml @@ -0,0 +1,23 @@ +post: + operationId: PostCustomersCustomerPasswordToken + summary: Creates a reset password token + description: >- + Creates a reset password token to be used in a subsequent /reset-password + request. The password token should be sent out of band e.g. via email and + will not be returned. + requestBody: + content: + application/json: + schema: + required: + - email + properties: + email: + description: The email of the customer. + type: string + format: email + tags: + - Customer + responses: + '204': + description: OK diff --git a/docs/api/store/paths/gift-cards_{code}.yaml b/docs/api/store/paths/gift-cards_{code}.yaml new file mode 100644 index 0000000000..296239263e --- /dev/null +++ b/docs/api/store/paths/gift-cards_{code}.yaml @@ -0,0 +1,22 @@ +get: + operationId: GetGiftCardsCode + summary: Retrieve Gift Card by Code + description: Retrieves a Gift Card by its associated unqiue code. + parameters: + - in: path + name: code + required: true + description: The unique Gift Card code. + schema: + type: string + tags: + - Gift Card + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + gift_card: + $ref: ../components/schemas/gift_card.yaml diff --git a/docs/api/store/paths/orders.yaml b/docs/api/store/paths/orders.yaml new file mode 100644 index 0000000000..6922c2a3b8 --- /dev/null +++ b/docs/api/store/paths/orders.yaml @@ -0,0 +1,42 @@ +get: + operationId: GetOrders + summary: Look Up an Order + description: Look up an order using filters. + parameters: + - in: query + name: display_id + required: true + description: The display id given to the Order. + schema: + type: number + - in: query + name: email + style: form + explode: false + description: The email associated with this order. + required: true + schema: + type: string + format: email + - in: query + name: shipping_address + style: form + explode: false + description: The shipping address associated with this order. + schema: + type: object + properties: + postal_code: + type: string + description: The postal code of the shipping address + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/store/paths/orders_cart_{cart_id}.yaml b/docs/api/store/paths/orders_cart_{cart_id}.yaml new file mode 100644 index 0000000000..a5fb52acb1 --- /dev/null +++ b/docs/api/store/paths/orders_cart_{cart_id}.yaml @@ -0,0 +1,22 @@ +get: + operationId: GetOrdersOrderCartId + summary: Retrieves Order by Cart id + description: Retrieves an Order by the id of the Cart that was used to create the Order. + parameters: + - in: path + name: cart_id + required: true + description: The ID of Cart. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/store/paths/orders_{id}.yaml b/docs/api/store/paths/orders_{id}.yaml new file mode 100644 index 0000000000..adb4dbe44b --- /dev/null +++ b/docs/api/store/paths/orders_{id}.yaml @@ -0,0 +1,22 @@ +get: + operationId: GetOrdersOrder + summary: Retrieves an Order + description: Retrieves an Order + parameters: + - in: path + name: id + required: true + description: The id of the Order. + schema: + type: string + tags: + - Order + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + order: + $ref: ../components/schemas/order.yaml diff --git a/docs/api/store/paths/products.yaml b/docs/api/store/paths/products.yaml new file mode 100644 index 0000000000..008dc45eae --- /dev/null +++ b/docs/api/store/paths/products.yaml @@ -0,0 +1,158 @@ +get: + operationId: GetProducts + summary: List Products + description: Retrieves a list of Products. + parameters: + - in: query + name: q + description: >- + Query used for searching products by title, description, variant's + title, variant's sku, and collection's title + schema: + type: string + - in: query + name: id + style: form + explode: false + description: product IDs to search for. + schema: + oneOf: + - type: string + - type: array + items: + type: string + - in: query + name: collection_id + style: form + explode: false + description: Collection IDs to search for + schema: + type: array + items: + type: string + - in: query + name: tags + style: form + explode: false + description: Tag IDs to search for + schema: + type: array + items: + type: string + - in: query + name: title + description: title to search for. + schema: + type: string + - in: query + name: description + description: description to search for. + schema: + type: string + - in: query + name: handle + description: handle to search for. + schema: + type: string + - in: query + name: is_giftcard + description: Search for giftcards using is_giftcard=true. + schema: + type: boolean + - in: query + name: type + description: type to search for. + schema: + type: string + - in: query + name: created_at + description: Date comparison for when resulting products were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting products were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: offset + description: How many products to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of products returned. + schema: + type: integer + default: 100 + - in: query + name: expand + description: >- + (Comma separated) Which fields should be expanded in each order of the + result. + schema: + type: string + - in: query + name: fields + description: >- + (Comma separated) Which fields should be included in each order of the + result. + schema: + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + products: + type: array + items: + $ref: ../components/schemas/product.yaml + count: + type: integer + description: The total number of items available + offset: + type: integer + description: The number of items skipped before these items + limit: + type: integer + description: The number of items per page diff --git a/docs/api/store/paths/products_search.yaml b/docs/api/store/paths/products_search.yaml new file mode 100644 index 0000000000..614fdbc630 --- /dev/null +++ b/docs/api/store/paths/products_search.yaml @@ -0,0 +1,35 @@ +get: + operationId: GetProductsSearch + summary: Search Products + description: Run a search query on products using the search engine installed on Medusa + parameters: + - in: query + name: q + required: true + description: The query to run the search with. + schema: + type: string + - in: query + name: offset + description: How many products to skip in the result. + schema: + type: integer + - in: query + name: limit + description: Limit the number of products returned. + schema: + type: integer + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + hits: + type: array + description: >- + Array of results. The format of the items depends on the + search engine installed on the server. diff --git a/docs/api/store/paths/products_{id}.yaml b/docs/api/store/paths/products_{id}.yaml new file mode 100644 index 0000000000..4e376e3315 --- /dev/null +++ b/docs/api/store/paths/products_{id}.yaml @@ -0,0 +1,22 @@ +get: + operationId: GetProductsProduct + summary: Retrieves a Product + description: Retrieves a Product. + parameters: + - in: path + name: id + required: true + description: The id of the Product. + schema: + type: string + tags: + - Product + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + product: + $ref: ../components/schemas/product.yaml diff --git a/docs/api/store/paths/regions.yaml b/docs/api/store/paths/regions.yaml new file mode 100644 index 0000000000..d70a5a3a70 --- /dev/null +++ b/docs/api/store/paths/regions.yaml @@ -0,0 +1,74 @@ +get: + operationId: GetRegions + summary: List Regions + description: Retrieves a list of Regions. + parameters: + - in: query + name: offset + description: How many regions to skip in the result. + schema: + type: integer + default: 0 + - in: query + name: limit + description: Limit the number of regions returned. + schema: + type: integer + default: 100 + - in: query + name: created_at + description: Date comparison for when resulting regions were created. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + - in: query + name: updated_at + description: Date comparison for when resulting regions were updated. + schema: + type: object + properties: + lt: + type: string + description: filter by dates less than this date + format: date + gt: + type: string + description: filter by dates greater than this date + format: date + lte: + type: string + description: filter by dates less than or equal to this date + format: date + gte: + type: string + description: filter by dates greater than or equal to this date + format: date + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + regions: + type: array + items: + $ref: ../components/schemas/region.yaml diff --git a/docs/api/store/paths/regions_{id}.yaml b/docs/api/store/paths/regions_{id}.yaml new file mode 100644 index 0000000000..b2a7c48a89 --- /dev/null +++ b/docs/api/store/paths/regions_{id}.yaml @@ -0,0 +1,22 @@ +get: + operationId: GetRegionsRegion + summary: Retrieves a Region + description: Retrieves a Region. + parameters: + - in: path + name: id + required: true + description: The id of the Region. + schema: + type: string + tags: + - Region + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + region: + $ref: ../components/schemas/region.yaml diff --git a/docs/api/store/paths/return-reasons.yaml b/docs/api/store/paths/return-reasons.yaml new file mode 100644 index 0000000000..dfbe03397a --- /dev/null +++ b/docs/api/store/paths/return-reasons.yaml @@ -0,0 +1,17 @@ +get: + operationId: GetReturnReasons + summary: List Return Reasons + description: Retrieves a list of Return Reasons. + tags: + - Return Reason + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + return_reasons: + type: array + items: + $ref: ../components/schemas/return_reason.yaml diff --git a/docs/api/store/paths/return-reasons_{id}.yaml b/docs/api/store/paths/return-reasons_{id}.yaml new file mode 100644 index 0000000000..431029a501 --- /dev/null +++ b/docs/api/store/paths/return-reasons_{id}.yaml @@ -0,0 +1,22 @@ +get: + operationId: GetReturnReasonsReason + summary: Retrieve a Return Reason + description: Retrieves a Return Reason. + parameters: + - in: path + name: id + required: true + description: The id of the Return Reason. + schema: + type: string + tags: + - Return Reason + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + return_reason: + $ref: ../components/schemas/return_reason.yaml diff --git a/docs/api/store/paths/returns.yaml b/docs/api/store/paths/returns.yaml new file mode 100644 index 0000000000..e30279072b --- /dev/null +++ b/docs/api/store/paths/returns.yaml @@ -0,0 +1,60 @@ +post: + operationId: PostReturns + summary: Create Return + description: Creates a Return for an Order. + requestBody: + content: + application/json: + schema: + required: + - order_id + - items + properties: + order_id: + type: string + description: The ID of the Order to create the Return from. + items: + description: The items to include in the Return. + type: array + items: + required: + - item_id + - quantity + properties: + item_id: + description: The ID of the Line Item from the Order. + type: string + quantity: + description: The quantity to return. + type: integer + reason_id: + description: The ID of the return reason. + type: string + note: + description: A note to add to the item returned. + type: string + return_shipping: + description: >- + If the Return is to be handled by the store operator the + Customer can choose a Return Shipping Method. Alternatvely the + Customer can handle the Return themselves. + type: object + required: + - option_id + properties: + option_id: + type: string + description: >- + The ID of the Shipping Option to create the Shipping Method + from. + tags: + - Return + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + return: + $ref: ../components/schemas/return.yaml diff --git a/docs/api/store/paths/shipping-options.yaml b/docs/api/store/paths/shipping-options.yaml new file mode 100644 index 0000000000..66ca720e0b --- /dev/null +++ b/docs/api/store/paths/shipping-options.yaml @@ -0,0 +1,35 @@ +get: + operationId: GetShippingOptions + summary: Retrieve Shipping Options + description: Retrieves a list of Shipping Options. + parameters: + - in: query + name: is_return + description: >- + Whether return Shipping Options should be included. By default all + Shipping Options are returned. + schema: + type: boolean + - in: query + name: product_ids + description: A comma separated list of Product ids to filter Shipping Options by. + schema: + type: string + - in: query + name: region_id + description: the Region to retrieve Shipping Options from. + schema: + type: string + tags: + - Shipping Option + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + shipping_options: + type: array + items: + $ref: ../components/schemas/shipping_option.yaml diff --git a/docs/api/store/paths/shipping-options_{cart_id}.yaml b/docs/api/store/paths/shipping-options_{cart_id}.yaml new file mode 100644 index 0000000000..61172ac00e --- /dev/null +++ b/docs/api/store/paths/shipping-options_{cart_id}.yaml @@ -0,0 +1,24 @@ +get: + operationId: GetShippingOptionsCartId + summary: Retrieve Shipping Options for Cart + description: Retrieves a list of Shipping Options available to a cart. + parameters: + - in: path + name: cart_id + required: true + description: The id of the Cart. + schema: + type: string + tags: + - Shipping Option + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + shipping_options: + type: array + items: + $ref: ../components/schemas/shipping_option.yaml diff --git a/docs/api/store/paths/swaps.yaml b/docs/api/store/paths/swaps.yaml new file mode 100644 index 0000000000..e45b4b9296 --- /dev/null +++ b/docs/api/store/paths/swaps.yaml @@ -0,0 +1,68 @@ +post: + operationId: PostSwaps + summary: Create a Swap + description: >- + Creates a Swap on an Order by providing some items to return along with some + items to send back + requestBody: + content: + application/json: + schema: + required: + - order_id + - return_items + - additional_items + properties: + order_id: + type: string + description: The ID of the Order to create the Swap for. + return_items: + description: The items to include in the Return. + type: array + items: + required: + - item_id + - quantity + properties: + item_id: + description: The ID of the Line Item from the Order. + type: string + quantity: + description: The quantity to swap. + type: integer + reason_id: + description: The ID of the reason of this return. + type: string + note: + description: The note to add to the item being swapped. + type: string + return_shipping_option: + type: string + description: >- + The ID of the Shipping Option to create the Shipping Method + from. + additional_items: + description: The items to exchange the returned items to. + type: array + items: + required: + - variant_id + - quantity + properties: + variant_id: + description: The ID of the Product Variant to send. + type: string + quantity: + description: The quantity to send of the variant. + type: integer + tags: + - Swap + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + swap: + $ref: ../components/schemas/swap.yaml diff --git a/docs/api/store/paths/swaps_{cart_id}.yaml b/docs/api/store/paths/swaps_{cart_id}.yaml new file mode 100644 index 0000000000..f09da0dd81 --- /dev/null +++ b/docs/api/store/paths/swaps_{cart_id}.yaml @@ -0,0 +1,22 @@ +get: + operationId: GetSwapsSwapCartId + summary: Retrieve Swap by Cart id + description: Retrieves a Swap by the id of the Cart used to confirm the Swap. + parameters: + - in: path + name: cart_id + required: true + description: The id of the Cart + schema: + type: string + tags: + - Swap + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + swap: + $ref: ../components/schemas/swap.yaml diff --git a/docs/api/store/paths/variants.yaml b/docs/api/store/paths/variants.yaml new file mode 100644 index 0000000000..5274287ccd --- /dev/null +++ b/docs/api/store/paths/variants.yaml @@ -0,0 +1,77 @@ +get: + operationId: GetVariants + summary: Retrieve Product Variants + description: Retrieves a list of Product Variants + parameters: + - in: query + name: ids + description: A comma separated list of Product Variant ids to filter by. + schema: + type: string + - in: query + name: expand + description: A comma separated list of Product Variant relations to load. + schema: + type: string + - in: query + name: offset + description: How many product variants to skip in the result. + schema: + type: number + default: '0' + - in: query + name: limit + description: Maximum number of Product Variants to return. + schema: + type: number + default: '100' + - in: query + name: title + style: form + explode: false + description: product variant title to search for. + schema: + oneOf: + - type: string + description: a single title to search by + - type: array + description: multiple titles to search by + items: + type: string + - in: query + name: inventory_quantity + description: Filter by available inventory quantity + schema: + oneOf: + - type: number + description: a specific number to search by. + - type: object + description: search using less and greater than comparisons. + properties: + lt: + type: number + description: filter by inventory quantity less than this number + gt: + type: number + description: filter by inventory quantity greater than this number + lte: + type: number + description: filter by inventory quantity less than or equal to this number + gte: + type: number + description: >- + filter by inventory quantity greater than or equal to this + number + tags: + - Product Variant + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + variants: + type: array + items: + $ref: ../components/schemas/product_variant.yaml diff --git a/docs/api/store/paths/variants_{variant_id}.yaml b/docs/api/store/paths/variants_{variant_id}.yaml new file mode 100644 index 0000000000..842293367f --- /dev/null +++ b/docs/api/store/paths/variants_{variant_id}.yaml @@ -0,0 +1,42 @@ +get: + operationId: GetVariantsVariant + summary: Retrieve a Product Variant + description: Retrieves a Product Variant by id + parameters: + - in: path + name: variant_id + required: true + description: The id of the Product Variant. + schema: + type: string + - in: query + name: cart_id + description: The id of the Cart to set prices based on. + schema: + type: string + - in: query + name: region_id + description: The id of the Region to set prices based on. + schema: + type: string + - in: query + name: currency_code + style: form + explode: false + description: The 3 character ISO currency code to set prices based on. + schema: + type: string + externalDocs: + url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + description: See a list of codes. + tags: + - Product Variant + responses: + '200': + description: OK + content: + application/json: + schema: + properties: + variant: + $ref: ../components/schemas/product_variant.yaml diff --git a/package.json b/package.json index de6d1d82fc..2574de68f7 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@babel/preset-env": "^7.11.5", "@babel/register": "^7.11.5", "@babel/runtime": "^7.11.2", + "@redocly/cli": "latest", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", "axios": "^0.21.1", @@ -67,6 +68,7 @@ "test:integration:api": "jest --config=integration-tests/jest.config.js --projects=integration-tests/api", "test:integration:plugins": "jest --config=integration-tests/jest.config.js --projects=integration-tests/plugins", "test:fixtures": "jest --config=docs-util/jest.config.js --runInBand", + "openapi:generate": "node ./scripts/build-openapi.js", "generate:services": "typedoc --options typedoc.services.js", "generate:js-client": "typedoc --options typedoc.js-client.js", "release:snapshot": "changeset publish --no-git-tags --snapshot --tag snapshot" diff --git a/packages/medusa-plugin-restock-notification/src/models/restock-notification.ts b/packages/medusa-plugin-restock-notification/src/models/restock-notification.ts index 16a4707063..76a5cd0aae 100644 --- a/packages/medusa-plugin-restock-notification/src/models/restock-notification.ts +++ b/packages/medusa-plugin-restock-notification/src/models/restock-notification.ts @@ -41,8 +41,10 @@ export class RestockNotification { * type: string * description: "The id of the variant that customers have signed up to be notified about," * emails: - * type: string[] * description: "The emails of customers who wish to be notified about restocks." + * type: array + * items: + * type: string * created_at: * type: string * format: date-time diff --git a/packages/medusa/src/api/routes/admin/apps/authorize-app.ts b/packages/medusa/src/api/routes/admin/apps/authorize-app.ts index e3d7f8974b..38634e9109 100644 --- a/packages/medusa/src/api/routes/admin/apps/authorize-app.ts +++ b/packages/medusa/src/api/routes/admin/apps/authorize-app.ts @@ -1,8 +1,10 @@ import { IsNotEmpty, IsString } from "class-validator" + import { OauthService } from "../../../../services" import { validator } from "../../../../utils/validator" + /** - * @oas [post] /apps + * @oas [post] /apps/authorizations * operationId: "PostApps" * summary: "Generates a token for an application." * description: "Generates a token for an application." @@ -26,7 +28,7 @@ import { validator } from "../../../../utils/validator" * type: string * description: The code for the generated token. * tags: - * - Apps + * - App * responses: * "200": * description: OK diff --git a/packages/medusa/src/api/routes/admin/apps/list.ts b/packages/medusa/src/api/routes/admin/apps/list.ts index 5e70595935..ab452a5f09 100644 --- a/packages/medusa/src/api/routes/admin/apps/list.ts +++ b/packages/medusa/src/api/routes/admin/apps/list.ts @@ -7,7 +7,7 @@ import { OauthService } from "../../../../services" * description: "Retrieve a list of applications." * x-authenticated: true * tags: - * - Apps + * - App * responses: * "200": * description: OK @@ -15,8 +15,10 @@ import { OauthService } from "../../../../services" * application/json: * schema: * properties: - * collection: - * $ref: "#/components/schemas/OAuth" + * apps: + * type: array + * items: + * $ref: "#/components/schemas/OAuth" */ export default async (req, res) => { const oauthService: OauthService = req.scope.resolve("oauthService") diff --git a/packages/medusa/src/api/routes/admin/auth/create-session.ts b/packages/medusa/src/api/routes/admin/auth/create-session.ts index 84911a684c..11fe81f142 100644 --- a/packages/medusa/src/api/routes/admin/auth/create-session.ts +++ b/packages/medusa/src/api/routes/admin/auth/create-session.ts @@ -1,10 +1,11 @@ +import { IsEmail, IsNotEmpty, IsString } from "class-validator" + +import AuthService from "../../../../services/auth" +import { EntityManager } from "typeorm"; +import { MedusaError } from "medusa-core-utils" import _ from "lodash" import jwt from "jsonwebtoken" import { validator } from "../../../../utils/validator" -import { IsEmail, IsNotEmpty, IsString } from "class-validator" -import AuthService from "../../../../services/auth" -import { MedusaError } from "medusa-core-utils" -import { EntityManager } from "typeorm"; /** * @oas [post] /auth @@ -15,6 +16,22 @@ import { EntityManager } from "typeorm"; * parameters: * - (body) email=* {string} The User's email. * - (body) password=* {string} The User's password. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - email + * - password + * properties: + * email: + * type: string + * description: The User's email. + * format: email + * password: + * type: string + * description: The User's password. + * format: password * tags: * - Auth * responses: @@ -26,6 +43,8 @@ import { EntityManager } from "typeorm"; * properties: * user: * $ref: "#/components/schemas/user" + * "401": + * description: The user doesn't exist or the credentials are incorrect. */ export default async (req, res) => { const { projectConfig: { jwt_secret } } = req.scope.resolve('configModule') diff --git a/packages/medusa/src/api/routes/admin/auth/delete-session.ts b/packages/medusa/src/api/routes/admin/auth/delete-session.ts index 7988eab6af..8760fe1d3c 100644 --- a/packages/medusa/src/api/routes/admin/auth/delete-session.ts +++ b/packages/medusa/src/api/routes/admin/auth/delete-session.ts @@ -1,5 +1,5 @@ /** - * @oas [get] /auth + * @oas [delete] /auth * operationId: "DeleteAuth" * summary: "Delete Session" * x-authenticated: true diff --git a/packages/medusa/src/api/routes/admin/auth/get-session.ts b/packages/medusa/src/api/routes/admin/auth/get-session.ts index ae024485ae..a694525fa0 100644 --- a/packages/medusa/src/api/routes/admin/auth/get-session.ts +++ b/packages/medusa/src/api/routes/admin/auth/get-session.ts @@ -1,5 +1,5 @@ -import _ from "lodash" import UserService from "../../../../services/user" +import _ from "lodash" /** * @oas [get] /auth @@ -18,6 +18,8 @@ import UserService from "../../../../services/user" * properties: * user: * $ref: "#/components/schemas/user" + * "400": + * description: An error occurred. */ export default async (req, res) => { try { diff --git a/packages/medusa/src/api/routes/admin/batch/cancel-batch-job.ts b/packages/medusa/src/api/routes/admin/batch/cancel-batch-job.ts index d42da29e5b..af582be151 100644 --- a/packages/medusa/src/api/routes/admin/batch/cancel-batch-job.ts +++ b/packages/medusa/src/api/routes/admin/batch/cancel-batch-job.ts @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Marks a batch job as canceled" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the batch job. + * - (path) id=* {string} The ID of the batch job. * tags: * - Batch Job * responses: diff --git a/packages/medusa/src/api/routes/admin/batch/confirm-batch-job.ts b/packages/medusa/src/api/routes/admin/batch/confirm-batch-job.ts index 8352327e1c..7601b105c6 100644 --- a/packages/medusa/src/api/routes/admin/batch/confirm-batch-job.ts +++ b/packages/medusa/src/api/routes/admin/batch/confirm-batch-job.ts @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Confirms that a previously requested batch job should be executed." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the batch job. + * - (path) id=* {string} The ID of the batch job. * tags: * - Batch Job * responses: @@ -17,11 +17,10 @@ import { EntityManager } from "typeorm" * content: * application/json: * schema: - * properties:x + * properties: * batch_job: * $ref: "#/components/schemas/batch_job" */ - export default async (req, res) => { let batch_job = req.batch_job diff --git a/packages/medusa/src/api/routes/admin/batch/create-batch-job.ts b/packages/medusa/src/api/routes/admin/batch/create-batch-job.ts index 81c70c2936..6eff9eb59e 100644 --- a/packages/medusa/src/api/routes/admin/batch/create-batch-job.ts +++ b/packages/medusa/src/api/routes/admin/batch/create-batch-job.ts @@ -1,8 +1,9 @@ import { IsBoolean, IsObject, IsOptional, IsString } from "class-validator" -import BatchJobService from "../../../../services/batch-job" -import { validator } from "../../../../utils/validator" + import { BatchJob } from "../../../../models" +import BatchJobService from "../../../../services/batch-job" import { EntityManager } from "typeorm" +import { validator } from "../../../../utils/validator" /** * @oas [post] /batch-jobs @@ -10,12 +11,43 @@ import { EntityManager } from "typeorm" * summary: "Create a Batch Job" * description: "Creates a Batch Job." * x-authenticated: true - * parameters: - * - (body) type=* {string} The type of batch job to start. - * - (body) context=* {string} Additional infomration regarding the batch to be used for processing. - * - (body) dry_run=* {boolean} Set a batch job in dry_run mode to get some information on what will be done without applying any modifications. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - type + * - context + * properties: + * type: + * type: string + * description: The type of batch job to start. + * example: product-export + * context: + * type: object + * description: Additional infomration regarding the batch to be used for processing. + * example: + * shape: + * prices: + * - region: null + * currency_code: "eur" + * dynamicImageColumnCount: 4 + * dynamicOptionColumnCount: 2 + * list_config: + * skip: 0 + * take: 50 + * order: + * created_at: "DESC" + * relations: + * - variants + * - variant.prices + * - images + * dry_run: + * type: boolean + * description: Set a batch job in dry_run mode to get some information on what will be done without applying any modifications. + * default: false * tags: - * - Customer + * - Batch Job * responses: * 201: * description: OK diff --git a/packages/medusa/src/api/routes/admin/batch/get-batch-job.ts b/packages/medusa/src/api/routes/admin/batch/get-batch-job.ts index 4bef63e026..2c16bccba9 100644 --- a/packages/medusa/src/api/routes/admin/batch/get-batch-job.ts +++ b/packages/medusa/src/api/routes/admin/batch/get-batch-job.ts @@ -5,7 +5,7 @@ * description: "Retrieves a Batch Job." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Batch Job + * - (path) id=* {string} The ID of the Batch Job * tags: * - Batch Job * responses: diff --git a/packages/medusa/src/api/routes/admin/batch/list-batch-jobs.ts b/packages/medusa/src/api/routes/admin/batch/list-batch-jobs.ts index 48a138b8a1..d8a863dffb 100644 --- a/packages/medusa/src/api/routes/admin/batch/list-batch-jobs.ts +++ b/packages/medusa/src/api/routes/admin/batch/list-batch-jobs.ts @@ -1,15 +1,11 @@ +import { IsArray, IsNumber, IsOptional, IsString } from "class-validator" import { Transform, Type } from "class-transformer" -import { - IsArray, - IsNumber, - IsOptional, - IsString, -} from "class-validator" -import { pickBy } from "lodash" + import BatchJobService from "../../../../services/batch-job" import { DateComparisonOperator } from "../../../../types/common" import { IsType } from "../../../../utils/validators/is-type" import { Request } from "express" +import { pickBy } from "lodash" /** * @oas [get] /batch-jobs @@ -18,20 +14,201 @@ import { Request } from "express" * description: "Retrieve a list of Batch Jobs." * x-authenticated: true * parameters: - * - (query) limit {string} The number of collections to return. - * - (query) offset {string} The offset of collections to return. - * - (query) type {string | string[]} Filter by the batch type - * - (query) confirmed_at {DateComparisonOperator | null} Date comparison for when resulting collections was confirmed, i.e. less than, greater than etc. - * - (query) pre_processed_at {DateComparisonOperator | null} Date comparison for when resulting collections was pre processed, i.e. less than, greater than etc. - * - (query) completed_at {DateComparisonOperator | null} Date comparison for when resulting collections was completed, i.e. less than, greater than etc. - * - (query) failed_at {DateComparisonOperator | null} Date comparison for when resulting collections was failed, i.e. less than, greater than etc. - * - (query) canceled_at {DateComparisonOperator | null} Date comparison for when resulting collections was canceled, i.e. less than, greater than etc. - * - (query) order {string} Order used when retrieving batch jobs - * - (query) expand[] {string} (Comma separated) Which fields should be expanded in each order of the result. - * - (query) fields[] {string} (Comma separated) Which fields should be included in each order of the result. - * - (query) deleted_at {DateComparisonOperator | null} Date comparison for when resulting collections was deleted, i.e. less than, greater than etc. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting collections was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting collections was updated, i.e. less than, greater than etc. + * - (query) limit=10 {integer} The number of batch jobs to return. + * - (query) offset=0 {integer} The number of batch jobs to skip before results. + * - in: query + * name: id + * style: form + * explode: false + * description: Filter by the batch ID + * schema: + * oneOf: + * - type: string + * description: batch job ID + * - type: array + * description: multiple batch job IDs + * items: + * type: string + * - in: query + * name: type + * style: form + * explode: false + * description: Filter by the batch type + * schema: + * type: array + * items: + * type: string + * - in: query + * name: confirmed_at + * style: form + * explode: false + * description: Date comparison for when resulting collections was confirmed, i.e. less than, greater than etc. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: pre_processed_at + * style: form + * explode: false + * description: Date comparison for when resulting collections was pre processed, i.e. less than, greater than etc. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: completed_at + * style: form + * explode: false + * description: Date comparison for when resulting collections was completed, i.e. less than, greater than etc. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: failed_at + * style: form + * explode: false + * description: Date comparison for when resulting collections was failed, i.e. less than, greater than etc. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: canceled_at + * style: form + * explode: false + * description: Date comparison for when resulting collections was canceled, i.e. less than, greater than etc. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - (query) order {string} Field used to order retrieved batch jobs + * - (query) expand {string} (Comma separated) Which fields should be expanded in each order of the result. + * - (query) fields {string} (Comma separated) Which fields should be included in each order of the result. + * - in: query + * name: created_at + * style: form + * explode: false + * description: Date comparison for when resulting collections was created, i.e. less than, greater than etc. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * style: form + * explode: false + * description: Date comparison for when resulting collections was updated, i.e. less than, greater than etc. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date * tags: * - Batch Job * responses: @@ -41,8 +218,19 @@ import { Request } from "express" * application/json: * schema: * properties: - * batch_job: - * $ref: "#/components/schemas/batch_job" + * batch_jobs: + * type: array + * items: + * $ref: "#/components/schemas/batch_job" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req: Request, res) => { const batchService: BatchJobService = req.scope.resolve("batchJobService") diff --git a/packages/medusa/src/api/routes/admin/collections/add-products.ts b/packages/medusa/src/api/routes/admin/collections/add-products.ts index 4b883081c3..a7a859ef25 100644 --- a/packages/medusa/src/api/routes/admin/collections/add-products.ts +++ b/packages/medusa/src/api/routes/admin/collections/add-products.ts @@ -1,8 +1,9 @@ import { ArrayNotEmpty, IsString } from "class-validator" -import ProductCollectionService from "../../../../services/product-collection" import { Request, Response } from "express" import { EntityManager } from "typeorm"; +import ProductCollectionService from "../../../../services/product-collection" + /** * @oas [post] /collections/{id}/products/batch * operationId: "PostProductsToCollection" @@ -10,25 +11,31 @@ import { EntityManager } from "typeorm"; * description: "Updates products associated with a Product Collection" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Collection. + * - (path) id=* {string} The ID of the Collection. * requestBody: * content: * application/json: * schema: + * required: + * - product_ids * properties: * product_ids: * description: "An array of Product IDs to add to the Product Collection." * type: array * items: - * properties: - * id: - * description: "The ID of a Product to add to the Product Collection." - * type: string + * description: "The ID of a Product to add to the Product Collection." + * type: string * tags: * - Collection * responses: * "200": * description: OK + * content: + * application/json: + * schema: + * properties: + * collection: + * $ref: "#/components/schemas/product_collection" */ export default async (req: Request, res: Response) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/collections/delete-collection.ts b/packages/medusa/src/api/routes/admin/collections/delete-collection.ts index 101466b29b..e31a668871 100644 --- a/packages/medusa/src/api/routes/admin/collections/delete-collection.ts +++ b/packages/medusa/src/api/routes/admin/collections/delete-collection.ts @@ -1,6 +1,7 @@ -import ProductCollectionService from "../../../../services/product-collection" import { Request, Response } from "express" + import { EntityManager } from "typeorm"; +import ProductCollectionService from "../../../../services/product-collection" /** * @oas [delete] /collections/{id} @@ -9,7 +10,7 @@ import { EntityManager } from "typeorm"; * description: "Deletes a Product Collection." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Collection. + * - (path) id=* {string} The ID of the Collection. * tags: * - Collection * responses: @@ -21,12 +22,15 @@ import { EntityManager } from "typeorm"; * properties: * id: * type: string - * description: The id of the deleted Collection + * description: The ID of the deleted Collection * object: * type: string * description: The type of the object that was deleted. + * default: product-collection * deleted: * type: boolean + * description: Whether the collection was deleted successfully or not. + * default: true */ export default async (req: Request, res: Response) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/collections/get-collection.ts b/packages/medusa/src/api/routes/admin/collections/get-collection.ts index 2b7c298808..76d47cac74 100644 --- a/packages/medusa/src/api/routes/admin/collections/get-collection.ts +++ b/packages/medusa/src/api/routes/admin/collections/get-collection.ts @@ -1,6 +1,7 @@ -import { defaultAdminCollectionsRelations } from "." -import ProductCollectionService from "../../../../services/product-collection" import { Request, Response } from "express" + +import ProductCollectionService from "../../../../services/product-collection" +import { defaultAdminCollectionsRelations } from "." /** * @oas [get] /collections/{id} * operationId: "GetCollectionsCollection" @@ -8,7 +9,7 @@ import { Request, Response } from "express" * description: "Retrieves a Product Collection." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Product Collection + * - (path) id=* {string} The ID of the Product Collection * tags: * - Collection * responses: diff --git a/packages/medusa/src/api/routes/admin/collections/list-collections.ts b/packages/medusa/src/api/routes/admin/collections/list-collections.ts index 67550b2527..a25b1ec741 100644 --- a/packages/medusa/src/api/routes/admin/collections/list-collections.ts +++ b/packages/medusa/src/api/routes/admin/collections/list-collections.ts @@ -1,9 +1,10 @@ -import { Type } from "class-transformer" import { IsNumber, IsOptional, IsString, ValidateNested } from "class-validator" -import _, { identity } from "lodash" -import ProductCollectionService from "../../../../services/product-collection" -import { DateComparisonOperator } from "../../../../types/common" import { Request, Response } from "express" +import _, { identity } from "lodash" + +import { DateComparisonOperator } from "../../../../types/common" +import ProductCollectionService from "../../../../services/product-collection" +import { Type } from "class-transformer" /** * @oas [get] /collections @@ -12,13 +13,77 @@ import { Request, Response } from "express" * description: "Retrieve a list of Product Collection." * x-authenticated: true * parameters: - * - (query) limit {string} The number of collections to return. - * - (query) offset {string} The offset of collections to return. + * - (query) limit=10 {integer} The number of collections to return. + * - (query) offset=0 {integer} The number of collections to skip before the results. * - (query) title {string} The title of collections to return. * - (query) handle {string} The handle of collections to return. - * - (query) deleted_at {DateComparisonOperator} Date comparison for when resulting collections was deleted, i.e. less than, greater than etc. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting collections was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting collections was updated, i.e. less than, greater than etc. + * - (query) q {string} a search term to search titles and handles. + * - in: query + * name: created_at + * description: Date comparison for when resulting collections were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting collections were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: deleted_at + * description: Date comparison for when resulting collections were deleted. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date * tags: * - Collection * responses: @@ -28,8 +93,19 @@ import { Request, Response } from "express" * application/json: * schema: * properties: - * collection: - * $ref: "#/components/schemas/product_collection" + * collections: + * type: array + * items: + * $ref: "#/components/schemas/product_collection" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req: Request, res: Response) => { const productCollectionService: ProductCollectionService = req.scope.resolve( diff --git a/packages/medusa/src/api/routes/admin/collections/remove-products.ts b/packages/medusa/src/api/routes/admin/collections/remove-products.ts index 79fe62c1b4..a2b155d541 100644 --- a/packages/medusa/src/api/routes/admin/collections/remove-products.ts +++ b/packages/medusa/src/api/routes/admin/collections/remove-products.ts @@ -1,8 +1,9 @@ import { ArrayNotEmpty, IsString } from "class-validator" -import ProductCollectionService from "../../../../services/product-collection" import { Request, Response } from "express" import { EntityManager } from "typeorm"; +import ProductCollectionService from "../../../../services/product-collection" + /** * @oas [delete] /collections/{id}/products/batch * operationId: "DeleteProductsFromCollection" @@ -10,25 +11,42 @@ import { EntityManager } from "typeorm"; * description: "Removes products associated with a Product Collection" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Collection. + * - (path) id=* {string} The ID of the Collection. * requestBody: * content: * application/json: * schema: + * required: + * - product_ids * properties: * product_ids: * description: "An array of Product IDs to remove from the Product Collection." * type: array * items: - * properties: - * id: - * description: "The ID of a Product to remove from the Product Collection." - * type: string + * description: "The ID of a Product to add to the Product Collection." + * type: string * tags: * - Collection * responses: * "200": * description: OK + * content: + * application/json: + * schema: + * properties: + * id: + * type: string + * description: "The ID of the collection" + * object: + * type: string + * description: "The type of object the removal was executed on" + * default: product-collection + * removed_products: + * description: "The IDs of the products removed from the collection" + * type: array + * items: + * description: "The ID of a Product to add to the Product Collection." + * type: string */ export default async (req: Request, res: Response) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/collections/update-collection.ts b/packages/medusa/src/api/routes/admin/collections/update-collection.ts index 95fd59f9a7..84a3c020d1 100644 --- a/packages/medusa/src/api/routes/admin/collections/update-collection.ts +++ b/packages/medusa/src/api/routes/admin/collections/update-collection.ts @@ -1,7 +1,9 @@ import { IsObject, IsOptional, IsString } from "class-validator" -import ProductCollectionService from "../../../../services/product-collection" import { Request, Response } from "express" + import { EntityManager } from "typeorm"; +import ProductCollectionService from "../../../../services/product-collection" + /** * @oas [post] /collections/{id} * operationId: "PostCollectionsCollection" @@ -9,7 +11,7 @@ import { EntityManager } from "typeorm"; * description: "Updates a Product Collection." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Collection. + * - (path) id=* {string} The ID of the Collection. * requestBody: * content: * application/json: diff --git a/packages/medusa/src/api/routes/admin/customer-groups/add-customers-batch.ts b/packages/medusa/src/api/routes/admin/customer-groups/add-customers-batch.ts index dcdf5a0090..4727317073 100644 --- a/packages/medusa/src/api/routes/admin/customer-groups/add-customers-batch.ts +++ b/packages/medusa/src/api/routes/admin/customer-groups/add-customers-batch.ts @@ -1,10 +1,11 @@ -import { Type } from "class-transformer" -import { ValidateNested } from "class-validator" +import { Request, Response } from "express" + import { CustomerGroupService } from "../../../../services" import { CustomerGroupsBatchCustomer } from "../../../../types/customer-groups" -import { validator } from "../../../../utils/validator" -import { Request, Response } from "express" import { EntityManager } from "typeorm" +import { Type } from "class-transformer" +import { ValidateNested } from "class-validator" +import { validator } from "../../../../utils/validator" /** * @oas [post] /customer-groups/{id}/customers/batch @@ -13,10 +14,26 @@ import { EntityManager } from "typeorm" * description: "Adds a list of customers, represented by id's, to a customer group." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the customer group. - * - (body) customers=* {{id: string }[]} ids of the customers to add + * - (path) id=* {string} The ID of the customer group. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - customer_ids + * properties: + * customer_ids: + * description: "The ids of the customers to add" + * type: array + * items: + * required: + * - id + * properties: + * id: + * description: ID of the customer + * type: string * tags: - * - CustomerGroup + * - Customer Group * responses: * 200: * description: OK @@ -24,8 +41,8 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * customerGroup: - * $ref: "#/components/schemas/customergroup" + * customer_group: + * $ref: "#/components/schemas/customer_group" */ export default async (req: Request, res: Response) => { diff --git a/packages/medusa/src/api/routes/admin/customer-groups/create-customer-group.ts b/packages/medusa/src/api/routes/admin/customer-groups/create-customer-group.ts index 6d0b9b292c..bec19a5376 100644 --- a/packages/medusa/src/api/routes/admin/customer-groups/create-customer-group.ts +++ b/packages/medusa/src/api/routes/admin/customer-groups/create-customer-group.ts @@ -1,8 +1,9 @@ import { IsObject, IsOptional, IsString } from "class-validator" -import { CustomerGroupService } from "../../../../services" -import { validator } from "../../../../utils/validator" import { Request, Response } from "express" + +import { CustomerGroupService } from "../../../../services" import { EntityManager } from "typeorm" +import { validator } from "../../../../utils/validator" /** * @oas [post] /customer-groups @@ -14,7 +15,7 @@ import { EntityManager } from "typeorm" * - (body) name=* {string} Name of the customer group * - (body) metadata {object} Metadata for the customer. * tags: - * - CustomerGroup + * - Customer Group * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/customer-groups/delete-customer-group.ts b/packages/medusa/src/api/routes/admin/customer-groups/delete-customer-group.ts index 05015b984b..495f2edb70 100644 --- a/packages/medusa/src/api/routes/admin/customer-groups/delete-customer-group.ts +++ b/packages/medusa/src/api/routes/admin/customer-groups/delete-customer-group.ts @@ -1,5 +1,6 @@ -import { CustomerGroupService } from "../../../../services" import { Request, Response } from "express" + +import { CustomerGroupService } from "../../../../services" import { EntityManager } from "typeorm" /** @@ -9,9 +10,9 @@ import { EntityManager } from "typeorm" * description: "Deletes a CustomerGroup." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Customer Group + * - (path) id=* {string} The ID of the Customer Group * tags: - * - CustomerGroup + * - Customer Group * responses: * 200: * description: OK @@ -21,12 +22,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted customer group. + * description: The ID of the deleted customer group. * object: * type: string * description: The type of the object that was deleted. + * default: customer_group * deleted: * type: boolean + * description: Whether the customer group was deleted successfully or not. + * default: true */ export default async (req: Request, res: Response) => { diff --git a/packages/medusa/src/api/routes/admin/customer-groups/delete-customers-batch.ts b/packages/medusa/src/api/routes/admin/customer-groups/delete-customers-batch.ts index 658518bb78..edfcf63327 100644 --- a/packages/medusa/src/api/routes/admin/customer-groups/delete-customers-batch.ts +++ b/packages/medusa/src/api/routes/admin/customer-groups/delete-customers-batch.ts @@ -1,10 +1,11 @@ -import { Type } from "class-transformer" -import { ValidateNested } from "class-validator" +import { Request, Response } from "express" + import { CustomerGroupService } from "../../../../services" import { CustomerGroupsBatchCustomer } from "../../../../types/customer-groups" -import { validator } from "../../../../utils/validator" -import { Request, Response } from "express" import { EntityManager } from "typeorm" +import { Type } from "class-transformer" +import { ValidateNested } from "class-validator" +import { validator } from "../../../../utils/validator" /** * @oas [delete] /customer-groups/{id}/customers/batch @@ -13,10 +14,26 @@ import { EntityManager } from "typeorm" * description: "Removes a list of customers, represented by id's, from a customer group." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the customer group. - * - (body) customers=* {{id: string }[]} ids of the customers to remove + * - (path) id=* {string} The ID of the customer group. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - customer_ids + * properties: + * customer_ids: + * description: "The ids of the customers to remove" + * type: array + * items: + * required: + * - id + * properties: + * id: + * description: ID of the customer + * type: string * tags: - * - CustomerGroup + * - Customer Group * responses: * 200: * description: OK @@ -24,8 +41,8 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * customerGroup: - * $ref: "#/components/schemas/customergroup" + * customer_group: + * $ref: "#/components/schemas/customer_group" */ export default async (req: Request, res: Response) => { diff --git a/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group-customers.ts b/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group-customers.ts index 265a81f490..43ea70b869 100644 --- a/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group-customers.ts +++ b/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group-customers.ts @@ -1,14 +1,17 @@ -import CustomerController from "../../../../controllers/customers" import { Request, Response } from "express" +import CustomerController from "../../../../controllers/customers" + /** * @oas [get] /customer-groups/{id}/customers * operationId: "GetCustomerGroupsGroupCustomers" * summary: "List Customers" - * description: "Retrieves a list of Customers." + * description: "Retrieves a list of customers in a customer group" * x-authenticated: true + * parameters: + * - (path) id=* {string} The ID of the customer group. * tags: - * - Customer + * - Customer Group * responses: * 200: * description: OK @@ -16,8 +19,19 @@ import { Request, Response } from "express" * application/json: * schema: * properties: - * customer: - * $ref: "#/components/schemas/customer" + * customers: + * type: array + * items: + * $ref: "#/components/schemas/customer" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req: Request, res: Response) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group.ts b/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group.ts index 764b9b752b..ef355ad106 100644 --- a/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group.ts +++ b/packages/medusa/src/api/routes/admin/customer-groups/get-customer-group.ts @@ -1,6 +1,7 @@ +import { Request, Response } from "express" + import { CustomerGroupService } from "../../../../services" import { FindParams } from "../../../../types/common" -import { Request, Response } from "express" /** * @oas [get] /customer-groups/{id} @@ -9,9 +10,11 @@ import { Request, Response } from "express" * description: "Retrieves a Customer Group." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Customer Group. + * - (path) id=* {string} The ID of the Customer Group. + * - (query) expand {string} (Comma separated) Which fields should be expanded in the customer group. + * - (query) fields {string} (Comma separated) Which fields should be included in the customer group. * tags: - * - CustomerGroup + * - Customer Group * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/customer-groups/list-customer-groups.ts b/packages/medusa/src/api/routes/admin/customer-groups/list-customer-groups.ts index 130460524e..b0ce19e49e 100644 --- a/packages/medusa/src/api/routes/admin/customer-groups/list-customer-groups.ts +++ b/packages/medusa/src/api/routes/admin/customer-groups/list-customer-groups.ts @@ -1,8 +1,9 @@ -import { Type } from "class-transformer" import { IsNumber, IsOptional, IsString } from "class-validator" +import { Request, Response } from "express" + import { CustomerGroupService } from "../../../../services" import { FilterableCustomerGroupProps } from "../../../../types/customer-groups" -import { Request, Response } from "express" +import { Type } from "class-transformer" /** * @oas [get] /customer-groups @@ -11,18 +12,96 @@ import { Request, Response } from "express" * description: "Retrieve a list of customer groups." * x-authenticated: true * parameters: - * - (query) q {string} Query used for searching user group names. - * - (query) offset {string} How many groups to skip in the result. - * - (query) id {string} Ids of the groups to search for. - * - (query) order {string} to retrieve customer groups in. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting customer group was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting ustomer group was updated, i.e. less than, greater than etc. - * - (query) offset {string} How many customer groups to skip in the result. - * - (query) limit {string} Limit the number of customer groups returned. + * - (query) q {string} Query used for searching customer group names. + * - (query) offset=0 {integer} How many groups to skip in the result. + * - (query) order {string} the field used to order the customer groups. + * - in: query + * name: id + * style: form + * explode: false + * description: Filter by the customer group ID + * schema: + * oneOf: + * - type: string + * description: customer group ID + * - type: array + * description: multiple customer group IDs + * items: + * type: string + * - type: object + * properties: + * lt: + * type: string + * description: filter by IDs less than this ID + * gt: + * type: string + * description: filter by IDs greater than this ID + * lte: + * type: string + * description: filter by IDs less than or equal to this ID + * gte: + * type: string + * description: filter by IDs greater than or equal to this ID + * - in: query + * name: name + * style: form + * explode: false + * description: Filter by the customer group name + * schema: + * type: array + * description: multiple customer group names + * items: + * type: string + * description: customer group name + * - in: query + * name: created_at + * description: Date comparison for when resulting customer groups were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting customer groups were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - (query) limit=10 {integer} Limit the number of customer groups returned. * - (query) expand {string} (Comma separated) Which fields should be expanded in each customer groups of the result. * tags: - * - CustomerGroup + * - Customer Group * responses: * 200: * description: OK @@ -30,8 +109,19 @@ import { Request, Response } from "express" * application/json: * schema: * properties: - * customerGroup: - * $ref: "#/components/schemas/customer_group" + * customer_groups: + * type: array + * items: + * $ref: "#/components/schemas/customer_group" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req: Request, res: Response) => { const customerGroupService: CustomerGroupService = req.scope.resolve( diff --git a/packages/medusa/src/api/routes/admin/customer-groups/update-customer-group.ts b/packages/medusa/src/api/routes/admin/customer-groups/update-customer-group.ts index d985389be4..54313279ff 100644 --- a/packages/medusa/src/api/routes/admin/customer-groups/update-customer-group.ts +++ b/packages/medusa/src/api/routes/admin/customer-groups/update-customer-group.ts @@ -1,11 +1,11 @@ import { IsObject, IsOptional, IsString } from "class-validator" -import { defaultAdminCustomerGroupsRelations } from "." +import { Request, Response } from "express" import { CustomerGroupService } from "../../../../services" -import { FindParams } from "../../../../types/common" -import { validator } from "../../../../utils/validator" -import { Request, Response } from "express" import { EntityManager } from "typeorm" +import { FindParams } from "../../../../types/common" +import { defaultAdminCustomerGroupsRelations } from "." +import { validator } from "../../../../utils/validator" /** * @oas [post] /customer-groups/{id} @@ -14,11 +14,20 @@ import { EntityManager } from "typeorm" * description: "Update a CustomerGroup." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the customer group. - * - (body) name=* {string} Name of the customer group - * - (body) metadata {object} Metadata for the customer. + * - (path) id=* {string} The ID of the customer group. + * requestBody: + * content: + * application/json: + * schema: + * properties: + * name: + * description: "Name of the customer group" + * type: string + * metadata: + * description: "Metadata for the customer." + * type: object * tags: - * - CustomerGroup + * - Customer Group * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/customers/create-customer.ts b/packages/medusa/src/api/routes/admin/customers/create-customer.ts index 3ffe0d8adf..e26d2a6117 100644 --- a/packages/medusa/src/api/routes/admin/customers/create-customer.ts +++ b/packages/medusa/src/api/routes/admin/customers/create-customer.ts @@ -1,4 +1,5 @@ import { IsEmail, IsObject, IsOptional, IsString } from "class-validator" + import { CustomerService } from "../../../../services" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -9,16 +10,40 @@ import { EntityManager } from "typeorm" * summary: "Create a Customer" * description: "Creates a Customer." * x-authenticated: true - * parameters: - * - (body) email=* {string} The Customer's email address. - * - (body) first_name=* {string} The Customer's first name. - * - (body) last_name=* {string} The Customer's last name. - * - (body) phone {string} The Customer's phone number. - * - (body) metadata {object} Metadata for the customer. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - email + * - first_name + * - last_name + * - password + * properties: + * email: + * type: string + * description: The customer's email. + * format: email + * first_name: + * type: string + * description: The customer's first name. + * last_name: + * type: string + * description: The customer's last name. + * password: + * type: string + * description: The customer's password. + * format: password + * phone: + * type: string + * description: The customer's phone number. + * metadata: + * description: An optional set of key-value pairs to hold additional information. + * type: object * tags: * - Customer * responses: - * 200: + * 201: * description: OK * content: * application/json: diff --git a/packages/medusa/src/api/routes/admin/customers/get-customer.ts b/packages/medusa/src/api/routes/admin/customers/get-customer.ts index fe6eb0c085..d388b1a884 100644 --- a/packages/medusa/src/api/routes/admin/customers/get-customer.ts +++ b/packages/medusa/src/api/routes/admin/customers/get-customer.ts @@ -1,6 +1,6 @@ -import { defaultAdminCustomersRelations } from "." import CustomerService from "../../../../services/customer" import { FindParams } from "../../../../types/common" +import { defaultAdminCustomersRelations } from "." import { validator } from "../../../../utils/validator" /** @@ -10,7 +10,9 @@ import { validator } from "../../../../utils/validator" * description: "Retrieves a Customer." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Customer. + * - (path) id=* {string} The ID of the Customer. + * - (query) expand {string} (Comma separated) Which fields should be expanded in the customer. + * - (query) fields {string} (Comma separated) Which fields should be included in the customer. * tags: * - Customer * responses: diff --git a/packages/medusa/src/api/routes/admin/customers/list-customers.ts b/packages/medusa/src/api/routes/admin/customers/list-customers.ts index 663912d7f0..896b6a1932 100644 --- a/packages/medusa/src/api/routes/admin/customers/list-customers.ts +++ b/packages/medusa/src/api/routes/admin/customers/list-customers.ts @@ -1,13 +1,21 @@ -import { Type } from "class-transformer" import { IsNumber, IsOptional, IsString } from "class-validator" -import customerController from "../../../../controllers/customers" + import { AdminListCustomerSelector } from "../../../../types/customers" +import { Type } from "class-transformer" +import customerController from "../../../../controllers/customers" + /** * @oas [get] /customers * operationId: "GetCustomers" * summary: "List Customers" * description: "Retrieves a list of Customers." * x-authenticated: true + * parameters: + * - (query) limit=50 {integer} The number of items to return. + * - (query) offset=0 {integer} The items to skip before result. + * - (query) expand {string} (Comma separated) Which fields should be expanded in each customer. + * - (query) q {string} a search term to search email, first_name, and last_name. + * - (query) groups[] {string} group IDs to search customers by. * tags: * - Customer * responses: @@ -17,8 +25,19 @@ import { AdminListCustomerSelector } from "../../../../types/customers" * application/json: * schema: * properties: - * customer: - * $ref: "#/components/schemas/customer" + * customers: + * type: array + * items: + * $ref: "#/components/schemas/customer" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const result = await customerController.listAndCount( diff --git a/packages/medusa/src/api/routes/admin/customers/update-customer.ts b/packages/medusa/src/api/routes/admin/customers/update-customer.ts index 369fec61c8..975d6e93f2 100644 --- a/packages/medusa/src/api/routes/admin/customers/update-customer.ts +++ b/packages/medusa/src/api/routes/admin/customers/update-customer.ts @@ -6,13 +6,14 @@ import { IsString, ValidateNested, } from "class-validator" -import { MedusaError } from "medusa-core-utils" + import CustomerService from "../../../../services/customer" -import { validator } from "../../../../utils/validator" -import { defaultAdminCustomersRelations } from "." -import { Type } from "class-transformer" -import { FindParams } from "../../../../types/common" import { EntityManager } from "typeorm" +import { FindParams } from "../../../../types/common" +import { MedusaError } from "medusa-core-utils" +import { Type } from "class-transformer" +import { defaultAdminCustomersRelations } from "." +import { validator } from "../../../../utils/validator" /** * @oas [post] /customers/{id} @@ -21,7 +22,9 @@ import { EntityManager } from "typeorm" * description: "Updates a Customer." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Customer. + * - (path) id=* {string} The ID of the Customer. + * - (query) expand {string} (Comma separated) Which fields should be expanded in each customer. + * - (query) fields {string} (Comma separated) Which fields should be retrieved in each customer. * requestBody: * content: * application/json: @@ -29,7 +32,8 @@ import { EntityManager } from "typeorm" * properties: * email: * type: string - * description: The Customer's email. Only providable if user not registered. + * description: The Customer's email. + * format: email * first_name: * type: string * description: The Customer's first name. @@ -42,19 +46,20 @@ import { EntityManager } from "typeorm" * password: * type: string * description: The Customer's password. + * format: password * groups: * type: array - * description: A list of customer groups to which the customer belongs. * items: * required: * - id * properties: * id: - * description: The id of a customer group + * description: The ID of a customer group * type: string + * description: A list of customer groups to which the customer belongs. * metadata: + * description: An optional set of key-value pairs to hold additional information. * type: object - * description: Metadata for the customer. * tags: * - Customer * responses: diff --git a/packages/medusa/src/api/routes/admin/discounts/add-region.ts b/packages/medusa/src/api/routes/admin/discounts/add-region.ts index 0e89eba395..226f35e95e 100644 --- a/packages/medusa/src/api/routes/admin/discounts/add-region.ts +++ b/packages/medusa/src/api/routes/admin/discounts/add-region.ts @@ -1,7 +1,9 @@ import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." + import { Discount } from "../../../.." import DiscountService from "../../../../services/discount" import { EntityManager } from "typeorm" + /** * @oas [post] /discounts/{id}/regions/{region_id} * operationId: "PostDiscountsDiscountRegionsRegion" @@ -9,8 +11,8 @@ import { EntityManager } from "typeorm" * description: "Adds a Region to the list of Regions that a Discount can be used in." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Discount. - * - (path) region_id=* {string} The id of the Region. + * - (path) id=* {string} The ID of the Discount. + * - (path) region_id=* {string} The ID of the Region. * tags: * - Discount * responses: diff --git a/packages/medusa/src/api/routes/admin/discounts/create-condition.ts b/packages/medusa/src/api/routes/admin/discounts/create-condition.ts index 7ca4018c16..f906e47882 100644 --- a/packages/medusa/src/api/routes/admin/discounts/create-condition.ts +++ b/packages/medusa/src/api/routes/admin/discounts/create-condition.ts @@ -1,19 +1,21 @@ +import { Discount, DiscountConditionOperator } from "../../../../models" import { IsOptional, IsString } from "class-validator" import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." -import { Discount, DiscountConditionOperator } from "../../../../models" -import { DiscountService } from "../../../../services" -import DiscountConditionService from "../../../../services/discount-condition" + import { AdminUpsertConditionsReq } from "../../../../types/discount" +import DiscountConditionService from "../../../../services/discount-condition" +import { DiscountService } from "../../../../services" +import { EntityManager } from "typeorm" import { getRetrieveConfig } from "../../../../utils/get-query-config" import { validator } from "../../../../utils/validator" -import { EntityManager } from "typeorm" + /** * @oas [post] /discounts/{discount_id}/conditions * operationId: "PostDiscountsDiscountConditions" - * summary: "Creates a DiscountCondition" + * summary: "Creates a DiscountCondition. Only one of `products`, `product_types`, `product_collections`, `product_tags`, and `customer_groups` should be provided." * x-authenticated: true * parameters: - * - (path) discount_id=* {string} The id of the Product. + * - (path) discount_id=* {string} The ID of the Product. * - (query) expand {string} (Comma separated) Which fields should be expanded in each product of the result. * - (query) fields {string} (Comma separated) Which fields should be included in each product of the result. * description: "Creates a DiscountCondition" @@ -21,29 +23,41 @@ import { EntityManager } from "typeorm" * content: * application/json: * schema: + * required: + * - operator * properties: * operator: * description: Operator of the condition * type: string - * items: - * properties: - * products: - * type: array - * description: list of products - * product_types: - * type: array - * description: list of product types - * product_collections: - * type: array - * description: list of product collections - * product_tags: - * type: array - * description: list of product tags - * customer_groups: - * type: array - * description: list of customer_groups + * enum: [in, not_in] + * products: + * type: array + * description: list of product IDs if the condition is applied on products. + * items: + * type: string + * product_types: + * type: array + * description: list of product type IDs if the condition is applied on product types. + * items: + * type: string + * product_collections: + * type: array + * description: list of product collection IDs if the condition is applied on product collections. + * items: + * type: string + * product_tags: + * type: array + * description: list of product tag IDs if the condition is applied on product tags. + * items: + * type: string + * customer_groups: + * type: array + * description: list of customer group IDs if the condition is applied on customer groups. + * items: + * type: string + * tags: - * - Discount + * - Discount Condition * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/discounts/create-discount.ts b/packages/medusa/src/api/routes/admin/discounts/create-discount.ts index dc37984ff2..bbf84f8305 100644 --- a/packages/medusa/src/api/routes/admin/discounts/create-discount.ts +++ b/packages/medusa/src/api/routes/admin/discounts/create-discount.ts @@ -1,4 +1,9 @@ -import { Type } from "class-transformer" +import { + AllocationType, + Discount, + DiscountConditionOperator, + DiscountRuleType, +} from "../../../../models" import { IsArray, IsBoolean, @@ -13,47 +18,104 @@ import { ValidateNested, } from "class-validator" import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." -import { - AllocationType, - DiscountRuleType, - Discount, - DiscountConditionOperator, -} from "../../../../models" -import DiscountService from "../../../../services/discount" + +import { AdminPostDiscountsDiscountParams } from "./update-discount" import { AdminUpsertConditionsReq } from "../../../../types/discount" -import { getRetrieveConfig } from "../../../../utils/get-query-config" -import { validator } from "../../../../utils/validator" +import DiscountService from "../../../../services/discount" +import { EntityManager } from "typeorm" import { IsGreaterThan } from "../../../../utils/validators/greater-than" import { IsISO8601Duration } from "../../../../utils/validators/iso8601-duration" -import { AdminPostDiscountsDiscountParams } from "./update-discount" -import { EntityManager } from "typeorm" +import { Type } from "class-transformer" +import { getRetrieveConfig } from "../../../../utils/get-query-config" +import { validator } from "../../../../utils/validator" + /** * @oas [post] /discounts * operationId: "PostDiscounts" * summary: "Creates a Discount" * x-authenticated: true * description: "Creates a Discount with a given set of rules that define how the Discount behaves." + * parameters: + * - (query) expand {string} (Comma separated) Which fields should be expanded in each customer. + * - (query) fields {string} (Comma separated) Which fields should be retrieved in each customer. * requestBody: * content: * application/json: - * required: - * - code - * - rule * schema: + * required: + * - code + * - rule * properties: * code: * type: string * description: A unique code that will be used to redeem the Discount * is_dynamic: - * type: string + * type: boolean * description: Whether the Discount should have multiple instances of itself, each with a different code. This can be useful for automatically generated codes that all have to follow a common set of rules. + * default: false * rule: * description: The Discount Rule that defines how Discounts are calculated - * oneOf: - * - $ref: "#/components/schemas/discount_rule" + * type: object + * required: + * - type + * - value + * - allocation + * properties: + * description: + * type: string + * description: "A short description of the discount" + * type: + * type: string + * description: "The type of the Discount, can be `fixed` for discounts that reduce the price by a fixed amount, `percentage` for percentage reductions or `free_shipping` for shipping vouchers." + * enum: [fixed, percentage, free_shipping] + * value: + * type: number + * description: "The value that the discount represents; this will depend on the type of the discount" + * allocation: + * type: string + * description: "The scope that the discount should apply to." + * enum: [total, item] + * conditions: + * type: array + * description: "A set of conditions that can be used to limit when the discount can be used. Only one of `products`, `product_types`, `product_collections`, `product_tags`, and `customer_groups` should be provided." + * items: + * type: object + * required: + * - operator + * properties: + * operator: + * type: string + * description: Operator of the condition + * enum: [in, not_in] + * products: + * type: array + * description: list of product IDs if the condition is applied on products. + * items: + * type: string + * product_types: + * type: array + * description: list of product type IDs if the condition is applied on product types. + * items: + * type: string + * product_collections: + * type: array + * description: list of product collection IDs if the condition is applied on product collections. + * items: + * type: string + * product_tags: + * type: array + * description: list of product tag IDs if the condition is applied on product tags. + * items: + * type: string + * customer_groups: + * type: array + * description: list of customer group IDs if the condition is applied on customer groups. + * items: + * type: string * is_disabled: * type: boolean * description: Whether the Discount code is disabled on creation. You will have to enable it later to make it available to Customers. + * default: false * starts_at: * type: string * format: date-time @@ -62,6 +124,10 @@ import { EntityManager } from "typeorm" * type: string * format: date-time * description: The time at which the Discount should no longer be available. + * valid_duration: + * type: string + * description: Duration the discount runs between + * example: P3Y6M4DT12H30M5S * regions: * description: A list of Region ids representing the Regions in which the Discount can be used. * type: array diff --git a/packages/medusa/src/api/routes/admin/discounts/create-dynamic-code.ts b/packages/medusa/src/api/routes/admin/discounts/create-dynamic-code.ts index 042b0df4b0..5dabee0b00 100644 --- a/packages/medusa/src/api/routes/admin/discounts/create-dynamic-code.ts +++ b/packages/medusa/src/api/routes/admin/discounts/create-dynamic-code.ts @@ -6,9 +6,11 @@ import { IsString, } from "class-validator" import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." + import DiscountService from "../../../../services/discount" -import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" +import { validator } from "../../../../utils/validator" + /** * @oas [post] /discounts/{id}/dynamic-codes * operationId: "PostDiscountsDiscountDynamicCodes" @@ -16,9 +18,9 @@ import { EntityManager } from "typeorm" * description: "Creates a unique code that can map to a parent Discount. This is useful if you want to automatically generate codes with the same behaviour." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Discount to create the dynamic code from." + * - (path) id=* {string} The ID of the Discount to create the dynamic code from." * - (body) code=* {string} The unique code that will be used to redeem the Discount. - * - (body) usage_limit=* {number} amount of times the discount can be applied + * - (body) usage_limit=1 {number} amount of times the discount can be applied. * - (body) metadata {object} An optional set of key-value paris to hold additional information. * tags: * - Discount diff --git a/packages/medusa/src/api/routes/admin/discounts/delete-condition.ts b/packages/medusa/src/api/routes/admin/discounts/delete-condition.ts index 34e92e03cd..bc0a119dd4 100644 --- a/packages/medusa/src/api/routes/admin/discounts/delete-condition.ts +++ b/packages/medusa/src/api/routes/admin/discounts/delete-condition.ts @@ -1,12 +1,13 @@ import { IsOptional, IsString } from "class-validator" -import { MedusaError } from "medusa-core-utils" import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." + import { Discount } from "../../../../models" -import { DiscountService } from "../../../../services" import DiscountConditionService from "../../../../services/discount-condition" +import { DiscountService } from "../../../../services" +import { EntityManager } from "typeorm" +import { MedusaError } from "medusa-core-utils" import { getRetrieveConfig } from "../../../../utils/get-query-config" import { validator } from "../../../../utils/validator" -import { EntityManager } from "typeorm" /** * @oas [delete] /discounts/{discount_id}/conditions/{condition_id} @@ -15,10 +16,12 @@ import { EntityManager } from "typeorm" * description: "Deletes a DiscountCondition" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Discount - * - (path) condition_id=* {string} The id of the DiscountCondition + * - (path) discount_id=* {string} The ID of the Discount + * - (path) condition_id=* {string} The ID of the DiscountCondition + * - (query) expand {string} Comma separated list of relations to include in the results. + * - (query) fields {string} Comma separated list of fields to include in the results. * tags: - * - Discount + * - Discount Condition * responses: * 200: * description: OK @@ -28,15 +31,18 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted DiscountCondition + * description: The ID of the deleted DiscountCondition * object: * type: string * description: The type of the object that was deleted. + * default: discount-condition * deleted: * type: boolean + * description: Whether the discount condition was deleted successfully or not. + * default: true * discount: - * type: object * description: The Discount to which the condition used to belong + * $ref: "#/components/schemas/discount" */ export default async (req, res) => { const { discount_id, condition_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/discounts/delete-discount.ts b/packages/medusa/src/api/routes/admin/discounts/delete-discount.ts index c3fd605d4e..04100d530b 100644 --- a/packages/medusa/src/api/routes/admin/discounts/delete-discount.ts +++ b/packages/medusa/src/api/routes/admin/discounts/delete-discount.ts @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Deletes a Discount." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Discount + * - (path) id=* {string} The ID of the Discount * tags: * - Discount * responses: @@ -20,12 +20,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Discount + * description: The ID of the deleted Discount * object: * type: string * description: The type of the object that was deleted. + * default: discount * deleted: * type: boolean + * description: Whether the discount was deleted successfully or not. + * default: true */ export default async (req, res) => { const { discount_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/discounts/delete-dynamic-code.ts b/packages/medusa/src/api/routes/admin/discounts/delete-dynamic-code.ts index 1f0ecc8ce4..8e4b62e7b6 100644 --- a/packages/medusa/src/api/routes/admin/discounts/delete-dynamic-code.ts +++ b/packages/medusa/src/api/routes/admin/discounts/delete-dynamic-code.ts @@ -1,4 +1,5 @@ import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." + import DiscountService from "../../../../services/discount" import { EntityManager } from "typeorm" @@ -9,8 +10,8 @@ import { EntityManager } from "typeorm" * description: "Deletes a dynamic code from a Discount." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Discount - * - (path) code=* {string} The id of the Discount + * - (path) id=* {string} The ID of the Discount + * - (path) code=* {string} The ID of the Discount * tags: * - Discount * responses: diff --git a/packages/medusa/src/api/routes/admin/discounts/get-condition.ts b/packages/medusa/src/api/routes/admin/discounts/get-condition.ts index 3946da6abb..687a42bcea 100644 --- a/packages/medusa/src/api/routes/admin/discounts/get-condition.ts +++ b/packages/medusa/src/api/routes/admin/discounts/get-condition.ts @@ -1,29 +1,30 @@ import { IsOptional, IsString } from "class-validator" -import { MedusaError } from "medusa-core-utils" import { defaultAdminDiscountConditionFields, defaultAdminDiscountConditionRelations, } from "." + import { DiscountCondition } from "../../../../models" -import { DiscountService } from "../../../../services" import DiscountConditionService from "../../../../services/discount-condition" +import { DiscountService } from "../../../../services" +import { MedusaError } from "medusa-core-utils" import { getRetrieveConfig } from "../../../../utils/get-query-config" import { validator } from "../../../../utils/validator" + /** * @oas [get] /discounts/{discount_id}/conditions/{condition_id} * operationId: "GetDiscountsDiscountConditionsCondition" * summary: "Gets a DiscountCondition" * x-authenticated: true * parameters: - * - (path) discount_id=* {string} The id of the Discount. - * - (path) condition_id=* {string} The id of the DiscountCondition. - * query: - * - (query) expand {string} Comma separated list of relations to include in the results. - * - (query) fields {string} Comma separated list of fields to include in the results. + * - (path) discount_id=* {string} The ID of the Discount. + * - (path) condition_id=* {string} The ID of the DiscountCondition. + * - (query) expand {string} Comma separated list of relations to include in the results. + * - (query) fields {string} Comma separated list of fields to include in the results. * description: "Gets a DiscountCondition" * tags: - * - DiscountCondition + * - Discount Condition * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/discounts/get-discount-by-code.ts b/packages/medusa/src/api/routes/admin/discounts/get-discount-by-code.ts index 98a9894077..160479a6c9 100644 --- a/packages/medusa/src/api/routes/admin/discounts/get-discount-by-code.ts +++ b/packages/medusa/src/api/routes/admin/discounts/get-discount-by-code.ts @@ -1,5 +1,6 @@ import { IsOptional, IsString } from "class-validator" import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." + import { Discount } from "../../../../models" import DiscountService from "../../../../services/discount" import { getRetrieveConfig } from "../../../../utils/get-query-config" @@ -12,6 +13,8 @@ import { validator } from "../../../../utils/validator" * x-authenticated: true * parameters: * - (path) code=* {string} The code of the Discount + * - (query) expand {string} Comma separated list of relations to include in the results. + * - (query) fields {string} Comma separated list of fields to include in the results. * tags: * - Discount * responses: diff --git a/packages/medusa/src/api/routes/admin/discounts/get-discount.ts b/packages/medusa/src/api/routes/admin/discounts/get-discount.ts index 2bcca52cb6..a410999366 100644 --- a/packages/medusa/src/api/routes/admin/discounts/get-discount.ts +++ b/packages/medusa/src/api/routes/admin/discounts/get-discount.ts @@ -1,5 +1,6 @@ import { IsOptional, IsString } from "class-validator" import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." + import { Discount } from "../../../.." import DiscountService from "../../../../services/discount" import { getRetrieveConfig } from "../../../../utils/get-query-config" @@ -11,10 +12,9 @@ import { validator } from "../../../../utils/validator" * description: "Retrieves a Discount" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Discount - * query: - * - (query) expand {string} Comma separated list of relations to include in the results. - * - (query) fields {string} Comma separated list of fields to include in the results. + * - (path) id=* {string} The ID of the Discount + * - (query) expand {string} Comma separated list of relations to include in the results. + * - (query) fields {string} Comma separated list of fields to include in the results. * tags: * - Discount * responses: diff --git a/packages/medusa/src/api/routes/admin/discounts/list-discounts.ts b/packages/medusa/src/api/routes/admin/discounts/list-discounts.ts index 3c46eb8fc9..9fc7a351ce 100644 --- a/packages/medusa/src/api/routes/admin/discounts/list-discounts.ts +++ b/packages/medusa/src/api/routes/admin/discounts/list-discounts.ts @@ -1,4 +1,3 @@ -import { Transform, Type } from "class-transformer" import { IsBoolean, IsInt, @@ -6,13 +5,16 @@ import { IsString, ValidateNested, } from "class-validator" +import { Transform, Type } from "class-transformer" import _, { pickBy } from "lodash" import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." + +import { AdminGetDiscountsDiscountRuleParams } from "../../../../types/discount" import { Discount } from "../../../.." import DiscountService from "../../../../services/discount" import { FindConfig } from "../../../../types/common" -import { AdminGetDiscountsDiscountRuleParams } from "../../../../types/discount" import { validator } from "../../../../utils/validator" + /** * @oas [get] /discounts * operationId: "GetDiscounts" @@ -20,11 +22,25 @@ import { validator } from "../../../../utils/validator" * x-authenticated: true * description: "Retrieves a list of Discounts" * parameters: - * - (query) q {string} Search query applied on results. + * - (query) q {string} Search query applied on the code field. + * - in: query + * name: rule + * description: Discount Rules filters to apply on the search + * schema: + * type: object + * properties: + * type: + * type: string + * enum: [fixed, percentage, free_shipping] + * description: "The type of the Discount, can be `fixed` for discounts that reduce the price by a fixed amount, `percentage` for percentage reductions or `free_shipping` for shipping vouchers." + * allocation: + * type: string + * enum: [total, item] + * description: "The value that the discount represents; this will depend on the type of the discount" * - (query) is_dynamic {boolean} Return only dynamic discounts. * - (query) is_disabled {boolean} Return only disabled discounts. - * - (query) limit {number} The number of items in the response - * - (query) offset {number} The offset of items in response + * - (query) limit=20 {number} The number of items in the response + * - (query) offset=0 {number} The offset of items in response * - (query) expand {string} Comma separated list of relations to include in the results. * tags: * - Discount @@ -35,8 +51,19 @@ import { validator } from "../../../../utils/validator" * application/json: * schema: * properties: - * discount: - * $ref: "#/components/schemas/discount" + * discounts: + * type: array + * items: + * $ref: "#/components/schemas/discount" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const validated = await validator(AdminGetDiscountsParams, req.query) diff --git a/packages/medusa/src/api/routes/admin/discounts/remove-region.ts b/packages/medusa/src/api/routes/admin/discounts/remove-region.ts index a4baaea2de..a273fdc1c2 100644 --- a/packages/medusa/src/api/routes/admin/discounts/remove-region.ts +++ b/packages/medusa/src/api/routes/admin/discounts/remove-region.ts @@ -1,6 +1,8 @@ -import DiscountService from "../../../../services/discount" import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." + +import DiscountService from "../../../../services/discount" import { EntityManager } from "typeorm" + /** * @oas [delete] /discounts/{id}/regions/{region_id} * operationId: "DeleteDiscountsDiscountRegionsRegion" @@ -8,8 +10,8 @@ import { EntityManager } from "typeorm" * x-authenticated: true * description: "Removes a Region from the list of Regions that a Discount can be used in." * parameters: - * - (path) id=* {string} The id of the Discount. - * - (path) region_id=* {string} The id of the Region. + * - (path) id=* {string} The ID of the Discount. + * - (path) region_id=* {string} The ID of the Region. * tags: * - Discount * responses: diff --git a/packages/medusa/src/api/routes/admin/discounts/update-condition.ts b/packages/medusa/src/api/routes/admin/discounts/update-condition.ts index 5b1c88851b..9b8d218e57 100644 --- a/packages/medusa/src/api/routes/admin/discounts/update-condition.ts +++ b/packages/medusa/src/api/routes/admin/discounts/update-condition.ts @@ -1,46 +1,55 @@ import { IsOptional, IsString } from "class-validator" import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." -import { Discount } from "../../../../models" -import { DiscountService } from "../../../../services" -import DiscountConditionService from "../../../../services/discount-condition" + import { AdminUpsertConditionsReq } from "../../../../types/discount" +import { Discount } from "../../../../models" +import DiscountConditionService from "../../../../services/discount-condition" +import { DiscountService } from "../../../../services" +import { EntityManager } from "typeorm" import { getRetrieveConfig } from "../../../../utils/get-query-config" import { validator } from "../../../../utils/validator" -import { EntityManager } from "typeorm" + /** * @oas [post] /discounts/{discount_id}/conditions/{condition_id} * operationId: "PostDiscountsDiscountConditionsCondition" - * summary: "Updates a DiscountCondition" + * summary: "Updates a DiscountCondition. Only one of `products`, `product_types`, `product_collections`, `product_tags`, and `customer_groups` should be provided." * x-authenticated: true * parameters: - * - (path) discount_id=* {string} The id of the Product. - * - (query) expand {string} (Comma separated) Which fields should be expanded in each product of the result. - * - (query) fields {string} (Comma separated) Which fields should be included in each product of the result. + * - (path) discount_id=* {string} The ID of the Product. + * - (path) condition_id=* {string} The ID of the DiscountCondition. + * - (query) expand {string} (Comma separated) Which fields should be expanded in each item of the result. + * - (query) fields {string} (Comma separated) Which fields should be included in each item of the result. * description: "Updates a DiscountCondition" * requestBody: * content: * application/json: - * required: - * - id * schema: * properties: - * items: - * properties: - * products: - * type: array - * description: list of products - * product_types: - * type: array - * description: list of product types - * product_collections: - * type: array - * description: list of product collections - * product_tags: - * type: array - * description: list of product tags - * customer_groups: - * type: array - * description: list of customer_groups + * products: + * type: array + * description: list of product IDs if the condition is applied on products. + * items: + * type: string + * product_types: + * type: array + * description: list of product type IDs if the condition is applied on product types. + * items: + * type: string + * product_collections: + * type: array + * description: list of product collection IDs if the condition is applied on product collections. + * items: + * type: string + * product_tags: + * type: array + * description: list of product tag IDs if the condition is applied on product tags. + * items: + * type: string + * customer_groups: + * type: array + * description: list of customer group IDs if the condition is applied on customer groups. + * items: + * type: string * tags: * - Discount * responses: diff --git a/packages/medusa/src/api/routes/admin/discounts/update-discount.ts b/packages/medusa/src/api/routes/admin/discounts/update-discount.ts index 97a0b01caa..3d465e4f75 100644 --- a/packages/medusa/src/api/routes/admin/discounts/update-discount.ts +++ b/packages/medusa/src/api/routes/admin/discounts/update-discount.ts @@ -1,4 +1,4 @@ -import { Type } from "class-transformer" +import { Discount, DiscountConditionOperator } from "../../../../models" import { IsArray, IsBoolean, @@ -13,15 +13,16 @@ import { ValidateNested, } from "class-validator" import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." -import { AllocationType } from "../../../../models" -import { Discount, DiscountConditionOperator } from "../../../../models" -import DiscountService from "../../../../services/discount" + import { AdminUpsertConditionsReq } from "../../../../types/discount" -import { getRetrieveConfig } from "../../../../utils/get-query-config" -import { validator } from "../../../../utils/validator" +import { AllocationType } from "../../../../models" +import DiscountService from "../../../../services/discount" +import { EntityManager } from "typeorm" import { IsGreaterThan } from "../../../../utils/validators/greater-than" import { IsISO8601Duration } from "../../../../utils/validators/iso8601-duration" -import { EntityManager } from "typeorm" +import { Type } from "class-transformer" +import { getRetrieveConfig } from "../../../../utils/get-query-config" +import { validator } from "../../../../utils/validator" /** * @oas [post] /discounts/{id} @@ -30,7 +31,9 @@ import { EntityManager } from "typeorm" * description: "Updates a Discount with a given set of rules that define how the Discount behaves." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Discount. + * - (path) id=* {string} The ID of the Discount. + * - (query) expand {string} (Comma separated) Which fields should be expanded in each item of the result. + * - (query) fields {string} (Comma separated) Which fields should be included in each item of the result. * requestBody: * content: * application/json: @@ -41,23 +44,87 @@ import { EntityManager } from "typeorm" * description: A unique code that will be used to redeem the Discount * rule: * description: The Discount Rule that defines how Discounts are calculated - * oneOf: - * - $ref: "#/components/schemas/discount_rule" + * type: object + * required: + * - id + * properties: + * id: + * type: string + * description: "The ID of the Rule" + * description: + * type: string + * description: "A short description of the discount" + * value: + * type: number + * description: "The value that the discount represents; this will depend on the type of the discount" + * allocation: + * type: string + * description: "The scope that the discount should apply to." + * enum: [total, item] + * conditions: + * type: array + * description: "A set of conditions that can be used to limit when the discount can be used. Only one of `products`, `product_types`, `product_collections`, `product_tags`, and `customer_groups` should be provided." + * items: + * type: object + * required: + * - operator + * properties: + * id: + * type: string + * description: "The ID of the Rule" + * operator: + * type: string + * description: Operator of the condition + * enum: [in, not_in] + * products: + * type: array + * description: list of product IDs if the condition is applied on products. + * items: + * type: string + * product_types: + * type: array + * description: list of product type IDs if the condition is applied on product types. + * items: + * type: string + * product_collections: + * type: array + * description: list of product collection IDs if the condition is applied on product collections. + * items: + * type: string + * product_tags: + * type: array + * description: list of product tag IDs if the condition is applied on product tags. + * items: + * type: string + * customer_groups: + * type: array + * description: list of customer group IDs if the condition is applied on customer groups. + * items: + * type: string * is_disabled: * type: boolean * description: Whether the Discount code is disabled on creation. You will have to enable it later to make it available to Customers. * starts_at: - * type: Date + * type: string + * format: date-time * description: The time at which the Discount should be available. * ends_at: - * type: Date + * type: string + * format: date-time * description: The time at which the Discount should no longer be available. + * valid_duration: + * type: string + * description: Duration the discount runs between + * example: P3Y6M4DT12H30M5S + * usage_limit: + * type: number + * description: Maximum times the discount can be used * regions: * description: A list of Region ids representing the Regions in which the Discount can be used. * type: array * items: * type: string - * metadata: + * metadata: * description: An object containing metadata of the discount * type: object * tags: diff --git a/packages/medusa/src/api/routes/admin/draft-orders/create-draft-order.ts b/packages/medusa/src/api/routes/admin/draft-orders/create-draft-order.ts index d3efcea291..259850f190 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/create-draft-order.ts +++ b/packages/medusa/src/api/routes/admin/draft-orders/create-draft-order.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsBoolean, @@ -11,16 +10,19 @@ import { IsString, ValidateNested, } from "class-validator" -import { transformIdableFields } from "medusa-core-utils" import { defaultAdminDraftOrdersFields, defaultAdminDraftOrdersRelations, } from "." + +import { AddressPayload } from "../../../../types/common" import { DraftOrder } from "../../../.." import { DraftOrderService } from "../../../../services" -import { AddressPayload } from "../../../../types/common" -import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" +import { Type } from "class-transformer" +import { transformIdableFields } from "medusa-core-utils" +import { validator } from "../../../../utils/validator" + /** * @oas [post] /draft-orders * operationId: "PostDraftOrders" @@ -40,24 +42,27 @@ import { EntityManager } from "typeorm" * status: * description: "The status of the draft order" * type: string + * enum: [open, completed] * email: * description: "The email of the customer of the draft order" * type: string + * format: email * billing_address: * description: "The Address to be used for billing purposes." - * anyOf: - * - $ref: "#/components/schemas/address" + * $ref: "#/components/schemas/address" * shipping_address: * description: "The Address to be used for shipping." - * anyOf: - * - $ref: "#/components/schemas/address" + * $ref: "#/components/schemas/address" * items: * description: The Line Items that have been received. * type: array * items: + * type: object + * required: + * - quantity * properties: * variant_id: - * description: The id of the Product Variant to generate the Line Item from. + * description: The ID of the Product Variant to generate the Line Item from. * type: string * unit_price: * description: The potential custom price of the item. @@ -72,18 +77,21 @@ import { EntityManager } from "typeorm" * description: The optional key-value map with additional details about the Line Item. * type: object * region_id: - * description: The id of the region for the draft order + * description: The ID of the region for the draft order * type: string * discounts: * description: The discounts to add on the draft order * type: array * items: + * type: object + * required: + * - code * properties: * code: * description: The code of the discount to apply * type: string * customer_id: - * description: The id of the customer to add on the draft order + * description: The ID of the customer to add on the draft order * type: string * no_notification_order: * description: An optional flag passed to the resulting order to determine use of notifications. @@ -92,9 +100,12 @@ import { EntityManager } from "typeorm" * description: The shipping methods for the draft order * type: array * items: + * type: object + * required: + * - option_id * properties: * option_id: - * description: The id of the shipping option in use + * description: The ID of the shipping option in use * type: string * data: * description: The optional additional data needed for the shipping method diff --git a/packages/medusa/src/api/routes/admin/draft-orders/create-line-item.ts b/packages/medusa/src/api/routes/admin/draft-orders/create-line-item.ts index e4db2f3e35..e44168070d 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/create-line-item.ts +++ b/packages/medusa/src/api/routes/admin/draft-orders/create-line-item.ts @@ -1,3 +1,8 @@ +import { + CartService, + DraftOrderService, + LineItemService, +} from "../../../../services" import { IsBoolean, IsInt, @@ -5,35 +10,34 @@ import { IsOptional, IsString, } from "class-validator" -import { MedusaError } from "medusa-core-utils" -import { EntityManager } from "typeorm" import { defaultAdminDraftOrdersCartFields, defaultAdminDraftOrdersCartRelations, defaultAdminDraftOrdersFields, } from "." -import { - CartService, - DraftOrderService, - LineItemService, -} from "../../../../services" -import { validator } from "../../../../utils/validator" + +import { EntityManager } from "typeorm" import { FlagRouter } from "../../../../utils/flag-router" +import { MedusaError } from "medusa-core-utils" +import { validator } from "../../../../utils/validator" + /** * @oas [post] /draft-orders/{id}/line-items * operationId: "PostDraftOrdersDraftOrderLineItems" * summary: "Create a Line Item for Draft Order" * description: "Creates a Line Item for the Draft Order" * x-authenticated: true + * parameters: + * - (path) id=* {string} The ID of the Draft Order. * requestBody: * content: * application/json: - * required: - * - quantity * schema: + * required: + * - quantity * properties: * variant_id: - * description: The id of the Product Variant to generate the Line Item from. + * description: The ID of the Product Variant to generate the Line Item from. * type: string * unit_price: * description: The potential custom price of the item. @@ -41,6 +45,7 @@ import { FlagRouter } from "../../../../utils/flag-router" * title: * description: The potential custom title of the item. * type: string + * default: "Custom item" * quantity: * description: The quantity of the Line Item. * type: integer diff --git a/packages/medusa/src/api/routes/admin/draft-orders/delete-draft-order.ts b/packages/medusa/src/api/routes/admin/draft-orders/delete-draft-order.ts index 5a4f1e2290..bf5ec150e0 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/delete-draft-order.ts +++ b/packages/medusa/src/api/routes/admin/draft-orders/delete-draft-order.ts @@ -7,7 +7,7 @@ import { EntityManager } from "typeorm" * description: "Deletes a Draft Order" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Draft Order. + * - (path) id=* {string} The ID of the Draft Order. * tags: * - Draft Order * responses: @@ -19,12 +19,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Draft Order. + * description: The ID of the deleted Draft Order. * object: * type: string * description: The type of the object that was deleted. + * default: draft-order * deleted: * type: boolean + * description: Whether the draft order was deleted successfully or not. + * default: true */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/draft-orders/delete-line-item.ts b/packages/medusa/src/api/routes/admin/draft-orders/delete-line-item.ts index 1cddca5a27..fc5308fb22 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/delete-line-item.ts +++ b/packages/medusa/src/api/routes/admin/draft-orders/delete-line-item.ts @@ -1,12 +1,14 @@ -import { MedusaError } from "medusa-core-utils" -import { EntityManager } from "typeorm" +import { CartService, DraftOrderService } from "../../../../services" import { defaultAdminDraftOrdersCartFields, defaultAdminDraftOrdersCartRelations, defaultAdminDraftOrdersFields, } from "." + import { DraftOrder } from "../../../.." -import { CartService, DraftOrderService } from "../../../../services" +import { EntityManager } from "typeorm" +import { MedusaError } from "medusa-core-utils" + /** * @oas [delete] /draft-orders/{id}/line-items/{line_id} * operationId: DeleteDraftOrdersDraftOrderLineItemsItem @@ -14,8 +16,8 @@ import { CartService, DraftOrderService } from "../../../../services" * description: "Removes a Line Item from a Draft Order." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Draft Order. - * - (path) line_id=* {string} The id of the Draft Order. + * - (path) id=* {string} The ID of the Draft Order. + * - (path) line_id=* {string} The ID of the Draft Order. * tags: * - Draft Order * responses: diff --git a/packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.ts b/packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.ts index ab8667516d..279de073c2 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.ts +++ b/packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.ts @@ -1,11 +1,12 @@ -import { - defaultAdminDraftOrdersRelations, - defaultAdminDraftOrdersFields, - defaultAdminDraftOrdersCartRelations, - defaultAdminDraftOrdersCartFields, -} from "." -import { DraftOrder } from "../../../.." import { CartService, DraftOrderService } from "../../../../services" +import { + defaultAdminDraftOrdersCartFields, + defaultAdminDraftOrdersCartRelations, + defaultAdminDraftOrdersFields, + defaultAdminDraftOrdersRelations, +} from "." + +import { DraftOrder } from "../../../.." /** * @oas [get] /draft-orders/{id} @@ -14,7 +15,7 @@ import { CartService, DraftOrderService } from "../../../../services" * description: "Retrieves a Draft Order." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Draft Order. + * - (path) id=* {string} The ID of the Draft Order. * tags: * - Draft Order * responses: diff --git a/packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.ts b/packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.ts index 0981168086..9762118051 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.ts +++ b/packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.ts @@ -1,20 +1,26 @@ +import { IsNumber, IsOptional, IsString } from "class-validator" import { defaultAdminDraftOrdersFields, defaultAdminDraftOrdersRelations, } from "." -import { DraftOrderService } from "../../../../services" -import { IsNumber, IsOptional, IsString } from "class-validator" -import { validator } from "../../../../utils/validator" -import { Type } from "class-transformer" -import { DraftOrderListSelector } from "../../../../types/draft-orders" -import { FindConfig } from "../../../../types/common" + import { DraftOrder } from "../../../../models" +import { DraftOrderListSelector } from "../../../../types/draft-orders" +import { DraftOrderService } from "../../../../services" +import { FindConfig } from "../../../../types/common" +import { Type } from "class-transformer" +import { validator } from "../../../../utils/validator" + /** * @oas [get] /draft-orders * operationId: "GetDraftOrders" * summary: "List Draft Orders" * description: "Retrieves an list of Draft Orders" * x-authenticated: true + * parameters: + * - (query) offset=0 {number} The number of items to skip before the results. + * - (query) limit=50 {number} Limit the number of items returned. + * - (query) q {string} a search term to search emails in carts associated with draft orders and display IDs of draft orders * tags: * - Draft Order * responses: @@ -24,8 +30,19 @@ import { DraftOrder } from "../../../../models" * application/json: * schema: * properties: - * draft_order: - * $ref: "#/components/schemas/draft-order" + * draft_orders: + * type: array + * items: + * $ref: "#/components/schemas/draft-order" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { diff --git a/packages/medusa/src/api/routes/admin/draft-orders/register-payment.ts b/packages/medusa/src/api/routes/admin/draft-orders/register-payment.ts index 7f960f12d4..702af23ff1 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/register-payment.ts +++ b/packages/medusa/src/api/routes/admin/draft-orders/register-payment.ts @@ -1,4 +1,3 @@ -import { EntityManager } from "typeorm" import { CartService, DraftOrderService, @@ -10,8 +9,10 @@ import { defaultAdminOrdersRelations as defaultOrderRelations, } from "../orders/index" +import { EntityManager } from "typeorm" + /** - * @oas [post] /draft-orders/{id}/register-payment + * @oas [post] /draft-orders/{id}/pay * summary: "Registers a payment for a Draft Order" * operationId: "PostDraftOrdersDraftOrderRegisterPayment" * description: "Registers a payment for a Draft Order." @@ -27,7 +28,7 @@ import { * application/json: * schema: * properties: - * draft_order: + * order: * $ref: "#/components/schemas/draft-order" */ diff --git a/packages/medusa/src/api/routes/admin/draft-orders/update-draft-order.ts b/packages/medusa/src/api/routes/admin/draft-orders/update-draft-order.ts index 971e649fea..a80f826440 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/update-draft-order.ts +++ b/packages/medusa/src/api/routes/admin/draft-orders/update-draft-order.ts @@ -1,8 +1,4 @@ -import { MedusaError } from "medusa-core-utils" -import { - defaultAdminDraftOrdersCartFields, - defaultAdminDraftOrdersCartRelations, -} from "." +import { CartService, DraftOrderService } from "../../../../services" import { IsArray, IsBoolean, @@ -11,12 +7,17 @@ import { IsString, ValidateNested, } from "class-validator" -import { CartService, DraftOrderService } from "../../../../services" -import { Type } from "class-transformer" +import { + defaultAdminDraftOrdersCartFields, + defaultAdminDraftOrdersCartRelations, +} from "." + import { AddressPayload } from "../../../../types/common" -import { validator } from "../../../../utils/validator" -import { EntityManager } from "typeorm" import { DraftOrderStatus } from "../../../../models" +import { EntityManager } from "typeorm" +import { MedusaError } from "medusa-core-utils" +import { Type } from "class-transformer" +import { validator } from "../../../../utils/validator" /** * @oas [post] /admin/draft-orders/{id} @@ -25,7 +26,7 @@ import { DraftOrderStatus } from "../../../../models" * description: "Updates a Draft Order." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Draft Order. + * - (path) id=* {string} The ID of the Draft Order. * requestBody: * content: * application/json: @@ -33,22 +34,30 @@ import { DraftOrderStatus } from "../../../../models" * properties: * region_id: * type: string - * description: The id of the Region to create the Draft Order in. + * description: The ID of the Region to create the Draft Order in. + * country_code: + * type: string + * description: "The 2 character ISO code for the Country." + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + * description: See a list of codes. * email: * type: string * description: "An email to be used on the Draft Order." + * format: email * billing_address: * description: "The Address to be used for billing purposes." - * anyOf: - * - $ref: "#/components/schemas/address" + * $ref: "#/components/schemas/address" * shipping_address: * description: "The Address to be used for shipping." - * anyOf: - * - $ref: "#/components/schemas/address" + * $ref: "#/components/schemas/address" * discounts: * description: "An array of Discount codes to add to the Draft Order." * type: array * items: + * type: object + * required: + * - code * properties: * code: * description: "The code that a Discount is identifed by." @@ -57,7 +66,7 @@ import { DraftOrderStatus } from "../../../../models" * description: "An optional flag passed to the resulting order to determine use of notifications." * type: boolean * customer_id: - * description: "The id of the Customer to associate the Draft Order with." + * description: "The ID of the Customer to associate the Draft Order with." * type: string * tags: * - Draft Order diff --git a/packages/medusa/src/api/routes/admin/draft-orders/update-line-item.ts b/packages/medusa/src/api/routes/admin/draft-orders/update-line-item.ts index 9fa0e5f948..7ccb96cb62 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/update-line-item.ts +++ b/packages/medusa/src/api/routes/admin/draft-orders/update-line-item.ts @@ -1,21 +1,26 @@ +import { CartService, DraftOrderService } from "../../../../services" import { IsInt, IsObject, IsOptional, IsString } from "class-validator" -import { MedusaError } from "medusa-core-utils" -import { EntityManager } from "typeorm" import { defaultAdminDraftOrdersCartFields, defaultAdminDraftOrdersCartRelations, defaultAdminDraftOrdersFields, } from "." + import { DraftOrder } from "../../../.." +import { EntityManager } from "typeorm" import { LineItemUpdate } from "../../../../types/cart" -import { CartService, DraftOrderService } from "../../../../services" +import { MedusaError } from "medusa-core-utils" import { validator } from "../../../../utils/validator" + /** * @oas [post] /draft-orders/{id}/line-items/{line_id} * operationId: "PostDraftOrdersDraftOrderLineItemsItem" * summary: "Update a Line Item for a Draft Order" * description: "Updates a Line Item for a Draft Order" * x-authenticated: true + * parameters: + * - (path) id=* {string} The ID of the Draft Order. + * - (path) line_id=* {string} The ID of the Line Item. * requestBody: * content: * application/json: diff --git a/packages/medusa/src/api/routes/admin/gift-cards/create-gift-card.ts b/packages/medusa/src/api/routes/admin/gift-cards/create-gift-card.ts index 757f249368..bc3733357f 100644 --- a/packages/medusa/src/api/routes/admin/gift-cards/create-gift-card.ts +++ b/packages/medusa/src/api/routes/admin/gift-cards/create-gift-card.ts @@ -1,7 +1,8 @@ -import { Type } from "class-transformer" import { IsBoolean, IsDate, IsInt, IsOptional, IsString } from "class-validator" import { defaultAdminGiftCardFields, defaultAdminGiftCardRelations } from "." + import { GiftCardService } from "../../../../services" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -15,6 +16,8 @@ import { EntityManager } from "typeorm" * content: * application/json: * schema: + * required: + * - region_id * properties: * value: * type: integer @@ -27,10 +30,8 @@ import { EntityManager } from "typeorm" * format: date-time * description: The time at which the Gift Card should no longer be available. * region_id: - * description: The id of the Region in which the Gift Card can be used. - * type: array - * items: - * type: string + * description: The ID of the Region in which the Gift Card can be used. + * type: string * metadata: * description: An optional set of key-value pairs to hold additional information. * type: object diff --git a/packages/medusa/src/api/routes/admin/gift-cards/delete-gift-card.ts b/packages/medusa/src/api/routes/admin/gift-cards/delete-gift-card.ts index 8e76de76c1..9bd27d7582 100644 --- a/packages/medusa/src/api/routes/admin/gift-cards/delete-gift-card.ts +++ b/packages/medusa/src/api/routes/admin/gift-cards/delete-gift-card.ts @@ -7,7 +7,7 @@ import { EntityManager } from "typeorm" * description: "Deletes a Gift Card" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Gift Card to delete. + * - (path) id=* {string} The ID of the Gift Card to delete. * tags: * - Gift Card * responses: @@ -19,12 +19,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Gift Card + * description: The ID of the deleted Gift Card * object: * type: string * description: The type of the object that was deleted. + * default: gift-card * deleted: * type: boolean + * description: Whether the gift card was deleted successfully or not. + * default: true */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/gift-cards/get-gift-card.ts b/packages/medusa/src/api/routes/admin/gift-cards/get-gift-card.ts index 8cd2cc96c4..aed27a2b0d 100644 --- a/packages/medusa/src/api/routes/admin/gift-cards/get-gift-card.ts +++ b/packages/medusa/src/api/routes/admin/gift-cards/get-gift-card.ts @@ -7,7 +7,7 @@ import { defaultAdminGiftCardFields, defaultAdminGiftCardRelations } from "./" * description: "Retrieves a Gift Card." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Gift Card. + * - (path) id=* {string} The ID of the Gift Card. * tags: * - Gift Card * responses: diff --git a/packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.ts b/packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.ts index 9aa990cd56..897732cd82 100644 --- a/packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.ts +++ b/packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.ts @@ -1,7 +1,8 @@ -import { Type } from "class-transformer" import { IsInt, IsOptional, IsString } from "class-validator" -import { pickBy } from "lodash" + import { GiftCardService } from "../../../../services" +import { Type } from "class-transformer" +import { pickBy } from "lodash" import { validator } from "../../../../utils/validator" /** @@ -10,6 +11,10 @@ import { validator } from "../../../../utils/validator" * summary: "List Gift Cards" * description: "Retrieves a list of Gift Cards." * x-authenticated: true + * parameters: + * - (query) offset=0 {number} The number of items to skip before the results. + * - (query) limit=50 {number} Limit the number of items returned. + * - (query) q {string} a search term to search by code or display ID * tags: * - Gift Card * responses: @@ -23,6 +28,15 @@ import { validator } from "../../../../utils/validator" * type: array * items: * $ref: "#/components/schemas/gift_card" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const validated = await validator(AdminGetGiftCardsParams, req.query) diff --git a/packages/medusa/src/api/routes/admin/gift-cards/update-gift-card.ts b/packages/medusa/src/api/routes/admin/gift-cards/update-gift-card.ts index 2992ae785d..f702dca67f 100644 --- a/packages/medusa/src/api/routes/admin/gift-cards/update-gift-card.ts +++ b/packages/medusa/src/api/routes/admin/gift-cards/update-gift-card.ts @@ -1,7 +1,8 @@ -import { Type } from "class-transformer" import { IsBoolean, IsDate, IsInt, IsOptional, IsString } from "class-validator" import { defaultAdminGiftCardFields, defaultAdminGiftCardRelations } from "." + import { GiftCardService } from "../../../../services" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -12,7 +13,7 @@ import { EntityManager } from "typeorm" * description: "Creates a Gift Card that can redeemed by its unique code. The Gift Card is only valid within 1 region." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Gift Card. + * - (path) id=* {string} The ID of the Gift Card. * requestBody: * content: * application/json: @@ -29,10 +30,8 @@ import { EntityManager } from "typeorm" * format: date-time * description: The time at which the Gift Card should no longer be available. * region_id: - * description: The id of the Region in which the Gift Card can be used. - * type: array - * items: - * type: string + * description: The ID of the Region in which the Gift Card can be used. + * type: string * metadata: * description: An optional set of key-value pairs to hold additional information. * type: object diff --git a/packages/medusa/src/api/routes/admin/invites/accept-invite.ts b/packages/medusa/src/api/routes/admin/invites/accept-invite.ts index 8b39901fe4..6f21d6d3ed 100644 --- a/packages/medusa/src/api/routes/admin/invites/accept-invite.ts +++ b/packages/medusa/src/api/routes/admin/invites/accept-invite.ts @@ -1,6 +1,7 @@ -import { Type } from "class-transformer" import { IsNotEmpty, IsString, ValidateNested } from "class-validator" + import InviteService from "../../../../services/invite" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -37,8 +38,9 @@ import { EntityManager } from "typeorm" * password: * description: The desired password for the User * type: string + * format: password * tags: - * - Invites + * - Invite * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/invites/create-invite.ts b/packages/medusa/src/api/routes/admin/invites/create-invite.ts index 71d281005e..6343f4e293 100644 --- a/packages/medusa/src/api/routes/admin/invites/create-invite.ts +++ b/packages/medusa/src/api/routes/admin/invites/create-invite.ts @@ -1,6 +1,7 @@ import { IsEmail, IsEnum } from "class-validator" -import { UserRoles } from "../../../../models/user" + import InviteService from "../../../../services/invite" +import { UserRoles } from "../../../../models/user" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -21,11 +22,13 @@ import { EntityManager } from "typeorm" * user: * description: "The email for the user to be created." * type: string + * format: email * role: * description: "The role of the user to be created." * type: string + * enum: [admin, member, developer] * tags: - * - Invites + * - Invite * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/invites/delete-invite.ts b/packages/medusa/src/api/routes/admin/invites/delete-invite.ts index f6a3153e41..17e527a998 100644 --- a/packages/medusa/src/api/routes/admin/invites/delete-invite.ts +++ b/packages/medusa/src/api/routes/admin/invites/delete-invite.ts @@ -1,5 +1,5 @@ -import InviteService from "../../../../services/invite" import { EntityManager } from "typeorm" +import InviteService from "../../../../services/invite" /** * @oas [delete] /invites/{invite_id} @@ -8,12 +8,27 @@ import { EntityManager } from "typeorm" * description: "Creates an Invite and triggers an 'invite' created event" * x-authenticated: true * parameters: - * - (path) invite_id=* {string} The id of the Invite + * - (path) invite_id=* {string} The ID of the Invite * tags: - * - Invites + * - Invite * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * properties: + * id: + * type: string + * description: The ID of the deleted Invite. + * object: + * type: string + * description: The type of the object that was deleted. + * format: invite + * deleted: + * type: boolean + * description: Whether or not the Invite was deleted. + * default: true */ export default async (req, res) => { const { invite_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/invites/list-invites.ts b/packages/medusa/src/api/routes/admin/invites/list-invites.ts index 2a49c73a74..2d9182219a 100644 --- a/packages/medusa/src/api/routes/admin/invites/list-invites.ts +++ b/packages/medusa/src/api/routes/admin/invites/list-invites.ts @@ -7,7 +7,7 @@ import InviteService from "../../../../services/invite" * description: "Lists all Invites" * x-authenticated: true * tags: - * - Invites + * - Invite * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/invites/resend-invite.ts b/packages/medusa/src/api/routes/admin/invites/resend-invite.ts index 539cabb378..0dd0798008 100644 --- a/packages/medusa/src/api/routes/admin/invites/resend-invite.ts +++ b/packages/medusa/src/api/routes/admin/invites/resend-invite.ts @@ -8,9 +8,9 @@ import { EntityManager } from "typeorm" * description: "Resends an Invite by triggering the 'invite' created event again" * x-authenticated: true * parameters: - * - (path) invite_id=* {string} The id of the Invite + * - (path) invite_id=* {string} The ID of the Invite * tags: - * - Invites + * - Invite * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/notes/create-note.ts b/packages/medusa/src/api/routes/admin/notes/create-note.ts index d50904ffff..df9f8dad4b 100644 --- a/packages/medusa/src/api/routes/admin/notes/create-note.ts +++ b/packages/medusa/src/api/routes/admin/notes/create-note.ts @@ -1,4 +1,5 @@ import { IsNotEmpty, IsString } from "class-validator" + import NoteService from "../../../../services/note" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -13,10 +14,14 @@ import { EntityManager } from "typeorm" * content: * application/json: * schema: + * required: + * - resource_id + * - resource_type + * - value * properties: * resource_id: * type: string - * description: The id of the resource which the Note relates to. + * description: The ID of the resource which the Note relates to. * resource_type: * type: string * description: The type of resource which the Note relates to. diff --git a/packages/medusa/src/api/routes/admin/notes/delete-note.ts b/packages/medusa/src/api/routes/admin/notes/delete-note.ts index cb344d0d70..26db70f0d3 100644 --- a/packages/medusa/src/api/routes/admin/notes/delete-note.ts +++ b/packages/medusa/src/api/routes/admin/notes/delete-note.ts @@ -1,5 +1,5 @@ -import NoteService from "../../../../services/note" import { EntityManager } from "typeorm" +import NoteService from "../../../../services/note" /** * @oas [delete] /notes/{id} @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Deletes a Note." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Note to delete. + * - (path) id=* {string} The ID of the Note to delete. * tags: * - Note * responses: @@ -20,10 +20,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Note. + * description: The ID of the deleted Note. + * object: + * type: string + * description: The type of the object that was deleted. + * default: note * deleted: * type: boolean * description: Whether or not the Note was deleted. + * default: true */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/notes/get-note.ts b/packages/medusa/src/api/routes/admin/notes/get-note.ts index 8b4c302b9f..bbdc610411 100644 --- a/packages/medusa/src/api/routes/admin/notes/get-note.ts +++ b/packages/medusa/src/api/routes/admin/notes/get-note.ts @@ -7,7 +7,7 @@ import NoteService from "../../../../services/note" * description: "Retrieves a single note using its id" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the note to retrieve. + * - (path) id=* {string} The ID of the note to retrieve. * tags: * - Note * responses: diff --git a/packages/medusa/src/api/routes/admin/notes/list-notes.ts b/packages/medusa/src/api/routes/admin/notes/list-notes.ts index 89d84e71f2..24990453be 100644 --- a/packages/medusa/src/api/routes/admin/notes/list-notes.ts +++ b/packages/medusa/src/api/routes/admin/notes/list-notes.ts @@ -1,18 +1,20 @@ import { IsNumber, IsOptional, IsString } from "class-validator" + import NoteService from "../../../../services/note" -import { validator } from "../../../../utils/validator" -import { selector } from "../../../../types/note" import { Type } from "class-transformer" +import { selector } from "../../../../types/note" +import { validator } from "../../../../utils/validator" + /** * @oas [get] /notes * operationId: "GetNotes" * summary: "List Notes" * x-authenticated: true * description: "Retrieves a list of notes" - * * parameters: - * - (path) limit= {number} The number of notes to get - * - (path) offset= {number} The offset at which to get notes - * - (path) resource_id= {string} The id which the notes belongs to + * parameters: + * - (query) limit=50 {number} The number of notes to get + * - (query) offset=0 {number} The offset at which to get notes + * - (query) resource_id {string} The ID which the notes belongs to * tags: * - Note * responses: @@ -26,6 +28,15 @@ import { Type } from "class-transformer" * type: array * items: * $ref: "#/components/schemas/note" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const validated = await validator(AdminGetNotesParams, req.query) diff --git a/packages/medusa/src/api/routes/admin/notes/update-note.ts b/packages/medusa/src/api/routes/admin/notes/update-note.ts index 291b608a14..c3f33379c0 100644 --- a/packages/medusa/src/api/routes/admin/notes/update-note.ts +++ b/packages/medusa/src/api/routes/admin/notes/update-note.ts @@ -10,7 +10,7 @@ import { EntityManager } from "typeorm" * x-authenticated: true * description: "Updates a Note associated with some resource" * parameters: - * - (path) id=* {string} The id of the Note to update + * - (path) id=* {string} The ID of the Note to update * requestBody: * content: * application/json: diff --git a/packages/medusa/src/api/routes/admin/notifications/list-notifications.ts b/packages/medusa/src/api/routes/admin/notifications/list-notifications.ts index 8a08c06130..c03cc3e378 100644 --- a/packages/medusa/src/api/routes/admin/notifications/list-notifications.ts +++ b/packages/medusa/src/api/routes/admin/notifications/list-notifications.ts @@ -1,8 +1,4 @@ -import { Type } from "class-transformer" import { IsBooleanString, IsInt, IsOptional, IsString } from "class-validator" -import { pick } from "lodash" -import { NotificationService } from "../../../../services" -import { validator } from "../../../../utils/validator" import { defaultAdminNotificationsFields, defaultAdminNotificationsRelations, @@ -10,6 +6,11 @@ import { import { Notification } from "../../../../models" import { FindConfig } from "../../../../types/common" +import { NotificationService } from "../../../../services" +import { Type } from "class-transformer" +import { pick } from "lodash" +import { validator } from "../../../../utils/validator" + /** * @oas [get] /notifications * operationId: "GetNotifications" @@ -19,13 +20,13 @@ import { FindConfig } from "../../../../types/common" * parameters: * - (query) offset=0 {integer} The number of notifications to skip before starting to collect the notifications set * - (query) limit=50 {integer} The number of notifications to return - * - (query) fields {string} The fields to include in the result set - * - (query) expand {string} The fields to populate - * - (query) event_name {string} - * - (query) resource_type {string} - * - (query) resource_id {string} - * - (query) to {string} - * - (query) include_resends {boolean} Whether the result set should include resent notifications or not + * - (query) fields {string} Comma separated fields to include in the result set + * - (query) expand {string} Comma separated fields to populate + * - (query) event_name {string} The name of the event that the notification was sent for. + * - (query) resource_type {string} The type of resource that the Notification refers to. + * - (query) resource_id {string} The ID of the resource that the Notification refers to. + * - (query) to {string} The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id + * - (query) include_resends {string} A boolean indicating whether the result set should include resent notifications or not * tags: * - Notification * responses: diff --git a/packages/medusa/src/api/routes/admin/notifications/resend-notification.ts b/packages/medusa/src/api/routes/admin/notifications/resend-notification.ts index b8c6e4d297..6cc8cf9f87 100644 --- a/packages/medusa/src/api/routes/admin/notifications/resend-notification.ts +++ b/packages/medusa/src/api/routes/admin/notifications/resend-notification.ts @@ -1,13 +1,14 @@ -import { IsString } from "class-validator" -import { IsOptional } from "class-validator" import { defaultAdminNotificationsFields, defaultAdminNotificationsRelations, } from "." -import { validator } from "../../../../utils/validator" -import { NotificationService } from "../../../../services" -import { Notification } from "../../../../models" + import { EntityManager } from "typeorm" +import { IsOptional } from "class-validator" +import { IsString } from "class-validator" +import { Notification } from "../../../../models" +import { NotificationService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /notifications/{id}/resend @@ -16,14 +17,14 @@ import { EntityManager } from "typeorm" * description: "Resends a previously sent notifications, with the same data but optionally to a different address" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Notification + * - (path) id=* {string} The ID of the Notification * requestBody: * content: * application/json: * schema: * properties: * to: - * description: "The address or user identifier that the Notification was sent to" + * description: "A new address or user identifier that the Notification should be sent to" * type: string * tags: * - Notification diff --git a/packages/medusa/src/api/routes/admin/orders/add-shipping-method.ts b/packages/medusa/src/api/routes/admin/orders/add-shipping-method.ts index e930d37583..e73da51d8f 100644 --- a/packages/medusa/src/api/routes/admin/orders/add-shipping-method.ts +++ b/packages/medusa/src/api/routes/admin/orders/add-shipping-method.ts @@ -6,6 +6,7 @@ import { IsString, } from "class-validator" import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { OrderService } from "../../../../services" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -17,10 +18,10 @@ import { EntityManager } from "typeorm" * description: "Adds a Shipping Method to an Order. If another Shipping Method exists with the same Shipping Profile, the previous Shipping Method will be replaced." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * - (body) price=* {integer} The price (excluding VAT) that should be charged for the Shipping Method - * - (body) option_id=* {string} The id of the Shipping Option to create the Shipping Method from. - * - (body) data=* {object} The data required for the Shipping Option to create a Shipping Method. This will depend on the Fulfillment Provider. + * - (body) option_id=* {string} The ID of the Shipping Option to create the Shipping Method from. + * - (body) data {object} The data required for the Shipping Option to create a Shipping Method. This will depend on the Fulfillment Provider. * tags: * - Order * responses: diff --git a/packages/medusa/src/api/routes/admin/orders/archive-order.ts b/packages/medusa/src/api/routes/admin/orders/archive-order.ts index 61bbf45fa7..021e574bce 100644 --- a/packages/medusa/src/api/routes/admin/orders/archive-order.ts +++ b/packages/medusa/src/api/routes/admin/orders/archive-order.ts @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Archives the order with the given id." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * tags: * - Order * responses: diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-claim.ts b/packages/medusa/src/api/routes/admin/orders/cancel-claim.ts index e11241a425..87f6d278de 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-claim.ts +++ b/packages/medusa/src/api/routes/admin/orders/cancel-claim.ts @@ -1,7 +1,8 @@ -import { MedusaError } from "medusa-core-utils" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." import { ClaimService, OrderService } from "../../../../services" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { EntityManager } from "typeorm" +import { MedusaError } from "medusa-core-utils" /** * @oas [post] /orders/{id}/claims/{claim_id}/cancel @@ -10,8 +11,8 @@ import { EntityManager } from "typeorm" * description: "Cancels a Claim" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. - * - (path) claim_id=* {string} The id of the Claim. + * - (path) id=* {string} The ID of the Order. + * - (path) claim_id=* {string} The ID of the Claim. * tags: * - Claim * responses: @@ -22,7 +23,7 @@ import { EntityManager } from "typeorm" * schema: * properties: * order: - * $ref: "#/components/schemas/claim_order" + * $ref: "#/components/schemas/order" */ export default async (req, res) => { const { id, claim_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.ts b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.ts index fd030c4932..437710121f 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.ts +++ b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.ts @@ -1,11 +1,12 @@ -import { MedusaError } from "medusa-core-utils" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." import { ClaimService, FulfillmentService, OrderService, } from "../../../../services" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { EntityManager } from "typeorm" +import { MedusaError } from "medusa-core-utils" /** * @oas [post] /orders/{id}/claims/{claim_id}/fulfillments/{fulfillment_id}/cancel @@ -14,9 +15,9 @@ import { EntityManager } from "typeorm" * description: "Registers a Fulfillment as canceled." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order which the Claim relates to. - * - (path) claim_id=* {string} The id of the Claim which the Fulfillment relates to. - * - (path) fulfillment_id=* {string} The id of the Fulfillment. + * - (path) id=* {string} The ID of the Order which the Claim relates to. + * - (path) claim_id=* {string} The ID of the Claim which the Fulfillment relates to. + * - (path) fulfillment_id=* {string} The ID of the Fulfillment. * tags: * - Fulfillment * responses: @@ -26,8 +27,8 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * fulfillment: - * $ref: "#/components/schemas/fulfillment" + * order: + * $ref: "#/components/schemas/order" */ export default async (req, res) => { const { id, claim_id, fulfillment_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.ts b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.ts index bbf688d276..2b975a9d06 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.ts +++ b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.ts @@ -1,11 +1,12 @@ -import { MedusaError } from "medusa-core-utils" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." import { FulfillmentService, OrderService, SwapService, } from "../../../../services" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { EntityManager } from "typeorm" +import { MedusaError } from "medusa-core-utils" /** * @oas [post] /orders/{id}/swaps/{swap_id}/fulfillments/{fulfillment_id}/cancel @@ -14,9 +15,9 @@ import { EntityManager } from "typeorm" * description: "Registers a Fulfillment as canceled." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order which the Swap relates to. - * - (path) swap_id=* {string} The id of the Swap which the Fulfillment relates to. - * - (path) fulfillment_id=* {string} The id of the Fulfillment. + * - (path) id=* {string} The ID of the Order which the Swap relates to. + * - (path) swap_id=* {string} The ID of the Swap which the Fulfillment relates to. + * - (path) fulfillment_id=* {string} The ID of the Fulfillment. * tags: * - Fulfillment * responses: @@ -26,8 +27,8 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * fulfillment: - * $ref: "#/components/schemas/fulfillment" + * order: + * $ref: "#/components/schemas/order" */ export default async (req, res) => { const { id, swap_id, fulfillment_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts index 0f2c1da749..5e1e26e334 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts +++ b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts @@ -1,7 +1,8 @@ -import { MedusaError } from "medusa-core-utils" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." import { FulfillmentService, OrderService } from "../../../../services" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { EntityManager } from "typeorm" +import { MedusaError } from "medusa-core-utils" /** * @oas [post] /orders/{id}/fulfillments/{fulfillment_id}/cancel @@ -10,8 +11,8 @@ import { EntityManager } from "typeorm" * description: "Registers a Fulfillment as canceled." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order which the Fulfillment relates to. - * - (path) fulfillment_id=* {string} The id of the Fulfillment + * - (path) id=* {string} The ID of the Order which the Fulfillment relates to. + * - (path) fulfillment_id=* {string} The ID of the Fulfillment * tags: * - Fulfillment * responses: @@ -21,8 +22,8 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * fulfillment: - * $ref: "#/components/schemas/fulfillment" + * order: + * $ref: "#/components/schemas/order" */ export default async (req, res) => { const { id, fulfillment_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-order.ts b/packages/medusa/src/api/routes/admin/orders/cancel-order.ts index 8d8d45e3cc..8f64ffda99 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-order.ts +++ b/packages/medusa/src/api/routes/admin/orders/cancel-order.ts @@ -1,4 +1,5 @@ import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { OrderService } from "../../../../services" import { EntityManager } from "typeorm" @@ -9,7 +10,7 @@ import { EntityManager } from "typeorm" * description: "Registers an Order as canceled. This triggers a flow that will cancel any created Fulfillments and Payments, may fail if the Payment or Fulfillment Provider is unable to cancel the Payment/Fulfillment." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * tags: * - Order * responses: diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-swap.ts b/packages/medusa/src/api/routes/admin/orders/cancel-swap.ts index d000129b3a..97c1061313 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-swap.ts +++ b/packages/medusa/src/api/routes/admin/orders/cancel-swap.ts @@ -1,7 +1,8 @@ -import { MedusaError } from "medusa-core-utils" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." import { OrderService, SwapService } from "../../../../services" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { EntityManager } from "typeorm" +import { MedusaError } from "medusa-core-utils" /** * @oas [post] /orders/{id}/swaps/{swap_id}/cancel @@ -10,8 +11,8 @@ import { EntityManager } from "typeorm" * description: "Cancels a Swap" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. - * - (path) swap_id=* {string} The id of the Swap. + * - (path) id=* {string} The ID of the Order. + * - (path) swap_id=* {string} The ID of the Swap. * tags: * - Swap * responses: @@ -22,7 +23,7 @@ import { EntityManager } from "typeorm" * schema: * properties: * order: - * $ref: "#/components/schemas/swap" + * $ref: "#/components/schemas/order" */ export default async (req, res) => { const { id, swap_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/orders/capture-payment.ts b/packages/medusa/src/api/routes/admin/orders/capture-payment.ts index 0fc77f387a..ed4cf6d838 100644 --- a/packages/medusa/src/api/routes/admin/orders/capture-payment.ts +++ b/packages/medusa/src/api/routes/admin/orders/capture-payment.ts @@ -1,4 +1,5 @@ -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { OrderService } from "../../../../services" import { EntityManager } from "typeorm" @@ -9,7 +10,7 @@ import { EntityManager } from "typeorm" * description: "Captures all the Payments associated with an Order." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * tags: * - Order * responses: diff --git a/packages/medusa/src/api/routes/admin/orders/complete-order.ts b/packages/medusa/src/api/routes/admin/orders/complete-order.ts index 59ae4c9aec..6e1fdb7555 100644 --- a/packages/medusa/src/api/routes/admin/orders/complete-order.ts +++ b/packages/medusa/src/api/routes/admin/orders/complete-order.ts @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Completes an Order" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * tags: * - Order * responses: diff --git a/packages/medusa/src/api/routes/admin/orders/create-claim-shipment.ts b/packages/medusa/src/api/routes/admin/orders/create-claim-shipment.ts index 27fd915e4e..17901305fa 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-claim-shipment.ts +++ b/packages/medusa/src/api/routes/admin/orders/create-claim-shipment.ts @@ -1,6 +1,7 @@ +import { ClaimService, OrderService } from "../../../../services" import { IsArray, IsNotEmpty, IsOptional, IsString } from "class-validator" import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." -import { ClaimService, OrderService } from "../../../../services" + import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -11,8 +12,8 @@ import { EntityManager } from "typeorm" * description: "Registers a Claim Fulfillment as shipped." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. - * - (path) claim_id=* {string} The id of the Claim. + * - (path) id=* {string} The ID of the Order. + * - (path) claim_id=* {string} The ID of the Claim. * requestBody: * content: * application/json: @@ -21,7 +22,7 @@ import { EntityManager } from "typeorm" * - fulfillment_id * properties: * fulfillment_id: - * description: The id of the Fulfillment. + * description: The ID of the Fulfillment. * type: string * tracking_numbers: * description: The tracking numbers for the shipment. @@ -29,7 +30,7 @@ import { EntityManager } from "typeorm" * items: * type: string * tags: - * - Order + * - Claim * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/orders/create-claim.ts b/packages/medusa/src/api/routes/admin/orders/create-claim.ts index bc7211861d..08e8c66bc8 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-claim.ts +++ b/packages/medusa/src/api/routes/admin/orders/create-claim.ts @@ -1,4 +1,4 @@ -import { Type } from "class-transformer" +import { ClaimReason, ClaimType } from "../../../../models" import { IsArray, IsBoolean, @@ -10,13 +10,14 @@ import { IsString, ValidateNested, } from "class-validator" -import { MedusaError } from "medusa-core-utils" import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { AddressPayload } from "../../../../types/common" -import { validator } from "../../../../utils/validator" import { ClaimTypeValue } from "../../../../types/claim" -import { ClaimType, ClaimReason } from "../../../../models" import { EntityManager } from "typeorm" +import { MedusaError } from "medusa-core-utils" +import { Type } from "class-transformer" +import { validator } from "../../../../utils/validator" /** * @oas [post] /order/{id}/claims @@ -25,7 +26,7 @@ import { EntityManager } from "typeorm" * description: "Creates a Claim." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * requestBody: * content: * application/json: @@ -44,9 +45,12 @@ import { EntityManager } from "typeorm" * description: The Claim Items that the Claim will consist of. * type: array * items: + * required: + * - item_id + * - quantity * properties: * item_id: - * description: The id of the Line Item that will be claimed. + * description: The ID of the Line Item that will be claimed. * type: string * quantity: * description: The number of items that will be returned @@ -71,55 +75,59 @@ import { EntityManager } from "typeorm" * description: A list of image URL's that will be associated with the Claim * items: * type: string - * return_shipping: + * return_shipping: * description: Optional details for the Return Shipping Method, if the items are to be sent back. * type: object * properties: * option_id: * type: string - * description: The id of the Shipping Option to create the Shipping Method from. + * description: The ID of the Shipping Option to create the Shipping Method from. * price: * type: integer * description: The price to charge for the Shipping Method. - * additional_items: + * additional_items: * description: The new items to send to the Customer when the Claim type is Replace. * type: array * items: + * required: + * - variant_id + * - quantity * properties: * variant_id: - * description: The id of the Product Variant to ship. + * description: The ID of the Product Variant to ship. * type: string * quantity: * description: The quantity of the Product Variant to ship. * type: integer - * shipping_methods: + * shipping_methods: * description: The Shipping Methods to send the additional Line Items with. * type: array * items: * properties: * id: - * description: The id of an existing Shipping Method + * description: The ID of an existing Shipping Method * type: string * option_id: - * description: The id of the Shipping Option to create a Shipping Method from + * description: The ID of the Shipping Option to create a Shipping Method from * type: string * price: * description: The price to charge for the Shipping Method * type: integer - * shipping_address: + * shipping_address: * type: object * description: "An optional shipping address to send the claim to. Defaults to the parent order's shipping address" - * refund_amount: + * $ref: "#/components/schemas/address" + * refund_amount: * description: The amount to refund the Customer when the Claim type is `refund`. * type: integer - * no_notification: + * no_notification: * description: If set to true no notification will be send related to this Claim. * type: boolean - * metadata: + * metadata: * description: An optional set of key-value pairs to hold additional information. * type: object * tags: - * - Order + * - Claim * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/orders/create-fulfillment.ts b/packages/medusa/src/api/routes/admin/orders/create-fulfillment.ts index 194f0eac91..354be55bbc 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-fulfillment.ts +++ b/packages/medusa/src/api/routes/admin/orders/create-fulfillment.ts @@ -1,4 +1,3 @@ -import { Transform, Type } from "class-transformer" import { IsArray, IsBoolean, @@ -9,18 +8,21 @@ import { IsString, ValidateNested, } from "class-validator" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { Transform, Type } from "class-transformer" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + +import { EntityManager } from "typeorm" import { OrderService } from "../../../../services" import { validator } from "../../../../utils/validator" -import { EntityManager } from "typeorm" + /** - * @oas [post] /orders/{id}/fulfillments + * @oas [post] /orders/{id}/fulfillment * operationId: "PostOrdersOrderFulfillments" * summary: "Create a Fulfillment" * description: "Creates a Fulfillment of an Order - will notify Fulfillment Providers to prepare a shipment." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * requestBody: * content: * application/json: @@ -32,9 +34,12 @@ import { EntityManager } from "typeorm" * description: The Line Items to include in the Fulfillment. * type: array * items: + * required: + * - item_id + * - quantity * properties: * item_id: - * description: The id of Line Item to fulfill. + * description: The ID of Line Item to fulfill. * type: string * quantity: * description: The quantity of the Line Item to fulfill. @@ -46,7 +51,7 @@ import { EntityManager } from "typeorm" * description: An optional set of key-value pairs to hold additional information. * type: object * tags: - * - Order + * - Fulfillment * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/orders/create-shipment.ts b/packages/medusa/src/api/routes/admin/orders/create-shipment.ts index cb90c90f0f..156ea81e0c 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-shipment.ts +++ b/packages/medusa/src/api/routes/admin/orders/create-shipment.ts @@ -5,11 +5,13 @@ import { IsOptional, IsString, } from "class-validator" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." -import { OrderService } from "../../../../services" -import { validator } from "../../../../utils/validator" -import { TrackingLink } from "../../../../models" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { EntityManager } from "typeorm" +import { OrderService } from "../../../../services" +import { TrackingLink } from "../../../../models" +import { validator } from "../../../../utils/validator" + /** * @oas [post] /orders/{id}/shipment * operationId: "PostOrdersOrderShipment" @@ -17,7 +19,7 @@ import { EntityManager } from "typeorm" * description: "Registers a Fulfillment as shipped." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * requestBody: * content: * application/json: @@ -26,7 +28,7 @@ import { EntityManager } from "typeorm" * - fulfillment_id * properties: * fulfillment_id: - * description: The id of the Fulfillment. + * description: The ID of the Fulfillment. * type: string * tracking_numbers: * description: The tracking numbers for the shipment. diff --git a/packages/medusa/src/api/routes/admin/orders/create-swap-shipment.ts b/packages/medusa/src/api/routes/admin/orders/create-swap-shipment.ts index 7a48640b94..44da0e50e3 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-swap-shipment.ts +++ b/packages/medusa/src/api/routes/admin/orders/create-swap-shipment.ts @@ -5,10 +5,12 @@ import { IsOptional, IsString, } from "class-validator" -import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." import { OrderService, SwapService } from "../../../../services" -import { validator } from "../../../../utils/validator" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { EntityManager } from "typeorm" +import { validator } from "../../../../utils/validator" + /** * @oas [post] /orders/{id}/swaps/{swap_id}/shipments * operationId: "PostOrdersOrderSwapsSwapShipments" @@ -16,8 +18,8 @@ import { EntityManager } from "typeorm" * description: "Registers a Swap Fulfillment as shipped." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. - * - (path) swap_id=* {string} The id of the Swap. + * - (path) id=* {string} The ID of the Order. + * - (path) swap_id=* {string} The ID of the Swap. * requestBody: * content: * application/json: @@ -26,7 +28,7 @@ import { EntityManager } from "typeorm" * - fulfillment_id * properties: * fulfillment_id: - * description: The id of the Fulfillment. + * description: The ID of the Fulfillment. * type: string * tracking_numbers: * description: The tracking numbers for the shipment. @@ -37,7 +39,7 @@ import { EntityManager } from "typeorm" * description: If set to true no notification will be send related to this Claim. * type: boolean * tags: - * - Order + * - Swap * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/orders/create-swap.ts b/packages/medusa/src/api/routes/admin/orders/create-swap.ts index a91a88acd5..10fd88e34f 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-swap.ts +++ b/packages/medusa/src/api/routes/admin/orders/create-swap.ts @@ -1,26 +1,27 @@ -import { Type } from "class-transformer" -import { - Min, - IsOptional, - IsArray, - IsString, - IsBoolean, - IsObject, - IsInt, - IsNotEmpty, - IsNumber, - ValidateNested, -} from "class-validator" -import { MedusaError } from "medusa-core-utils" -import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." import { IdempotencyKeyService, OrderService, ReturnService, SwapService, } from "../../../../services" -import { validator } from "../../../../utils/validator" +import { + IsArray, + IsBoolean, + IsInt, + IsNotEmpty, + IsNumber, + IsObject, + IsOptional, + IsString, + Min, + ValidateNested, +} from "class-validator" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { EntityManager } from "typeorm" +import { MedusaError } from "medusa-core-utils" +import { Type } from "class-transformer" +import { validator } from "../../../../utils/validator" /** * @oas [post] /order/{id}/swaps @@ -29,7 +30,7 @@ import { EntityManager } from "typeorm" * description: "Creates a Swap. Swaps are used to handle Return of previously purchased goods and Fulfillment of replacements simultaneously." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * requestBody: * content: * application/json: @@ -46,18 +47,26 @@ import { EntityManager } from "typeorm" * - quantity * properties: * item_id: - * description: The id of the Line Item that will be claimed. + * description: The ID of the Line Item that will be claimed. * type: string * quantity: * description: The number of items that will be returned * type: integer + * reason_id: + * description: The ID of the Return Reason to use. + * type: string + * note: + * description: An optional note with information about the Return. + * type: string * return_shipping: * description: How the Swap will be returned. * type: object + * required: + * - option_id * properties: * option_id: * type: string - * description: The id of the Shipping Option to create the Shipping Method from. + * description: The ID of the Shipping Option to create the Shipping Method from. * price: * type: integer * description: The price to charge for the Shipping Method. @@ -70,7 +79,7 @@ import { EntityManager } from "typeorm" * - quantity * properties: * variant_id: - * description: The id of the Product Variant to ship. + * description: The ID of the Product Variant to ship. * type: string * quantity: * description: The quantity of the Product Variant to ship. @@ -84,7 +93,7 @@ import { EntityManager } from "typeorm" * - price * properties: * option_id: - * description: The id of the Shipping Option to override with a custom price. + * description: The ID of the Shipping Option to override with a custom price. * type: string * price: * description: The custom price of the Shipping Option. @@ -95,8 +104,9 @@ import { EntityManager } from "typeorm" * allow_backorder: * description: If true, swaps can be completed with items out of stock * type: boolean + * default: true * tags: - * - Order + * - Swap * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/orders/fulfill-claim.ts b/packages/medusa/src/api/routes/admin/orders/fulfill-claim.ts index ad413f2f27..9dbf5346bc 100644 --- a/packages/medusa/src/api/routes/admin/orders/fulfill-claim.ts +++ b/packages/medusa/src/api/routes/admin/orders/fulfill-claim.ts @@ -1,8 +1,10 @@ -import { IsBoolean, IsObject, IsOptional } from "class-validator" -import { EntityManager } from "typeorm" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." import { ClaimService, OrderService } from "../../../../services" +import { IsBoolean, IsObject, IsOptional } from "class-validator" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + +import { EntityManager } from "typeorm" import { validator } from "../../../../utils/validator" + /** * @oas [post] /orders/{id}/claims/{claim_id}/fulfillments * operationId: "PostOrdersOrderClaimsClaimFulfillments" @@ -10,8 +12,8 @@ import { validator } from "../../../../utils/validator" * description: "Creates a Fulfillment for a Claim." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. - * - (path) claim_id=* {string} The id of the Claim. + * - (path) id=* {string} The ID of the Order. + * - (path) claim_id=* {string} The ID of the Claim. * requestBody: * content: * application/json: @@ -24,7 +26,7 @@ import { validator } from "../../../../utils/validator" * description: If set to true no notification will be send related to this Claim. * type: boolean * tags: - * - Order + * - Fulfillment * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/orders/fulfill-swap.ts b/packages/medusa/src/api/routes/admin/orders/fulfill-swap.ts index c4c53ed949..fcdb03f6ac 100644 --- a/packages/medusa/src/api/routes/admin/orders/fulfill-swap.ts +++ b/packages/medusa/src/api/routes/admin/orders/fulfill-swap.ts @@ -1,8 +1,10 @@ import { IsBoolean, IsObject, IsOptional } from "class-validator" -import { EntityManager } from "typeorm" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." import { OrderService, SwapService } from "../../../../services" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + +import { EntityManager } from "typeorm" import { validator } from "../../../../utils/validator" + /** * @oas [post] /orders/{id}/swaps/{swap_id}/fulfillments * operationId: "PostOrdersOrderSwapsSwapFulfillments" @@ -10,8 +12,8 @@ import { validator } from "../../../../utils/validator" * description: "Creates a Fulfillment for a Swap." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. - * - (path) swap_id=* {string} The id of the Swap. + * - (path) id=* {string} The ID of the Order. + * - (path) swap_id=* {string} The ID of the Swap. * requestBody: * content: * application/json: @@ -24,7 +26,7 @@ import { validator } from "../../../../utils/validator" * description: If set to true no notification will be send related to this Claim. * type: boolean * tags: - * - Order + * - Fulfillment * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/orders/get-order.ts b/packages/medusa/src/api/routes/admin/orders/get-order.ts index 9400ad489a..9e88eb96d3 100644 --- a/packages/medusa/src/api/routes/admin/orders/get-order.ts +++ b/packages/medusa/src/api/routes/admin/orders/get-order.ts @@ -7,7 +7,7 @@ import { OrderService } from "../../../../services" * description: "Retrieves an Order" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * tags: * - Order * responses: diff --git a/packages/medusa/src/api/routes/admin/orders/list-orders.ts b/packages/medusa/src/api/routes/admin/orders/list-orders.ts index a9582607cd..1be15dd8bd 100644 --- a/packages/medusa/src/api/routes/admin/orders/list-orders.ts +++ b/packages/medusa/src/api/routes/admin/orders/list-orders.ts @@ -1,9 +1,10 @@ import { IsNumber, IsOptional, IsString } from "class-validator" -import { pick } from "lodash" -import { OrderService } from "../../../../services" + import { AdminListOrdersSelector } from "../../../../types/orders" -import { Type } from "class-transformer" import { Order } from "../../../../models" +import { OrderService } from "../../../../services" +import { Type } from "class-transformer" +import { pick } from "lodash" /** * @oas [get] /orders @@ -12,24 +13,144 @@ import { Order } from "../../../../models" * description: "Retrieves a list of Orders" * x-authenticated: true * parameters: - * - (query) q {string} Query used for searching orders. - * - (query) id {string} Id of the order to search for. - * - (query) status {string[]} Status to search for. - * - (query) fulfillment_status {string[]} Fulfillment status to search for. - * - (query) payment_status {string[]} Payment status to search for. - * - (query) display_id {string} Display id to search for. + * - (query) q {string} Query used for searching orders by shipping address first name, orders' email, and orders' display ID + * - (query) id {string} ID of the order to search for. + * - in: query + * name: status + * style: form + * explode: false + * description: Status to search for + * schema: + * type: array + * items: + * type: string + * enum: [pending, completed, archived, canceled, requires_action] + * - in: query + * name: fulfillment_status + * style: form + * explode: false + * description: Fulfillment status to search for. + * schema: + * type: array + * items: + * type: string + * enum: [not_fulfilled, fulfilled, partially_fulfilled, shipped, partially_shipped, canceled, returned, partially_returned, requires_action] + * - in: query + * name: payment_status + * style: form + * explode: false + * description: Payment status to search for. + * schema: + * type: array + * items: + * type: string + * enum: [captured, awaiting, not_paid, refunded, partially_refunded, canceled, requires_action] + * - (query) display_id {string} Display ID to search for. * - (query) cart_id {string} to search for. * - (query) customer_id {string} to search for. * - (query) email {string} to search for. - * - (query) region_id {string} to search for. - * - (query) currency_code {string} to search for. + * - in: query + * name: region_id + * style: form + * explode: false + * description: Regions to search orders by + * schema: + * oneOf: + * - type: string + * description: ID of a Region. + * - type: array + * items: + * type: string + * description: ID of a Region. + * - in: query + * name: currency_code + * style: form + * explode: false + * description: Currency code to search for + * schema: + * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * - (query) tax_rate {string} to search for. - * - (query) sales_chanel_id {string[]} to retrieve products in. - * - (query) cancelled_at {DateComparisonOperator} Date comparison for when resulting orders was cancelled, i.e. less than, greater than etc. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting orders was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting orders was updated, i.e. less than, greater than etc. - * - (query) offset {string} How many orders to skip in the result. - * - (query) limit {string} Limit the number of orders returned. + * - in: query + * name: created_at + * description: Date comparison for when resulting orders were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting orders were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: canceled_at + * description: Date comparison for when resulting orders were canceled. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: sales_channel_id + * style: form + * explode: false + * description: Filter by Sales Channels + * schema: + * type: array + * items: + * type: string + * description: The ID of a Sales Channel + * - (query) offset=0 {integer} How many orders to skip before the results. + * - (query) limit=50 {integer} Limit the number of orders returned. * - (query) expand {string} (Comma separated) Which fields should be expanded in each order of the result. * - (query) fields {string} (Comma separated) Which fields should be included in each order of the result. * tags: @@ -45,6 +166,15 @@ import { Order } from "../../../../models" * type: array * items: * $ref: "#/components/schemas/order" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const orderService: OrderService = req.scope.resolve("orderService") diff --git a/packages/medusa/src/api/routes/admin/orders/process-swap-payment.ts b/packages/medusa/src/api/routes/admin/orders/process-swap-payment.ts index 8d62c71229..d50a3c507d 100644 --- a/packages/medusa/src/api/routes/admin/orders/process-swap-payment.ts +++ b/packages/medusa/src/api/routes/admin/orders/process-swap-payment.ts @@ -1,6 +1,7 @@ -import { EntityManager } from "typeorm" -import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." import { OrderService, SwapService } from "../../../../services" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + +import { EntityManager } from "typeorm" /** * @oas [post] /orders/{id}/swaps/{swap_id}/process-payment @@ -9,10 +10,10 @@ import { OrderService, SwapService } from "../../../../services" * description: "When there are differences between the returned and shipped Products in a Swap, the difference must be processed. Either a Refund will be issued or a Payment will be captured." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. - * - (path) swap_id=* {string} The id of the Swap. + * - (path) id=* {string} The ID of the Order. + * - (path) swap_id=* {string} The ID of the Swap. * tags: - * - Order + * - Swap * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/orders/refund-payment.ts b/packages/medusa/src/api/routes/admin/orders/refund-payment.ts index c950a6d196..2faa47ef85 100644 --- a/packages/medusa/src/api/routes/admin/orders/refund-payment.ts +++ b/packages/medusa/src/api/routes/admin/orders/refund-payment.ts @@ -5,19 +5,20 @@ import { IsOptional, IsString, } from "class-validator" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { OrderService } from "../../../../services" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" /** - * @oas [post] /orders/{id}/refunds + * @oas [post] /orders/{id}/refund * operationId: "PostOrdersOrderRefunds" * summary: "Create a Refund" * description: "Issues a Refund." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * requestBody: * content: * application/json: @@ -33,7 +34,7 @@ import { EntityManager } from "typeorm" * description: The reason for the Refund. * type: string * note: - * description: A not with additional details about the Refund. + * description: A note with additional details about the Refund. * type: string * no_notification: * description: If set to true no notification will be send related to this Refund. diff --git a/packages/medusa/src/api/routes/admin/orders/request-return.ts b/packages/medusa/src/api/routes/admin/orders/request-return.ts index 26641cfdf3..a79d5fc7c0 100644 --- a/packages/medusa/src/api/routes/admin/orders/request-return.ts +++ b/packages/medusa/src/api/routes/admin/orders/request-return.ts @@ -1,4 +1,8 @@ -import { Type } from "class-transformer" +import { + EventBusService, + OrderService, + ReturnService, +} from "../../../../services" import { IsArray, IsBoolean, @@ -7,25 +11,22 @@ import { IsString, ValidateNested, } from "class-validator" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + import { MedusaError } from "medusa-core-utils" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." -import { - EventBusService, - OrderService, - ReturnService, -} from "../../../../services" import { OrdersReturnItem } from "../../../../types/orders" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" /** - * @oas [post] /orders/{id}/returns + * @oas [post] /orders/{id}/return * operationId: "PostOrdersOrderReturns" * summary: "Request a Return" * description: "Requests a Return. If applicable a return label will be created and other plugins notified." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * requestBody: * content: * application/json: @@ -37,12 +38,15 @@ import { EntityManager } from "typeorm" * description: The Line Items that will be returned. * type: array * items: + * required: + * - item_id + * - quantity * properties: * item_id: - * description: The id of the Line Item. + * description: The ID of the Line Item. * type: string * reason_id: - * description: The id of the Return Reason to use. + * description: The ID of the Return Reason to use. * type: string * note: * description: An optional note with information about the Return. @@ -56,13 +60,17 @@ import { EntityManager } from "typeorm" * properties: * option_id: * type: string - * description: The id of the Shipping Option to create the Shipping Method from. + * description: The ID of the Shipping Option to create the Shipping Method from. * price: * type: integer * description: The price to charge for the Shipping Method. + * note: + * description: An optional note with information about the Return. + * type: string * receive_now: * description: A flag to indicate if the Return should be registerd as received immediately. * type: boolean + * default: false * no_notification: * description: A flag to indicate if no notifications should be emitted related to the requested Return. * type: boolean @@ -70,6 +78,7 @@ import { EntityManager } from "typeorm" * description: The amount to refund. * type: integer * tags: + * - Return * - Order * responses: * 200: diff --git a/packages/medusa/src/api/routes/admin/orders/update-claim.ts b/packages/medusa/src/api/routes/admin/orders/update-claim.ts index 01fb6ada49..cb176b095f 100644 --- a/packages/medusa/src/api/routes/admin/orders/update-claim.ts +++ b/packages/medusa/src/api/routes/admin/orders/update-claim.ts @@ -1,16 +1,17 @@ -import { Type } from "class-transformer" +import { ClaimService, OrderService } from "../../../../services" import { IsArray, - ValidateNested, - IsOptional, - IsString, IsBoolean, IsInt, IsNotEmpty, IsObject, + IsOptional, + IsString, + ValidateNested, } from "class-validator" -import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." -import { ClaimService, OrderService } from "../../../../services" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." + +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -21,8 +22,8 @@ import { EntityManager } from "typeorm" * description: "Updates a Claim." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. - * - (path) claim_id=* {string} The id of the Claim. + * - (path) id=* {string} The ID of the Order. + * - (path) claim_id=* {string} The ID of the Claim. * requestBody: * content: * application/json: @@ -32,12 +33,16 @@ import { EntityManager } from "typeorm" * description: The Claim Items that the Claim will consist of. * type: array * items: + * required: + * - id + * - images + * - tags * properties: * id: - * description: The id of the Claim Item. + * description: The ID of the Claim Item. * type: string * item_id: - * description: The id of the Line Item that will be claimed. + * description: The ID of the Line Item that will be claimed. * type: string * quantity: * description: The number of items that will be returned @@ -57,21 +62,39 @@ import { EntityManager } from "typeorm" * description: A list o tags to add to the Claim Item * type: array * items: - * type: string + * type: object + * properties: + * id: + * type: string + * description: Tag ID + * value: + * type: string + * description: Tag value * images: * description: A list of image URL's that will be associated with the Claim + * type: array * items: - * type: string + * type: object + * properties: + * id: + * type: string + * description: Image ID + * url: + * type: string + * description: Image URL + * metadata: + * description: An optional set of key-value pairs to hold additional information. + * type: object * shipping_methods: * description: The Shipping Methods to send the additional Line Items with. * type: array * items: * properties: * id: - * description: The id of an existing Shipping Method + * description: The ID of an existing Shipping Method * type: string * option_id: - * description: The id of the Shipping Option to create a Shipping Method from + * description: The ID of the Shipping Option to create a Shipping Method from * type: string * price: * description: The price to charge for the Shipping Method @@ -83,7 +106,7 @@ import { EntityManager } from "typeorm" * description: An optional set of key-value pairs to hold additional information. * type: object * tags: - * - Order + * - Claim * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/orders/update-order.ts b/packages/medusa/src/api/routes/admin/orders/update-order.ts index 8b985a7f5d..287e528043 100644 --- a/packages/medusa/src/api/routes/admin/orders/update-order.ts +++ b/packages/medusa/src/api/routes/admin/orders/update-order.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsBoolean, @@ -10,10 +9,12 @@ import { ValidateNested, } from "class-validator" import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." -import { OrderService } from "../../../../services" + import { AddressPayload } from "../../../../types/common" -import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" +import { OrderService } from "../../../../services" +import { Type } from "class-transformer" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id} @@ -22,7 +23,7 @@ import { EntityManager } from "typeorm" * description: "Updates and order" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Order. + * - (path) id=* {string} The ID of the Order. * requestBody: * content: * application/json: @@ -34,51 +35,57 @@ import { EntityManager } from "typeorm" * billing_address: * description: Billing address * anyOf: - * - $ref: "#/components/schemas/address + * - $ref: "#/components/schemas/address" * shipping_address: * description: Shipping address * anyOf: - * - $ref: "#/components/schemas/address + * - $ref: "#/components/schemas/address" * items: * description: The Line Items for the order * type: array + * items: + * $ref: "#/components/schemas/line_item" * region: - * description: Region where the order belongs + * description: ID of the region where the order belongs * type: string * discounts: * description: Discounts applied to the order * type: array + * items: + * $ref: "#/components/schemas/discount" * customer_id: - * description: id of the customer + * description: ID of the customer * type: string * payment_method: - * description: - * type: Record + * description: payment method chosen for the order + * type: object * properties: * provider_id: * type: string - * description: id of the payment provider + * description: ID of the payment provider * data: * description: Data relevant for the given payment method - * type: Record + * type: object * shipping_method: * description: The Shipping Method used for shipping the order. - * type: Record + * type: object * properties: * provider_id: * type: string - * description: The id of the shipping provider. + * description: The ID of the shipping provider. * profile_id: * type: string - * description: The id of the shipping profile. + * description: The ID of the shipping profile. * price: * type: integer * description: The price of the shipping. * data: - * type: Record + * type: object * description: Data relevant to the specific shipping method. * items: * type: array + * items: + * $ref: "#/components/schemas/line_item" * description: Items to ship * no_notification: * description: A flag to indicate if no notifications should be emitted related to the updated order. diff --git a/packages/medusa/src/api/routes/admin/price-lists/add-prices-batch.ts b/packages/medusa/src/api/routes/admin/price-lists/add-prices-batch.ts index 0b869c6992..43b17b8a4b 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/add-prices-batch.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/add-prices-batch.ts @@ -1,9 +1,10 @@ -import { Type } from "class-transformer" import { IsArray, IsBoolean, IsOptional, ValidateNested } from "class-validator" import { defaultAdminPriceListFields, defaultAdminPriceListRelations } from "." + +import { AdminPriceListPricesUpdateReq } from "../../../../types/price-list" import { PriceList } from "../../../.." import PriceListService from "../../../../services/price-list" -import { AdminPriceListPricesUpdateReq } from "../../../../types/price-list" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -14,44 +15,47 @@ import { EntityManager } from "typeorm" * description: "Batch update prices for a Price List" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Price List to update prices for. + * - (path) id=* {string} The ID of the Price List to update prices for. * requestBody: * content: - * application/json: - * schema: - * properties: - * prices: - * description: The prices to update or add. - * type: array - * items: - * properties: - * id: - * description: The id of the price. - * type: string - * status: - * description: The status of the Price List. - * type: string - * enum: - * - active - * - draft - * region_id: - * description: The id of the Region for which the price is used. - * type: string - * currency_code: - * description: The 3 character ISO currency code for which the price will be used. - * type: string - * amount: - * description: The amount of the price. - * type: number - * min_quantity: - * description: The minimum quantity for which the price will be used. - * type: number - * max_quantity: - * description: The maximum quantity for which the price will be used. - * type: number - * override: - * description: "If true the prices will replace all existing prices associated with the Price List." - * type: boolean + * application/json: + * schema: + * properties: + * prices: + * description: The prices to update or add. + * type: array + * items: + * required: + * - amount + * - variant_id + * properties: + * id: + * description: The ID of the price. + * type: string + * region_id: + * description: The ID of the Region for which the price is used. Only required if currecny_code is not provided. + * type: string + * currency_code: + * description: The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided. + * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. + * variant_id: + * description: The ID of the Variant for which the price is used. + * type: string + * amount: + * description: The amount to charge for the Product Variant. + * type: integer + * min_quantity: + * description: The minimum quantity for which the price will be used. + * type: integer + * max_quantity: + * description: The maximum quantity for which the price will be used. + * type: integer + * override: + * description: "If true the prices will replace all existing prices associated with the Price List." + * type: boolean * tags: * - Price List * responses: @@ -61,14 +65,8 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * id: - * type: string - * description: The id of the deleted Price List. - * object: - * type: string - * description: The type of the object that was deleted. - * deleted: - * type: boolean + * price_list: + * $ref: "#/components/schemas/price_list" */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/price-lists/create-price-list.ts b/packages/medusa/src/api/routes/admin/price-lists/create-price-list.ts index 4d6a6f4ef9..cca93408a9 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/create-price-list.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/create-price-list.ts @@ -1,4 +1,9 @@ -import { Type } from "class-transformer" +import { + AdminPriceListPricesCreateReq, + CreatePriceListInput, + PriceListStatus, + PriceListType, +} from "../../../../types/price-list" import { IsArray, IsEnum, @@ -6,18 +11,14 @@ import { IsString, ValidateNested, } from "class-validator" -import PriceListService from "../../../../services/price-list" -import { - AdminPriceListPricesCreateReq, - CreatePriceListInput, - PriceListStatus, - PriceListType, -} from "../../../../types/price-list" -import { Request } from "express" + import { EntityManager } from "typeorm" +import PriceListService from "../../../../services/price-list" +import { Request } from "express" +import { Type } from "class-transformer" /** - * @oas [post] /price_lists + * @oas [post] /price-lists * operationId: "PostPriceListsPriceList" * summary: "Creates a Price List" * description: "Creates a Price List" @@ -26,6 +27,11 @@ import { EntityManager } from "typeorm" * content: * application/json: * schema: + * required: + * - name + * - description + * - type + * - prices * properties: * name: * description: "The name of the Price List" @@ -33,47 +39,64 @@ import { EntityManager } from "typeorm" * description: * description: "A description of the Price List." * type: string + * starts_at: + * description: "The date with timezone that the Price List starts being valid." + * type: string + * format: date + * ends_at: + * description: "The date with timezone that the Price List ends being valid." + * type: string + * format: date * type: * description: The type of the Price List. * type: string * enum: * - sale * - override - * status: - * description: The status of the Price List. - * type: string - * enum: - * - active - * - draft - * prices: - * description: The prices of the Price List. - * type: array - * items: - * properties: - * region_id: - * description: The id of the Region for which the price is used. - * type: string - * currency_code: - * description: The 3 character ISO currency code for which the price will be used. - * type: string - * amount: - * description: The amount to charge for the Product Variant. - * type: integer - * min_quantity: - * description: The minimum quantity for which the price will be used. - * type: integer - * max_quantity: - * description: The maximum quantity for which the price will be used. - * type: integer - * customer_groups: - * type: array + * status: + * description: The status of the Price List. + * type: string + * enum: + * - active + * - draft + * prices: + * description: The prices of the Price List. + * type: array + * items: + * required: + * - amount + * - variant_id + * properties: + * region_id: + * description: The ID of the Region for which the price is used. Only required if currecny_code is not provided. + * type: string + * currency_code: + * description: The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided. + * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. + * amount: + * description: The amount to charge for the Product Variant. + * type: integer + * variant_id: + * description: The ID of the Variant for which the price is used. + * type: string + * min_quantity: + * description: The minimum quantity for which the price will be used. + * type: integer + * max_quantity: + * description: The maximum quantity for which the price will be used. + * type: integer + * customer_groups: + * type: array * description: A list of customer groups that the Price List applies to. * items: * required: * - id * properties: * id: - * description: The id of a customer group + * description: The ID of a customer group * type: string * tags: * - Price List @@ -84,7 +107,7 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * product: + * price_list: * $ref: "#/components/schemas/price_list" */ export default async (req: Request, res) => { diff --git a/packages/medusa/src/api/routes/admin/price-lists/delete-price-list.ts b/packages/medusa/src/api/routes/admin/price-lists/delete-price-list.ts index 3f1f8c9f5b..9862c36d1f 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/delete-price-list.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/delete-price-list.ts @@ -1,5 +1,5 @@ -import PriceListService from "../../../../services/price-list" import { EntityManager } from "typeorm" +import PriceListService from "../../../../services/price-list" /** * @oas [delete] /price-lists/{id} @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Deletes a Price List" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Price List to delete. + * - (path) id=* {string} The ID of the Price List to delete. * tags: * - Price List * responses: @@ -20,12 +20,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Price List. + * description: The ID of the deleted Price List. * object: * type: string * description: The type of the object that was deleted. + * default: price-list * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/price-lists/delete-prices-batch.ts b/packages/medusa/src/api/routes/admin/price-lists/delete-prices-batch.ts index 69cd571ec6..94dcc05ba4 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/delete-prices-batch.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/delete-prices-batch.ts @@ -1,26 +1,27 @@ import { ArrayNotEmpty, IsString } from "class-validator" + +import { EntityManager } from "typeorm" import PriceListService from "../../../../services/price-list" import { validator } from "../../../../utils/validator" -import { EntityManager } from "typeorm" /** * @oas [delete] /price-lists/{id}/prices/batch * operationId: "DeletePriceListsPriceListPricesBatch" - * summary: "Batch delete prices that belongs to a Price List" - * description: "Batch delete prices that belongs to a Price List" + * summary: "Batch delete prices that belong to a Price List" + * description: "Batch delete prices that belong to a Price List" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Price List that the Money Amounts that will be deleted belongs to. + * - (path) id=* {string} The ID of the Price List that the Money Amounts (Prices) that will be deleted belongs to. * requestBody: - * content: - * application/json: - * schema: - * properties: - * price_ids: - * description: The price id's of the Money Amounts to delete. - * type: array - * items: - * type: string + * content: + * application/json: + * schema: + * properties: + * price_ids: + * description: The price id's of the Money Amounts to delete. + * type: array + * items: + * type: string * tags: * - Price List * responses: @@ -34,12 +35,15 @@ import { EntityManager } from "typeorm" * type: array * items: * type: string - * description: The id of the deleted Money Amount. + * description: The IDs of the deleted Money Amounts (Prices). * object: * type: string * description: The type of the object that was deleted. + * default: money-amount * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/price-lists/delete-product-prices.ts b/packages/medusa/src/api/routes/admin/price-lists/delete-product-prices.ts index a02578c589..fe52565131 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/delete-product-prices.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/delete-product-prices.ts @@ -1,5 +1,5 @@ -import PriceListService from "../../../../services/price-list" import { EntityManager } from "typeorm" +import PriceListService from "../../../../services/price-list" /** * @oas [delete] /price-lists/{id}/products/{product_id}/prices @@ -8,8 +8,8 @@ import { EntityManager } from "typeorm" * description: "Delete all the prices related to a specific product in a price list" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Price List that the Money Amounts that will be deleted belongs to. - * - (path) product_id=* {string} The id of the product from which the money amount will be deleted. + * - (path) id=* {string} The ID of the Price List that the Money Amounts that will be deleted belongs to. + * - (path) product_id=* {string} The ID of the product from which the money amount will be deleted. * tags: * - Price List * responses: @@ -20,16 +20,18 @@ import { EntityManager } from "typeorm" * schema: * properties: * ids: - * type: number + * type: array * description: The price ids that have been deleted. - * count: - * type: number - * description: The number of prices that have been deleted. - * object: - * type: string - * description: The type of the object that was deleted. - * deleted: - * type: boolean + * items: + * type: string + * object: + * type: string + * description: The type of the object that was deleted. + * default: money-amount + * deleted: + * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { id, product_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/price-lists/delete-variant-prices.ts b/packages/medusa/src/api/routes/admin/price-lists/delete-variant-prices.ts index 544ad7479f..f38457851e 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/delete-variant-prices.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/delete-variant-prices.ts @@ -1,5 +1,5 @@ -import PriceListService from "../../../../services/price-list" import { EntityManager } from "typeorm" +import PriceListService from "../../../../services/price-list" /** * @oas [delete] /price-lists/{id}/variants/{variant_id}/prices @@ -8,8 +8,8 @@ import { EntityManager } from "typeorm" * description: "Delete all the prices related to a specific variant in a price list" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Price List that the Money Amounts that will be deleted belongs to. - * - (path) variant_id=* {string} The id of the variant from which the money amount will be deleted. + * - (path) id=* {string} The ID of the Price List that the Money Amounts that will be deleted belongs to. + * - (path) variant_id=* {string} The ID of the variant from which the money amount will be deleted. * tags: * - Price List * responses: @@ -20,16 +20,18 @@ import { EntityManager } from "typeorm" * schema: * properties: * ids: - * type: number + * type: array * description: The price ids that have been deleted. - * count: - * type: number - * description: The number of prices that have been deleted. - * object: - * type: string - * description: The type of the object that was deleted. - * deleted: - * type: boolean + * items: + * type: string + * object: + * type: string + * description: The type of the object that was deleted. + * default: money-amount + * deleted: + * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { id, variant_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/price-lists/get-price-list.ts b/packages/medusa/src/api/routes/admin/price-lists/get-price-list.ts index 68571c9cc5..13fc214ca4 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/get-price-list.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/get-price-list.ts @@ -1,4 +1,5 @@ import { defaultAdminPriceListFields, defaultAdminPriceListRelations } from "." + import { PriceList } from "../../../.." import PriceListService from "../../../../services/price-list" @@ -9,7 +10,7 @@ import PriceListService from "../../../../services/price-list" * description: "Retrieves a Price List." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Price List. + * - (path) id=* {string} The ID of the Price List. * tags: * - Price List * responses: diff --git a/packages/medusa/src/api/routes/admin/price-lists/list-price-list-products.ts b/packages/medusa/src/api/routes/admin/price-lists/list-price-list-products.ts index b8db448e5c..02d326f7ca 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/list-price-list-products.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/list-price-list-products.ts @@ -1,5 +1,7 @@ -import { Type } from "class-transformer" -import { pickBy } from "lodash" +import { + DateComparisonOperator, + extendedFindParamsMixin, +} from "../../../../types/common" import { IsArray, IsBoolean, @@ -8,14 +10,13 @@ import { IsString, ValidateNested, } from "class-validator" -import { ProductStatus } from "../../../../models" -import { - DateComparisonOperator, - extendedFindParamsMixin, -} from "../../../../types/common" + import { FilterableProductProps } from "../../../../types/product" import PriceListService from "../../../../services/price-list" +import { ProductStatus } from "../../../../models" import { Request } from "express" +import { Type } from "class-transformer" +import { pickBy } from "lodash" /** * @oas [get] /price-lists/:id/products @@ -24,22 +25,110 @@ import { Request } from "express" * description: "Retrieves a list of Product that are part of a Price List" * x-authenticated: true * parameters: - * - (query) q {string} Query used for searching products. - * - (query) id {string} Id of the product to search for. - * - (query) status {string[]} Status to search for. - * - (query) collection_id {string[]} Collection ids to search for. - * - (query) tags {string[]} Tags to search for. - * - (query) title {string} to search for. - * - (query) description {string} to search for. - * - (query) handle {string} to search for. + * - (query) q {string} Query used for searching product title and description, variant title and sku, and collection title. + * - (query) id {string} ID of the product to search for. + * - in: query + * name: status + * description: Product status to search for + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * enum: [draft, proposed, published, rejected] + * - in: query + * name: collection_id + * description: Collection IDs to search for + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: tags + * description: Tag IDs to search for + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - (query) title {string} product title to search for. + * - (query) description {string} product description to search for. + * - (query) handle {string} product handle to search for. * - (query) is_giftcard {string} Search for giftcards using is_giftcard=true. * - (query) type {string} to search for. - * - (query) order {string} to retrieve products in. - * - (query) deleted_at {DateComparisonOperator} Date comparison for when resulting products was deleted, i.e. less than, greater than etc. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting products was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting products was updated, i.e. less than, greater than etc. - * - (query) offset {string} How many products to skip in the result. - * - (query) limit {string} Limit the number of products returned. + * - (query) order {string} field to sort results by. + * - in: query + * name: created_at + * description: Date comparison for when resulting products were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting products were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: deleted_at + * description: Date comparison for when resulting products were deleted. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - (query) offset=0 {integer} How many products to skip in the result. + * - (query) limit=50 {integer} Limit the number of products returned. * - (query) expand {string} (Comma separated) Which fields should be expanded in each product of the result. * - (query) fields {string} (Comma separated) Which fields should be included in each product of the result. * tags: @@ -51,19 +140,19 @@ import { Request } from "express" * application/json: * schema: * properties: - * count: - * description: The number of Products. - * type: integer - * offset: - * description: The offset of the Product query. - * type: integer - * limit: - * description: The limit of the Product query. - * type: integer * products: * type: array * items: * $ref: "#/components/schemas/product" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req: Request, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/price-lists/list-price-lists.ts b/packages/medusa/src/api/routes/admin/price-lists/list-price-lists.ts index c45804f689..6653e086fd 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/list-price-lists.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/list-price-lists.ts @@ -1,14 +1,119 @@ -import { Type } from "class-transformer" import { IsNumber, IsOptional, IsString } from "class-validator" -import PriceListService from "../../../../services/price-list" + import { FilterablePriceListProps } from "../../../../types/price-list" +import PriceListService from "../../../../services/price-list" import { Request } from "express" +import { Type } from "class-transformer" + /** * @oas [get] /price-lists * operationId: "GetPriceLists" * summary: "List Price Lists" * description: "Retrieves a list of Price Lists." * x-authenticated: true + * parameters: + * - (query) limit=10 {number} The number of items to get + * - (query) offset=0 {number} The offset at which to get items + * - (query) expand {string} (Comma separated) Which fields should be expanded in each item of the result. + * - (query) order {string} field to order results by. + * - (query) id {string} ID to search for. + * - (query) q {string} query to search in price list description, price list name, and customer group name fields. + * - in: query + * name: status + * style: form + * explode: false + * description: Status to search for. + * schema: + * type: array + * items: + * type: string + * enum: [active, draft] + * - (query) name {string} price list name to search for. + * - in: query + * name: customer_groups + * style: form + * explode: false + * description: Customer Group IDs to search for. + * schema: + * type: array + * items: + * type: string + * - in: query + * name: type + * style: form + * explode: false + * description: Type to search for. + * schema: + * type: array + * items: + * type: string + * enum: [sale, override] + * - in: query + * name: created_at + * description: Date comparison for when resulting price lists were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting price lists were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: deleted_at + * description: Date comparison for when resulting price lists were deleted. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date * tags: * - Price List * responses: @@ -23,14 +128,14 @@ import { Request } from "express" * items: * $ref: "#/components/schemas/price_list" * count: - * description: The number of Price Lists. * type: integer + * description: The total number of items available * offset: - * description: The offset of the Price List query. * type: integer + * description: The number of items skipped before these items * limit: - * description: The limit of the Price List query. * type: integer + * description: The number of items per page */ export default async (req: Request, res) => { const validated = req.validatedQuery diff --git a/packages/medusa/src/api/routes/admin/price-lists/update-price-list.ts b/packages/medusa/src/api/routes/admin/price-lists/update-price-list.ts index 887abac188..6b53148151 100644 --- a/packages/medusa/src/api/routes/admin/price-lists/update-price-list.ts +++ b/packages/medusa/src/api/routes/admin/price-lists/update-price-list.ts @@ -1,4 +1,8 @@ -import { Type } from "class-transformer" +import { + AdminPriceListPricesUpdateReq, + PriceListStatus, + PriceListType, +} from "../../../../types/price-list" import { IsArray, IsEnum, @@ -7,24 +11,21 @@ import { ValidateNested, } from "class-validator" import { defaultAdminPriceListFields, defaultAdminPriceListRelations } from "." + import { PriceList } from "../../../.." import PriceListService from "../../../../services/price-list" -import { - AdminPriceListPricesUpdateReq, - PriceListStatus, - PriceListType, -} from "../../../../types/price-list" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" /** - * @oas [post] /price_lists/{id} + * @oas [post] /price-lists/{id} * operationId: "PostPriceListsPriceListPriceList" * summary: "Update a Price List" * description: "Updates a Price List" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Price List. + * - (path) id=* {string} The ID of the Price List. * requestBody: * content: * application/json: @@ -36,50 +37,67 @@ import { EntityManager } from "typeorm" * description: * description: "A description of the Price List." * type: string + * starts_at: + * description: "The date with timezone that the Price List starts being valid." + * type: string + * format: date + * ends_at: + * description: "The date with timezone that the Price List ends being valid." + * type: string + * format: date * type: * description: The type of the Price List. * type: string * enum: * - sale * - override - * status: - * description: The status of the Price List. - * type: string - * enum: - * - active - * - draft - * prices: - * description: The prices of the Price List. - * type: array - * items: - * properties: - * id: - * description: The id of the price. - * type: string - * region_id: - * description: The id of the Region for which the price is used. - * type: string - * currency_code: - * description: The 3 character ISO currency code for which the price will be used. - * type: string - * amount: - * description: The amount to charge for the Product Variant. - * type: integer - * min_quantity: - * description: The minimum quantity for which the price will be used. - * type: integer - * max_quantity: - * description: The maximum quantity for which the price will be used. - * type: integer - * customer_groups: - * type: array + * status: + * description: The status of the Price List. + * type: string + * enum: + * - active + * - draft + * prices: + * description: The prices of the Price List. + * type: array + * items: + * required: + * - amount + * - variant_id + * properties: + * id: + * description: The ID of the price. + * type: string + * region_id: + * description: The ID of the Region for which the price is used. Only required if currecny_code is not provided. + * type: string + * currency_code: + * description: The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided. + * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. + * variant_id: + * description: The ID of the Variant for which the price is used. + * type: string + * amount: + * description: The amount to charge for the Product Variant. + * type: integer + * min_quantity: + * description: The minimum quantity for which the price will be used. + * type: integer + * max_quantity: + * description: The maximum quantity for which the price will be used. + * type: integer + * customer_groups: + * type: array * description: A list of customer groups that the Price List applies to. * items: * required: * - id * properties: * id: - * description: The id of a customer group + * description: The ID of a customer group * type: string * tags: * - Price List @@ -90,7 +108,7 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * product: + * price_list: * $ref: "#/components/schemas/price_list" */ export default async (req, res) => { diff --git a/packages/medusa/src/api/routes/admin/product-tags/list-product-tags.ts b/packages/medusa/src/api/routes/admin/product-tags/list-product-tags.ts index 6638e8e93a..f4dbafe5e9 100644 --- a/packages/medusa/src/api/routes/admin/product-tags/list-product-tags.ts +++ b/packages/medusa/src/api/routes/admin/product-tags/list-product-tags.ts @@ -1,21 +1,22 @@ -import { Type } from "class-transformer" -import { IsNumber, IsOptional, IsString } from "class-validator" -import { identity, omit, pickBy } from "lodash" -import { MedusaError } from "medusa-core-utils" -import { - allowedAdminProductTagsFields, - defaultAdminProductTagsFields, - defaultAdminProductTagsRelations, -} from "." -import { ProductTag } from "../../../../models/product-tag" -import ProductTagService from "../../../../services/product-tag" import { DateComparisonOperator, FindConfig, StringComparisonOperator, } from "../../../../types/common" -import { validator } from "../../../../utils/validator" +import { IsNumber, IsOptional, IsString } from "class-validator" +import { + allowedAdminProductTagsFields, + defaultAdminProductTagsFields, + defaultAdminProductTagsRelations, +} from "." +import { identity, omit, pickBy } from "lodash" + import { IsType } from "../../../../utils/validators/is-type" +import { MedusaError } from "medusa-core-utils" +import { ProductTag } from "../../../../models/product-tag" +import ProductTagService from "../../../../services/product-tag" +import { Type } from "class-transformer" +import { validator } from "../../../../utils/validator" /** * @oas [get] /product-tags @@ -24,12 +25,72 @@ import { IsType } from "../../../../utils/validators/is-type" * description: "Retrieve a list of Product Tags." * x-authenticated: true * parameters: - * - (query) limit {string} The number of tags to return. - * - (query) offset {string} The offset of tags to return. - * - (query) value {string} The value of tags to return. - * - (query) id {string} The id of tags to return. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting tas was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting tas was updated, i.e. less than, greater than etc. + * - (query) limit=10 {integer} The number of tags to return. + * - (query) offset=0 {integer} The number of items to skip before the results. + * - (query) order {string} The field to sort items by. + * - in: query + * name: value + * style: form + * explode: false + * description: The tag values to search for + * schema: + * type: array + * items: + * type: string + * - (query) q {string} A query string to search values for + * - in: query + * name: id + * style: form + * explode: false + * description: The tag IDs to search for + * schema: + * type: array + * items: + * type: string + * - in: query + * name: created_at + * description: Date comparison for when resulting product tags were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting product tags were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date * tags: * - Product Tag * responses: @@ -39,8 +100,17 @@ import { IsType } from "../../../../utils/validators/is-type" * application/json: * schema: * properties: - * tags: + * product_tags: * $ref: "#/components/schemas/product_tag" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const validated = await validator(AdminGetProductTagsParams, req.query) diff --git a/packages/medusa/src/api/routes/admin/product-types/list-product-types.ts b/packages/medusa/src/api/routes/admin/product-types/list-product-types.ts index d04d1db731..8fe0d9260c 100644 --- a/packages/medusa/src/api/routes/admin/product-types/list-product-types.ts +++ b/packages/medusa/src/api/routes/admin/product-types/list-product-types.ts @@ -1,21 +1,22 @@ -import { Type } from "class-transformer" -import { IsNumber, IsOptional, IsString } from "class-validator" -import { identity, omit, pickBy } from "lodash" -import { MedusaError } from "medusa-core-utils" -import { - allowedAdminProductTypeFields, - defaultAdminProductTypeFields, - defaultAdminProductTypeRelations, -} from "." -import { ProductType } from "../../../../models/product-type" -import ProductTypeService from "../../../../services/product-type" import { DateComparisonOperator, FindConfig, StringComparisonOperator, } from "../../../../types/common" -import { validator } from "../../../../utils/validator" +import { IsNumber, IsOptional, IsString } from "class-validator" +import { + allowedAdminProductTypeFields, + defaultAdminProductTypeFields, + defaultAdminProductTypeRelations, +} from "." +import { identity, omit, pickBy } from "lodash" + import { IsType } from "../../../../utils/validators/is-type" +import { MedusaError } from "medusa-core-utils" +import { ProductType } from "../../../../models/product-type" +import ProductTypeService from "../../../../services/product-type" +import { Type } from "class-transformer" +import { validator } from "../../../../utils/validator" /** * @oas [get] /product-types @@ -24,14 +25,74 @@ import { IsType } from "../../../../utils/validators/is-type" * description: "Retrieve a list of Product Types." * x-authenticated: true * parameters: - * - (query) limit {string} The number of types to return. - * - (query) offset {string} The offset of types to return. - * - (query) value {string} The value of types to return. - * - (query) id {string} The id of types to return. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting tas was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting tas was updated, i.e. less than, greater than etc. + * - (query) limit=10 {integer} The number of types to return. + * - (query) offset=0 {integer} The number of items to skip before the results. + * - (query) order {string} The field to sort items by. + * - in: query + * name: value + * style: form + * explode: false + * description: The type values to search for + * schema: + * type: array + * items: + * type: string + * - in: query + * name: id + * style: form + * explode: false + * description: The type IDs to search for + * schema: + * type: array + * items: + * type: string + * - (query) q {string} A query string to search values for + * - in: query + * name: created_at + * description: Date comparison for when resulting product types were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting product types were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date * tags: - * - Product Tag + * - Product Type * responses: * "200": * description: OK @@ -39,8 +100,17 @@ import { IsType } from "../../../../utils/validators/is-type" * application/json: * schema: * properties: - * types: - * $ref: "#/components/schemas/product_tag" + * product_types: + * $ref: "#/components/schemas/product_type" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const validated = await validator(AdminGetProductTypesParams, req.query) diff --git a/packages/medusa/src/api/routes/admin/products/add-option.ts b/packages/medusa/src/api/routes/admin/products/add-option.ts index 2357c86977..3fa80b9020 100644 --- a/packages/medusa/src/api/routes/admin/products/add-option.ts +++ b/packages/medusa/src/api/routes/admin/products/add-option.ts @@ -1,6 +1,7 @@ -import { IsString } from "class-validator" +import { PricingService, ProductService } from "../../../../services" import { defaultAdminProductFields, defaultAdminProductRelations } from "." -import { ProductService, PricingService } from "../../../../services" + +import { IsString } from "class-validator" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -11,7 +12,7 @@ import { EntityManager } from "typeorm" * x-authenticated: true * description: "Adds a Product Option to a Product" * parameters: - * - (path) id=* {string} The id of the Product. + * - (path) id=* {string} The ID of the Product. * requestBody: * content: * application/json: diff --git a/packages/medusa/src/api/routes/admin/products/create-product.ts b/packages/medusa/src/api/routes/admin/products/create-product.ts index 4c1fa71c50..803bbdbe08 100644 --- a/packages/medusa/src/api/routes/admin/products/create-product.ts +++ b/packages/medusa/src/api/routes/admin/products/create-product.ts @@ -1,4 +1,7 @@ -import { Type } from "class-transformer" +import { + CreateProductVariantInput, + ProductVariantPricesCreateReq, +} from "../../../../types/product-variant" import { IsArray, IsBoolean, @@ -9,10 +12,6 @@ import { IsString, ValidateNested, } from "class-validator" -import { EntityManager } from "typeorm" -import { defaultAdminProductFields, defaultAdminProductRelations } from "." -import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels" -import { ProductStatus } from "../../../../models" import { PricingService, ProductService, @@ -24,11 +23,13 @@ import { ProductTagReq, ProductTypeReq, } from "../../../../types/product" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." + +import { EntityManager } from "typeorm" import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators" -import { - CreateProductVariantInput, - ProductVariantPricesCreateReq, -} from "../../../../types/product-variant" +import { ProductStatus } from "../../../../models" +import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" /** @@ -40,10 +41,6 @@ import { validator } from "../../../../utils/validator" * requestBody: * content: * application/json: - * required: - * - title - * - subtitle - * - description * schema: * required: * - title @@ -60,9 +57,11 @@ import { validator } from "../../../../utils/validator" * is_giftcard: * description: A flag to indicate if the Product represents a Gift Card. Purchasing Products with this flag set to `true` will result in a Gift Card being created. * type: boolean + * default: false * discountable: * description: A flag to indicate if discounts can be applied to the LineItems generated from this Product * type: boolean + * default: true * images: * description: Images of the Product. * type: array @@ -74,39 +73,55 @@ import { validator } from "../../../../utils/validator" * handle: * description: A unique handle to identify the Product by. * type: string + * status: + * description: The status of the product. + * type: string + * enum: [draft, proposed, published, rejected] + * default: draft * type: * description: The Product Type to associate the Product with. * type: object + * required: + * - value * properties: + * id: + * description: The ID of the Product Type. + * type: string * value: * description: The value of the Product Type. * type: string * collection_id: - * description: The id of the Collection the Product should belong to. + * description: The ID of the Collection the Product should belong to. * type: string * tags: * description: Tags to associate the Product with. * type: array * items: + * required: + * - value * properties: * id: - * description: The id of an existing Tag. + * description: The ID of an existing Tag. * type: string * value: * description: The value of the Tag, these will be upserted. * type: string - * sales_channels: - * description: [EXPERIMENTAL] Sales channels to associate the Product with. + * sales_channels: + * description: "[EXPERIMENTAL] Sales channels to associate the Product with." * type: array * items: + * required: + * - id * properties: * id: - * description: The id of an existing Sales channel. + * description: The ID of an existing Sales channel. * type: string * options: * description: The Options that the Product should have. These define on which properties the Product's Product Variants will differ. * type: array * items: + * required: + * - title * properties: * title: * description: The title to identify the Product Option by. @@ -115,6 +130,8 @@ import { validator } from "../../../../utils/validator" * description: A list of Product Variants to create with the Product. * type: array * items: + * required: + * - title * properties: * title: * description: The title to identify the Product Variant by. @@ -137,6 +154,7 @@ import { validator } from "../../../../utils/validator" * inventory_quantity: * description: The amount of stock kept for the Product Variant. * type: integer + * default: 0 * allow_backorder: * description: Whether the Product Variant can be purchased when out of stock. * type: boolean @@ -145,16 +163,16 @@ import { validator } from "../../../../utils/validator" * type: boolean * weight: * description: The wieght of the Product Variant. - * type: string + * type: number * length: * description: The length of the Product Variant. - * type: string + * type: number * height: * description: The height of the Product Variant. - * type: string + * type: number * width: * description: The width of the Product Variant. - * type: string + * type: number * origin_country: * description: The country of origin of the Product Variant. * type: string @@ -170,37 +188,50 @@ import { validator } from "../../../../utils/validator" * prices: * type: array * items: + * required: + * - amount * properties: * region_id: - * description: The id of the Region for which the price is used. + * description: The ID of the Region for which the price is used. Only required if currency_code is not provided. * type: string * currency_code: - * description: The 3 character ISO currency code for which the price will be used. + * description: The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided. * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * amount: * description: The amount to charge for the Product Variant. * type: integer - * sale_amount: - * description: The sale amount to charge for the Product Variant. + * min_quantity: + * description: The minimum quantity for which the price will be used. + * type: integer + * max_quantity: + * description: The maximum quantity for which the price will be used. * type: integer * options: * type: array * items: + * required: + * - value * properties: * value: * description: The value to give for the Product Option at the same index in the Product's `options` field. * type: string * weight: * description: The wieght of the Product. - * type: string + * type: number * length: * description: The length of the Product. - * type: string + * type: number * height: * description: The height of the Product. - * type: string + * type: number * width: * description: The width of the Product. + * type: number + * hs_code: + * description: The Harmonized System code for the Product Variant. * type: string * origin_country: * description: The country of origin of the Product. diff --git a/packages/medusa/src/api/routes/admin/products/create-variant.ts b/packages/medusa/src/api/routes/admin/products/create-variant.ts index 135eeadb8d..5e4958ab3f 100644 --- a/packages/medusa/src/api/routes/admin/products/create-variant.ts +++ b/packages/medusa/src/api/routes/admin/products/create-variant.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsBoolean, @@ -8,9 +7,11 @@ import { IsString, ValidateNested, } from "class-validator" -import { defaultAdminProductFields, defaultAdminProductRelations } from "." import { ProductService, ProductVariantService } from "../../../../services" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." + import { ProductVariantPricesCreateReq } from "../../../../types/product-variant" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -21,7 +22,7 @@ import { EntityManager } from "typeorm" * description: "Creates a Product Variant. Each Product Variant must have a unique combination of Product Option Values." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Product. + * - (path) id=* {string} The ID of the Product. * requestBody: * content: * application/json: @@ -52,6 +53,7 @@ import { EntityManager } from "typeorm" * inventory_quantity: * description: The amount of stock kept for the Product Variant. * type: integer + * default: 0 * allow_backorder: * description: Whether the Product Variant can be purchased when out of stock. * type: boolean @@ -60,16 +62,16 @@ import { EntityManager } from "typeorm" * type: boolean * weight: * description: The wieght of the Product Variant. - * type: string + * type: number * length: * description: The length of the Product Variant. - * type: string + * type: number * height: * description: The height of the Product Variant. - * type: string + * type: number * width: * description: The width of the Product Variant. - * type: string + * type: number * origin_country: * description: The country of origin of the Product Variant. * type: string @@ -85,28 +87,39 @@ import { EntityManager } from "typeorm" * prices: * type: array * items: + * required: + * - amount * properties: + * id: + * description: The ID of the price. + * type: string * region_id: - * description: The id of the Region for which the price is used. + * description: The ID of the Region for which the price is used. Only required if currency_code is not provided. * type: string * currency_code: - * description: The 3 character ISO currency code for which the price will be used. + * description: The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided. * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * amount: * description: The amount to charge for the Product Variant. * type: integer * min_quantity: - * description: The minimum quantity for which the price will be used. - * type: integer + * description: The minimum quantity for which the price will be used. + * type: integer * max_quantity: * description: The maximum quantity for which the price will be used. * type: integer * options: * type: array * items: + * required: + * - option_id + * - value * properties: * option_id: - * description: The id of the Product Option to set the value for. + * description: The ID of the Product Option to set the value for. * type: string * value: * description: The value to give for the Product Option. diff --git a/packages/medusa/src/api/routes/admin/products/delete-option.ts b/packages/medusa/src/api/routes/admin/products/delete-option.ts index 692dc0a37f..e5e7909dc2 100644 --- a/packages/medusa/src/api/routes/admin/products/delete-option.ts +++ b/packages/medusa/src/api/routes/admin/products/delete-option.ts @@ -1,6 +1,7 @@ import { defaultAdminProductFields, defaultAdminProductRelations } from "." -import { ProductService } from "../../../../services" + import { EntityManager } from "typeorm" +import { ProductService } from "../../../../services" /** * @oas [delete] /products/{id}/options/{option_id} @@ -9,8 +10,8 @@ import { EntityManager } from "typeorm" * description: "Deletes a Product Option. Before a Product Option can be deleted all Option Values for the Product Option must be the same. You may, for example, have to delete some of your variants prior to deleting the Product Option" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Product. - * - (path) option_id=* {string} The id of the Product Option. + * - (path) id=* {string} The ID of the Product. + * - (path) option_id=* {string} The ID of the Product Option. * tags: * - Product * responses: @@ -20,14 +21,17 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * id: + * option_id: * type: string - * description: The id of the deleted Product Option + * description: The ID of the deleted Product Option * object: * type: string * description: The type of the object that was deleted. + * default: option * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true * product: * $ref: "#/components/schemas/product" */ diff --git a/packages/medusa/src/api/routes/admin/products/delete-product.ts b/packages/medusa/src/api/routes/admin/products/delete-product.ts index f39c50dd23..f8955a7067 100644 --- a/packages/medusa/src/api/routes/admin/products/delete-product.ts +++ b/packages/medusa/src/api/routes/admin/products/delete-product.ts @@ -1,5 +1,5 @@ -import { ProductService } from "../../../../services" import { EntityManager } from "typeorm" +import { ProductService } from "../../../../services" /** * @oas [delete] /products/{id} @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Deletes a Product and it's associated Product Variants." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Product. + * - (path) id=* {string} The ID of the Product. * tags: * - Product * responses: @@ -20,12 +20,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Product. + * description: The ID of the deleted Product. * object: * type: string * description: The type of the object that was deleted. + * default: product * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/products/delete-variant.ts b/packages/medusa/src/api/routes/admin/products/delete-variant.ts index ff701fc642..ecf09a932f 100644 --- a/packages/medusa/src/api/routes/admin/products/delete-variant.ts +++ b/packages/medusa/src/api/routes/admin/products/delete-variant.ts @@ -1,9 +1,10 @@ -import { defaultAdminProductFields, defaultAdminProductRelations } from "." import { - ProductService, PricingService, + ProductService, ProductVariantService, } from "../../../../services" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." + import { EntityManager } from "typeorm" /** @@ -13,8 +14,8 @@ import { EntityManager } from "typeorm" * description: "Deletes a Product Variant." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Product. - * - (path) variant_id=* {string} The id of the Product Variant. + * - (path) id=* {string} The ID of the Product. + * - (path) variant_id=* {string} The ID of the Product Variant. * tags: * - Product * responses: @@ -24,14 +25,19 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * id: + * variant_id: * type: string - * description: The id of the deleted Product Variant. + * description: The ID of the deleted Product Variant. * object: * type: string * description: The type of the object that was deleted. + * default: variant * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true + * product: + * $ref: "#/components/schemas/product" */ export default async (req, res) => { const { id, variant_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/products/get-product.ts b/packages/medusa/src/api/routes/admin/products/get-product.ts index cea4a9783b..5ebb548054 100644 --- a/packages/medusa/src/api/routes/admin/products/get-product.ts +++ b/packages/medusa/src/api/routes/admin/products/get-product.ts @@ -1,4 +1,4 @@ -import { ProductService, PricingService } from "../../../../services" +import { PricingService, ProductService } from "../../../../services" /** * @oas [get] /products/{id} @@ -7,7 +7,7 @@ import { ProductService, PricingService } from "../../../../services" * description: "Retrieves a Product." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Product. + * - (path) id=* {string} The ID of the Product. * tags: * - Product * responses: diff --git a/packages/medusa/src/api/routes/admin/products/list-products.ts b/packages/medusa/src/api/routes/admin/products/list-products.ts index 37ed39f70d..5e2a2fe2be 100644 --- a/packages/medusa/src/api/routes/admin/products/list-products.ts +++ b/packages/medusa/src/api/routes/admin/products/list-products.ts @@ -1,9 +1,10 @@ -import { Type } from "class-transformer" import { IsNumber, IsOptional, IsString } from "class-validator" -import { Product } from "../../../../models" -import { PricedProduct } from "../../../../types/pricing" import { PricingService, ProductService } from "../../../../services" + import { FilterableProductProps } from "../../../../types/product" +import { PricedProduct } from "../../../../types/pricing" +import { Product } from "../../../../models" +import { Type } from "class-transformer" /** * @oas [get] /products @@ -12,23 +13,139 @@ import { FilterableProductProps } from "../../../../types/product" * description: "Retrieves a list of Product" * x-authenticated: true * parameters: - * - (query) q {string} Query used for searching products. - * - (query) id {string} Id of the product to search for. - * - (query) status {string[]} Status to search for. - * - (query) collection_id {string[]} Collection ids to search for. - * - (query) tags {string[]} Tags to search for. - * - (query) title {string} to search for. - * - (query) description {string} to search for. - * - (query) handle {string} to search for. - * - (query) is_giftcard {string} Search for giftcards using is_giftcard=true. - * - (query) type {string} to search for. - * - (query) order {string} to retrieve products in. - * - (query) sales_chanel_id {string[]} to retrieve products in. - * - (query) deleted_at {DateComparisonOperator} Date comparison for when resulting products was deleted, i.e. less than, greater than etc. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting products was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting products was updated, i.e. less than, greater than etc. - * - (query) offset {string} How many products to skip in the result. - * - (query) limit {string} Limit the number of products returned. + * - (query) q {string} Query used for searching product title and description, variant title and sku, and collection title. + * - in: query + * name: id + * style: form + * explode: false + * description: Filter by product IDs. + * schema: + * oneOf: + * - type: string + * description: ID of the product to search for. + * - type: array + * items: + * type: string + * description: ID of a product. + * - in: query + * name: status + * style: form + * explode: false + * description: Status to search for + * schema: + * type: array + * items: + * type: string + * enum: [draft, proposed, published, rejected] + * - in: query + * name: collection_id + * style: form + * explode: false + * description: Collection ids to search for. + * schema: + * type: array + * items: + * type: string + * - in: query + * name: tags + * style: form + * explode: false + * description: Tag IDs to search for + * schema: + * type: array + * items: + * type: string + * - in: query + * name: price_list_id + * style: form + * explode: false + * description: Price List IDs to search for + * schema: + * type: array + * items: + * type: string + * - in: query + * name: sales_channel_id + * style: form + * explode: false + * description: Sales Channel IDs to filter products by + * schema: + * type: array + * items: + * type: string + * - (query) title {string} title to search for. + * - (query) description {string} description to search for. + * - (query) handle {string} handle to search for. + * - (query) is_giftcard {boolean} Search for giftcards using is_giftcard=true. + * - (query) type {string} type ID to search for. + * - in: query + * name: created_at + * description: Date comparison for when resulting products were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting products were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: deleted_at + * description: Date comparison for when resulting products were deleted. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - (query) offset=0 {integer} How many products to skip in the result. + * - (query) limit=50 {integer} Limit the number of products returned. * - (query) expand {string} (Comma separated) Which fields should be expanded in each product of the result. * - (query) fields {string} (Comma separated) Which fields should be included in each product of the result. * tags: @@ -40,19 +157,19 @@ import { FilterableProductProps } from "../../../../types/product" * application/json: * schema: * properties: - * count: - * description: The number of Products. - * type: integer - * offset: - * description: The offset of the Product query. - * type: integer - * limit: - * description: The limit of the Product query. - * type: integer * products: * type: array * items: * $ref: "#/components/schemas/product" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const productService: ProductService = req.scope.resolve("productService") diff --git a/packages/medusa/src/api/routes/admin/products/list-tag-usage-count.ts b/packages/medusa/src/api/routes/admin/products/list-tag-usage-count.ts index ec83366d5e..3bd5ee597e 100644 --- a/packages/medusa/src/api/routes/admin/products/list-tag-usage-count.ts +++ b/packages/medusa/src/api/routes/admin/products/list-tag-usage-count.ts @@ -1,5 +1,34 @@ import { ProductService } from "../../../../services" +/** + * @oas [get] /products/tag-usage + * operationId: "GetProductsTagUsage" + * summary: "List Product Tags Usage Number" + * description: "Retrieves a list of Product Tags with how many times each is used." + * x-authenticated: true + * tags: + * - Product Tag + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * tags: + * type: array + * items: + * properties: + * id: + * description: The ID of the tag. + * type: string + * usage_count: + * description: The number of products that use this tag. + * type: string + * value: + * description: The value of the tag. + * type: string + */ export default async (req, res) => { const productService: ProductService = req.scope.resolve("productService") diff --git a/packages/medusa/src/api/routes/admin/products/list-variants.ts b/packages/medusa/src/api/routes/admin/products/list-variants.ts index 6914378346..b5972c6e35 100644 --- a/packages/medusa/src/api/routes/admin/products/list-variants.ts +++ b/packages/medusa/src/api/routes/admin/products/list-variants.ts @@ -1,11 +1,12 @@ -import { Request, Response } from "express" -import { ProductVariantService } from "../../../../services" -import { validator } from "../../../../utils/validator" import { IsNumber, IsOptional, IsString } from "class-validator" -import { Type } from "class-transformer" -import { getRetrieveConfig } from "../../../../utils/get-query-config" +import { Request, Response } from "express" + import { ProductVariant } from "../../../../models" +import { ProductVariantService } from "../../../../services" +import { Type } from "class-transformer" import { defaultAdminGetProductsVariantsFields } from "./index" +import { getRetrieveConfig } from "../../../../utils/get-query-config" +import { validator } from "../../../../utils/validator" /** * @oas [get] /products/{id}/variants @@ -14,11 +15,11 @@ import { defaultAdminGetProductsVariantsFields } from "./index" * description: "Retrieves a list of the Product Variants associated with a Product." * x-authenticated: true * parameters: - * - (path) id=* {string} Id of the product to search for the variants. + * - (path) id=* {string} ID of the product to search for the variants. * - (query) fields {string} Comma separated string of the column to select. * - (query) expand {string} Comma separated string of the relations to include. - * - (query) offset {string} How many products to skip in the result. - * - (query) limit {string} Limit the number of products returned. + * - (query) offset=0 {integer} How many items to skip before the results. + * - (query) limit=100 {integer} Limit the number of items returned. * tags: * - Product * responses: @@ -32,6 +33,15 @@ import { defaultAdminGetProductsVariantsFields } from "./index" * type: array * items: * $ref: "#/components/schemas/product_variant" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req: Request, res: Response) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/products/set-metadata.ts b/packages/medusa/src/api/routes/admin/products/set-metadata.ts index de5b2a3e71..909784962c 100644 --- a/packages/medusa/src/api/routes/admin/products/set-metadata.ts +++ b/packages/medusa/src/api/routes/admin/products/set-metadata.ts @@ -1,5 +1,6 @@ -import { IsString } from "class-validator" import { defaultAdminProductFields, defaultAdminProductRelations } from "." + +import { IsString } from "class-validator" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -10,7 +11,7 @@ import { EntityManager } from "typeorm" * description: "Set metadata key/value pair for Product" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Product. + * - (path) id=* {string} The ID of the Product. * requestBody: * content: * application/json: diff --git a/packages/medusa/src/api/routes/admin/products/update-option.ts b/packages/medusa/src/api/routes/admin/products/update-option.ts index 22822873e8..9883b9351d 100644 --- a/packages/medusa/src/api/routes/admin/products/update-option.ts +++ b/packages/medusa/src/api/routes/admin/products/update-option.ts @@ -1,5 +1,6 @@ -import { IsString } from "class-validator" import { defaultAdminProductFields, defaultAdminProductRelations } from "." + +import { IsString } from "class-validator" import { ProductService } from "../../../../services" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -11,14 +12,14 @@ import { EntityManager } from "typeorm" * description: "Updates a Product Option" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Product. - * - (path) option_id=* {string} The id of the Product Option. + * - (path) id=* {string} The ID of the Product. + * - (path) option_id=* {string} The ID of the Product Option. * requestBody: * content: * application/json: - * required: - * - title * schema: + * required: + * - title * properties: * title: * description: "The title of the Product Option" diff --git a/packages/medusa/src/api/routes/admin/products/update-product.ts b/packages/medusa/src/api/routes/admin/products/update-product.ts index 01598f3b7f..680bf58f75 100644 --- a/packages/medusa/src/api/routes/admin/products/update-product.ts +++ b/packages/medusa/src/api/routes/admin/products/update-product.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsBoolean, @@ -12,19 +11,21 @@ import { ValidateIf, ValidateNested, } from "class-validator" -import { defaultAdminProductFields, defaultAdminProductRelations } from "." -import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels" -import { ProductStatus } from "../../../../models" import { PricingService, ProductService } from "../../../../services" import { ProductSalesChannelReq, ProductTagReq, ProductTypeReq, } from "../../../../types/product" -import { ProductVariantPricesUpdateReq } from "../../../../types/product-variant" -import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators" -import { validator } from "../../../../utils/validator" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." + import { EntityManager } from "typeorm" +import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators" +import { ProductStatus } from "../../../../models" +import { ProductVariantPricesUpdateReq } from "../../../../types/product-variant" +import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels" +import { Type } from "class-transformer" +import { validator } from "../../../../utils/validator" /** * @oas [post] /products/{id} @@ -33,7 +34,7 @@ import { EntityManager } from "typeorm" * description: "Updates a Product" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Product. + * - (path) id=* {string} The ID of the Product. * requestBody: * content: * application/json: @@ -48,9 +49,6 @@ import { EntityManager } from "typeorm" * description: * description: "A description of the Product." * type: string - * is_giftcard: - * description: A flag to indicate if the Product represents a Gift Card. Purchasing Products with this flag set to `true` will result in a Gift Card being created. - * type: boolean * discountable: * description: A flag to indicate if discounts can be applied to the LineItems generated from this Product * type: boolean @@ -65,48 +63,56 @@ import { EntityManager } from "typeorm" * handle: * description: A unique handle to identify the Product by. * type: string + * status: + * description: The status of the product. + * type: string + * enum: [draft, proposed, published, rejected] * type: * description: The Product Type to associate the Product with. * type: object + * required: + * - value * properties: + * id: + * description: The ID of the Product Type. + * type: string * value: * description: The value of the Product Type. * type: string * collection_id: - * description: The id of the Collection the Product should belong to. + * description: The ID of the Collection the Product should belong to. * type: string * tags: * description: Tags to associate the Product with. * type: array * items: + * required: + * - value * properties: * id: - * description: The id of an existing Tag. + * description: The ID of an existing Tag. * type: string * value: * description: The value of the Tag, these will be upserted. * type: string - * sales_channels: - * description: [EXPERIMENTAL] Sales channels to associate the Product with. + * sales_channels: + * description: "[EXPERIMENTAL] Sales channels to associate the Product with." * type: array * items: + * required: + * - id * properties: * id: - * description: The id of an existing Sales channel. - * type: string - * options: - * description: The Options that the Product should have. These define on which properties the Product's Product Variants will differ. - * type: array - * items: - * properties: - * title: - * description: The title to identify the Product Option by. + * description: The ID of an existing Sales channel. * type: string * variants: * description: A list of Product Variants to create with the Product. * type: array * items: * properties: + * id: + * description: The ID of the Product Variant. + * type: string * title: * description: The title to identify the Product Variant by. * type: string @@ -136,16 +142,16 @@ import { EntityManager } from "typeorm" * type: boolean * weight: * description: The wieght of the Product Variant. - * type: string + * type: number * length: * description: The length of the Product Variant. - * type: string + * type: number * height: * description: The height of the Product Variant. - * type: string + * type: number * width: * description: The width of the Product Variant. - * type: string + * type: number * origin_country: * description: The country of origin of the Product Variant. * type: string @@ -161,38 +167,55 @@ import { EntityManager } from "typeorm" * prices: * type: array * items: + * required: + * - amount * properties: + * id: + * description: The ID of the Price. + * type: string * region_id: - * description: The id of the Region for which the price is used. + * description: The ID of the Region for which the price is used. Only required if currency_code is not provided. * type: string * currency_code: - * description: The 3 character ISO currency code for which the price will be used. + * description: The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided. * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * amount: * description: The amount to charge for the Product Variant. * type: integer - * sale_amount: - * description: The sale amount to charge for the Product Variant. + * min_quantity: + * description: The minimum quantity for which the price will be used. + * type: integer + * max_quantity: + * description: The maximum quantity for which the price will be used. * type: integer * options: * type: array * items: + * required: + * - option_id + * - value * properties: + * option_id: + * description: The ID of the Option. + * type: string * value: * description: The value to give for the Product Option at the same index in the Product's `options` field. * type: string * weight: * description: The wieght of the Product. - * type: string + * type: number * length: * description: The length of the Product. - * type: string + * type: number * height: * description: The height of the Product. - * type: string + * type: number * width: * description: The width of the Product. - * type: string + * type: number * origin_country: * description: The country of origin of the Product. * type: string diff --git a/packages/medusa/src/api/routes/admin/products/update-variant.ts b/packages/medusa/src/api/routes/admin/products/update-variant.ts index c043f8e416..e8fc412c94 100644 --- a/packages/medusa/src/api/routes/admin/products/update-variant.ts +++ b/packages/medusa/src/api/routes/admin/products/update-variant.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsBoolean, @@ -8,14 +7,16 @@ import { IsString, ValidateNested, } from "class-validator" -import { defaultAdminProductFields, defaultAdminProductRelations } from "." import { - ProductService, PricingService, + ProductService, ProductVariantService, } from "../../../../services" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." + import { PriceSelectionParams } from "../../../../types/price-selection" import { ProductVariantPricesUpdateReq } from "../../../../types/product-variant" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -26,8 +27,8 @@ import { EntityManager } from "typeorm" * description: "Update a Product Variant." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Product. - * - (path) variant_id=* {string} The id of the Product Variant. + * - (path) id=* {string} The ID of the Product. + * - (path) variant_id=* {string} The ID of the Product Variant. * requestBody: * content: * application/json: @@ -62,16 +63,16 @@ import { EntityManager } from "typeorm" * type: boolean * weight: * description: The wieght of the Product Variant. - * type: string + * type: number * length: * description: The length of the Product Variant. - * type: string + * type: number * height: * description: The height of the Product Variant. - * type: string + * type: number * width: * description: The width of the Product Variant. - * type: string + * type: number * origin_country: * description: The country of origin of the Product Variant. * type: string @@ -87,16 +88,21 @@ import { EntityManager } from "typeorm" * prices: * type: array * items: + * required: + * - amount * properties: * id: - * description: The id of the price. + * description: The ID of the price. * type: string * region_id: - * description: The id of the Region for which the price is used. + * description: The ID of the Region for which the price is used. Only required if currency_code is not provided. * type: string * currency_code: - * description: The 3 character ISO currency code for which the price will be used. + * description: The 3 character ISO currency code for which the price will be used. Only required if region_id is not provided. * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * amount: * description: The amount to charge for the Product Variant. * type: integer @@ -109,9 +115,12 @@ import { EntityManager } from "typeorm" * options: * type: array * items: + * required: + * - option_id + * - value * properties: * option_id: - * description: The id of the Product Option to set the value for. + * description: The ID of the Product Option to set the value for. * type: string * value: * description: The value to give for the Product Option. diff --git a/packages/medusa/src/api/routes/admin/regions/add-country.ts b/packages/medusa/src/api/routes/admin/regions/add-country.ts index 60463820c0..33ca5610f6 100644 --- a/packages/medusa/src/api/routes/admin/regions/add-country.ts +++ b/packages/medusa/src/api/routes/admin/regions/add-country.ts @@ -1,9 +1,11 @@ +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + +import { EntityManager } from "typeorm" import { IsString } from "class-validator" -import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." -import { validator } from "../../../../utils/validator" import { Region } from "../../../.." import RegionService from "../../../../services/region" -import { EntityManager } from "typeorm" +import { validator } from "../../../../utils/validator" + /** * @oas [post] /regions/{id}/countries * operationId: "PostRegionsRegionCountries" @@ -11,7 +13,7 @@ import { EntityManager } from "typeorm" * description: "Adds a Country to the list of Countries in a Region" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Region. + * - (path) id=* {string} The ID of the Region. * requestBody: * content: * application/json: @@ -22,6 +24,9 @@ import { EntityManager } from "typeorm" * country_code: * description: "The 2 character ISO code for the Country." * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + * description: See a list of codes. * tags: * - Region * responses: diff --git a/packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.ts b/packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.ts index 5337ee63d9..29b6fa76ef 100644 --- a/packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.ts +++ b/packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.ts @@ -1,9 +1,11 @@ +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + +import { EntityManager } from "typeorm" import { IsString } from "class-validator" -import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." -import { validator } from "../../../../utils/validator" import { Region } from "../../../.." import RegionService from "../../../../services/region" -import { EntityManager } from "typeorm" +import { validator } from "../../../../utils/validator" + /** * @oas [post] /regions/{id}/fulfillment-providers * operationId: "PostRegionsRegionFulfillmentProviders" @@ -11,16 +13,16 @@ import { EntityManager } from "typeorm" * description: "Adds a Fulfillment Provider to a Region" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Region. + * - (path) id=* {string} The ID of the Region. * requestBody: * content: * application/json: - * required: - * - provider_id * schema: + * required: + * - provider_id * properties: * provider_id: - * description: "The id of the Fulfillment Provider to add." + * description: "The ID of the Fulfillment Provider to add." * type: string * tags: * - Region diff --git a/packages/medusa/src/api/routes/admin/regions/add-payment-provider.ts b/packages/medusa/src/api/routes/admin/regions/add-payment-provider.ts index 4973eef657..8cb05a6b26 100644 --- a/packages/medusa/src/api/routes/admin/regions/add-payment-provider.ts +++ b/packages/medusa/src/api/routes/admin/regions/add-payment-provider.ts @@ -1,9 +1,10 @@ +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + +import { EntityManager } from "typeorm" import { IsString } from "class-validator" -import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." -import { validator } from "../../../../utils/validator" import { Region } from "../../../.." import RegionService from "../../../../services/region" -import { EntityManager } from "typeorm" +import { validator } from "../../../../utils/validator" /** * @oas [post] /regions/{id}/payment-providers @@ -12,16 +13,16 @@ import { EntityManager } from "typeorm" * description: "Adds a Payment Provider to a Region" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Region. + * - (path) id=* {string} The ID of the Region. * requestBody: * content: * application/json: - * required: - * - provider_id * schema: + * required: + * - provider_id * properties: * provider_id: - * description: "The id of the Payment Provider to add." + * description: "The ID of the Payment Provider to add." * type: string * tags: * - Region diff --git a/packages/medusa/src/api/routes/admin/regions/create-region.ts b/packages/medusa/src/api/routes/admin/regions/create-region.ts index ba12a36db6..80960b81f3 100644 --- a/packages/medusa/src/api/routes/admin/regions/create-region.ts +++ b/packages/medusa/src/api/routes/admin/regions/create-region.ts @@ -1,9 +1,11 @@ import { IsArray, IsNumber, IsOptional, IsString } from "class-validator" -import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." -import { validator } from "../../../../utils/validator" +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + +import { EntityManager } from "typeorm" import { Region } from "../../../.." import RegionService from "../../../../services/region" -import { EntityManager } from "typeorm" +import { validator } from "../../../../utils/validator" + /** * @oas [post] /regions * operationId: "PostRegions" @@ -13,11 +15,14 @@ import { EntityManager } from "typeorm" * requestBody: * content: * application/json: - * required: - * - name - * - currency_code - * - tax_rate * schema: + * required: + * - name + * - currency_code + * - tax_rate + * - payment_providers + * - fulfillment_providers + * - countries * properties: * name: * description: "The name of the Region" @@ -25,6 +30,9 @@ import { EntityManager } from "typeorm" * currency_code: * description: "The 3 character ISO currency code to use for the Region." * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * tax_code: * description: "An optional tax code the Region." * type: string @@ -32,17 +40,18 @@ import { EntityManager } from "typeorm" * description: "The tax rate to use on Orders in the Region." * type: number * payment_providers: - * description: "A list of Payment Providers that should be enabled for the Region" + * description: "A list of Payment Provider IDs that should be enabled for the Region" * type: array * items: * type: string * fulfillment_providers: - * description: "A list of Fulfillment Providers that should be enabled for the Region" + * description: "A list of Fulfillment Provider IDs that should be enabled for the Region" * type: array * items: * type: string * countries: - * description: "A list of countries that should be included in the Region." + * description: "A list of countries' 2 ISO Characters that should be included in the Region." + * example: ["US"] * type: array * items: * type: string diff --git a/packages/medusa/src/api/routes/admin/regions/delete-region.ts b/packages/medusa/src/api/routes/admin/regions/delete-region.ts index 3a9c651bdf..54629ca7c9 100644 --- a/packages/medusa/src/api/routes/admin/regions/delete-region.ts +++ b/packages/medusa/src/api/routes/admin/regions/delete-region.ts @@ -1,5 +1,5 @@ -import RegionService from "../../../../services/region" import { EntityManager } from "typeorm" +import RegionService from "../../../../services/region" /** * @oas [delete] /regions/{id} @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Deletes a Region." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Region. + * - (path) id=* {string} The ID of the Region. * tags: * - Region * responses: @@ -20,12 +20,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Region. + * description: The ID of the deleted Region. * object: * type: string * description: The type of the object that was deleted. + * default: region * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { region_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/regions/get-fulfillment-options.ts b/packages/medusa/src/api/routes/admin/regions/get-fulfillment-options.ts index 736ccade89..aef8f97159 100644 --- a/packages/medusa/src/api/routes/admin/regions/get-fulfillment-options.ts +++ b/packages/medusa/src/api/routes/admin/regions/get-fulfillment-options.ts @@ -1,6 +1,6 @@ -import RegionService from "../../../../services/region" -import FulfillmentProviderService from "../../../../services/fulfillment-provider" import { FulfillmentOption } from "." +import FulfillmentProviderService from "../../../../services/fulfillment-provider" +import RegionService from "../../../../services/region" /** * @oas [get] /regions/{id}/fulfillment-options @@ -9,7 +9,7 @@ import { FulfillmentOption } from "." * description: "Gathers all the fulfillment options available to in the Region." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Region. + * - (path) id=* {string} The ID of the Region. * tags: * - Region * responses: @@ -22,7 +22,17 @@ import { FulfillmentOption } from "." * fulfillment_options: * type: array * items: - * type: object + * properties: + * provider_id: + * type: string + * description: ID of the fulfillment provider + * options: + * type: array + * description: fulfillment provider options + * example: + * - id: "manual-fulfillment" + * - id: "manual-fulfillment-return" + * is_return: true */ export default async (req, res) => { const { region_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/regions/get-region.ts b/packages/medusa/src/api/routes/admin/regions/get-region.ts index c788e87f7e..96af4b1322 100644 --- a/packages/medusa/src/api/routes/admin/regions/get-region.ts +++ b/packages/medusa/src/api/routes/admin/regions/get-region.ts @@ -1,5 +1,6 @@ +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + import RegionService from "../../../../services/region" -import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." /** * @oas [get] /regions/{id} @@ -8,7 +9,7 @@ import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." * description: "Retrieves a Region." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Region. + * - (path) id=* {string} The ID of the Region. * tags: * - Region * responses: diff --git a/packages/medusa/src/api/routes/admin/regions/list-regions.ts b/packages/medusa/src/api/routes/admin/regions/list-regions.ts index 56aec531ab..846e788236 100644 --- a/packages/medusa/src/api/routes/admin/regions/list-regions.ts +++ b/packages/medusa/src/api/routes/admin/regions/list-regions.ts @@ -1,11 +1,12 @@ -import { validator } from "../../../../utils/validator" +import { IsInt, IsOptional, ValidateNested } from "class-validator" +import _, { identity } from "lodash" +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + +import { DateComparisonOperator } from "../../../../types/common" import { Region } from "../../../.." import RegionService from "../../../../services/region" -import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." -import { IsInt, IsOptional, ValidateNested } from "class-validator" import { Type } from "class-transformer" -import _, { identity } from "lodash" -import { DateComparisonOperator } from "../../../../types/common" +import { validator } from "../../../../utils/validator" /** * @oas [get] /regions @@ -18,30 +19,32 @@ import { DateComparisonOperator } from "../../../../types/common" * name: limit * schema: * type: integer + * default: 50 * required: false * description: limit the number of regions in response * - in: query * name: offset * schema: * type: integer + * default: 0 * required: false * description: Offset of regions in response (used for pagination) - * - in: query + * - in: query * name: created_at * schema: - * type: DateComparisonOperator + * type: object * required: false * description: Date comparison for when resulting region was created, i.e. less than, greater than etc. - * - in: query + * - in: query * name: updated_at * schema: - * type: DateComparisonOperator + * type: object * required: false * description: Date comparison for when resulting region was updated, i.e. less than, greater than etc. - * - in: query + * - in: query * name: deleted_at * schema: - * type: DateComparisonOperator + * type: object * required: false * description: Date comparison for when resulting region was deleted, i.e. less than, greater than etc. * tags: @@ -57,6 +60,15 @@ import { DateComparisonOperator } from "../../../../types/common" * type: array * items: * $ref: "#/components/schemas/region" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const validated = await validator(AdminGetRegionsParams, req.query) diff --git a/packages/medusa/src/api/routes/admin/regions/remove-country.ts b/packages/medusa/src/api/routes/admin/regions/remove-country.ts index 17bf4ecfdc..42bc3ecc31 100644 --- a/packages/medusa/src/api/routes/admin/regions/remove-country.ts +++ b/packages/medusa/src/api/routes/admin/regions/remove-country.ts @@ -1,6 +1,7 @@ -import RegionService from "../../../../services/region" -import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + import { EntityManager } from "typeorm" +import RegionService from "../../../../services/region" /** * @oas [delete] /regions/{id}/countries/{country_code} @@ -9,8 +10,16 @@ import { EntityManager } from "typeorm" * x-authenticated: true * description: "Removes a Country from the list of Countries in a Region" * parameters: - * - (path) id=* {string} The id of the Region. - * - (path) country_code=* {string} The 2 character ISO code for the Country. + * - (path) id=* {string} The ID of the Region. + * - in: path + * name: country_code + * description: The 2 character ISO code for the Country. + * required: true + * schema: + * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * tags: * - Region * responses: diff --git a/packages/medusa/src/api/routes/admin/regions/remove-fulfillment-provider.ts b/packages/medusa/src/api/routes/admin/regions/remove-fulfillment-provider.ts index db107bea67..96e778bbf9 100644 --- a/packages/medusa/src/api/routes/admin/regions/remove-fulfillment-provider.ts +++ b/packages/medusa/src/api/routes/admin/regions/remove-fulfillment-provider.ts @@ -1,6 +1,7 @@ -import RegionService from "../../../../services/region" -import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + import { EntityManager } from "typeorm" +import RegionService from "../../../../services/region" /** * @oas [delete] /regions/{id}/fulfillment-providers/{provider_id} @@ -9,8 +10,8 @@ import { EntityManager } from "typeorm" * description: "Removes a Fulfillment Provider." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Region. - * - (path) provider_id=* {string} The id of the Fulfillment Provider. + * - (path) id=* {string} The ID of the Region. + * - (path) provider_id=* {string} The ID of the Fulfillment Provider. * tags: * - Region * responses: diff --git a/packages/medusa/src/api/routes/admin/regions/remove-payment-provider.ts b/packages/medusa/src/api/routes/admin/regions/remove-payment-provider.ts index 344e392a50..7faed2b11b 100644 --- a/packages/medusa/src/api/routes/admin/regions/remove-payment-provider.ts +++ b/packages/medusa/src/api/routes/admin/regions/remove-payment-provider.ts @@ -1,6 +1,7 @@ -import RegionService from "../../../../services/region" -import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + import { EntityManager } from "typeorm" +import RegionService from "../../../../services/region" /** * @oas [delete] /regions/{id}/payment-providers/{provider_id} @@ -9,8 +10,8 @@ import { EntityManager } from "typeorm" * description: "Removes a Payment Provider." * x-authenticated: true * parameters: - * - (path) region_id=* {string} The id of the Region. - * - (path) provider_id=* {string} The id of the Payment Provider. + * - (path) id=* {string} The ID of the Region. + * - (path) provider_id=* {string} The ID of the Payment Provider. * tags: * - Region * responses: diff --git a/packages/medusa/src/api/routes/admin/regions/update-region.ts b/packages/medusa/src/api/routes/admin/regions/update-region.ts index 51c9889aeb..fa67f12a10 100644 --- a/packages/medusa/src/api/routes/admin/regions/update-region.ts +++ b/packages/medusa/src/api/routes/admin/regions/update-region.ts @@ -5,10 +5,11 @@ import { IsOptional, IsString, } from "class-validator" -import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." -import { validator } from "../../../../utils/validator" -import RegionService from "../../../../services/region" +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + import { EntityManager } from "typeorm" +import RegionService from "../../../../services/region" +import { validator } from "../../../../utils/validator" /** * @oas [post] /regions/{id} @@ -17,7 +18,7 @@ import { EntityManager } from "typeorm" * description: "Updates a Region" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Region. + * - (path) id=* {string} The ID of the Region. * requestBody: * content: * application/json: @@ -29,6 +30,9 @@ import { EntityManager } from "typeorm" * currency_code: * description: "The 3 character ISO currency code to use for the Region." * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * automatic_taxes: * description: "If true Medusa will automatically calculate taxes for carts in this region. If false you have to manually call POST /carts/:id/taxes." * type: boolean @@ -36,7 +40,7 @@ import { EntityManager } from "typeorm" * description: "Whether gift cards in this region should be applied sales tax when purchasing a gift card" * type: boolean * tax_provider_id: - * description: "The id of the tax provider to use; if null the system tax provider is used" + * description: "The ID of the tax provider to use; if null the system tax provider is used" * type: string * tax_code: * description: "An optional tax code the Region." @@ -45,17 +49,17 @@ import { EntityManager } from "typeorm" * description: "The tax rate to use on Orders in the Region." * type: number * payment_providers: - * description: "A list of Payment Providers that should be enabled for the Region" + * description: "A list of Payment Provider IDs that should be enabled for the Region" * type: array * items: * type: string * fulfillment_providers: - * description: "A list of Fulfillment Providers that should be enabled for the Region" + * description: "A list of Fulfillment Provider IDs that should be enabled for the Region" * type: array * items: * type: string * countries: - * description: "A list of countries that should be included in the Region." + * description: "A list of countries' 2 ISO Characters that should be included in the Region." * type: array * items: * type: string diff --git a/packages/medusa/src/api/routes/admin/return-reasons/create-reason.ts b/packages/medusa/src/api/routes/admin/return-reasons/create-reason.ts index fbb9301f7f..c23c7b2f6c 100644 --- a/packages/medusa/src/api/routes/admin/return-reasons/create-reason.ts +++ b/packages/medusa/src/api/routes/admin/return-reasons/create-reason.ts @@ -3,6 +3,7 @@ import { defaultAdminReturnReasonsFields, defaultAdminReturnReasonsRelations, } from "." + import { ReturnReasonService } from "../../../../services" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -27,8 +28,8 @@ import { EntityManager } from "typeorm" * value: * description: "The value that the Return Reason will be identified by. Must be unique." * type: string - * parent_return_reason_id: - * description: "The id of the parent return reason." + * parent_return_reason_id: + * description: "The ID of the parent return reason." * type: string * description: * description: "An optional description to for the Reason." diff --git a/packages/medusa/src/api/routes/admin/return-reasons/delete-reason.ts b/packages/medusa/src/api/routes/admin/return-reasons/delete-reason.ts index 1ed3504c85..e8d17aab9c 100644 --- a/packages/medusa/src/api/routes/admin/return-reasons/delete-reason.ts +++ b/packages/medusa/src/api/routes/admin/return-reasons/delete-reason.ts @@ -1,5 +1,5 @@ -import { ReturnReasonService } from "../../../../services" import { EntityManager } from "typeorm" +import { ReturnReasonService } from "../../../../services" /** * @oas [delete] /return-reasons/{id} @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Deletes a return reason." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the return reason + * - (path) id=* {string} The ID of the return reason * tags: * - Return Reason * responses: @@ -20,12 +20,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted return reason + * description: The ID of the deleted return reason * object: * type: string * description: The type of the object that was deleted. + * default: return_reason * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/return-reasons/get-reason.ts b/packages/medusa/src/api/routes/admin/return-reasons/get-reason.ts index 3806eca57a..260b967b78 100644 --- a/packages/medusa/src/api/routes/admin/return-reasons/get-reason.ts +++ b/packages/medusa/src/api/routes/admin/return-reasons/get-reason.ts @@ -2,6 +2,7 @@ import { defaultAdminReturnReasonsFields, defaultAdminReturnReasonsRelations, } from "." + import { ReturnReasonService } from "../../../../services" /** @@ -11,7 +12,7 @@ import { ReturnReasonService } from "../../../../services" * description: "Retrieves a Return Reason." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Return Reason. + * - (path) id=* {string} The ID of the Return Reason. * tags: * - Return Reason * responses: diff --git a/packages/medusa/src/api/routes/admin/return-reasons/update-reason.ts b/packages/medusa/src/api/routes/admin/return-reasons/update-reason.ts index cc194323f3..71df342bde 100644 --- a/packages/medusa/src/api/routes/admin/return-reasons/update-reason.ts +++ b/packages/medusa/src/api/routes/admin/return-reasons/update-reason.ts @@ -3,6 +3,7 @@ import { defaultAdminReturnReasonsFields, defaultAdminReturnReasonsRelations, } from "." + import { ReturnReasonService } from "../../../../services" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -14,7 +15,7 @@ import { EntityManager } from "typeorm" * description: "Updates a Return Reason" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Return Reason. + * - (path) id=* {string} The ID of the Return Reason. * requestBody: * content: * application/json: @@ -23,6 +24,9 @@ import { EntityManager } from "typeorm" * label: * description: "The label to display to the Customer." * type: string + * value: + * description: "The value that the Return Reason will be identified by. Must be unique." + * type: string * description: * description: "An optional description to for the Reason." * type: string diff --git a/packages/medusa/src/api/routes/admin/returns/cancel-return.ts b/packages/medusa/src/api/routes/admin/returns/cancel-return.ts index c3d2096a64..38d6d2ad08 100644 --- a/packages/medusa/src/api/routes/admin/returns/cancel-return.ts +++ b/packages/medusa/src/api/routes/admin/returns/cancel-return.ts @@ -11,7 +11,7 @@ import { EntityManager } from "typeorm" * summary: "Cancel a Return" * description: "Registers a Return as canceled." * parameters: - * - (path) id=* {string} The id of the Return. + * - (path) id=* {string} The ID of the Return. * tags: * - Return * responses: @@ -21,7 +21,7 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * return: + * order: * $ref: "#/components/schemas/order" */ export default async (req, res) => { diff --git a/packages/medusa/src/api/routes/admin/returns/list-returns.ts b/packages/medusa/src/api/routes/admin/returns/list-returns.ts index 1e8b73275c..bd2f709b40 100644 --- a/packages/medusa/src/api/routes/admin/returns/list-returns.ts +++ b/packages/medusa/src/api/routes/admin/returns/list-returns.ts @@ -1,6 +1,7 @@ -import { Type } from "class-transformer" import { IsNumber, IsOptional } from "class-validator" + import { ReturnService } from "../../../../services" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" /** @@ -9,8 +10,8 @@ import { validator } from "../../../../utils/validator" * summary: "List Returns" * description: "Retrieves a list of Returns" * parameters: - * - (path) limit {number} The upper limit for the amount of responses returned. - * - (path) offset {number} The offset of the list returned. + * - (query) limit=50 {number} The upper limit for the amount of responses returned. + * - (query) offset=0 {number} The offset of the list returned. * tags: * - Return * responses: @@ -24,6 +25,15 @@ import { validator } from "../../../../utils/validator" * type: array * items: * $ref: "#/components/schemas/return" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const returnService: ReturnService = req.scope.resolve("returnService") diff --git a/packages/medusa/src/api/routes/admin/returns/receive-return.ts b/packages/medusa/src/api/routes/admin/returns/receive-return.ts index df2795f1e1..10e7633c69 100644 --- a/packages/medusa/src/api/routes/admin/returns/receive-return.ts +++ b/packages/medusa/src/api/routes/admin/returns/receive-return.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsNumber, @@ -6,8 +5,10 @@ import { IsString, ValidateNested, } from "class-validator" -import { EntityManager } from "typeorm" import { OrderService, ReturnService, SwapService } from "../../../../services" + +import { EntityManager } from "typeorm" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" /** @@ -16,7 +17,7 @@ import { validator } from "../../../../utils/validator" * summary: "Receive a Return" * description: "Registers a Return as received. Updates statuses on Orders and Swaps accordingly." * parameters: - * - (path) id=* {string} The id of the Return. + * - (path) id=* {string} The ID of the Return. * requestBody: * content: * application/json: @@ -28,16 +29,19 @@ import { validator } from "../../../../utils/validator" * description: The Line Items that have been received. * type: array * items: + * required: + * - item_id + * - quantity * properties: * item_id: - * description: The id of the Line Item. + * description: The ID of the Line Item. * type: string * quantity: * description: The quantity of the Line Item. * type: integer * refund: * description: The amount to refund. - * type: integer + * type: number * tags: * - Return * responses: diff --git a/packages/medusa/src/api/routes/admin/sales-channels/add-product-batch.ts b/packages/medusa/src/api/routes/admin/sales-channels/add-product-batch.ts index 87acf90872..f5dc460358 100644 --- a/packages/medusa/src/api/routes/admin/sales-channels/add-product-batch.ts +++ b/packages/medusa/src/api/routes/admin/sales-channels/add-product-batch.ts @@ -1,9 +1,10 @@ -import { Request, Response } from "express" -import { SalesChannelService } from "../../../../services" import { IsArray, ValidateNested } from "class-validator" -import { Type } from "class-transformer" -import { ProductBatchSalesChannel } from "../../../../types/sales-channels" +import { Request, Response } from "express" + import { EntityManager } from "typeorm" +import { ProductBatchSalesChannel } from "../../../../types/sales-channels" +import { SalesChannelService } from "../../../../services" +import { Type } from "class-transformer" /** * @oas [post] /sales-channels/{id}/products/batch @@ -12,8 +13,25 @@ import { EntityManager } from "typeorm" * description: "Assign a batch of product to a sales channel." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Sales channel. - * - (body) product_ids=* {ProductBatchSalesChannel} The product ids that must be assigned to the sales channel. + * - (path) id=* {string} The ID of the Sales channel. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - product_ids + * properties: + * product_ids: + * description: The IDs of the products to add to the Sales Channel + * type: array + * items: + * type: object + * required: + * - id + * properties: + * id: + * type: string + * description: The ID of the product * tags: * - Sales Channel * responses: diff --git a/packages/medusa/src/api/routes/admin/sales-channels/create-sales-channel.ts b/packages/medusa/src/api/routes/admin/sales-channels/create-sales-channel.ts index 464a6ea3fc..66254dfc1e 100644 --- a/packages/medusa/src/api/routes/admin/sales-channels/create-sales-channel.ts +++ b/packages/medusa/src/api/routes/admin/sales-channels/create-sales-channel.ts @@ -1,19 +1,32 @@ -import { Request, Response } from "express" import { IsBoolean, IsOptional, IsString } from "class-validator" +import { Request, Response } from "express" -import SalesChannelService from "../../../../services/sales-channel" import { CreateSalesChannelInput } from "../../../../types/sales-channels" import { EntityManager } from "typeorm" +import SalesChannelService from "../../../../services/sales-channel" /** * @oas [post] /sales-channels * operationId: "PostSalesChannels" - * summary: "Create a sales channel" - * description: "Creates a sales channel." + * summary: "Create a Sales Channel" + * description: "Creates a Sales Channel." * x-authenticated: true - * parameters: - * - (body) name=* {string} Name of the sales channel - * - (body) description=* {string} Description of the sales channel + * requestBody: + * content: + * application/json: + * schema: + * required: + * - name + * properties: + * name: + * description: The name of the Sales Channel + * type: string + * description: + * description: The description of the Sales Channel + * type: string + * is_disabled: + * description: Whether the Sales Channel is disabled or not. + * type: boolean * tags: * - Sales Channel * responses: diff --git a/packages/medusa/src/api/routes/admin/sales-channels/delete-products-batch.ts b/packages/medusa/src/api/routes/admin/sales-channels/delete-products-batch.ts index 2ccdb7564d..c41b5ed022 100644 --- a/packages/medusa/src/api/routes/admin/sales-channels/delete-products-batch.ts +++ b/packages/medusa/src/api/routes/admin/sales-channels/delete-products-batch.ts @@ -1,9 +1,10 @@ -import { Type } from "class-transformer" import { IsArray, ValidateNested } from "class-validator" -import { SalesChannelService } from "../../../../services" import { Request, Response } from "express" -import { ProductBatchSalesChannel } from "../../../../types/sales-channels" + import { EntityManager } from "typeorm" +import { ProductBatchSalesChannel } from "../../../../types/sales-channels" +import { SalesChannelService } from "../../../../services" +import { Type } from "class-transformer" /** * @oas [delete] /sales-channels/{id}/products/batch @@ -12,8 +13,25 @@ import { EntityManager } from "typeorm" * description: "Remove a list of products from a sales channel." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the customer group. - * - (body) product_ids=* {ProductBatchSalesChannel[]} ids of the product to remove + * - (path) id=* {string} The ID of the Sales Channel + * requestBody: + * content: + * application/json: + * schema: + * required: + * - product_ids + * properties: + * product_ids: + * description: The IDs of the products to delete from the Sales Channel. + * type: array + * items: + * type: object + * required: + * - id + * properties: + * id: + * description: The ID of a product + * type: string * tags: * - Sales Channel * responses: diff --git a/packages/medusa/src/api/routes/admin/sales-channels/delete-sales-channel.ts b/packages/medusa/src/api/routes/admin/sales-channels/delete-sales-channel.ts index 3cdae84192..838a9e098d 100644 --- a/packages/medusa/src/api/routes/admin/sales-channels/delete-sales-channel.ts +++ b/packages/medusa/src/api/routes/admin/sales-channels/delete-sales-channel.ts @@ -1,6 +1,7 @@ import { Request, Response } from "express" -import { SalesChannelService } from "../../../../services/" + import { EntityManager } from "typeorm" +import { SalesChannelService } from "../../../../services/" /** * @oas [delete] /sales-channels/{id} @@ -9,7 +10,7 @@ import { EntityManager } from "typeorm" * description: "Deletes the sales channel." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Sales channel. + * - (path) id=* {string} The ID of the Sales channel. * tags: * - Sales Channel * responses: @@ -21,12 +22,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Sales Channel. + * description: The ID of the deleted sales channel * object: * type: string * description: The type of the object that was deleted. + * default: sales-channel * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req: Request, res: Response): Promise => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/sales-channels/get-sales-channel.ts b/packages/medusa/src/api/routes/admin/sales-channels/get-sales-channel.ts index 394cfaceaf..f9819c31be 100644 --- a/packages/medusa/src/api/routes/admin/sales-channels/get-sales-channel.ts +++ b/packages/medusa/src/api/routes/admin/sales-channels/get-sales-channel.ts @@ -1,4 +1,5 @@ import { Request, Response } from "express" + import { SalesChannelService } from "../../../../services" /** @@ -8,7 +9,7 @@ import { SalesChannelService } from "../../../../services" * description: "Retrieves the sales channel." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Sales channel. + * - (path) id=* {string} The ID of the Sales channel. * tags: * - Sales Channel * responses: diff --git a/packages/medusa/src/api/routes/admin/sales-channels/list-sales-channels.ts b/packages/medusa/src/api/routes/admin/sales-channels/list-sales-channels.ts index ef776f2f1a..b064bb4d02 100644 --- a/packages/medusa/src/api/routes/admin/sales-channels/list-sales-channels.ts +++ b/packages/medusa/src/api/routes/admin/sales-channels/list-sales-channels.ts @@ -1,12 +1,13 @@ -import { Request, Response } from "express" -import { IsNumber, IsOptional, IsString, ValidateNested } from "class-validator" -import { Type } from "class-transformer" -import { removeUndefinedProperties } from "../../../../utils" -import { SalesChannelService } from "../../../../services" import { DateComparisonOperator, extendedFindParamsMixin, } from "../../../../types/common" +import { IsNumber, IsOptional, IsString, ValidateNested } from "class-validator" +import { Request, Response } from "express" + +import { SalesChannelService } from "../../../../services" +import { Type } from "class-transformer" +import { removeUndefinedProperties } from "../../../../utils" /** * @oas [get] /sales-channels @@ -15,16 +16,79 @@ import { * description: "Retrieves a list of sales channels" * x-authenticated: true * parameters: - * - (query) id {string} id of the sales channel + * - (query) id {string} ID of the sales channel * - (query) name {string} Name of the sales channel * - (query) description {string} Description of the sales channel - * - (query) q {string} Query used for searching sales channels. - * - (query) order {string} to retrieve sales channels in. - * - (query) deleted_at {DateComparisonOperator} Date comparison for when resulting sales channels was deleted, i.e. less than, greater than etc. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting sales channels was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting sales channels was updated, i.e. less than, greater than etc. - * - (query) offset {string} How many sales channels to skip in the result. - * - (query) limit {string} Limit the number of sales channels returned. + * - (query) q {string} Query used for searching sales channels' names and descriptions. + * - (query) order {string} The field to order the results by. + * - in: query + * name: created_at + * description: Date comparison for when resulting collections were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting collections were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: deleted_at + * description: Date comparison for when resulting collections were deleted. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - (query) offset=0 {integer} How many sales channels to skip in the result. + * - (query) limit=20 {integer} Limit the number of sales channels returned. * - (query) expand {string} (Comma separated) Which fields should be expanded in each sales channel of the result. * - (query) fields {string} (Comma separated) Which fields should be included in each sales channel of the result. * tags: @@ -36,19 +100,19 @@ import { * application/json: * schema: * properties: - * count: - * description: The number of Sales channels. - * type: integer - * offset: - * description: The offset of the Sales channel query. - * type: integer - * limit: - * description: The limit of the Sales channel query. - * type: integer * sales_channels: * type: array * items: - * $ref: "#/components/schemas/sales_channel" + * $ref: "#/components/schemas/sales_channel" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req: Request, res: Response) => { const salesChannelService: SalesChannelService = req.scope.resolve( diff --git a/packages/medusa/src/api/routes/admin/sales-channels/update-sales-channel.ts b/packages/medusa/src/api/routes/admin/sales-channels/update-sales-channel.ts index c42647ff5a..502a38c9e9 100644 --- a/packages/medusa/src/api/routes/admin/sales-channels/update-sales-channel.ts +++ b/packages/medusa/src/api/routes/admin/sales-channels/update-sales-channel.ts @@ -1,5 +1,6 @@ import { IsBoolean, IsOptional, IsString } from "class-validator" import { Request, Response } from "express" + import { SalesChannelService } from "../../../../services" import { EntityManager } from "typeorm" @@ -10,7 +11,7 @@ import { EntityManager } from "typeorm" * description: "Updates a Sales Channel." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Sales Channel. + * - (path) id=* {string} The ID of the Sales Channel. * requestBody: * content: * application/json: @@ -34,8 +35,8 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * customer: - * $ref: "#/components/schemas/sales-channel" + * sales_channel: + * $ref: "#/components/schemas/sales_channel" */ export default async (req: Request, res: Response) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/shipping-options/create-shipping-option.ts b/packages/medusa/src/api/routes/admin/shipping-options/create-shipping-option.ts index 84a1f26e92..347c810712 100644 --- a/packages/medusa/src/api/routes/admin/shipping-options/create-shipping-option.ts +++ b/packages/medusa/src/api/routes/admin/shipping-options/create-shipping-option.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsNumber, @@ -8,6 +7,8 @@ import { ValidateNested, } from "class-validator" import { defaultFields, defaultRelations } from "." + +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -21,18 +22,24 @@ import { EntityManager } from "typeorm" * content: * application/json: * schema: + * required: + * - name + * - region_id + * - provider_id + * - data + * - price_type * properties: * name: * description: "The name of the Shipping Option" * type: string * region_id: - * description: "The id of the Region in which the Shipping Option will be available." + * description: "The ID of the Region in which the Shipping Option will be available." * type: string * provider_id: - * description: "The id of the Fulfillment Provider that handles the Shipping Option." + * description: "The ID of the Fulfillment Provider that handles the Shipping Option." * type: string * profile_id: - * description: "The id of the Shipping Profile to add the Shipping Option to." + * description: "The ID of the Shipping Profile to add the Shipping Option to." * type: number * data: * description: "The data needed for the Fulfillment Provider to handle shipping with this Shipping Option." @@ -50,6 +57,9 @@ import { EntityManager } from "typeorm" * description: "The requirements that must be satisfied for the Shipping Option to be available." * type: array * items: + * required: + * - type + * - amount * properties: * type: * description: The type of the requirement @@ -63,9 +73,11 @@ import { EntityManager } from "typeorm" * is_return: * description: Whether the Shipping Option defines a return shipment. * type: boolean + * default: false * admin_only: * description: If true, the option can be used for draft orders * type: boolean + * default: false * metadata: * description: An optional set of key-value pairs with additional information. * type: object diff --git a/packages/medusa/src/api/routes/admin/shipping-options/delete-shipping-option.ts b/packages/medusa/src/api/routes/admin/shipping-options/delete-shipping-option.ts index 6b5c4ee724..97325577ae 100644 --- a/packages/medusa/src/api/routes/admin/shipping-options/delete-shipping-option.ts +++ b/packages/medusa/src/api/routes/admin/shipping-options/delete-shipping-option.ts @@ -7,7 +7,7 @@ import { EntityManager } from "typeorm" * description: "Deletes a Shipping Option." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Shipping Option. + * - (path) id=* {string} The ID of the Shipping Option. * tags: * - Shipping Option * responses: @@ -19,12 +19,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Shipping Option. + * description: The ID of the deleted Shipping Option. * object: * type: string * description: The type of the object that was deleted. + * default: shipping-option * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { option_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/shipping-options/get-shipping-option.ts b/packages/medusa/src/api/routes/admin/shipping-options/get-shipping-option.ts index 1100444928..6406c11a19 100644 --- a/packages/medusa/src/api/routes/admin/shipping-options/get-shipping-option.ts +++ b/packages/medusa/src/api/routes/admin/shipping-options/get-shipping-option.ts @@ -5,7 +5,7 @@ * description: "Retrieves a Shipping Option." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Shipping Option. + * - (path) id=* {string} The ID of the Shipping Option. * tags: * - Shipping Option * responses: diff --git a/packages/medusa/src/api/routes/admin/shipping-options/list-shipping-options.ts b/packages/medusa/src/api/routes/admin/shipping-options/list-shipping-options.ts index f6790d8732..b7662973ab 100644 --- a/packages/medusa/src/api/routes/admin/shipping-options/list-shipping-options.ts +++ b/packages/medusa/src/api/routes/admin/shipping-options/list-shipping-options.ts @@ -1,9 +1,10 @@ -import { Transform } from "class-transformer" import { IsBoolean, IsOptional, IsString } from "class-validator" import { defaultFields, defaultRelations } from "." + import { PricingService } from "../../../../services" -import { validator } from "../../../../utils/validator" +import { Transform } from "class-transformer" import { optionalBooleanMapper } from "../../../../utils/validators/is-boolean" +import { validator } from "../../../../utils/validator" /** * @oas [get] /shipping-options @@ -12,23 +13,20 @@ import { optionalBooleanMapper } from "../../../../utils/validators/is-boolean" * description: "Retrieves a list of Shipping Options." * x-authenticated: true * parameters: - * - in: path + * - in: query * name: region_id * schema: * type: string - * required: false - * description: Region to fetch options from - * - in: path + * description: Region ID to fetch options from + * - in: query * name: is_return * schema: * type: boolean - * required: false - * description: Flag for fetching return options - * - in: path + * description: Flag for fetching return options only + * - in: query * name: admin_only * schema: * type: boolean - * required: false * description: Flag for fetching admin specific options * tags: * - Shipping Option @@ -43,6 +41,9 @@ import { optionalBooleanMapper } from "../../../../utils/validators/is-boolean" * type: array * items: * $ref: "#/components/schemas/shipping_option" + * count: + * type: integer + * description: The total number of items available */ export default async (req, res) => { const validatedParams = await validator( diff --git a/packages/medusa/src/api/routes/admin/shipping-options/update-shipping-option.ts b/packages/medusa/src/api/routes/admin/shipping-options/update-shipping-option.ts index 040a74f626..a4f3286f74 100644 --- a/packages/medusa/src/api/routes/admin/shipping-options/update-shipping-option.ts +++ b/packages/medusa/src/api/routes/admin/shipping-options/update-shipping-option.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsBoolean, @@ -9,6 +8,8 @@ import { ValidateNested, } from "class-validator" import { defaultFields, defaultRelations } from "." + +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -19,11 +20,13 @@ import { EntityManager } from "typeorm" * description: "Updates a Shipping Option" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Shipping Option. + * - (path) id=* {string} The ID of the Shipping Option. * requestBody: * content: * application/json: * schema: + * required: + * - requirements * properties: * name: * description: "The name of the Shipping Option" @@ -41,7 +44,13 @@ import { EntityManager } from "typeorm" * description: "The requirements that must be satisfied for the Shipping Option to be available." * type: array * items: + * required: + * - type + * - amount * properties: + * id: + * description: The ID of the requirement + * type: string * type: * description: The type of the requirement * type: string diff --git a/packages/medusa/src/api/routes/admin/shipping-profiles/delete-shipping-profile.ts b/packages/medusa/src/api/routes/admin/shipping-profiles/delete-shipping-profile.ts index ce38e7fa36..96547d7d06 100644 --- a/packages/medusa/src/api/routes/admin/shipping-profiles/delete-shipping-profile.ts +++ b/packages/medusa/src/api/routes/admin/shipping-profiles/delete-shipping-profile.ts @@ -1,5 +1,5 @@ -import { ShippingProfileService } from "../../../../services" import { EntityManager } from "typeorm" +import { ShippingProfileService } from "../../../../services" /** * @oas [delete] /shipping-profiles/{id} @@ -8,7 +8,7 @@ import { EntityManager } from "typeorm" * description: "Deletes a Shipping Profile." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Shipping Profile. + * - (path) id=* {string} The ID of the Shipping Profile. * tags: * - Shipping Profile * responses: @@ -20,12 +20,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Shipping Profile. + * description: The ID of the deleted Shipping Profile. * object: * type: string * description: The type of the object that was deleted. + * default: shipping_profile * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { profile_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/shipping-profiles/get-shipping-profile.ts b/packages/medusa/src/api/routes/admin/shipping-profiles/get-shipping-profile.ts index 7b2954bbe5..3da47c61e3 100644 --- a/packages/medusa/src/api/routes/admin/shipping-profiles/get-shipping-profile.ts +++ b/packages/medusa/src/api/routes/admin/shipping-profiles/get-shipping-profile.ts @@ -2,6 +2,7 @@ import { defaultAdminShippingProfilesFields, defaultAdminShippingProfilesRelations, } from "." + import { ShippingProfileService } from "../../../../services" /** @@ -11,7 +12,7 @@ import { ShippingProfileService } from "../../../../services" * description: "Retrieves a Shipping Profile." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Shipping Profile. + * - (path) id=* {string} The ID of the Shipping Profile. * tags: * - Shipping Profile * responses: diff --git a/packages/medusa/src/api/routes/admin/shipping-profiles/update-shipping-profile.ts b/packages/medusa/src/api/routes/admin/shipping-profiles/update-shipping-profile.ts index 2e6e4a932f..885542d1af 100644 --- a/packages/medusa/src/api/routes/admin/shipping-profiles/update-shipping-profile.ts +++ b/packages/medusa/src/api/routes/admin/shipping-profiles/update-shipping-profile.ts @@ -1,4 +1,5 @@ import { IsOptional, IsString } from "class-validator" + import { ShippingProfileService } from "../../../../services" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -9,7 +10,7 @@ import { EntityManager } from "typeorm" * summary: "Update a Shipping Profiles" * description: "Updates a Shipping Profile" * parameters: - * - (path) id=* {string} The id of the Shipping Profile. + * - (path) id=* {string} The ID of the Shipping Profile. * requestBody: * content: * application/json: @@ -27,7 +28,7 @@ import { EntityManager } from "typeorm" * application/json: * schema: * properties: - * shipping_profiles: + * shipping_profile: * $ref: "#/components/schemas/shipping_profile" */ export default async (req, res) => { diff --git a/packages/medusa/src/api/routes/admin/store/add-currency.ts b/packages/medusa/src/api/routes/admin/store/add-currency.ts index babfb56a0d..7bc0b81245 100644 --- a/packages/medusa/src/api/routes/admin/store/add-currency.ts +++ b/packages/medusa/src/api/routes/admin/store/add-currency.ts @@ -7,7 +7,15 @@ import { EntityManager } from "typeorm" * description: "Adds a Currency Code to the available currencies." * x-authenticated: true * parameters: - * - (path) code=* {string} The 3 character ISO currency code. + * - in: path + * name: code + * required: true + * description: The 3 character ISO currency code. + * schema: + * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * tags: * - Store * responses: diff --git a/packages/medusa/src/api/routes/admin/store/list-payment-providers.ts b/packages/medusa/src/api/routes/admin/store/list-payment-providers.ts index acffd3d941..7c1ad38c7b 100644 --- a/packages/medusa/src/api/routes/admin/store/list-payment-providers.ts +++ b/packages/medusa/src/api/routes/admin/store/list-payment-providers.ts @@ -17,7 +17,7 @@ import { PaymentProviderService } from "../../../../services" * payment_providers: * type: array * items: - * $ref: "#/components/schemas/store" + * $ref: "#/components/schemas/payment_provider" */ export default async (req, res) => { const paymentProviderService: PaymentProviderService = req.scope.resolve( diff --git a/packages/medusa/src/api/routes/admin/store/list-tax-providers.ts b/packages/medusa/src/api/routes/admin/store/list-tax-providers.ts index 9c9674cda6..af67f97b57 100644 --- a/packages/medusa/src/api/routes/admin/store/list-tax-providers.ts +++ b/packages/medusa/src/api/routes/admin/store/list-tax-providers.ts @@ -18,7 +18,7 @@ import { TaxProviderService } from "../../../../services" * tax_providers: * type: array * items: - * $ref: "#/components/schemas/store" + * $ref: "#/components/schemas/tax_provider" */ export default async (req, res) => { const taxProviderService: TaxProviderService = diff --git a/packages/medusa/src/api/routes/admin/store/remove-currency.ts b/packages/medusa/src/api/routes/admin/store/remove-currency.ts index 60593ad4db..6a038f29d9 100644 --- a/packages/medusa/src/api/routes/admin/store/remove-currency.ts +++ b/packages/medusa/src/api/routes/admin/store/remove-currency.ts @@ -8,7 +8,15 @@ import { EntityManager } from "typeorm" * description: "Removes a Currency Code from the available currencies." * x-authenticated: true * parameters: - * - (path) code=* {string} The 3 character ISO currency code. + * - in: path + * name: code + * required: true + * description: The 3 character ISO currency code. + * schema: + * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * tags: * - Store * responses: diff --git a/packages/medusa/src/api/routes/admin/store/update-store.ts b/packages/medusa/src/api/routes/admin/store/update-store.ts index 1f119ff8c7..aa45888932 100644 --- a/packages/medusa/src/api/routes/admin/store/update-store.ts +++ b/packages/medusa/src/api/routes/admin/store/update-store.ts @@ -1,4 +1,5 @@ -import { IsArray, IsOptional, IsString, IsObject } from "class-validator" +import { IsArray, IsObject, IsOptional, IsString } from "class-validator" + import { StoreService } from "../../../../services" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -29,6 +30,17 @@ import { EntityManager } from "typeorm" * default_currency_code: * description: "The default currency code for the Store." * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. + * currencies: + * description: "Array of currencies in 2 character ISO code format." + * type: array + * items: + * type: string + * metadata: + * description: "An optional set of key-value pairs with additional information." + * type: object * tags: * - Store * responses: diff --git a/packages/medusa/src/api/routes/admin/swaps/get-swap.ts b/packages/medusa/src/api/routes/admin/swaps/get-swap.ts index 59b11fe456..d341c44e57 100644 --- a/packages/medusa/src/api/routes/admin/swaps/get-swap.ts +++ b/packages/medusa/src/api/routes/admin/swaps/get-swap.ts @@ -1,4 +1,5 @@ import { defaultAdminSwapFields, defaultAdminSwapRelations } from "." + import { SwapService } from "../../../../services" /** @@ -8,7 +9,7 @@ import { SwapService } from "../../../../services" * description: "Retrieves a Swap." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Swap. + * - (path) id=* {string} The ID of the Swap. * tags: * - Swap * responses: diff --git a/packages/medusa/src/api/routes/admin/swaps/list-swaps.ts b/packages/medusa/src/api/routes/admin/swaps/list-swaps.ts index f23acb79e6..a1a224f1f3 100644 --- a/packages/medusa/src/api/routes/admin/swaps/list-swaps.ts +++ b/packages/medusa/src/api/routes/admin/swaps/list-swaps.ts @@ -1,12 +1,17 @@ -import { Type } from "class-transformer" import { IsInt, IsOptional } from "class-validator" + import { SwapService } from "../../../../services" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" + /** * @oas [get] /swaps * operationId: "GetSwaps" * summary: "List Swaps" * description: "Retrieves a list of Swaps." + * parameters: + * - (query) limit=50 {number} The upper limit for the amount of responses returned. + * - (query) offset=0 {number} The offset of the list returned. * x-authenticated: true * tags: * - Swap @@ -21,6 +26,15 @@ import { validator } from "../../../../utils/validator" * type: array * items: * $ref: "#/components/schemas/swap" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const swapService: SwapService = req.scope.resolve("swapService") diff --git a/packages/medusa/src/api/routes/admin/tax-rates/add-to-product-types.ts b/packages/medusa/src/api/routes/admin/tax-rates/add-to-product-types.ts index b85b565844..1b4a88bd2c 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/add-to-product-types.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/add-to-product-types.ts @@ -1,5 +1,5 @@ -import { pickByConfig, getRetrieveConfig } from "./utils/get-query-config" import { IsArray, IsOptional } from "class-validator" +import { getRetrieveConfig, pickByConfig } from "./utils/get-query-config" import { TaxRate } from "../../../.." import { TaxRateService } from "../../../../services" @@ -11,9 +11,40 @@ import { EntityManager } from "typeorm" * operationId: "PostTaxRatesTaxRateProductTypes" * summary: "Add Tax Rate to Product Types" * description: "Associates a Tax Rate with a list of Product Types" + * parameters: + * - in: query + * name: fields + * description: "Which fields should be included in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: expand + * description: "Which fields should be expanded and retrieved in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - product_types + * properties: + * product_types: + * type: array + * description: "The IDs of the types of products to associate with this tax rate" + * items: + * type: string * tags: - * - Tax Rates + * - Tax Rate * responses: * 200: * description: OK @@ -22,9 +53,7 @@ import { EntityManager } from "typeorm" * schema: * properties: * tax_rate: - * type: array - * items: - * $ref: "#/components/schemas/tax_rate" + * $ref: "#/components/schemas/tax_rate" */ export default async (req, res) => { const value = await validator( diff --git a/packages/medusa/src/api/routes/admin/tax-rates/add-to-products.ts b/packages/medusa/src/api/routes/admin/tax-rates/add-to-products.ts index bb535b066b..4b6e761727 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/add-to-products.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/add-to-products.ts @@ -1,5 +1,5 @@ -import { pickByConfig, getRetrieveConfig } from "./utils/get-query-config" import { IsArray, IsOptional } from "class-validator" +import { getRetrieveConfig, pickByConfig } from "./utils/get-query-config" import { TaxRate } from "../../../.." import { TaxRateService } from "../../../../services" @@ -11,9 +11,40 @@ import { EntityManager } from "typeorm" * operationId: "PostTaxRatesTaxRateProducts" * summary: "Add Tax Rate to Products" * description: "Associates a Tax Rate with a list of Products" + * parameters: + * - in: query + * name: fields + * description: "Which fields should be included in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: expand + * description: "Which fields should be expanded and retrieved in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - products + * properties: + * products: + * type: array + * description: "The IDs of the products to associate with this tax rate" + * items: + * type: string * tags: - * - Tax Rates + * - Tax Rate * responses: * 200: * description: OK @@ -22,9 +53,7 @@ import { EntityManager } from "typeorm" * schema: * properties: * tax_rate: - * type: array - * items: - * $ref: "#/components/schemas/tax_rate" + * $ref: "#/components/schemas/tax_rate" */ export default async (req, res) => { const value = await validator(AdminPostTaxRatesTaxRateProductsReq, req.body) diff --git a/packages/medusa/src/api/routes/admin/tax-rates/add-to-shipping-options.ts b/packages/medusa/src/api/routes/admin/tax-rates/add-to-shipping-options.ts index 3f4d2370a0..ba0fb060d6 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/add-to-shipping-options.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/add-to-shipping-options.ts @@ -1,5 +1,5 @@ -import { pickByConfig, getRetrieveConfig } from "./utils/get-query-config" import { IsArray, IsOptional } from "class-validator" +import { getRetrieveConfig, pickByConfig } from "./utils/get-query-config" import { TaxRate } from "../../../.." import { TaxRateService } from "../../../../services" @@ -10,10 +10,41 @@ import { EntityManager } from "typeorm" * @oas [post] /tax-rates/:id/shipping-options/batch * operationId: "PostTaxRatesTaxRateShippingOptions" * summary: "Add Tax Rate to Product Types" - * description: "Associates a Tax Rate with a list of Product Types" + * description: "Associates a Tax Rate with a list of Shipping Options" + * parameters: + * - in: query + * name: fields + * description: "Which fields should be included in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: expand + * description: "Which fields should be expanded and retrieved in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - shipping_options + * properties: + * shipping_options: + * type: array + * description: "The IDs of the shipping options to associate with this tax rate" + * items: + * type: string * tags: - * - Tax Rates + * - Tax Rate * responses: * 200: * description: OK @@ -22,9 +53,7 @@ import { EntityManager } from "typeorm" * schema: * properties: * tax_rate: - * type: array - * items: - * $ref: "#/components/schemas/tax_rate" + * $ref: "#/components/schemas/tax_rate" */ export default async (req, res) => { const value = await validator( diff --git a/packages/medusa/src/api/routes/admin/tax-rates/create-tax-rate.ts b/packages/medusa/src/api/routes/admin/tax-rates/create-tax-rate.ts index a341d64139..145a0958b6 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/create-tax-rate.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/create-tax-rate.ts @@ -1,22 +1,77 @@ -import { EntityManager } from "typeorm" -import { IsString, IsArray, IsOptional } from "class-validator" -import { omit } from "lodash" -import { MedusaError } from "medusa-core-utils" +import { IsArray, IsOptional, IsString } from "class-validator" +import { getRetrieveConfig, pickByConfig } from "./utils/get-query-config" -import { pickByConfig, getRetrieveConfig } from "./utils/get-query-config" +import { EntityManager } from "typeorm" +import { IsType } from "../../../../utils/validators/is-type" +import { MedusaError } from "medusa-core-utils" import { TaxRate } from "../../../.." import { TaxRateService } from "../../../../services" +import { omit } from "lodash" import { validator } from "../../../../utils/validator" -import { IsType } from "../../../../utils/validators/is-type" /** * @oas [post] /tax-rates * operationId: "PostTaxRates" * summary: "Create a Tax Rate" * description: "Creates a Tax Rate" + * parameters: + * - in: query + * name: fields + * description: "Which fields should be included in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: expand + * description: "Which fields should be expanded and retrieved in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - code + * - name + * - region_id + * properties: + * code: + * type: string + * description: "A code to identify the tax type by" + * name: + * type: string + * description: "A human friendly name for the tax" + * region_id: + * type: string + * description: "The ID of the Region that the rate belongs to" + * rate: + * type: number + * description: "The numeric rate to charge" + * products: + * type: array + * description: "The IDs of the products associated with this tax rate" + * items: + * type: string + * shipping_options: + * type: array + * description: "The IDs of the shipping options associated with this tax rate" + * items: + * type: string + * product_types: + * type: array + * description: "The IDs of the types of products associated with this tax rate" + * items: + * type: string * tags: - * - Tax Rates + * - Tax Rate * responses: * 200: * description: OK @@ -25,9 +80,7 @@ import { IsType } from "../../../../utils/validators/is-type" * schema: * properties: * tax_rate: - * type: array - * items: - * $ref: "#/components/schemas/tax_rate" + * $ref: "#/components/schemas/tax_rate" */ export default async (req, res) => { const value = await validator(AdminPostTaxRatesReq, req.body) diff --git a/packages/medusa/src/api/routes/admin/tax-rates/delete-tax-rate.ts b/packages/medusa/src/api/routes/admin/tax-rates/delete-tax-rate.ts index 8fc87e96b4..f97a1fad9f 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/delete-tax-rate.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/delete-tax-rate.ts @@ -1,5 +1,5 @@ -import { TaxRateService } from "../../../../services" import { EntityManager } from "typeorm" +import { TaxRateService } from "../../../../services" /** * @oas [delete] /tax-rates/{id} @@ -8,9 +8,9 @@ import { EntityManager } from "typeorm" * description: "Deletes a Tax Rate" * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Shipping Option. + * - (path) id=* {string} The ID of the Shipping Option. * tags: - * - Tax Rates + * - Tax Rate * responses: * 200: * description: OK @@ -20,12 +20,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Shipping Option. + * description: The ID of the deleted Shipping Option. * object: * type: string * description: The type of the object that was deleted. + * default: tax-rate * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/admin/tax-rates/get-tax-rate.ts b/packages/medusa/src/api/routes/admin/tax-rates/get-tax-rate.ts index f5b8928b08..71e80ac276 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/get-tax-rate.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/get-tax-rate.ts @@ -1,5 +1,5 @@ -import { getRetrieveConfig, pickByConfig } from "./utils/get-query-config" import { IsArray, IsOptional } from "class-validator" +import { getRetrieveConfig, pickByConfig } from "./utils/get-query-config" import { TaxRate } from "../../../.." import { TaxRateService } from "../../../../services" @@ -10,9 +10,28 @@ import { validator } from "../../../../utils/validator" * operationId: "GetTaxRatesTaxRate" * summary: "Get Tax Rate" * description: "Retrieves a TaxRate" + * parameters: + * - in: query + * name: fields + * description: "Which fields should be included in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: expand + * description: "Which fields should be expanded and retrieved in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string * x-authenticated: true * tags: - * - Tax Rates + * - Tax Rate * responses: * 200: * description: OK @@ -21,9 +40,7 @@ import { validator } from "../../../../utils/validator" * schema: * properties: * tax_rate: - * type: array - * items: - * $ref: "#/components/schemas/tax_rate" + * $ref: "#/components/schemas/tax_rate" */ export default async (req, res) => { const value = await validator(AdminGetTaxRatesTaxRateParams, req.query) diff --git a/packages/medusa/src/api/routes/admin/tax-rates/list-tax-rates.ts b/packages/medusa/src/api/routes/admin/tax-rates/list-tax-rates.ts index dcc4bd5ba3..c50e9e2fcc 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/list-tax-rates.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/list-tax-rates.ts @@ -1,12 +1,12 @@ -import { getListConfig, pickByConfig } from "./utils/get-query-config" import { IsArray, IsNumber, IsOptional, IsString } from "class-validator" -import { Type } from "class-transformer" -import { omit, pickBy, identity } from "lodash" +import { getListConfig, pickByConfig } from "./utils/get-query-config" +import { identity, omit, pickBy } from "lodash" -import { TaxRate } from "../../../.." -import { NumericalComparisonOperator } from "../../../../types/common" -import { TaxRateService } from "../../../../services" import { IsType } from "../../../../utils/validators/is-type" +import { NumericalComparisonOperator } from "../../../../types/common" +import { TaxRate } from "../../../.." +import { TaxRateService } from "../../../../services" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" /** @@ -16,18 +16,63 @@ import { validator } from "../../../../utils/validator" * description: "Retrieves a list of TaxRates" * x-authenticated: true * parameters: - * - (query) q {string} Query used for searching orders. - * - (query) id {string} Id of the order to search for. - * - (query) region_id {string} to search for. - * - (query) code {string} to search for. - * - (query) rate {string} to search for. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting orders was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting orders was updated, i.e. less than, greater than etc. - * - (query) offset {string} How many orders to skip in the result. - * - (query) limit {string} Limit the number of orders returned. - * - (query) fields {string} (Comma separated) Which fields should be included in each order of the result. + * - (query) name {string} Name of tax rate to retrieve + * - in: query + * name: region_id + * style: form + * explode: false + * description: Filter by Region ID + * schema: + * oneOf: + * - type: string + * - type: array + * items: + * type: string + * - (query) code {string} code to search for. + * - in: query + * name: rate + * style: form + * explode: false + * description: Filter by Rate + * schema: + * oneOf: + * - type: number + * - type: object + * properties: + * lt: + * type: number + * description: filter by rates less than this number + * gt: + * type: number + * description: filter by rates greater than this number + * lte: + * type: number + * description: filter by rates less than or equal to this number + * gte: + * type: number + * description: filter by rates greater than or equal to this number + * - (query) offset=0 {integer} How many tax rates to skip before retrieving the result. + * - (query) limit=50 {integer} Limit the number of tax rates returned. + * - in: query + * name: fields + * description: "Which fields should be included in each item." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: expand + * description: "Which fields should be expanded and retrieved for each item." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string * tags: - * - Order + * - Tax Rate * responses: * 200: * description: OK @@ -35,10 +80,19 @@ import { validator } from "../../../../utils/validator" * application/json: * schema: * properties: - * orders: + * tax_rates: * type: array * items: - * $ref: "#/components/schemas/order" + * $ref: "#/components/schemas/tax_rate" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const value = await validator(AdminGetTaxRatesParams, req.query) diff --git a/packages/medusa/src/api/routes/admin/tax-rates/remove-from-product-types.ts b/packages/medusa/src/api/routes/admin/tax-rates/remove-from-product-types.ts index 32fa236b5c..c80190a803 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/remove-from-product-types.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/remove-from-product-types.ts @@ -1,5 +1,5 @@ -import { pickByConfig, getRetrieveConfig } from "./utils/get-query-config" import { IsArray, IsOptional } from "class-validator" +import { getRetrieveConfig, pickByConfig } from "./utils/get-query-config" import { TaxRate } from "../../../.." import { TaxRateService } from "../../../../services" @@ -11,9 +11,40 @@ import { EntityManager } from "typeorm" * operationId: "DeleteTaxRatesTaxRateProductTypes" * summary: "Remove Tax Rate from Product Types" * description: "Removes a Tax Rate from a list of Product Types" + * parameters: + * - in: query + * name: fields + * description: "Which fields should be included in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: expand + * description: "Which fields should be expanded and retrieved in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - product_types + * properties: + * product_types: + * type: array + * description: "The IDs of the types of products to remove association with this tax rate" + * items: + * type: string * tags: - * - Tax Rates + * - Tax Rate * responses: * 200: * description: OK @@ -22,9 +53,7 @@ import { EntityManager } from "typeorm" * schema: * properties: * tax_rate: - * type: array - * items: - * $ref: "#/components/schemas/tax_rate" + * $ref: "#/components/schemas/tax_rate" */ export default async (req, res) => { const value = await validator( diff --git a/packages/medusa/src/api/routes/admin/tax-rates/remove-from-products.ts b/packages/medusa/src/api/routes/admin/tax-rates/remove-from-products.ts index 954cceda30..1c3b6996ac 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/remove-from-products.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/remove-from-products.ts @@ -1,5 +1,5 @@ -import { pickByConfig, getRetrieveConfig } from "./utils/get-query-config" import { IsArray, IsOptional } from "class-validator" +import { getRetrieveConfig, pickByConfig } from "./utils/get-query-config" import { TaxRate } from "../../../.." import { TaxRateService } from "../../../../services" @@ -11,9 +11,40 @@ import { EntityManager } from "typeorm" * operationId: "DeleteTaxRatesTaxRateProducts" * summary: "Removes Tax Rate from Products" * description: "Removes a Tax Rate from a list of Products" + * parameters: + * - in: query + * name: fields + * description: "Which fields should be included in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: expand + * description: "Which fields should be expanded and retrieved in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - products + * properties: + * products: + * type: array + * description: "The IDs of the products to remove association with this tax rate" + * items: + * type: string * tags: - * - Tax Rates + * - Tax Rate * responses: * 200: * description: OK @@ -22,9 +53,7 @@ import { EntityManager } from "typeorm" * schema: * properties: * tax_rate: - * type: array - * items: - * $ref: "#/components/schemas/tax_rate" + * $ref: "#/components/schemas/tax_rate" */ export default async (req, res) => { const value = await validator(AdminDeleteTaxRatesTaxRateProductsReq, req.body) diff --git a/packages/medusa/src/api/routes/admin/tax-rates/remove-from-shipping-options.ts b/packages/medusa/src/api/routes/admin/tax-rates/remove-from-shipping-options.ts index 1ef6cd5d3b..0a1a13d6d8 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/remove-from-shipping-options.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/remove-from-shipping-options.ts @@ -1,5 +1,5 @@ -import { pickByConfig, getRetrieveConfig } from "./utils/get-query-config" import { IsArray, IsOptional } from "class-validator" +import { getRetrieveConfig, pickByConfig } from "./utils/get-query-config" import { TaxRate } from "../../../.." import { TaxRateService } from "../../../../services" @@ -11,9 +11,40 @@ import { EntityManager } from "typeorm" * operationId: "DeleteTaxRatesTaxRateShippingOptions" * summary: "Removes a Tax Rate from Product Types" * description: "Removes a Tax Rate from a list of Product Types" + * parameters: + * - in: query + * name: fields + * description: "Which fields should be included in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: expand + * description: "Which fields should be expanded and retrieved in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - shipping_options + * properties: + * shipping_options: + * type: array + * description: "The IDs of the shipping options to remove association with this tax rate" + * items: + * type: string * tags: - * - Tax Rates + * - Tax Rate * responses: * 200: * description: OK @@ -22,9 +53,7 @@ import { EntityManager } from "typeorm" * schema: * properties: * tax_rate: - * type: array - * items: - * $ref: "#/components/schemas/tax_rate" + * $ref: "#/components/schemas/tax_rate" */ export default async (req, res) => { const value = await validator( diff --git a/packages/medusa/src/api/routes/admin/tax-rates/update-tax-rate.ts b/packages/medusa/src/api/routes/admin/tax-rates/update-tax-rate.ts index 3930afc311..2ed36a16e0 100644 --- a/packages/medusa/src/api/routes/admin/tax-rates/update-tax-rate.ts +++ b/packages/medusa/src/api/routes/admin/tax-rates/update-tax-rate.ts @@ -1,21 +1,72 @@ -import { EntityManager } from "typeorm" -import { IsString, IsArray, IsOptional } from "class-validator" -import { omit } from "lodash" +import { IsArray, IsOptional, IsString } from "class-validator" +import { getRetrieveConfig, pickByConfig } from "./utils/get-query-config" -import { pickByConfig, getRetrieveConfig } from "./utils/get-query-config" +import { EntityManager } from "typeorm" +import { IsType } from "../../../../utils/validators/is-type" import { TaxRate } from "../../../.." import { TaxRateService } from "../../../../services" +import { omit } from "lodash" import { validator } from "../../../../utils/validator" -import { IsType } from "../../../../utils/validators/is-type" /** * @oas [post] /tax-rates/:id * operationId: "PostTaxRatesTaxRate" * summary: "Update a Tax Rate" * description: "Updates a Tax Rate" + * parameters: + * - in: query + * name: fields + * description: "Which fields should be included in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string + * - in: query + * name: expand + * description: "Which fields should be expanded and retrieved in the result." + * style: form + * explode: false + * schema: + * type: array + * items: + * type: string * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * properties: + * code: + * type: string + * description: "A code to identify the tax type by" + * name: + * type: string + * description: "A human friendly name for the tax" + * region_id: + * type: string + * description: "The ID of the Region that the rate belongs to" + * rate: + * type: number + * description: "The numeric rate to charge" + * products: + * type: array + * description: "The IDs of the products associated with this tax rate" + * items: + * type: string + * shipping_options: + * type: array + * description: "The IDs of the shipping options associated with this tax rate" + * items: + * type: string + * product_types: + * type: array + * description: "The IDs of the types of products associated with this tax rate" + * items: + * type: string * tags: - * - Tax Rates + * - Tax Rate * responses: * 200: * description: OK @@ -24,9 +75,7 @@ import { IsType } from "../../../../utils/validators/is-type" * schema: * properties: * tax_rate: - * type: array - * items: - * $ref: "#/components/schemas/tax_rate" + * $ref: "#/components/schemas/tax_rate" */ export default async (req, res) => { const value = await validator(AdminPostTaxRatesTaxRateReq, req.body) diff --git a/packages/medusa/src/api/routes/admin/uploads/create-upload.ts b/packages/medusa/src/api/routes/admin/uploads/create-upload.ts index 5c9f7e1ba1..174bf2bff4 100644 --- a/packages/medusa/src/api/routes/admin/uploads/create-upload.ts +++ b/packages/medusa/src/api/routes/admin/uploads/create-upload.ts @@ -1,13 +1,22 @@ import fs from "fs" /** - * @oas [post] / + * @oas [post] /uploads * operationId: "PostUploads" - * summary: "Uploads an array of files" - * description: "Uploads an array of files to the specific fileservice that is installed in medusa." + * summary: "Uploads a file" + * description: "Uploads a file to the specific fileservice that is installed in Medusa." * x-authenticated: true * tags: - * - Uploads + * - Upload + * requestBody: + * content: + * multipart/form-data: + * schema: + * type: object + * properties: + * files: + * type: string + * format: binary * responses: * 200: * description: OK @@ -15,7 +24,15 @@ import fs from "fs" * application/json: * schema: * properties: - * uploads + * uploads: + * type: array + * items: + * type: object + * properties: + * url: + * type: string + * description: The URL of the uploaded file. + * format: uri */ export default async (req, res) => { try { diff --git a/packages/medusa/src/api/routes/admin/uploads/delete-upload.ts b/packages/medusa/src/api/routes/admin/uploads/delete-upload.ts index 25be5f5d1d..0affea868a 100644 --- a/packages/medusa/src/api/routes/admin/uploads/delete-upload.ts +++ b/packages/medusa/src/api/routes/admin/uploads/delete-upload.ts @@ -6,11 +6,36 @@ import { IsString } from "class-validator" * summary: "Removes an uploaded file" * description: "Removes an uploaded file using the installed fileservice" * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - file_key + * properties: + * file_key: + * description: "key of the file to delete" + * type: string * tags: - * - Uploads + * - Upload * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * properties: + * id: + * type: string + * description: The file key of the upload deleted + * object: + * type: string + * description: The type of the object that was deleted. + * default: file + * deleted: + * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const validated = req.validatedBody as AdminDeleteUploadsReq diff --git a/packages/medusa/src/api/routes/admin/uploads/get-download-url.ts b/packages/medusa/src/api/routes/admin/uploads/get-download-url.ts index 44aa2b2e52..dc354361c3 100644 --- a/packages/medusa/src/api/routes/admin/uploads/get-download-url.ts +++ b/packages/medusa/src/api/routes/admin/uploads/get-download-url.ts @@ -1,5 +1,5 @@ -import { IsString } from "class-validator" import { AbstractFileService } from "../../../../interfaces" +import { IsString } from "class-validator" /** * [post] /uploads/download-url @@ -17,12 +17,18 @@ import { AbstractFileService } from "../../../../interfaces" * file_key: * description: "key of the file to obtain the download link for" * type: string - * - (path) fileKey=* {string} key of the file to obtain the download link for. * tags: - * - Uploads + * - Upload * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * properties: + * download_url: + * type: string + * description: The Download URL of the file */ export default async (req, res) => { const fileService: AbstractFileService = req.scope.resolve("fileService") diff --git a/packages/medusa/src/api/routes/admin/users/create-user.ts b/packages/medusa/src/api/routes/admin/users/create-user.ts index 3c1b8f3ca7..1ed8d7e202 100644 --- a/packages/medusa/src/api/routes/admin/users/create-user.ts +++ b/packages/medusa/src/api/routes/admin/users/create-user.ts @@ -1,7 +1,8 @@ import { IsEmail, IsEnum, IsOptional, IsString } from "class-validator" -import _ from "lodash" + import { UserRoles } from "../../../../models/user" import UserService from "../../../../services/user" +import _ from "lodash" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -22,6 +23,7 @@ import { EntityManager } from "typeorm" * email: * description: "The Users email." * type: string + * format: email * first_name: * description: "The name of the User." * type: string @@ -31,11 +33,13 @@ import { EntityManager } from "typeorm" * role: * description: "Userrole assigned to the user." * type: string + * enum: [admin, member, developer] * password: * description: "The Users password." * type: string + * format: password * tags: - * - Users + * - User * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/users/delete-user.ts b/packages/medusa/src/api/routes/admin/users/delete-user.ts index aa8c9f94c4..a68ca5fe67 100644 --- a/packages/medusa/src/api/routes/admin/users/delete-user.ts +++ b/packages/medusa/src/api/routes/admin/users/delete-user.ts @@ -1,14 +1,14 @@ -import UserService from "../../../../services/user" import { EntityManager } from "typeorm" +import UserService from "../../../../services/user" /** - * @oas [delete] /users/{user_id} + * @oas [delete] /users/{id} * operationId: "DeleteUsersUser" * summary: "Delete a User" * description: "Deletes a User" * x-authenticated: true * parameters: - * - (path) user_id=* {string} The id of the User. + * - (path) id=* {string} The ID of the User. * tags: * - Users * responses: @@ -20,12 +20,15 @@ import { EntityManager } from "typeorm" * properties: * id: * type: string - * description: The id of the deleted Shipping Profile. + * description: The ID of the deleted user. * object: * type: string * description: The type of the object that was deleted. + * default: user * deleted: * type: boolean + * description: Whether or not the items were deleted. + * default: true */ export default async (req, res) => { const { user_id } = req.params diff --git a/packages/medusa/src/api/routes/admin/users/get-user.ts b/packages/medusa/src/api/routes/admin/users/get-user.ts index 4924803394..cddebaca94 100644 --- a/packages/medusa/src/api/routes/admin/users/get-user.ts +++ b/packages/medusa/src/api/routes/admin/users/get-user.ts @@ -7,9 +7,9 @@ import UserService from "../../../../services/user" * description: "Retrieves a User." * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the User. + * - (path) id=* {string} The ID of the User. * tags: - * - Users + * - User * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/users/list-users.ts b/packages/medusa/src/api/routes/admin/users/list-users.ts index e160b7f68e..3e142a156a 100644 --- a/packages/medusa/src/api/routes/admin/users/list-users.ts +++ b/packages/medusa/src/api/routes/admin/users/list-users.ts @@ -7,7 +7,7 @@ import UserService from "../../../../services/user" * description: "Retrieves all users." * x-authenticated: true * tags: - * - Users + * - User * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/users/reset-password-token.ts b/packages/medusa/src/api/routes/admin/users/reset-password-token.ts index 108aa9dec1..5da2d96315 100644 --- a/packages/medusa/src/api/routes/admin/users/reset-password-token.ts +++ b/packages/medusa/src/api/routes/admin/users/reset-password-token.ts @@ -19,8 +19,9 @@ import { EntityManager } from "typeorm" * email: * description: "The Users email." * type: string + * format: email * tags: - * - Users + * - User * responses: * 204: * description: OK diff --git a/packages/medusa/src/api/routes/admin/users/reset-password.ts b/packages/medusa/src/api/routes/admin/users/reset-password.ts index df3c32238e..70c2da56c1 100644 --- a/packages/medusa/src/api/routes/admin/users/reset-password.ts +++ b/packages/medusa/src/api/routes/admin/users/reset-password.ts @@ -1,14 +1,15 @@ import { IsEmail, IsOptional, IsString } from "class-validator" -import jwt from "jsonwebtoken" -import _ from "lodash" + import { MedusaError } from "medusa-core-utils" import { User } from "../../../.." import UserService from "../../../../services/user" +import _ from "lodash" +import jwt from "jsonwebtoken" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" /** - * @oas [post] /users/password-token + * @oas [post] /users/reset-password * operationId: "PostUsersUserPassword" * summary: "Set the password for a User." * description: "Sets the password for a User given the correct token." @@ -18,21 +19,22 @@ import { EntityManager } from "typeorm" * application/json: * schema: * required: - * - email * - token * - password * properties: * email: * description: "The Users email." * type: string + * format: email * token: * description: "The token generated from the 'password-token' endpoint." * type: string * password: * description: "The Users new password." * type: string + * format: password * tags: - * - Users + * - User * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/users/update-user.ts b/packages/medusa/src/api/routes/admin/users/update-user.ts index 91ff090ae6..189af25cf3 100644 --- a/packages/medusa/src/api/routes/admin/users/update-user.ts +++ b/packages/medusa/src/api/routes/admin/users/update-user.ts @@ -1,23 +1,42 @@ import { IsEnum, IsObject, IsOptional, IsString } from "class-validator" + import { UserRoles } from "../../../../models/user" import UserService from "../../../../services/user" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" /** - * @oas [post] /users/{user_id} + * @oas [post] /users/{id} * operationId: "PostUsersUser" * summary: "Update a User" * description: "Updates a User" - * x-authenticated: true * parameters: - * - (path) user_id=* {string} The id of the User. - * - (body) first_name {string} The name of the User. - * - (body) last_name {string} The name of the User. - * - (body) role {string} The role of the User(admin, member, developer). - * - (body) api_token {string} The api_token of the User. + * - (path) id=* {string} The ID of the User. + * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * properties: + * first_name: + * description: "The name of the User." + * type: string + * last_name: + * description: "The name of the User." + * type: string + * role: + * description: "Userrole assigned to the user." + * type: string + * enum: [admin, member, developer] + * api_token: + * description: "The api token of the User." + * type: string + * metadata: + * description: An optional set of key-value pairs with additional information. + * type: object + * * tags: - * - Users + * - User * responses: * 200: * description: OK diff --git a/packages/medusa/src/api/routes/admin/variants/list-variants.ts b/packages/medusa/src/api/routes/admin/variants/list-variants.ts index b7366d790f..6af7f741a0 100644 --- a/packages/medusa/src/api/routes/admin/variants/list-variants.ts +++ b/packages/medusa/src/api/routes/admin/variants/list-variants.ts @@ -1,12 +1,13 @@ +import { IsInt, IsOptional, IsString } from "class-validator" import { defaultAdminVariantFields, defaultAdminVariantRelations } from "./" import { FilterableProductVariantProps } from "../../../../types/product-variant" import { FindConfig } from "../../../../types/common" import { ProductVariant } from "../../../../models/product-variant" import ProductVariantService from "../../../../services/product-variant" -import { validator } from "../../../../utils/validator" import { Type } from "class-transformer" -import { IsInt, IsOptional, IsString } from "class-validator" +import { validator } from "../../../../utils/validator" + /** * @oas [get] /variants * operationId: "GetVariants" @@ -15,8 +16,8 @@ import { IsInt, IsOptional, IsString } from "class-validator" * x-authenticated: true * parameters: * - (query) q {string} Query used for searching variants. - * - (query) offset {string} How many variants to skip in the result. - * - (query) limit {string} Limit the number of variants returned. + * - (query) offset=0 {integer} How many variants to skip in the result. + * - (query) limit=20 {integer} Limit the number of variants returned. * tags: * - Product Variant * responses: @@ -30,6 +31,15 @@ import { IsInt, IsOptional, IsString } from "class-validator" * type: array * items: * $ref: "#/components/schemas/product_variant" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const variantService: ProductVariantService = req.scope.resolve( diff --git a/packages/medusa/src/api/routes/store/auth/exists.ts b/packages/medusa/src/api/routes/store/auth/exists.ts index 980d1c835d..6baeda0b75 100644 --- a/packages/medusa/src/api/routes/store/auth/exists.ts +++ b/packages/medusa/src/api/routes/store/auth/exists.ts @@ -5,7 +5,13 @@ import CustomerService from "../../../../services/customer" * summary: "Check if email has account" * description: "Checks if a Customer with the given email has signed up." * parameters: - * - (path) email=* {string} The Customer's email. + * - in: path + * name: email + * schema: + * type: string + * format: email + * required: true + * description: The email to check if exists. * tags: * - Auth * responses: @@ -17,6 +23,7 @@ import CustomerService from "../../../../services/customer" * properties: * exists: * type: boolean + * description: Whether email exists or not. */ export default async (req, res) => { const { email } = req.params diff --git a/packages/medusa/src/api/routes/store/auth/get-session.ts b/packages/medusa/src/api/routes/store/auth/get-session.ts index eb3f842b96..af856a46f4 100644 --- a/packages/medusa/src/api/routes/store/auth/get-session.ts +++ b/packages/medusa/src/api/routes/store/auth/get-session.ts @@ -8,6 +8,8 @@ import CustomerService from "../../../../services/customer" * tags: * - Auth * responses: + * "401": + * description: Unauthorized * "200": * description: OK * content: diff --git a/packages/medusa/src/api/routes/store/carts/add-shipping-method.ts b/packages/medusa/src/api/routes/store/carts/add-shipping-method.ts index f891fcc8e7..e1471eb649 100644 --- a/packages/medusa/src/api/routes/store/carts/add-shipping-method.ts +++ b/packages/medusa/src/api/routes/store/carts/add-shipping-method.ts @@ -1,9 +1,10 @@ import { IsOptional, IsString } from "class-validator" -import { EntityManager } from "typeorm" import { defaultStoreCartFields, defaultStoreCartRelations } from "." + import { CartService } from "../../../../services" -import { validator } from "../../../../utils/validator" +import { EntityManager } from "typeorm" import { decorateLineItemsWithTotals } from "./decorate-line-items-with-totals" +import { validator } from "../../../../utils/validator" /** * @oas [post] /carts/{id}/shipping-methods @@ -13,12 +14,12 @@ import { decorateLineItemsWithTotals } from "./decorate-line-items-with-totals" * tags: * - Cart * parameters: - * - (path) id=* {String} The cart id. - * - (body) option_id=* {String} id of the shipping option to create the method from + * - (path) id=* {string} The cart ID. + * - (body) option_id=* {string} ID of the shipping option to create the method from * - (body) data {Object} Used to hold any data that the shipping method may need to process the fulfillment of the order. Look at the documentation for your installed fulfillment providers to find out what to send. * responses: * "200": - * description: "A successful response" + * description: OK * content: * application/json: * schema: diff --git a/packages/medusa/src/api/routes/store/carts/calculate-taxes.ts b/packages/medusa/src/api/routes/store/carts/calculate-taxes.ts index 53fdf80093..aa3e957eb6 100644 --- a/packages/medusa/src/api/routes/store/carts/calculate-taxes.ts +++ b/packages/medusa/src/api/routes/store/carts/calculate-taxes.ts @@ -1,6 +1,7 @@ +import { CartService, IdempotencyKeyService } from "../../../../services" + import { EntityManager } from "typeorm" import { IdempotencyKey } from "../../../../models/idempotency-key" -import { CartService, IdempotencyKeyService } from "../../../../services" import { decorateLineItemsWithTotals } from "./decorate-line-items-with-totals" /** @@ -10,20 +11,18 @@ import { decorateLineItemsWithTotals } from "./decorate-line-items-with-totals" * description: "Calculates taxes for a cart. Depending on the cart's region * this may involve making 3rd party API calls to a Tax Provider service." * parameters: - * - (path) id=* {String} The Cart id. + * - (path) id=* {String} The Cart ID. * tags: * - Cart * responses: * 200: - * description: "A cart object with the tax_total field populated" + * description: OK * content: * application/json: * schema: - * oneOf: - * - type: object - * properties: - * cart: - * $ref: "#/components/schemas/cart" + * properties: + * cart: + * $ref: "#/components/schemas/cart" */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/store/carts/complete-cart.ts b/packages/medusa/src/api/routes/store/carts/complete-cart.ts index c23588515a..8d422e486a 100644 --- a/packages/medusa/src/api/routes/store/carts/complete-cart.ts +++ b/packages/medusa/src/api/routes/store/carts/complete-cart.ts @@ -1,7 +1,7 @@ -import { ICartCompletionStrategy } from "../../../../interfaces" -import { IdempotencyKeyService } from "../../../../services" -import { IdempotencyKey } from "../../../../models/idempotency-key" import { EntityManager } from "typeorm"; +import { ICartCompletionStrategy } from "../../../../interfaces" +import { IdempotencyKey } from "../../../../models/idempotency-key" +import { IdempotencyKeyService } from "../../../../services" /** * @oas [post] /carts/{id}/complete @@ -26,19 +26,30 @@ import { EntityManager } from "typeorm"; * content: * application/json: * schema: - * oneOf: - * - type: object - * properties: - * order: - * $ref: "#/components/schemas/order" - * - type: object - * properties: - * cart: - * $ref: "#/components/schemas/cart" - * - type: object - * properties: - * cart: - * $ref: "#/components/schemas/swap" + * properties: + * type: + * type: string + * description: The type of the data property. + * enum: [order, cart, swap] + * data: + * type: object + * description: The data of the result object. Its type depends on the type field. + * oneOf: + * - type: object + * description: Cart was successfully authorized and order was placed successfully. + * properties: + * order: + * $ref: "#/components/schemas/order" + * - type: object + * description: Cart was successfully authorized but requires further actions. + * properties: + * cart: + * $ref: "#/components/schemas/cart" + * - type: object + * description: When cart is used for a swap and it has been completed successfully. + * properties: + * cart: + * $ref: "#/components/schemas/swap" */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/store/carts/create-cart.ts b/packages/medusa/src/api/routes/store/carts/create-cart.ts index 852d8c0ffc..76786e31ef 100644 --- a/packages/medusa/src/api/routes/store/carts/create-cart.ts +++ b/packages/medusa/src/api/routes/store/carts/create-cart.ts @@ -1,4 +1,4 @@ -import { Type } from "class-transformer" +import { CartService, LineItemService, RegionService } from "../../../../services" import { IsArray, IsBoolean, @@ -8,17 +8,17 @@ import { IsString, ValidateNested, } from "class-validator" -import { MedusaError } from "medusa-core-utils" -import reqIp from "request-ip" -import { EntityManager } from "typeorm" +import { defaultStoreCartFields, defaultStoreCartRelations, } from "." -import { defaultStoreCartFields, defaultStoreCartRelations, } from "." -import { CartService, LineItemService, RegionService } from "../../../../services" -import { decorateLineItemsWithTotals } from "./decorate-line-items-with-totals" -import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels"; +import { Cart } from "../../../../models"; +import { EntityManager } from "typeorm" import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators"; import { FlagRouter } from "../../../../utils/flag-router" -import { Cart } from "../../../../models"; +import { MedusaError } from "medusa-core-utils" +import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels"; +import { Type } from "class-transformer" +import { decorateLineItemsWithTotals } from "./decorate-line-items-with-totals" +import reqIp from "request-ip" /** * @oas [post] /carts @@ -35,17 +35,23 @@ import { Cart } from "../../../../models"; * properties: * region_id: * type: string - * description: The id of the Region to create the Cart in. - * sales_channel_id: + * description: The ID of the Region to create the Cart in. + * sales_channel_id: * type: string - * description: [EXPERIMENTAL] The id of the Sales channel to create the Cart in. + * description: "[EXPERIMENTAL] The ID of the Sales channel to create the Cart in." * country_code: * type: string * description: "The 2 character ISO country code to create the Cart in." + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + * description: See a list of codes. * items: * description: "An optional array of `variant_id`, `quantity` pairs to generate Line Items from." * type: array * items: + * required: + * - variant_id + * - quantity * properties: * variant_id: * description: The id of the Product Variant to generate a Line Item from. @@ -56,6 +62,9 @@ import { Cart } from "../../../../models"; * context: * description: "An optional object to provide context to the Cart. The `context` field is automatically populated with `ip` and `user_agent`" * type: object + * example: + * ip: "::1" + * user_agent: "Chrome" * tags: * - Cart * responses: diff --git a/packages/medusa/src/api/routes/store/carts/set-payment-session.ts b/packages/medusa/src/api/routes/store/carts/set-payment-session.ts index 4d31d49b07..8a8106e500 100644 --- a/packages/medusa/src/api/routes/store/carts/set-payment-session.ts +++ b/packages/medusa/src/api/routes/store/carts/set-payment-session.ts @@ -1,9 +1,10 @@ -import { IsString } from "class-validator" import { defaultStoreCartFields, defaultStoreCartRelations } from "." + import { CartService } from "../../../../services" -import { validator } from "../../../../utils/validator" -import { decorateLineItemsWithTotals } from "./decorate-line-items-with-totals" import { EntityManager } from "typeorm"; +import { IsString } from "class-validator" +import { decorateLineItemsWithTotals } from "./decorate-line-items-with-totals" +import { validator } from "../../../../utils/validator" /** * @oas [post] /carts/{id}/payment-session @@ -11,8 +12,8 @@ import { EntityManager } from "typeorm"; * summary: Select a Payment Session * description: "Selects a Payment Session as the session intended to be used towards the completion of the Cart." * parameters: - * - (path) id=* {string} The id of the Cart. - * - (body) provider_id=* {string} The id of the Payment Provider. + * - (path) id=* {string} The ID of the Cart. + * - (body) provider_id=* {string} The ID of the Payment Provider. * tags: * - Cart * responses: diff --git a/packages/medusa/src/api/routes/store/carts/update-cart.ts b/packages/medusa/src/api/routes/store/carts/update-cart.ts index 7a14cb902e..206dd22014 100644 --- a/packages/medusa/src/api/routes/store/carts/update-cart.ts +++ b/packages/medusa/src/api/routes/store/carts/update-cart.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsEmail, @@ -7,18 +6,20 @@ import { ValidateNested, } from "class-validator" import { defaultStoreCartFields, defaultStoreCartRelations } from "." -import { CartService } from "../../../../services" + import { AddressPayload } from "../../../../types/common" -import { IsType } from "../../../../utils/validators/is-type" -import { decorateLineItemsWithTotals } from "./decorate-line-items-with-totals" +import { CartService } from "../../../../services" import { EntityManager } from "typeorm"; import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators"; +import { IsType } from "../../../../utils/validators/is-type" import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels"; +import { Type } from "class-transformer" +import { decorateLineItemsWithTotals } from "./decorate-line-items-with-totals" /** - * @oas [post] /store/carts/{id} + * @oas [post] /carts/{id} * operationId: PostCartsCart - * summary: Update a Cart" + * summary: Update a Cart * description: "Updates a Cart." * parameters: * - (path) id=* {string} The id of the Cart. @@ -33,20 +34,30 @@ import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-cha * country_code: * type: string * description: "The 2 character ISO country code to create the Cart in." + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + * description: See a list of codes. * email: * type: string * description: "An email to be used on the Cart." - * sales_channel_id: + * format: email + * sales_channel_id: * type: string - * description: The id of the Sales channel to update the Cart with. + * description: The ID of the Sales channel to update the Cart with. * billing_address: * description: "The Address to be used for billing purposes." * anyOf: * - $ref: "#/components/schemas/address" + * description: A full billing address object. + * - type: string + * description: The billing address ID * shipping_address: * description: "The Address to be used for shipping." * anyOf: * - $ref: "#/components/schemas/address" + * description: A full shipping address object. + * - type: string + * description: The shipping address ID * gift_cards: * description: "An array of Gift Card codes to add to the Cart." * type: array @@ -68,11 +79,14 @@ import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-cha * description: "The code that a Discount is identifed by." * type: string * customer_id: - * description: "The id of the Customer to associate the Cart with." + * description: "The ID of the Customer to associate the Cart with." * type: string * context: * description: "An optional object to provide context to the Cart." * type: object + * example: + * ip: "::1" + * user_agent: "Chrome" * tags: * - Cart * responses: diff --git a/packages/medusa/src/api/routes/store/collections/list-collections.ts b/packages/medusa/src/api/routes/store/collections/list-collections.ts index f4e94f4758..975eb21096 100644 --- a/packages/medusa/src/api/routes/store/collections/list-collections.ts +++ b/packages/medusa/src/api/routes/store/collections/list-collections.ts @@ -1,8 +1,9 @@ -import { Type } from "class-transformer" -import { ValidateNested, IsOptional, IsInt } from "class-validator" -import ProductCollectionService from "../../../../services/product-collection" -import { validator } from "../../../../utils/validator" +import { IsInt, IsOptional, ValidateNested } from "class-validator" + import { DateComparisonOperator } from "../../../../types/common" +import ProductCollectionService from "../../../../services/product-collection" +import { Type } from "class-transformer" +import { validator } from "../../../../utils/validator" /** * @oas [get] /collections @@ -12,6 +13,50 @@ import { DateComparisonOperator } from "../../../../types/common" * parameters: * - (query) offset=0 {integer} The number of collections to skip before starting to collect the collections set * - (query) limit=10 {integer} The number of collections to return + * - in: query + * name: created_at + * description: Date comparison for when resulting collections were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting collections were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date * tags: * - Collection * responses: @@ -21,8 +66,19 @@ import { DateComparisonOperator } from "../../../../types/common" * application/json: * schema: * properties: - * collection: - * $ref: "#/components/schemas/product_collection" + * collections: + * type: array + * items: + * $ref: "#/components/schemas/product_collection" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const validated = await validator(StoreGetCollectionsParams, req.query) diff --git a/packages/medusa/src/api/routes/store/customers/create-address.ts b/packages/medusa/src/api/routes/store/customers/create-address.ts index 3b7a7d78b6..a0c2c488ea 100644 --- a/packages/medusa/src/api/routes/store/customers/create-address.ts +++ b/packages/medusa/src/api/routes/store/customers/create-address.ts @@ -15,9 +15,9 @@ import { EntityManager } from "typeorm" * requestBody: * content: * application/json: - * required: - * - address * schema: + * required: + * - address * properties: * address: * description: "The Address to add to the Customer." diff --git a/packages/medusa/src/api/routes/store/customers/create-customer.ts b/packages/medusa/src/api/routes/store/customers/create-customer.ts index 3280532f89..2bf26a9533 100644 --- a/packages/medusa/src/api/routes/store/customers/create-customer.ts +++ b/packages/medusa/src/api/routes/store/customers/create-customer.ts @@ -1,8 +1,9 @@ import { IsEmail, IsOptional, IsString } from "class-validator" -import jwt from "jsonwebtoken" import { defaultStoreCustomersFields, defaultStoreCustomersRelations } from "." + import { Customer } from "../../../.." import CustomerService from "../../../../services/customer" +import jwt from "jsonwebtoken" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -11,12 +12,33 @@ import { EntityManager } from "typeorm" * operationId: PostCustomers * summary: Create a Customer * description: "Creates a Customer account." - * parameters: - * - (body) email=* {string} The Customer's email address. - * - (body) first_name=* {string} The Customer's first name. - * - (body) last_name=* {string} The Customer's last name. - * - (body) password=* {string} The Customer's password for login. - * - (body) phone {string} The Customer's phone number. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - first_name + * - last_name + * - email + * - password + * properties: + * first_name: + * description: "The Customer's first name." + * type: string + * last_name: + * description: "The Customer's last name." + * type: string + * email: + * description: "The email of the customer." + * type: string + * format: email + * password: + * description: "The Customer's password." + * type: string + * format: password + * phone: + * description: "The Customer's phone number." + * type: string * tags: * - Customer * responses: @@ -28,6 +50,25 @@ import { EntityManager } from "typeorm" * properties: * customer: * $ref: "#/components/schemas/customer" + * 422: + * description: A customer with the same email exists + * content: + * application/json: + * schema: + * properties: + * code: + * type: string + * description: The error code + * type: + * type: string + * description: The type of error + * message: + * type: string + * description: Human-readable message with details about the error + * example: + * code: "invalid_request_error" + * type: "duplicate_error" + * message: "A customer with the given email already has an account. Log in instead" */ export default async (req, res) => { const validated = await validator(StorePostCustomersReq, req.body) diff --git a/packages/medusa/src/api/routes/store/customers/delete-address.ts b/packages/medusa/src/api/routes/store/customers/delete-address.ts index 7083e0d516..f42f7f3623 100644 --- a/packages/medusa/src/api/routes/store/customers/delete-address.ts +++ b/packages/medusa/src/api/routes/store/customers/delete-address.ts @@ -1,4 +1,5 @@ import { defaultStoreCustomersFields, defaultStoreCustomersRelations } from "." + import CustomerService from "../../../../services/customer" import { EntityManager } from "typeorm" @@ -6,7 +7,7 @@ import { EntityManager } from "typeorm" * @oas [delete] /customers/me/addresses/{address_id} * operationId: DeleteCustomersCustomerAddressesAddress * summary: Delete an Address - * description: "Removes an Address from the Customer's saved addresse." + * description: "Removes an Address from the Customer's saved addresses." * x-authenticated: true * parameters: * - (path) address_id=* {string} The id of the Address to remove. diff --git a/packages/medusa/src/api/routes/store/customers/list-orders.ts b/packages/medusa/src/api/routes/store/customers/list-orders.ts index bf3b7543cb..642f52d761 100644 --- a/packages/medusa/src/api/routes/store/customers/list-orders.ts +++ b/packages/medusa/src/api/routes/store/customers/list-orders.ts @@ -1,7 +1,4 @@ -import { Type } from "class-transformer" import { IsNumber, IsOptional, IsString } from "class-validator" -import OrderService from "../../../../services/order" -import { validator } from "../../../../utils/validator" import { allowedStoreOrdersFields, allowedStoreOrdersRelations, @@ -9,6 +6,10 @@ import { import { FindConfig } from "../../../../types/common" import { Order } from "../../../../models" +import OrderService from "../../../../services/order" +import { Type } from "class-transformer" +import { validator } from "../../../../utils/validator" + /** * @oas [get] /customers/me/orders * operationId: GetCustomersCustomerOrders @@ -16,10 +17,10 @@ import { Order } from "../../../../models" * description: "Retrieves a list of a Customer's Orders." * x-authenticated: true * parameters: - * - (query) limit {integer} How many addresses to return. - * - (query) offset {integer} The offset in the resulting addresses. - * - (query) fields {string} (Comma separated string) Which fields should be included in the resulting addresses. - * - (query) expand {string} (Comma separated string) Which relations should be expanded in the resulting addresses. + * - (query) limit=10 {integer} How many orders to return. + * - (query) offset=0 {integer} The offset in the resulting orders. + * - (query) fields {string} (Comma separated string) Which fields should be included in the resulting orders. + * - (query) expand {string} (Comma separated string) Which relations should be expanded in the resulting orders. * tags: * - Customer * responses: @@ -29,19 +30,19 @@ import { Order } from "../../../../models" * application/json: * schema: * properties: - * count: - * description: The total number of Orders. - * type: integer - * offset: - * description: The offset for pagination. - * type: integer - * limit: - * description: The maxmimum number of Orders to return, - * type: integer * orders: * type: array * items: - * $ref: "#/components/schemas/orders" + * $ref: "#/components/schemas/order" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const id: string = req.user.customer_id diff --git a/packages/medusa/src/api/routes/store/customers/reset-password-token.ts b/packages/medusa/src/api/routes/store/customers/reset-password-token.ts index f692ff32d3..26de59e6d2 100644 --- a/packages/medusa/src/api/routes/store/customers/reset-password-token.ts +++ b/packages/medusa/src/api/routes/store/customers/reset-password-token.ts @@ -1,5 +1,5 @@ -import { IsEmail } from "class-validator" import CustomerService from "../../../../services/customer" +import { IsEmail } from "class-validator" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -8,8 +8,17 @@ import { EntityManager } from "typeorm" * operationId: PostCustomersCustomerPasswordToken * summary: Creates a reset password token * description: "Creates a reset password token to be used in a subsequent /reset-password request. The password token should be sent out of band e.g. via email and will not be returned." - * parameters: - * - (body) email=* {string} Email of the user whose password should be reset. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - email + * properties: + * email: + * description: "The email of the customer." + * type: string + * format: email * tags: * - Customer * responses: diff --git a/packages/medusa/src/api/routes/store/customers/reset-password.ts b/packages/medusa/src/api/routes/store/customers/reset-password.ts index 6520983704..9af27db335 100644 --- a/packages/medusa/src/api/routes/store/customers/reset-password.ts +++ b/packages/medusa/src/api/routes/store/customers/reset-password.ts @@ -1,18 +1,35 @@ import { IsEmail, IsString } from "class-validator" import jwt, { JwtPayload } from "jsonwebtoken" + import CustomerService from "../../../../services/customer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" /** - * @oas [post] /customers/reset-password + * @oas [post] /customers/password-reset * operationId: PostCustomersResetPassword * summary: Resets Customer password * description: "Resets a Customer's password using a password token created by a previous /password-token request." - * parameters: - * - (body) email=* {string} The Customer's email. - * - (body) token=* {string} The password token created by a /password-token request. - * - (body) password=* {string} The new password to set for the Customer. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - email + * - password + * - token + * properties: + * email: + * description: "The email of the customer." + * type: string + * format: email + * password: + * description: "The Customer's password." + * type: string + * format: password + * token: + * description: "The reset password token" + * type: string * tags: * - Customer * responses: diff --git a/packages/medusa/src/api/routes/store/customers/update-address.ts b/packages/medusa/src/api/routes/store/customers/update-address.ts index fd07cb2936..fbbc809189 100644 --- a/packages/medusa/src/api/routes/store/customers/update-address.ts +++ b/packages/medusa/src/api/routes/store/customers/update-address.ts @@ -1,6 +1,7 @@ import { defaultStoreCustomersFields, defaultStoreCustomersRelations } from "." -import CustomerService from "../../../../services/customer" + import { AddressPayload } from "../../../../types/common" +import CustomerService from "../../../../services/customer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -16,11 +17,8 @@ import { EntityManager } from "typeorm" * content: * application/json: * schema: - * properties: - * address: - * description: "The updated Address." - * anyOf: - * - $ref: "#/components/schemas/address" + * anyOf: + * - $ref: "#/components/schemas/address" * tags: * - Customer * responses: diff --git a/packages/medusa/src/api/routes/store/customers/update-customer.ts b/packages/medusa/src/api/routes/store/customers/update-customer.ts index 598200e8e4..7f93d52bd2 100644 --- a/packages/medusa/src/api/routes/store/customers/update-customer.ts +++ b/packages/medusa/src/api/routes/store/customers/update-customer.ts @@ -1,7 +1,8 @@ import { IsEmail, IsObject, IsOptional, IsString } from "class-validator" import { defaultStoreCustomersFields, defaultStoreCustomersRelations } from "." -import CustomerService from "../../../../services/customer" + import { AddressPayload } from "../../../../types/common" +import CustomerService from "../../../../services/customer" import { IsType } from "../../../../utils/validators/is-type" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm" @@ -27,6 +28,9 @@ import { EntityManager } from "typeorm" * description: "The Address to be used for billing purposes." * anyOf: * - $ref: "#/components/schemas/address" + * description: The full billing address object + * - type: string + * description: The ID of an existing billing address * password: * description: "The Customer's password." * type: string diff --git a/packages/medusa/src/api/routes/store/gift-cards/get-gift-card.ts b/packages/medusa/src/api/routes/store/gift-cards/get-gift-card.ts index be96e75ea8..1b4b2e8b7d 100644 --- a/packages/medusa/src/api/routes/store/gift-cards/get-gift-card.ts +++ b/packages/medusa/src/api/routes/store/gift-cards/get-gift-card.ts @@ -1,4 +1,5 @@ import { defaultStoreGiftCardFields, defaultStoreGiftCardRelations } from "." + import GiftCardService from "../../../../services/gift-card" /** @@ -17,16 +18,8 @@ import GiftCardService from "../../../../services/gift-card" * application/json: * schema: * properties: - * id: - * description: The id of the Gift Card - * code: - * description: The code of the Gift Card - * value: - * description: The original value of the Gift Card. - * balance: - * description: The current balanace of the Gift Card - * region: - * $ref: "#/components/schemas/region" + * gift_card: + * $ref: "#/components/schemas/gift_card" */ export default async (req, res) => { const { code } = req.params diff --git a/packages/medusa/src/api/routes/store/orders/get-order-by-cart.ts b/packages/medusa/src/api/routes/store/orders/get-order-by-cart.ts index 4ddae453f4..7dd63384bd 100644 --- a/packages/medusa/src/api/routes/store/orders/get-order-by-cart.ts +++ b/packages/medusa/src/api/routes/store/orders/get-order-by-cart.ts @@ -1,4 +1,5 @@ import { defaultStoreOrdersFields, defaultStoreOrdersRelations } from "." + import { OrderService } from "../../../../services" /** @@ -7,7 +8,7 @@ import { OrderService } from "../../../../services" * summary: Retrieves Order by Cart id * description: "Retrieves an Order by the id of the Cart that was used to create the Order." * parameters: - * - (path) cart_id=* {string} The id of Cart. + * - (path) cart_id=* {string} The ID of Cart. * tags: * - Order * responses: diff --git a/packages/medusa/src/api/routes/store/orders/get-order.ts b/packages/medusa/src/api/routes/store/orders/get-order.ts index 6135f6b9f4..fb4218bc47 100644 --- a/packages/medusa/src/api/routes/store/orders/get-order.ts +++ b/packages/medusa/src/api/routes/store/orders/get-order.ts @@ -1,6 +1,7 @@ -import { OrderService } from "../../../../services" import { defaultStoreOrdersFields, defaultStoreOrdersRelations } from "./index" +import { OrderService } from "../../../../services" + /** * @oas [get] /orders/{id} * operationId: GetOrdersOrder @@ -17,8 +18,8 @@ import { defaultStoreOrdersFields, defaultStoreOrdersRelations } from "./index" * application/json: * schema: * properties: - * customer: - * $ref: "#/components/schemas/customer" + * order: + * $ref: "#/components/schemas/order" */ export default async (req, res) => { const { id } = req.params diff --git a/packages/medusa/src/api/routes/store/orders/lookup-order.ts b/packages/medusa/src/api/routes/store/orders/lookup-order.ts index ae445ba5ae..2efb40b718 100644 --- a/packages/medusa/src/api/routes/store/orders/lookup-order.ts +++ b/packages/medusa/src/api/routes/store/orders/lookup-order.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsEmail, IsNumber, @@ -7,17 +6,38 @@ import { ValidateNested, } from "class-validator" import { defaultStoreOrdersFields, defaultStoreOrdersRelations } from "." + import { OrderService } from "../../../../services" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" /** * @oas [get] /orders * operationId: "GetOrders" * summary: "Look Up an Order" - * description: "Looks for an Order with a given `display_id`, `email` pair. The `display_id`, `email` pair must match in order for the Order to be returned." + * description: "Look up an order using filters." * parameters: * - (query) display_id=* {number} The display id given to the Order. - * - (query) email=* {string} The email of the Order with the given display_id. + * - in: query + * name: email + * style: form + * explode: false + * description: The email associated with this order. + * required: true + * schema: + * type: string + * format: email + * - in: query + * name: shipping_address + * style: form + * explode: false + * description: The shipping address associated with this order. + * schema: + * type: object + * properties: + * postal_code: + * type: string + * description: The postal code of the shipping address * tags: * - Order * responses: diff --git a/packages/medusa/src/api/routes/store/products/list-products.ts b/packages/medusa/src/api/routes/store/products/list-products.ts index 586ac505f4..0ac75ac931 100644 --- a/packages/medusa/src/api/routes/store/products/list-products.ts +++ b/packages/medusa/src/api/routes/store/products/list-products.ts @@ -1,4 +1,8 @@ -import { Transform, Type } from "class-transformer" +import { + CartService, + ProductService, + RegionService, +} from "../../../../services" import { IsArray, IsBoolean, @@ -7,20 +11,17 @@ import { IsString, ValidateNested, } from "class-validator" +import { Transform, Type } from "class-transformer" import { omit, pickBy } from "lodash" -import { defaultStoreProductsRelations } from "." -import { - ProductService, - RegionService, - CartService, -} from "../../../../services" -import PricingService from "../../../../services/pricing" + import { DateComparisonOperator } from "../../../../types/common" -import { PriceSelectionParams } from "../../../../types/price-selection" -import { validator } from "../../../../utils/validator" import { IsType } from "../../../../utils/validators/is-type" -import { optionalBooleanMapper } from "../../../../utils/validators/is-boolean" +import { PriceSelectionParams } from "../../../../types/price-selection" +import PricingService from "../../../../services/pricing" import { Product } from "../../../../models" +import { defaultStoreProductsRelations } from "." +import { optionalBooleanMapper } from "../../../../utils/validators/is-boolean" +import { validator } from "../../../../utils/validator" /** * @oas [get] /products @@ -28,20 +29,89 @@ import { Product } from "../../../../models" * summary: List Products * description: "Retrieves a list of Products." * parameters: - * - (query) q {string} Query used for searching products. - * - (query) id {string} Id of the product to search for. - * - (query) collection_id {string[]} Collection ids to search for. - * - (query) tags {string[]} Tags to search for. - * - (query) title {string} to search for. - * - (query) description {string} to search for. - * - (query) handle {string} to search for. - * - (query) is_giftcard {string} Search for giftcards using is_giftcard=true. - * - (query) type {string} to search for. - * - (query) created_at {DateComparisonOperator} Date comparison for when resulting products was created, i.e. less than, greater than etc. - * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting products was updated, i.e. less than, greater than etc. - * - (query) deleted_at {DateComparisonOperator} Date comparison for when resulting products was deleted, i.e. less than, greater than etc. - * - (query) offset {string} How many products to skip in the result. - * - (query) limit {string} Limit the number of products returned. + * - (query) q {string} Query used for searching products by title, description, variant's title, variant's sku, and collection's title + * - in: query + * name: id + * style: form + * explode: false + * description: product IDs to search for. + * schema: + * oneOf: + * - type: string + * - type: array + * items: + * type: string + * - in: query + * name: collection_id + * style: form + * explode: false + * description: Collection IDs to search for + * schema: + * type: array + * items: + * type: string + * - in: query + * name: tags + * style: form + * explode: false + * description: Tag IDs to search for + * schema: + * type: array + * items: + * type: string + * - (query) title {string} title to search for. + * - (query) description {string} description to search for. + * - (query) handle {string} handle to search for. + * - (query) is_giftcard {boolean} Search for giftcards using is_giftcard=true. + * - (query) type {string} type to search for. + * - in: query + * name: created_at + * description: Date comparison for when resulting products were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting products were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - (query) offset=0 {integer} How many products to skip in the result. + * - (query) limit=100 {integer} Limit the number of products returned. + * - (query) expand {string} (Comma separated) Which fields should be expanded in each order of the result. + * - (query) fields {string} (Comma separated) Which fields should be included in each order of the result. * tags: * - Product * responses: @@ -51,19 +121,19 @@ import { Product } from "../../../../models" * application/json: * schema: * properties: - * count: - * description: The total number of Products. - * type: integer - * offset: - * description: The offset for pagination. - * type: integer - * limit: - * description: The maxmimum number of Products to return, - * type: integer * products: * type: array * items: * $ref: "#/components/schemas/product" + * count: + * type: integer + * description: The total number of items available + * offset: + * type: integer + * description: The number of items skipped before these items + * limit: + * type: integer + * description: The number of items per page */ export default async (req, res) => { const productService: ProductService = req.scope.resolve("productService") diff --git a/packages/medusa/src/api/routes/store/products/search.ts b/packages/medusa/src/api/routes/store/products/search.ts index b7a0a137d7..d8d61e1448 100644 --- a/packages/medusa/src/api/routes/store/products/search.ts +++ b/packages/medusa/src/api/routes/store/products/search.ts @@ -1,9 +1,33 @@ -import { Type } from "class-transformer" import { IsNumber, IsOptional, IsString } from "class-validator" -import { SearchService } from "../../../../services" + import ProductService from "../../../../services/product" +import { SearchService } from "../../../../services" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" +/** + * @oas [get] /products/search + * operationId: GetProductsSearch + * summary: Search Products + * description: "Run a search query on products using the search engine installed on Medusa" + * parameters: + * - (query) q=* {string} The query to run the search with. + * - (query) offset {integer} How many products to skip in the result. + * - (query) limit {integer} Limit the number of products returned. + * - (query) filter {} Filter based on the search engine. + * tags: + * - Product + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * hits: + * type: array + * description: Array of results. The format of the items depends on the search engine installed on the server. + */ export default async (req, res) => { // As we want to allow wildcards, we pass a config allowing this const validated = await validator(StorePostSearchReq, req.body, { diff --git a/packages/medusa/src/api/routes/store/regions/list-regions.ts b/packages/medusa/src/api/routes/store/regions/list-regions.ts index 2bb2a69a7e..ffdf84a351 100644 --- a/packages/medusa/src/api/routes/store/regions/list-regions.ts +++ b/packages/medusa/src/api/routes/store/regions/list-regions.ts @@ -1,15 +1,63 @@ +import { IsInt, IsOptional, ValidateNested } from "class-validator" + +import { DateComparisonOperator } from "../../../../types/common" +import RegionService from "../../../../services/region" import { Type } from "class-transformer" import { omit } from "lodash" -import { ValidateNested, IsInt, IsOptional } from "class-validator" -import RegionService from "../../../../services/region" import { validator } from "../../../../utils/validator" -import { DateComparisonOperator } from "../../../../types/common" /** * @oas [get] /regions * operationId: GetRegions * summary: List Regions * description: "Retrieves a list of Regions." + * parameters: + * - (query) offset=0 {integer} How many regions to skip in the result. + * - (query) limit=100 {integer} Limit the number of regions returned. + * - in: query + * name: created_at + * description: Date comparison for when resulting regions were created. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date + * - in: query + * name: updated_at + * description: Date comparison for when resulting regions were updated. + * schema: + * type: object + * properties: + * lt: + * type: string + * description: filter by dates less than this date + * format: date + * gt: + * type: string + * description: filter by dates greater than this date + * format: date + * lte: + * type: string + * description: filter by dates less than or equal to this date + * format: date + * gte: + * type: string + * description: filter by dates greater than or equal to this date + * format: date * tags: * - Region * responses: @@ -19,15 +67,6 @@ import { DateComparisonOperator } from "../../../../types/common" * application/json: * schema: * properties: - * count: - * description: The total number of regions. - * type: integer - * offset: - * description: The offset for pagination. - * type: integer - * limit: - * description: The maxmimum number of regions to return, - * type: integer * regions: * type: array * items: diff --git a/packages/medusa/src/api/routes/store/returns/create-return.ts b/packages/medusa/src/api/routes/store/returns/create-return.ts index f280a82361..600c802f76 100644 --- a/packages/medusa/src/api/routes/store/returns/create-return.ts +++ b/packages/medusa/src/api/routes/store/returns/create-return.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsNotEmpty, @@ -8,11 +7,13 @@ import { Min, ValidateNested, } from "class-validator" -import { MedusaError } from "medusa-core-utils" + import EventBusService from "../../../../services/event-bus" import IdempotencyKeyService from "../../../../services/idempotency-key" +import { MedusaError } from "medusa-core-utils" import OrderService from "../../../../services/order" import ReturnService from "../../../../services/return" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" import { EntityManager } from "typeorm"; @@ -25,36 +26,42 @@ import { EntityManager } from "typeorm"; * content: * application/json: * schema: + * required: + * - order_id + * - items * properties: * order_id: * type: string - * description: The id of the Order to create the Return from. + * description: The ID of the Order to create the Return from. * items: * description: "The items to include in the Return." * type: array * items: + * required: + * - item_id + * - quantity * properties: * item_id: - * description: The id of the Line Item from the Order. + * description: The ID of the Line Item from the Order. * type: string * quantity: * description: The quantity to return. * type: integer - * required: - * - item_id - * - quantity + * reason_id: + * description: The ID of the return reason. + * type: string + * note: + * description: A note to add to the item returned. + * type: string * return_shipping: * description: If the Return is to be handled by the store operator the Customer can choose a Return Shipping Method. Alternatvely the Customer can handle the Return themselves. * type: object + * required: + * - option_id * properties: * option_id: * type: string - * description: The id of the Shipping Option to create the Shipping Method from. - * required: - * - option_id - * required: - * - order_id - * - items + * description: The ID of the Shipping Option to create the Shipping Method from. * tags: * - Return * responses: diff --git a/packages/medusa/src/api/routes/store/swaps/create-swap.ts b/packages/medusa/src/api/routes/store/swaps/create-swap.ts index 366b1ae794..1877753b49 100644 --- a/packages/medusa/src/api/routes/store/swaps/create-swap.ts +++ b/packages/medusa/src/api/routes/store/swaps/create-swap.ts @@ -1,4 +1,3 @@ -import { Type } from "class-transformer" import { IsArray, IsNotEmpty, @@ -8,14 +7,16 @@ import { Min, ValidateNested, } from "class-validator" -import { MedusaError } from "medusa-core-utils" import { defaultStoreSwapFields, defaultStoreSwapRelations } from "." + +import { EntityManager } from "typeorm" import IdempotencyKeyService from "../../../../services/idempotency-key" +import { MedusaError } from "medusa-core-utils" import OrderService from "../../../../services/order" import ReturnService from "../../../../services/return" import SwapService from "../../../../services/swap" +import { Type } from "class-transformer" import { validator } from "../../../../utils/validator" -import { EntityManager } from "typeorm" /** * @oas [post] /swaps @@ -33,7 +34,7 @@ import { EntityManager } from "typeorm" * properties: * order_id: * type: string - * description: The id of the Order to create the Swap for. + * description: The ID of the Order to create the Swap for. * return_items: * description: "The items to include in the Return." * type: array @@ -43,20 +44,20 @@ import { EntityManager } from "typeorm" * - quantity * properties: * item_id: - * description: The id of the Line Item from the Order. + * description: The ID of the Line Item from the Order. * type: string * quantity: - * description: The quantity to return. + * description: The quantity to swap. * type: integer * reason_id: - * description: The id of the reason of this return + * description: The ID of the reason of this return. * type: string - * note_id: - * description: The id of the note + * note: + * description: The note to add to the item being swapped. * type: string * return_shipping_option: * type: string - * description: The id of the Shipping Option to create the Shipping Method from. + * description: The ID of the Shipping Option to create the Shipping Method from. * additional_items: * description: "The items to exchange the returned items to." * type: array @@ -66,15 +67,11 @@ import { EntityManager } from "typeorm" * - quantity * properties: * variant_id: - * description: The id of the Product Variant to send. + * description: The ID of the Product Variant to send. * type: string * quantity: * description: The quantity to send of the variant. * type: integer - * required: - * - order_id - * - return_items - * - additional_items * tags: * - Swap * responses: diff --git a/packages/medusa/src/api/routes/store/variants/get-variant.ts b/packages/medusa/src/api/routes/store/variants/get-variant.ts index 2c3442dc75..da5634678f 100644 --- a/packages/medusa/src/api/routes/store/variants/get-variant.ts +++ b/packages/medusa/src/api/routes/store/variants/get-variant.ts @@ -1,11 +1,12 @@ -import { defaultStoreVariantRelations } from "." import { CartService, - RegionService, - ProductVariantService, PricingService, + ProductVariantService, + RegionService, } from "../../../../services" + import { PriceSelectionParams } from "../../../../types/price-selection" +import { defaultStoreVariantRelations } from "." import { validator } from "../../../../utils/validator" /** @@ -15,6 +16,18 @@ import { validator } from "../../../../utils/validator" * description: "Retrieves a Product Variant by id" * parameters: * - (path) variant_id=* {string} The id of the Product Variant. + * - (query) cart_id {string} The id of the Cart to set prices based on. + * - (query) region_id {string} The id of the Region to set prices based on. + * - in: query + * name: currency_code + * style: form + * explode: false + * description: The 3 character ISO currency code to set prices based on. + * schema: + * type: string + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * tags: * - Product Variant * responses: diff --git a/packages/medusa/src/api/routes/store/variants/list-variants.ts b/packages/medusa/src/api/routes/store/variants/list-variants.ts index f57eb240b7..75bfdff6c8 100644 --- a/packages/medusa/src/api/routes/store/variants/list-variants.ts +++ b/packages/medusa/src/api/routes/store/variants/list-variants.ts @@ -1,18 +1,19 @@ -import { Type } from "class-transformer" -import { omit } from "lodash" -import { IsInt, IsOptional, IsString } from "class-validator" -import { defaultStoreVariantRelations } from "." -import { FilterableProductVariantProps } from "../../../../types/product-variant" import { CartService, - RegionService, - ProductVariantService, PricingService, + ProductVariantService, + RegionService, } from "../../../../services" -import { validator } from "../../../../utils/validator" +import { IsInt, IsOptional, IsString } from "class-validator" + +import { FilterableProductVariantProps } from "../../../../types/product-variant" import { IsType } from "../../../../utils/validators/is-type" import { NumericalComparisonOperator } from "../../../../types/common" import { PriceSelectionParams } from "../../../../types/price-selection" +import { Type } from "class-transformer" +import { defaultStoreVariantRelations } from "." +import { omit } from "lodash" +import { validator } from "../../../../utils/validator" /** * @oas [get] /variants @@ -22,8 +23,43 @@ import { PriceSelectionParams } from "../../../../types/price-selection" * parameters: * - (query) ids {string} A comma separated list of Product Variant ids to filter by. * - (query) expand {string} A comma separated list of Product Variant relations to load. - * - (query) offset {number} - * - (query) limit {number} Maximum number of Product Variants to return. + * - (query) offset=0 {number} How many product variants to skip in the result. + * - (query) limit=100 {number} Maximum number of Product Variants to return. + * - in: query + * name: title + * style: form + * explode: false + * description: product variant title to search for. + * schema: + * oneOf: + * - type: string + * description: a single title to search by + * - type: array + * description: multiple titles to search by + * items: + * type: string + * - in: query + * name: inventory_quantity + * description: Filter by available inventory quantity + * schema: + * oneOf: + * - type: number + * description: a specific number to search by. + * - type: object + * description: search using less and greater than comparisons. + * properties: + * lt: + * type: number + * description: filter by inventory quantity less than this number + * gt: + * type: number + * description: filter by inventory quantity greater than this number + * lte: + * type: number + * description: filter by inventory quantity less than or equal to this number + * gte: + * type: number + * description: filter by inventory quantity greater than or equal to this number * tags: * - Product Variant * responses: diff --git a/packages/medusa/src/models/address.ts b/packages/medusa/src/models/address.ts index 7edc6dd86b..d0883fea6d 100644 --- a/packages/medusa/src/models/address.ts +++ b/packages/medusa/src/models/address.ts @@ -6,24 +6,80 @@ * properties: * id: * type: string + * description: ID of the address + * example: addr_01G8ZC9VS1XVE149MGH2J7QSSH * customer_id: * type: string + * description: ID of the customer this address belongs to + * example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + * customer: + * description: Available if the relation `customer` is expanded. + * type: array + * items: + * type: object + * description: A customer object. * company: * type: string + * description: Company name + * example: Acme * first_name: * type: string + * description: First name + * example: Arno * last_name: * type: string + * description: Last name + * example: Willms * address_1: * type: string + * description: Address line 1 + * example: 14433 Kemmer Court * address_2: * type: string + * description: Address line 2 + * example: Suite 369 * city: * type: string + * description: City + * example: South Geoffreyview * country_code: * type: string + * description: The 2 character ISO code of the country in lower case + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + * description: See a list of codes. + * example: st * country: - * $ref: "#/components/schemas/country" + * description: A country object. Available if the relation `country` is expanded. + * type: object + * province: + * type: string + * description: Province + * example: Kentucky + * postal_code: + * type: string + * description: Postal Code + * example: 72093 + * phone: + * type: string + * description: Phone Number + * example: 16128234334802 + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." + * format: date-time + * updated_at: + * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * deleted_at: + * type: string + * description: "The date with timezone at which the resource was deleted." + * format: date-time + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ import { @@ -35,10 +91,10 @@ import { ManyToOne, } from "typeorm" -import { Customer } from "./customer" import { Country } from "./country" -import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" +import { Customer } from "./customer" import { DbAwareColumn } from "../utils/db-aware-column" +import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @Entity() diff --git a/packages/medusa/src/models/batch-job.ts b/packages/medusa/src/models/batch-job.ts index ec5781d7a7..b7f7509600 100644 --- a/packages/medusa/src/models/batch-job.ts +++ b/packages/medusa/src/models/batch-job.ts @@ -12,9 +12,10 @@ import { BatchJobStatus, } from "../types/batch-job" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" + import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" -import { generateEntityId } from "../utils/generate-entity-id" import { User } from "./user" +import { generateEntityId } from "../utils/generate-entity-id" @Entity() export class BatchJob extends SoftDeletableEntity { @@ -106,65 +107,138 @@ export class BatchJob extends SoftDeletableEntity { * title: "Batch Job" * description: "A Batch Job." * x-resourceId: batch_job + * required: + * - type * properties: * id: + * type: string * description: "The unique identifier for the batch job." - * type: string + * example: batch_01G8T782965PYFG0751G0Z38B4 * type: + * type: string * description: "The type of batch job." - * type: string * enum: - * - product_import - * - product_export + * - product-import + * - product-export * status: - * description: "The status of the batch job." * type: string + * description: "The status of the batch job." * enum: * - created * - pre_processed + * - confirmed * - processing * - completed * - canceled * - failed + * default: created * created_by: - * description: "The unique identifier of the user that created the batch job." * type: string - * context: - * description: "The context of the batch job, the type of the batch job determines what the context should contain." + * description: "The unique identifier of the user that created the batch job." + * example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + * created_by_user: + * description: A user object. Available if the relation `created_by_user` is expanded. * type: object + * context: + * type: object + * description: "The context of the batch job, the type of the batch job determines what the context should contain." + * example: + * shape: + * prices: + * - region: null + * currency_code: "eur" + * dynamicImageColumnCount: 4 + * dynamicOptionColumnCount: 2 + * list_config: + * skip: 0 + * take: 50 + * order: + * created_at: "DESC" + * relations: + * - variants + * - variant.prices + * - images * dry_run: - * description: "Specify if the job must apply the modifications or not." * type: boolean + * description: "Specify if the job must apply the modifications or not." * default: false * result: - * description: "The result of the batch job." * type: object + * description: "The result of the batch job." + * properties: + * count: + * type: number + * advancement_count: + * type: number + * progress: + * type: number + * errors: + * type: object + * properties: + * message: + * type: string + * code: + * oneOf: + * - type: string + * - type: number + * err: + * type: array + * stat_descriptors: + * type: object + * properties: + * key: + * type: string + * name: + * type: string + * message: + * type: string + * file_key: + * type: string + * file_size: + * type: number + * example: + * errors: + * - err: [] + * code: "unknown" + * message: "Method not implemented." + * stat_descriptors: + * - key: "product-export-count" + * name: "Product count to export" + * message: "There will be 8 products exported by this action" * pre_processed_at: - * description: "The date from which the job has been pre processed." * type: string + * description: "The date from which the job has been pre processed." + * format: date-time + * processing_at: + * type: string + * description: "The date the job is processing at." * format: date-time * confirmed_at: - * description: "The date when the confirmation has been done." * type: string + * description: "The date when the confirmation has been done." * format: date-time * completed_at: - * description: "The date of the completion." * type: string + * description: "The date of the completion." * format: date-time * canceled_at: - * description: "The date of the concellation." * type: string + * description: "The date of the concellation." + * format: date-time + * failed_at: + * type: string + * description: "The date when the job failed." * format: date-time * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was last updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time */ diff --git a/packages/medusa/src/models/cart.ts b/packages/medusa/src/models/cart.ts index 26cab6cc0e..cd4727a998 100644 --- a/packages/medusa/src/models/cart.ts +++ b/packages/medusa/src/models/cart.ts @@ -6,80 +6,166 @@ * properties: * id: * type: string + * description: The cart's ID + * example: cart_01G8ZH853Y6TFXWPG5EYE81X63 * email: * type: string + * description: The email associated with the cart + * format: email * billing_address_id: * type: string + * description: The billing address's ID + * example: addr_01G8ZH853YPY9B94857DY91YGW * billing_address: + * description: Available if the relation `billing_address` is expanded. * $ref: "#/components/schemas/address" * shipping_address_id: * type: string + * description: The shipping address's ID + * example: addr_01G8ZH853YPY9B94857DY91YGW * shipping_address: + * description: Available if the relation `shipping_address` is expanded. * $ref: "#/components/schemas/address" * items: + * description: Available if the relation `items` is expanded. * type: array * items: * $ref: "#/components/schemas/line_item" * region_id: * type: string + * description: The region's ID + * example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G * region: - * $ref: "#/components/schemas/region" + * description: A region object. Available if the relation `region` is expanded. + * type: object * discounts: * type: array + * description: Available if the relation `discounts` is expanded. * items: - * $ref: "#/components/schemas/region" + * type: object + * description: A discount object. * gift_cards: * type: array + * description: Available if the relation `gift_cards` is expanded. * items: - * $ref: "#/components/schemas/gift_card" + * type: object + * description: A gift card object. * customer_id: * type: string + * description: The customer's ID + * example: cus_01G2SG30J8C85S4A5CHM2S1NS2 * customer: - * $ref: "#/components/schemas/customer" + * description: A customer object. Available if the relation `customer` is expanded. + * type: object * payment_session: + * description: The selected payment session in the cart. * $ref: "#/components/schemas/payment_session" * payment_sessions: * type: array + * description: The payment sessions created on the cart. * items: * $ref: "#/components/schemas/payment_session" + * payment_id: + * type: string + * description: The payment's ID if available + * example: pay_01G8ZCC5W42ZNY842124G7P5R9 * payment: + * description: Available if the relation `payment` is expanded. * $ref: "#/components/schemas/payment" * shipping_methods: * type: array + * description: The shipping methods added to the cart. * items: * $ref: "#/components/schemas/shipping_method" * type: * type: string + * description: The cart's type. * enum: * - default * - swap + * - draft_order * - payment_link + * - claim + * default: default * completed_at: * type: string + * description: "The date with timezone at which the cart was completed." * format: date-time + * payment_authorized_at: + * type: string + * description: "The date with timezone at which the payment was authorized." + * format: date-time + * idempotency_key: + * type: string + * description: Randomly generated key used to continue the completion of a cart in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. + * context: + * type: object + * description: "The context of the cart which can include info like IP or user agent." + * example: + * ip: "::1" + * user_agent: "PostmanRuntime/7.29.2" + * sales_channel_id: + * type: string + * description: The sales channel ID the cart is associated with. + * example: null + * sales_channel: + * description: A sales channel object. Available if the relation `sales_channel` is expanded. + * type: object * created_at: * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} * shipping_total: * type: integer + * description: The total of shipping + * example: 1000 * discount_total: * type: integer + * description: The total of discount + * example: 800 * tax_total: * type: integer + * description: The total of tax + * example: 0 + * refunded_total: + * type: integer + * description: The total amount refunded if the order associated with this cart is returned. + * example: 0 + * total: + * type: integer + * description: The total amount of the cart + * example: 8200 * subtotal: * type: integer + * description: The subtotal of the cart + * example: 8000 * refundable_amount: * type: integer + * description: The amount that can be refunded + * example: 8200 * gift_card_total: * type: integer + * description: The total of gift cards + * example: 0 + * gift_card_tax_total: + * type: integer + * description: The total of gift cards with taxes + * example: 0 */ import { @@ -96,6 +182,11 @@ import { OneToOne, } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" +import { + FeatureFlagColumn, + FeatureFlagDecorators, +} from "../utils/feature-flag-decorators" + import { Address } from "./address" import { Customer } from "./customer" import { Discount } from "./discount" @@ -104,14 +195,10 @@ import { LineItem } from "./line-item" import { Payment } from "./payment" import { PaymentSession } from "./payment-session" import { Region } from "./region" +import { SalesChannel } from "./sales-channel" import { ShippingMethod } from "./shipping-method" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" -import { - FeatureFlagColumn, - FeatureFlagDecorators, -} from "../utils/feature-flag-decorators" -import { SalesChannel } from "./sales-channel" export enum CartType { DEFAULT = "default", diff --git a/packages/medusa/src/models/claim-image.ts b/packages/medusa/src/models/claim-image.ts index a75bb167d5..e599dc5469 100644 --- a/packages/medusa/src/models/claim-image.ts +++ b/packages/medusa/src/models/claim-image.ts @@ -6,9 +6,10 @@ import { JoinColumn, ManyToOne, } from "typeorm" + import { ClaimItem } from "./claim-item" -import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { DbAwareColumn } from "../utils/db-aware-column" +import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -38,22 +39,38 @@ export class ClaimImage extends SoftDeletableEntity { * title: "Claim Image" * description: "Represents photo documentation of a claim." * x-resourceId: claim_image + * required: + * - claim_item_id + * - url * properties: * id: * type: string + * description: The claim image's ID + * example: cimg_01G8ZH853Y6TFXWPG5EYE81X63 * claim_item_id: * type: string + * description: The ID of the claim item associated with the image + * claim_item: + * description: A claim item object. Available if the relation `claim_item` is expanded. + * type: object * url: * type: string + * description: The URL of the image + * format: uri * created_at: * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/claim-item.ts b/packages/medusa/src/models/claim-item.ts index f4aba4ff5e..cfa25b0ac6 100644 --- a/packages/medusa/src/models/claim-item.ts +++ b/packages/medusa/src/models/claim-item.ts @@ -9,12 +9,12 @@ import { ManyToOne, OneToMany, } from "typeorm" -import { DbAwareColumn } from "../utils/db-aware-column" -import { LineItem } from "./line-item" import { ClaimImage } from "./claim-image" -import { ClaimTag } from "./claim-tag" import { ClaimOrder } from "./claim-order" +import { ClaimTag } from "./claim-tag" +import { DbAwareColumn } from "../utils/db-aware-column" +import { LineItem } from "./line-item" import { ProductVariant } from "./product-variant" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @@ -94,25 +94,42 @@ export class ClaimItem extends SoftDeletableEntity { * title: "Claim Item" * description: "Represents a claimed item along with information about the reasons for the claim." * x-resourceId: claim_item + * required: + * - claim_order_id + * - item_id + * - variant_id + * - reason + * - quantity * properties: * id: * type: string + * description: The claim item's ID + * example: citm_01G8ZH853Y6TFXWPG5EYE81X63 * images: * type: array + * description: Available if the relation `images` is expanded. * items: * $ref: "#/components/schemas/claim_image" * claim_order_id: + * description: The ID of the claim this item is associated with. * type: string + * claim_order: + * description: A claim order object. Available if the relation `claim_order` is expanded. + * type: object * item_id: + * description: The ID of the line item that the claim item refers to. * type: string + * example: item_01G8ZM25TN49YV9EQBE2NC27KC * item: - * description: "The Line Item that the claim refers to" + * description: Available if the relation `item` is expanded. * $ref: "#/components/schemas/line_item" * variant_id: + * description: "The ID of the product variant that is claimed." * type: string + * example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 * variant: - * description: "The Product Variant that is claimed." - * $ref: "#/components/schemas/product_variant" + * description: A variant object. Available if the relation `variant` is expanded. + * type: object * reason: * description: "The reason for the claim" * type: string @@ -124,23 +141,30 @@ export class ClaimItem extends SoftDeletableEntity { * note: * description: "An optional note about the claim, for additional information" * type: string + * example: "I don't like it." * quantity: * description: "The quantity of the item that is being claimed; must be less than or equal to the amount purchased in the original order." * type: integer + * example: 1 * tags: - * description: "User defined tags for easy filtering and grouping." + * description: "User defined tags for easy filtering and grouping. Available if the relation 'tags' is expanded." * type: array * items: * $ref: "#/components/schemas/claim_tag" * created_at: * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/claim-order.ts b/packages/medusa/src/models/claim-order.ts index b64190d091..f079abead4 100644 --- a/packages/medusa/src/models/claim-order.ts +++ b/packages/medusa/src/models/claim-order.ts @@ -13,13 +13,13 @@ import { } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" +import { Address } from "./address" +import { ClaimItem } from "./claim-item" import { Fulfillment } from "./fulfillment" import { LineItem } from "./line-item" -import { ClaimItem } from "./claim-item" import { Order } from "./order" import { Return } from "./return" import { ShippingMethod } from "./shipping-method" -import { Address } from "./address" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @@ -135,9 +135,14 @@ export class ClaimOrder extends SoftDeletableEntity { * title: "Claim Order" * description: "Claim Orders represent a group of faulty or missing items. Each claim order consists of a subset of items associated with an original order, and can contain additional information about fulfillments and returns." * x-resourceId: claim_order + * required: + * - type + * - order_id * properties: * id: * type: string + * description: The claim's ID + * example: claim_01G8ZH853Y6TFXWPG5EYE81X63 * type: * type: string * enum: @@ -145,10 +150,12 @@ export class ClaimOrder extends SoftDeletableEntity { * - replace * payment_status: * type: string + * description: The status of the claim's payment * enum: * - na * - not_refunded * - refunded + * default: na * fulfillment_status: * type: string * enum: @@ -161,6 +168,7 @@ export class ClaimOrder extends SoftDeletableEntity { * - returned * - canceled * - requires_action + * default: not_fulfilled * claim_items: * description: "The items that have been claimed" * type: array @@ -172,16 +180,21 @@ export class ClaimOrder extends SoftDeletableEntity { * items: * $ref: "#/components/schemas/line_item" * order_id: - * description: "The id of the order that the claim comes from." + * description: "The ID of the order that the claim comes from." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + * order: + * description: An order object. Available if the relation `order` is expanded. + * type: object * return_order: - * description: "Holds information about the return if the claim is to be returned" - * $ref: "#/components/schemas/return" + * description: "A return object. Holds information about the return if the claim is to be returned. Available if the relation 'return_order' is expanded" + * type: object * shipping_address_id: - * description: "The id of the address that the new items should be shipped to" + * description: "The ID of the address that the new items should be shipped to" * type: string + * example: addr_01G8ZH853YPY9B94857DY91YGW * shipping_address: - * description: "The address that the new items should be shipped to" + * description: Available if the relation `shipping_address` is expanded. * $ref: "#/components/schemas/address" * shipping_methods: * description: "The shipping methods that the claim order will be shipped with." @@ -196,22 +209,35 @@ export class ClaimOrder extends SoftDeletableEntity { * refund_amount: * description: "The amount that will be refunded in conjunction with the claim" * type: integer + * example: 1000 * canceled_at: - * description: "The date with timezone at which the Swap was canceled." + * description: "The date with timezone at which the claim was canceled." * type: string * format: date-time * created_at: * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} * no_notification: * description: "Flag for describing whether or not notifications related to this should be send." * type: boolean - * metadata: - * type: object + * example: false + * idempotency_key: + * type: string + * description: Randomly generated key used to continue the completion of the cart associated with the claim in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. */ diff --git a/packages/medusa/src/models/claim-tag.ts b/packages/medusa/src/models/claim-tag.ts index 356776a2fe..df905fa954 100644 --- a/packages/medusa/src/models/claim-tag.ts +++ b/packages/medusa/src/models/claim-tag.ts @@ -1,6 +1,7 @@ import { BeforeInsert, Column, Entity, Index } from "typeorm" -import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" + import { DbAwareColumn } from "../utils/db-aware-column" +import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -23,26 +24,31 @@ export class ClaimTag extends SoftDeletableEntity { * title: "Claim Tag" * description: "Claim Tags are user defined tags that can be assigned to claim items for easy filtering and grouping." * x-resourceId: claim_tag + * required: + * - value * properties: * id: - * description: "The id of the claim tag. Will be prefixed by `ctag_`." * type: string + * description: The claim tag's ID + * example: ctag_01G8ZCC5Y63B95V6B5SHBZ91S4 * value: * description: "The value that the claim tag holds" * type: string + * example: Damaged * created_at: + * type: string * description: "The date with timezone at which the resource was created." - * type: string * format: date-time - * update_at: - * description: "The date with timezone at which the resource was last updated." + * updated_at: * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/country.ts b/packages/medusa/src/models/country.ts index 8f71104bac..3ab7d59c02 100644 --- a/packages/medusa/src/models/country.ts +++ b/packages/medusa/src/models/country.ts @@ -6,6 +6,7 @@ import { ManyToOne, PrimaryGeneratedColumn, } from "typeorm" + import { Region } from "./region" @Entity() @@ -43,23 +44,51 @@ export class Country { * title: "Country" * description: "Country details" * x-resourceId: country + * required: + * - iso_2 + * - iso_3 + * - num_code + * - name + * - display_name * properties: - * id: - * description: "The database id of the country" - * type: integer - * iso_2: - * description: "The 2 character ISO code for the country." - * type: string - * iso_3: - * description: "The 3 character ISO code for the country." - * type: string - * num_code: - * description: "The numerical ISO code for the country." - * type: string - * name: - * description: "The normalized country name; in upper case." - * type: string - * display_name: - * description: "The country name appropriate for display." - * type: string + * id: + * type: string + * description: The country's ID + * example: 109 + * iso_2: + * type: string + * description: The 2 character ISO code of the country in lower case + * example: it + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + * description: See a list of codes. + * iso_3: + * type: string + * description: The 2 character ISO code of the country in lower case + * example: ita + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements + * description: See a list of codes. + * num_code: + * description: "The numerical ISO code for the country." + * type: string + * example: 380 + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_3166-1_numeric#Officially_assigned_code_elements + * description: See a list of codes. + * name: + * description: "The normalized country name in upper case." + * type: string + * example: ITALY + * display_name: + * description: "The country name appropriate for display." + * type: string + * example: Italy + * region_id: + * type: string + * description: The region ID this country is associated with. + * example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + * region: + * description: A region object. Available if the relation `region` is expanded. + * type: object */ diff --git a/packages/medusa/src/models/currency.ts b/packages/medusa/src/models/currency.ts index 1bcfad6228..66add3bd5d 100644 --- a/packages/medusa/src/models/currency.ts +++ b/packages/medusa/src/models/currency.ts @@ -20,17 +20,29 @@ export class Currency { * title: "Currency" * description: "Currency" * x-resourceId: currency + * required: + * - code + * - symbol + * - symbol_native + * - name * properties: * code: * description: "The 3 character ISO code for the currency." * type: string + * example: usd + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. * symbol: * description: "The symbol used to indicate the currency." * type: string + * example: $ * symbol_native: * description: "The native symbol used to indicate the currency." * type: string + * example: $ * name: * description: "The written name of the currency" * type: string + * example: US Dollar */ diff --git a/packages/medusa/src/models/custom-shipping-option.ts b/packages/medusa/src/models/custom-shipping-option.ts index cd8859ed60..eba1bf6432 100644 --- a/packages/medusa/src/models/custom-shipping-option.ts +++ b/packages/medusa/src/models/custom-shipping-option.ts @@ -7,10 +7,11 @@ import { ManyToOne, Unique, } from "typeorm" + import { Cart } from "./cart" +import { DbAwareColumn } from "../utils/db-aware-column" import { ShippingOption } from "./shipping-option" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" -import { DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -49,34 +50,46 @@ export class CustomShippingOption extends SoftDeletableEntity { * title: "Custom Shipping Option" * description: "Custom Shipping Options are 'overriden' Shipping Options. Store managers can attach a Custom Shipping Option to a cart in order to set a custom price for a particular Shipping Option" * x-resourceId: custom_shipping_option + * required: + * - price + * - shipping_option_id * properties: * id: - * description: "The id of the Custom Shipping Option. This value will be prefixed with `cso_`." * type: string + * description: The custom shipping option's ID + * example: cso_01G8X99XNB77DMFBJFWX6DN9V9 * price: * description: "The custom price set that will override the shipping option's original price" * type: integer + * example: 1000 * shipping_option_id: - * description: "The id of the Shipping Option that the custom shipping option overrides" - * anyOf: - * - $ref: "#/components/schemas/shipping_option" - * cart_id: - * description: "The id of the Cart that the custom shipping option is attached to" - * anyOf: - * - $ref: "#/components/schemas/cart" - * created_at: - * description: "The date with timezone at which the resource was created." + * description: "The ID of the Shipping Option that the custom shipping option overrides" * type: string + * example: so_01G1G5V27GYX4QXNARRQCW1N8T + * shipping_option: + * description: A shipping option object. Available if the relation `shipping_option` is expanded. + * type: object + * cart_id: + * description: "The ID of the Cart that the custom shipping option is attached to" + * type: string + * example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + * cart: + * description: A cart object. Available if the relation `cart` is expanded. + * type: object + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/customer-group.ts b/packages/medusa/src/models/customer-group.ts index 6318c72b92..1a6f8b0f18 100644 --- a/packages/medusa/src/models/customer-group.ts +++ b/packages/medusa/src/models/customer-group.ts @@ -1,8 +1,9 @@ import { BeforeInsert, Column, Entity, Index, ManyToMany } from "typeorm" + import { Customer } from "./customer" +import { DbAwareColumn } from "../utils/db-aware-column" import { PriceList } from "./price-list" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" -import { DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -29,3 +30,48 @@ export class CustomerGroup extends SoftDeletableEntity { this.id = generateEntityId(this.id, "cgrp") } } +/** + * @schema customer_group + * title: "Customer Group" + * description: "Represents a customer group" + * x-resourceId: customer_group + * required: + * - name + * properties: + * id: + * type: string + * description: The customer group's ID + * example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63 + * name: + * type: string + * description: The name of the customer group + * example: VIP + * customers: + * type: array + * description: The customers that belong to the customer group. Available if the relation `customers` is expanded. + * items: + * type: object + * description: A customer object. + * price_lists: + * type: array + * description: The price lists that are associated with the customer group. Available if the relation `price_lists` is expanded. + * items: + * $ref: "#/components/schemas/price_list" + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." + * format: date-time + * updated_at: + * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * deleted_at: + * type: string + * description: "The date with timezone at which the resource was deleted." + * format: date-time + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} + */ + diff --git a/packages/medusa/src/models/customer.ts b/packages/medusa/src/models/customer.ts index 042939fae1..7346d96015 100644 --- a/packages/medusa/src/models/customer.ts +++ b/packages/medusa/src/models/customer.ts @@ -12,9 +12,9 @@ import { import { Address } from "./address" import { CustomerGroup } from "./customer-group" +import { DbAwareColumn } from "../utils/db-aware-column" import { Order } from "./order" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" -import { DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -82,38 +82,70 @@ export class Customer extends SoftDeletableEntity { * title: "Customer" * description: "Represents a customer" * x-resourceId: customer + * required: + * - email * properties: * id: * type: string + * description: The customer's ID + * example: cus_01G2SG30J8C85S4A5CHM2S1NS2 * email: * type: string + * description: The customer's email + * format: email + * first_name: + * type: string + * description: The customer's first name + * example: Arno + * last_name: + * type: string + * description: The customer's first name + * example: Willms * billing_address_id: * type: string + * description: The customer's billing address ID + * example: addr_01G8ZH853YPY9B94857DY91YGW * billing_address: - * description: "The Customer's billing address." - * anyOf: - * - $ref: "#/components/schemas/address" + * description: Available if the relation `billing_address` is expanded. + * $ref: "#/components/schemas/address" * shipping_addresses: + * description: Available if the relation `shipping_addresses` is expanded. * type: array * items: * $ref: "#/components/schemas/address" - * first_name: - * type: string - * last_name: - * type: string * phone: * type: string + * description: The customer's phone number + * example: 16128234334802 * has_account: * type: boolean + * description: Whether the customer has an account or not + * default: false + * orders: + * description: Available if the relation `orders` is expanded. + * type: array + * items: + * type: object + * description: An order object. + * groups: + * description: The customer groups the customer belongs to. Available if the relation `groups` is expanded. + * type: array + * items: + * $ref: "#/components/schemas/customer_group" * created_at: * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/discount-condition-customer-group.ts b/packages/medusa/src/models/discount-condition-customer-group.ts index b648ea01bd..c1a704b4fe 100644 --- a/packages/medusa/src/models/discount-condition-customer-group.ts +++ b/packages/medusa/src/models/discount-condition-customer-group.ts @@ -7,6 +7,7 @@ import { UpdateDateColumn, } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" + import { CustomerGroup } from "./customer-group" import { DiscountCondition } from "./discount-condition" @@ -41,26 +42,34 @@ export class DiscountConditionCustomerGroup { * title: "Product Tag Discount Condition" * description: "Associates a discount condition with a customer group" * x-resourceId: discount_condition_customer_group + * required: + * - customer_group_id + * - condition_id * properties: * customer_group_id: - * description: "The id of the Product Tag" + * description: "The ID of the Product Tag" * type: string + * example: cgrp_01G8ZH853Y6TFXWPG5EYE81X63 * condition_id: - * description: "The id of the Discount Condition" + * description: "The ID of the Discount Condition" * type: string + * example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + * customer_group: + * description: Available if the relation `customer_group` is expanded. + * $ref: "#/components/schemas/customer_group" + * discount_condition: + * description: Available if the relation `discount_condition` is expanded. + * $ref: "#/components/schemas/discount_condition" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." - * type: string - * format: date-time - * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/discount-condition-product-collection.ts b/packages/medusa/src/models/discount-condition-product-collection.ts index 4391ff1d19..7f0555e0d5 100644 --- a/packages/medusa/src/models/discount-condition-product-collection.ts +++ b/packages/medusa/src/models/discount-condition-product-collection.ts @@ -7,6 +7,7 @@ import { UpdateDateColumn, } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" + import { DiscountCondition } from "./discount-condition" import { ProductCollection } from "./product-collection" @@ -41,26 +42,34 @@ export class DiscountConditionProductCollection { * title: "Product Collection Discount Condition" * description: "Associates a discount condition with a product collection" * x-resourceId: discount_condition_product_collection + * required: + * - product_collection_id + * - condition_id * properties: * product_collection_id: - * description: "The id of the Product Collection" + * description: "The ID of the Product Collection" * type: string + * example: pcol_01F0YESBFAZ0DV6V831JXWH0BG * condition_id: - * description: "The id of the Discount Condition" + * description: "The ID of the Discount Condition" * type: string + * example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + * product_collection: + * description: Available if the relation `product_collection` is expanded. + * $ref: "#/components/schemas/product_collection" + * discount_condition: + * description: Available if the relation `discount_condition` is expanded. + * $ref: "#/components/schemas/discount_condition" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." - * type: string - * format: date-time - * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/discount-condition-product-tag.ts b/packages/medusa/src/models/discount-condition-product-tag.ts index ae64f67525..0999497b11 100644 --- a/packages/medusa/src/models/discount-condition-product-tag.ts +++ b/packages/medusa/src/models/discount-condition-product-tag.ts @@ -7,6 +7,7 @@ import { UpdateDateColumn, } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" + import { DiscountCondition } from "./discount-condition" import { ProductTag } from "./product-tag" @@ -41,26 +42,34 @@ export class DiscountConditionProductTag { * title: "Product Tag Discount Condition" * description: "Associates a discount condition with a product tag" * x-resourceId: discount_condition_product_tag + * required: + * - product_tag_id + * - condition_id * properties: * product_tag_id: - * description: "The id of the Product Tag" + * description: "The ID of the Product Tag" * type: string + * example: ptag_01F0YESHPZYY3H4SJ3A5918SBN * condition_id: - * description: "The id of the Discount Condition" + * description: "The ID of the Discount Condition" * type: string + * example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + * product_tag: + * description: Available if the relation `product_tag` is expanded. + * $ref: "#/components/schemas/product_tag" + * discount_condition: + * description: Available if the relation `discount_condition` is expanded. + * $ref: "#/components/schemas/discount_condition" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." - * type: string - * format: date-time - * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/discount-condition-product-type.ts b/packages/medusa/src/models/discount-condition-product-type.ts index 1b951fa419..3d418b696f 100644 --- a/packages/medusa/src/models/discount-condition-product-type.ts +++ b/packages/medusa/src/models/discount-condition-product-type.ts @@ -7,6 +7,7 @@ import { UpdateDateColumn, } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" + import { DiscountCondition } from "./discount-condition" import { ProductType } from "./product-type" @@ -41,26 +42,34 @@ export class DiscountConditionProductType { * title: "Product Type Discount Condition" * description: "Associates a discount condition with a product type" * x-resourceId: discount_condition_product + * required: + * - product_type_id + * - condition_id * properties: * product_type_id: - * description: "The id of the Product Type" + * description: "The ID of the Product Tag" * type: string + * example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A * condition_id: - * description: "The id of the Discount Condition" + * description: "The ID of the Discount Condition" * type: string + * example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + * product_type: + * description: Available if the relation `product_type` is expanded. + * $ref: "#/components/schemas/product_type" + * discount_condition: + * description: Available if the relation `discount_condition` is expanded. + * $ref: "#/components/schemas/discount_condition" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." - * type: string - * format: date-time - * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/discount-condition-product.ts b/packages/medusa/src/models/discount-condition-product.ts index 5d66f55d8c..66621dbe3c 100644 --- a/packages/medusa/src/models/discount-condition-product.ts +++ b/packages/medusa/src/models/discount-condition-product.ts @@ -7,6 +7,7 @@ import { UpdateDateColumn, } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" + import { DiscountCondition } from "./discount-condition" import { Product } from "./product" @@ -41,26 +42,34 @@ export class DiscountConditionProduct { * title: "Product Discount Condition" * description: "Associates a discount condition with a product" * x-resourceId: discount_condition_product + * required: + * - product_id + * - condition_id * properties: * product_id: - * description: "The id of the Product" + * description: "The ID of the Product Tag" * type: string + * example: prod_01G1G5V2MBA328390B5AXJ610F * condition_id: - * description: "The id of the Discount Condition" + * description: "The ID of the Discount Condition" * type: string + * example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A + * product: + * description: Available if the relation `product` is expanded. + * $ref: "#/components/schemas/product" + * discount_condition: + * description: Available if the relation `discount_condition` is expanded. + * $ref: "#/components/schemas/discount_condition" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." - * type: string - * format: date-time - * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/discount-condition.ts b/packages/medusa/src/models/discount-condition.ts index ef8e8da815..67e9ac2c4a 100644 --- a/packages/medusa/src/models/discount-condition.ts +++ b/packages/medusa/src/models/discount-condition.ts @@ -9,8 +9,9 @@ import { ManyToOne, Unique, } from "typeorm" -import { DbAwareColumn } from "../utils/db-aware-column" + import { CustomerGroup } from "./customer-group" +import { DbAwareColumn } from "../utils/db-aware-column" import { DiscountRule } from "./discount-rule" import { Product } from "./product" import { ProductCollection } from "./product-collection" @@ -139,10 +140,15 @@ export class DiscountCondition extends SoftDeletableEntity { * title: "Discount Condition" * description: "Holds rule conditions for when a discount is applicable" * x-resourceId: discount_condition + * required: + * - type + * - operator + * - discount_rule_id * properties: * id: - * description: "The id of the Discount Condition. Will be prefixed by `discon_`." * type: string + * description: The discount condition's ID + * example: discon_01G8X9A7ESKAJXG2H0E6F1MW7A * type: * description: "The type of the Condition" * type: string @@ -152,19 +158,63 @@ export class DiscountCondition extends SoftDeletableEntity { * - product_collections * - product_tags * - customer_groups + * operator: + * description: "The operator of the Condition" + * type: string + * enum: + * - in + * - not_in + * discount_rule_id: + * type: string + * description: The ID of the discount rule associated with the condition + * example: dru_01F0YESMVK96HVX7N419E3CJ7C + * discount_rule: + * description: Available if the relation `discount_rule` is expanded. + * $ref: "#/components/schemas/discount_rule" + * products: + * description: products associated with this condition if type = products. Available if the relation `products` is expanded. + * type: array + * items: + * type: object + * description: A product object. + * product_types: + * description: product types associated with this condition if type = product_types. Available if the relation `product_types` is expanded. + * type: array + * items: + * type: object + * description: A product type object. + * product_tags: + * description: product tags associated with this condition if type = product_tags. Available if the relation `product_tags` is expanded. + * type: array + * items: + * type: object + * description: A product tag object. + * product_collections: + * description: product collections associated with this condition if type = product_collections. Available if the relation `product_collections` is expanded. + * type: array + * items: + * type: object + * description: A product collection object. + * customer_groups: + * description: customer groups associated with this condition if type = customer_groups. Available if the relation `customer_groups` is expanded. + * type: array + * items: + * type: object + * description: A customer group object. * created_at: + * type: string * description: "The date with timezone at which the resource was created." - * type: string * format: date-time - * update_at: - * description: "The date with timezone at which the resource was last updated." + * updated_at: * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/discount-rule.ts b/packages/medusa/src/models/discount-rule.ts index bed3b48ca6..ddc16ba13f 100644 --- a/packages/medusa/src/models/discount-rule.ts +++ b/packages/medusa/src/models/discount-rule.ts @@ -1,4 +1,5 @@ import { BeforeInsert, Column, Entity, OneToMany } from "typeorm" + import { DbAwareColumn } from "../utils/db-aware-column" import { DiscountCondition } from "./discount-condition" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" @@ -53,10 +54,14 @@ export class DiscountRule extends SoftDeletableEntity { * title: "Discount Rule" * description: "Holds the rules that governs how a Discount is calculated when applied to a Cart." * x-resourceId: discount_rule + * required: + * - type + * - value * properties: * id: - * description: "The id of the Discount Rule. Will be prefixed by `dru_`." * type: string + * description: The discount rule's ID + * example: dru_01F0YESMVK96HVX7N419E3CJ7C * type: * description: "The type of the Discount, can be `fixed` for discounts that reduce the price by a fixed amount, `percentage` for percentage reductions or `free_shipping` for shipping vouchers." * type: string @@ -64,36 +69,42 @@ export class DiscountRule extends SoftDeletableEntity { * - fixed * - percentage * - free_shipping + * example: percentage * description: * description: "A short description of the discount" * type: string + * example: 10 Percent * value: * description: "The value that the discount represents; this will depend on the type of the discount" * type: integer + * example: 10 * allocation: * description: "The scope that the discount should apply to." * type: string * enum: * - total * - item + * example: total * conditions: - * description: "A set of conditions that can be used to limit when the discount can be used" + * description: A set of conditions that can be used to limit when the discount can be used. Available if the relation `conditions` is expanded. * type: array * items: - * $ref: "#/components/schemas/discount_condition" + * type: object + * description: A discount condition object. * created_at: + * type: string * description: "The date with timezone at which the resource was created." - * type: string * format: date-time - * update_at: - * description: "The date with timezone at which the resource was last updated." + * updated_at: * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/discount.ts b/packages/medusa/src/models/discount.ts index 0220b40618..4cbeaec97c 100644 --- a/packages/medusa/src/models/discount.ts +++ b/packages/medusa/src/models/discount.ts @@ -9,6 +9,7 @@ import { ManyToOne, } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" + import { DiscountRule } from "./discount-rule" import { Region } from "./region" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" @@ -90,26 +91,40 @@ export class Discount extends SoftDeletableEntity { * title: "Discount" * description: "Represents a discount that can be applied to a cart for promotional purposes." * x-resourceId: discount + * required: + * - code + * - is_dynamic * properties: * id: - * description: "The id of the Discount. Will be prefixed by `disc_`." * type: string + * description: The discount's ID + * example: disc_01F0YESMW10MGHWJKZSDDMN0VN * code: * description: "A unique code for the discount - this will be used by the customer to apply the discount" * type: string + * example: 10DISC * is_dynamic: * description: "A flag to indicate if multiple instances of the discount can be generated. I.e. for newsletter discounts" * type: boolean - * rule: + * example: false + * rule_id: + * type: string * description: "The Discount Rule that governs the behaviour of the Discount" - * anyOf: - * - $ref: "#/components/schemas/discount_rule" + * example: dru_01F0YESMVK96HVX7N419E3CJ7C + * rule: + * description: Available if the relation `rule` is expanded. + * $ref: "#/components/schemas/discount_rule" * is_disabled: * description: "Whether the Discount has been disabled. Disabled discounts cannot be applied to carts" * type: boolean + * example: false * parent_discount_id: - * description: "The Discount that the discount was created from. This will always be a dynamic discount" * type: string + * description: "The Discount that the discount was created from. This will always be a dynamic discount" + * example: disc_01G8ZH853YPY9B94857DY91YGW + * parent_discount: + * description: Available if the relation `parent_discount` is expanded. + * $ref: "#/components/schemas/discount" * starts_at: * description: "The time at which the discount can be used." * type: string @@ -118,30 +133,39 @@ export class Discount extends SoftDeletableEntity { * description: "The time at which the discount can no longer be used." * type: string * format: date-time + * valid_duration: + * type: string + * description: Duration the discount runs between + * example: P3Y6M4DT12H30M5S * regions: - * description: "The Regions in which the Discount can be used" + * description: The Regions in which the Discount can be used. Available if the relation `regions` is expanded. * type: array * items: - * $ref: "#/components/schemas/region" + * type: object + * description: A region object. * usage_limit: * description: "The maximum number of times that a discount can be used." * type: integer + * example: 100 * usage_count: * description: "The number of times a discount has been used." * type: integer + * example: 50 + * default: 0 * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/draft-order.ts b/packages/medusa/src/models/draft-order.ts index 54c44f42b9..d933c0211a 100644 --- a/packages/medusa/src/models/draft-order.ts +++ b/packages/medusa/src/models/draft-order.ts @@ -7,16 +7,17 @@ import { JoinColumn, OneToOne, } from "typeorm" -import { BaseEntity } from "../interfaces/models/base-entity" import { DbAwareColumn, resolveDbGenerationStrategy, resolveDbType, } from "../utils/db-aware-column" -import { manualAutoIncrement } from "../utils/manual-auto-increment" + +import { BaseEntity } from "../interfaces/models/base-entity" import { Cart } from "./cart" import { Order } from "./order" import { generateEntityId } from "../utils/generate-entity-id" +import { manualAutoIncrement } from "../utils/manual-auto-increment" export enum DraftOrderStatus { OPEN = "open", @@ -86,42 +87,65 @@ export class DraftOrder extends BaseEntity { * properties: * id: * type: string + * description: The draft order's ID + * example: dorder_01G8TJFKBG38YYFQ035MSVG03C * status: * type: string + * description: The status of the draft order * enum: * - open * - completed + * default: open * display_id: * type: string + * description: The draft order's display ID + * example: 2 * cart_id: * type: string + * description: "The ID of the cart associated with the draft order." + * example: cart_01G8ZH853Y6TFXWPG5EYE81X63 * cart: - * anyOf: - * - $ref: "#/components/schemas/cart" + * description: A cart object. Available if the relation `cart` is expanded. + * type: object * order_id: * type: string + * description: "The ID of the order associated with the draft order." + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK * order: - * anyOf: - * - $ref: "#/components/schemas/order" + * description: An order object. Available if the relation `order` is expanded. + * type: object * canceled_at: * type: string - * format: date-time - * created_at: - * type: string - * format: date-time - * update_at: - * type: string - * format: date-time - * deleted_at: - * type: string + * description: The date the draft order was canceled at. * format: date-time * completed_at: * type: string + * description: The date the draft order was completed at. * format: date-time * no_notification_order: * type: boolean - * metadata: - * type: object + * description: Whether to send the customer notifications regarding order updates. + * example: false * idempotency_key: * type: string + * description: Randomly generated key used to continue the completion of the cart associated with the draft order in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." + * format: date-time + * updated_at: + * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * deleted_at: + * type: string + * description: "The date with timezone at which the resource was deleted." + * format: date-time + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/fulfillment-item.ts b/packages/medusa/src/models/fulfillment-item.ts index e3dd3c2da7..f91952aa62 100644 --- a/packages/medusa/src/models/fulfillment-item.ts +++ b/packages/medusa/src/models/fulfillment-item.ts @@ -28,18 +28,27 @@ export class FulfillmentItem { * title: "Fulfillment Item" * description: "Correlates a Line Item with a Fulfillment, keeping track of the quantity of the Line Item." * x-resourceId: fulfillment_item + * required: + * - fulfillment_id + * - item_id + * - quantity * properties: * fulfillment_id: * description: "The id of the Fulfillment that the Fulfillment Item belongs to." * type: string + * example: ful_01G8ZRTMQCA76TXNAT81KPJZRF * item_id: * description: "The id of the Line Item that the Fulfillment Item references." * type: string + * example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + * fulfillment: + * description: A fulfillment object. Available if the relation `fulfillment` is expanded. + * type: object * item: - * description: "The Line Item that the Fulfillment Item references." - * anyOf: - * - $ref: "#/components/schemas/line_item" + * description: Available if the relation `item` is expanded. + * $ref: "#/components/schemas/line_item" * quantity: * description: "The quantity of the Line Item that is included in the Fulfillment." * type: integer + * example: 1 */ diff --git a/packages/medusa/src/models/fulfillment-provider.ts b/packages/medusa/src/models/fulfillment-provider.ts index daa09ce087..e4420a1402 100644 --- a/packages/medusa/src/models/fulfillment-provider.ts +++ b/packages/medusa/src/models/fulfillment-provider.ts @@ -18,7 +18,9 @@ export class FulfillmentProvider { * id: * description: "The id of the fulfillment provider as given by the plugin." * type: string + * example: manual * is_installed: * description: "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`." * type: boolean + * example: true */ diff --git a/packages/medusa/src/models/fulfillment.ts b/packages/medusa/src/models/fulfillment.ts index f1057fee9d..5a983319ad 100644 --- a/packages/medusa/src/models/fulfillment.ts +++ b/packages/medusa/src/models/fulfillment.ts @@ -9,13 +9,13 @@ import { } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" -import { Order } from "./order" -import { FulfillmentProvider } from "./fulfillment-provider" -import { FulfillmentItem } from "./fulfillment-item" -import { Swap } from "./swap" -import { ClaimOrder } from "./claim-order" -import { TrackingLink } from "./tracking-link" import { BaseEntity } from "../interfaces/models/base-entity" +import { ClaimOrder } from "./claim-order" +import { FulfillmentItem } from "./fulfillment-item" +import { FulfillmentProvider } from "./fulfillment-provider" +import { Order } from "./order" +import { Swap } from "./swap" +import { TrackingLink } from "./tracking-link" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -95,38 +95,61 @@ export class Fulfillment extends BaseEntity { * title: "Fulfillment" * description: "Fulfillments are created once store operators can prepare the purchased goods. Fulfillments will eventually be shipped and hold information about how to track shipments. Fulfillments are created through a provider, which is typically an external shipping aggregator, shipping partner og 3PL, most plugins will have asynchronous communications with these providers through webhooks in order to automatically update and synchronize the state of Fulfillments." * x-resourceId: fulfillment + * required: + * - provider_id * properties: * id: - * description: "The id of the Fulfillment. This value will be prefixed by `ful_`." * type: string + * description: The cart's ID + * example: ful_01G8ZRTMQCA76TXNAT81KPJZRF * claim_order_id: * description: "The id of the Claim that the Fulfillment belongs to." * type: string + * example: null + * claim_order: + * description: A claim order object. Available if the relation `claim_order` is expanded. + * type: object * swap_id: * description: "The id of the Swap that the Fulfillment belongs to." * type: string + * example: null + * swap: + * description: A swap object. Available if the relation `swap` is expanded. + * type: object * order_id: * description: "The id of the Order that the Fulfillment belongs to." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + * order: + * description: An order object. Available if the relation `order` is expanded. + * type: object * provider_id: * description: "The id of the Fulfillment Provider responsible for handling the fulfillment" * type: string + * example: manual + * provider: + * description: Available if the relation `provider` is expanded. + * $ref: "#/components/schemas/fulfillment_provider" * items: - * description: "The Fulfillment Items in the Fulfillment - these hold information about how many of each Line Item has been fulfilled." + * description: The Fulfillment Items in the Fulfillment - these hold information about how many of each Line Item has been fulfilled. Available if the relation `items` is expanded. * type: array * items: * $ref: "#/components/schemas/fulfillment_item" * tracking_links: - * description: "The Tracking Links that can be used to track the status of the Fulfillment, these will usually be provided by the Fulfillment Provider." + * description: The Tracking Links that can be used to track the status of the Fulfillment, these will usually be provided by the Fulfillment Provider. Available if the relation `tracking_links` is expanded. * type: array * items: * $ref: "#/components/schemas/tracking_link" * tracking_numbers: * deprecated: true - * description: "The tracking numbers that can be used to track the status of the fulfillment." + * description: The tracking numbers that can be used to track the status of the fulfillment. * type: array * items: * type: string + * data: + * description: This contains all the data necessary for the Fulfillment provider to handle the fulfillment. + * type: object + * example: {} * shipped_at: * description: "The date with timezone at which the Fulfillment was shipped." * type: string @@ -134,19 +157,31 @@ export class Fulfillment extends BaseEntity { * no_notification: * description: "Flag for describing whether or not notifications related to this should be send." * type: boolean + * example: false * canceled_at: * description: "The date with timezone at which the Fulfillment was canceled." * type: string * format: date-time - * created_at: - * description: "The date with timezone at which the resource was created." + * idempotency_key: * type: string + * description: Randomly generated key used to continue the completion of the fulfillment in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * deleted_at: + * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/gift-card-transaction.ts b/packages/medusa/src/models/gift-card-transaction.ts index 5f0d0871b6..6de6ea20fa 100644 --- a/packages/medusa/src/models/gift-card-transaction.ts +++ b/packages/medusa/src/models/gift-card-transaction.ts @@ -9,11 +9,11 @@ import { PrimaryColumn, Unique, } from "typeorm" -import { resolveDbType } from "../utils/db-aware-column" import { GiftCard } from "./gift-card" import { Order } from "./order" import { generateEntityId } from "../utils/generate-entity-id" +import { resolveDbType } from "../utils/db-aware-column" @Unique("gcuniq", ["gift_card_id", "order_id"]) @Entity() @@ -59,25 +59,42 @@ export class GiftCardTransaction { * title: "Gift Card Transaction" * description: "Gift Card Transactions are created once a Customer uses a Gift Card to pay for their Order" * x-resourceId: gift_card_transaction + * required: + * - gift_card_id + * - amount * properties: * id: - * description: "The id of the Gift Card Transaction. This value will be prefixed by `gct_`." * type: string + * description: The gift card transaction's ID + * example: gct_01G8X9A7ESKAJXG2H0E6F1MW7A * gift_card_id: - * description: "The id of the Gift Card that was used in the transaction." + * description: "The ID of the Gift Card that was used in the transaction." * type: string + * example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ * gift_card: - * description: "The Gift Card that was used in the transaction." - * anyOf: - * - $ref: "#/components/schemas/gift_card" + * description: A gift card object. Available if the relation `gift_card` is expanded. + * type: object * order_id: - * description: "The id of the Order that the Gift Card was used to pay for." + * description: "The ID of the Order that the Gift Card was used to pay for." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + * order: + * description: An order object. Available if the relation `order` is expanded. + * type: object * amount: * description: "The amount that was used from the Gift Card." * type: integer + * example: 10 * created_at: * description: "The date with timezone at which the resource was created." * type: string * format: date-time + * is_taxable: + * description: "Whether the transaction is taxable or not." + * type: boolean + * example: false + * tax_rate: + * description: "The tax rate of the transaction" + * type: number + * example: 0 */ diff --git a/packages/medusa/src/models/gift-card.ts b/packages/medusa/src/models/gift-card.ts index 5598accafe..10d12426c6 100644 --- a/packages/medusa/src/models/gift-card.ts +++ b/packages/medusa/src/models/gift-card.ts @@ -8,8 +8,8 @@ import { } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" -import { Region } from "./region" import { Order } from "./order" +import { Region } from "./region" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @@ -64,49 +64,64 @@ export class GiftCard extends SoftDeletableEntity { * title: "Gift Card" * description: "Gift Cards are redeemable and represent a value that can be used towards the payment of an Order." * x-resourceId: gift_card + * required: + * - code + * - value + * - balance + * - region_id * properties: * id: - * description: "The id of the Gift Card. This value will be prefixed by `gift_`." * type: string + * description: The cart's ID + * example: gift_01G8XKBPBQY2R7RBET4J7E0XQZ * code: * description: "The unique code that identifies the Gift Card. This is used by the Customer to redeem the value of the Gift Card." * type: string + * example: 3RFT-MH2C-Y4YZ-XMN4 * value: * description: "The value that the Gift Card represents." * type: integer + * example: 10 * balance: * description: "The remaining value on the Gift Card." * type: integer + * example: 10 * region_id: + * type: string * description: "The id of the Region in which the Gift Card is available." - * type: string + * example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G * region: - * description: "The Region in which the Gift Card is available." - * anyOf: - * - $ref: "#/components/schemas/region" + * description: A region object. Available if the relation `region` is expanded. + * type: object * order_id: - * description: "The id of the Order that the Gift Card was purchased in." * type: string + * description: "The id of the Order that the Gift Card was purchased in." + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + * order: + * description: An order object. Available if the relation `order` is expanded. + * type: object * is_disabled: * description: "Whether the Gift Card has been disabled. Disabled Gift Cards cannot be applied to carts." * type: boolean + * example: false * ends_at: * description: "The time at which the Gift Card can no longer be used." * type: string * format: date-time * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/idempotency-key.ts b/packages/medusa/src/models/idempotency-key.ts index 3a188e6434..c41160abea 100644 --- a/packages/medusa/src/models/idempotency-key.ts +++ b/packages/medusa/src/models/idempotency-key.ts @@ -7,6 +7,7 @@ import { PrimaryColumn, } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" + import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -47,3 +48,57 @@ export class IdempotencyKey { this.id = generateEntityId(this.id, "ikey") } } + +/** + * @schema idempotency_key + * title: "Idempotency Key" + * description: "Idempotency Key is used to continue a process in case of any failure that might occur." + * x-resourceId: idempotency_key + * required: + * - idempotency_key + * properties: + * id: + * type: string + * description: The idempotency key's ID + * example: ikey_01G8X9A7ESKAJXG2H0E6F1MW7A + * idempotency_key: + * description: "The unique randomly generated key used to determine the state of a process." + * type: string + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. + * created_at: + * description: Date which the idempotency key was locked. + * type: string + * format: date-time + * locked_at: + * description: Date which the idempotency key was locked. + * type: string + * format: date-time + * request_method: + * description: "The method of the request" + * type: string + * example: POST + * request_params: + * type: object + * description: "The parameters passed to the request" + * example: + * id: cart_01G8ZH853Y6TFXWPG5EYE81X63 + * request_path: + * description: "The request's path" + * type: string + * example: /store/carts/cart_01G8ZH853Y6TFXWPG5EYE81X63/complete + * response_code: + * type: string + * description: "The response's code." + * example: 200 + * response_body: + * type: object + * description: "The response's body" + * example: + * id: cart_01G8ZH853Y6TFXWPG5EYE81X63 + * recovery_point: + * type: string + * description: "Where to continue from." + * default: started + */ \ No newline at end of file diff --git a/packages/medusa/src/models/image.ts b/packages/medusa/src/models/image.ts index 99181445fc..5523012535 100644 --- a/packages/medusa/src/models/image.ts +++ b/packages/medusa/src/models/image.ts @@ -1,6 +1,7 @@ import { BeforeInsert, Column, Entity } from "typeorm" -import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" + import { DbAwareColumn } from "../utils/db-aware-column" +import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -22,26 +23,31 @@ export class Image extends SoftDeletableEntity { * title: "Image" * description: "Images holds a reference to a URL at which the image file can be found." * x-resourceId: image + * required: + * - url * properties: * id: - * description: "The id of the Image. This value will be prefixed by `img_`." * type: string + * description: The image's ID + * example: img_01G749BFYR6T8JTVW6SGW3K3E6 * url: * description: "The URL at which the image file can be found." * type: string + * format: uri * created_at: + * type: string * description: "The date with timezone at which the resource was created." - * type: string * format: date-time - * update_at: - * description: "The date with timezone at which the resource was last updated." + * updated_at: * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/invite.ts b/packages/medusa/src/models/invite.ts index fd612b146b..6c1f0cbb05 100644 --- a/packages/medusa/src/models/invite.ts +++ b/packages/medusa/src/models/invite.ts @@ -1,7 +1,8 @@ import { BeforeInsert, Column, CreateDateColumn, Entity, Index } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" -import { UserRoles } from "./user" + import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" +import { UserRoles } from "./user" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -35,3 +36,57 @@ export class Invite extends SoftDeletableEntity { this.id = generateEntityId(this.id, "invite") } } + +/** + * @schema invite + * title: "Invite" + * description: "Represents an invite" + * x-resourceId: invite + * required: + * - user_email + * properties: + * id: + * type: string + * description: The invite's ID + * example: invite_01G8TKE4XYCTHSCK2GDEP47RE1 + * user_email: + * type: string + * description: The email of the user being invited. + * format: email + * role: + * type: string + * description: The user's role. + * enum: + * - admin + * - member + * - developer + * default: member + * accepted: + * type: boolean + * description: Whether the invite was accepted or not. + * example: false + * token: + * type: string + * description: The token used to accept the invite. + * expores_at: + * type: string + * description: The date the invite expires at. + * format: date-time + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." + * format: date-time + * updated_at: + * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * deleted_at: + * type: string + * description: "The date with timezone at which the resource was deleted." + * format: date-time + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} + */ + diff --git a/packages/medusa/src/models/line-item-adjustment.ts b/packages/medusa/src/models/line-item-adjustment.ts index c57d71a132..6f9f666faa 100644 --- a/packages/medusa/src/models/line-item-adjustment.ts +++ b/packages/medusa/src/models/line-item-adjustment.ts @@ -1,12 +1,13 @@ import { - Entity, BeforeInsert, - Index, Column, - ManyToOne, + Entity, + Index, JoinColumn, + ManyToOne, PrimaryColumn, } from "typeorm" + import { DbAwareColumn } from "../utils/db-aware-column" import { Discount } from "./discount" import { LineItem } from "./line-item" @@ -51,3 +52,45 @@ export class LineItemAdjustment { this.id = generateEntityId(this.id, "lia") } } + +/** + * @schema line_item_adjustment + * title: "Line Item Adjustment" + * description: "Represents an Line Item Adjustment" + * x-resourceId: line_item_adjustment + * required: + * - item_id + * - description + * - amount + * properties: + * id: + * type: string + * description: The invite's ID + * example: lia_01G8TKE4XYCTHSCK2GDEP47RE1 + * item_id: + * type: string + * description: The ID of the line item + * example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + * item: + * description: Available if the relation `item` is expanded. + * $ref: "#/components/schemas/line_item" + * description: + * type: string + * description: The line item's adjustment description + * example: Adjusted item's price. + * discount_id: + * type: string + * description: The ID of the discount associated with the adjustment + * example: disc_01F0YESMW10MGHWJKZSDDMN0VN + * discount: + * description: Available if the relation `discount` is expanded. + * $ref: "#/components/schemas/discount" + * amount: + * type: number + * description: The adjustment amount + * example: 1000 + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} + */ diff --git a/packages/medusa/src/models/line-item-tax-line.ts b/packages/medusa/src/models/line-item-tax-line.ts index 9203b21d39..69b588ddef 100644 --- a/packages/medusa/src/models/line-item-tax-line.ts +++ b/packages/medusa/src/models/line-item-tax-line.ts @@ -8,8 +8,8 @@ import { Unique, } from "typeorm" -import { TaxLine } from "./tax-line" import { LineItem } from "./line-item" +import { TaxLine } from "./tax-line" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -28,3 +28,50 @@ export class LineItemTaxLine extends TaxLine { this.id = generateEntityId(this.id, "litl") } } + +/** + * @schema line_item_tax_line + * title: "Line Item Tax Line" + * description: "Represents an Line Item Tax Line" + * x-resourceId: line_item_tax_line + * required: + * - item_id + * - rate + * - name + * properties: + * id: + * type: string + * description: The line item tax line's ID + * example: litl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + * item_id: + * type: string + * description: The ID of the line item + * example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN + * item: + * description: Available if the relation `item` is expanded. + * $ref: "#/components/schemas/line_item" + * code: + * description: "A code to identify the tax type by" + * type: string + * example: tax01 + * name: + * description: "A human friendly name for the tax" + * type: string + * example: Tax Example + * rate: + * description: "The numeric rate to charge tax by" + * type: number + * example: 10 + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." + * format: date-time + * updated_at: + * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} + */ diff --git a/packages/medusa/src/models/line-item.ts b/packages/medusa/src/models/line-item.ts index 2f92981cec..4d94ee7471 100644 --- a/packages/medusa/src/models/line-item.ts +++ b/packages/medusa/src/models/line-item.ts @@ -8,16 +8,16 @@ import { ManyToOne, OneToMany, } from "typeorm" -import { DbAwareColumn } from "../utils/db-aware-column" -import { LineItemTaxLine } from "./line-item-tax-line" -import { Swap } from "./swap" -import { Cart } from "./cart" -import { Order } from "./order" -import { ClaimOrder } from "./claim-order" -import { ProductVariant } from "./product-variant" -import { LineItemAdjustment } from "./line-item-adjustment" import { BaseEntity } from "../interfaces/models/base-entity" +import { Cart } from "./cart" +import { ClaimOrder } from "./claim-order" +import { DbAwareColumn } from "../utils/db-aware-column" +import { LineItemAdjustment } from "./line-item-adjustment" +import { LineItemTaxLine } from "./line-item-tax-line" +import { Order } from "./order" +import { ProductVariant } from "./product-variant" +import { Swap } from "./swap" import { generateEntityId } from "../utils/generate-entity-id" @Check(`"fulfilled_quantity" <= "quantity"`) @@ -136,74 +136,155 @@ export class LineItem extends BaseEntity { * title: "Line Item" * description: "Line Items represent purchasable units that can be added to a Cart for checkout. When Line Items are purchased they will get copied to the resulting order and can eventually be referenced in Fulfillments and Returns. Line Items may also be created when processing Swaps and Claims." * x-resourceId: line_item + * required: + * - title + * - unit_price + * - quantity * properties: * id: - * description: "The id of the Line Item. This value will be prefixed by `item_`." * type: string + * description: The cart's ID + * example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN * cart_id: - * description: "The id of the Cart that the Line Item belongs to." + * description: "The ID of the Cart that the Line Item belongs to." * type: string + * example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + * cart: + * description: A cart object. Available if the relation `cart` is expanded. + * type: object * order_id: - * description: "The id of the Order that the Line Item belongs to." + * description: "The ID of the Order that the Line Item belongs to." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + * order: + * description: An order object. Available if the relation `order` is expanded. + * type: object * swap_id: * description: "The id of the Swap that the Line Item belongs to." * type: string + * example: null + * swap: + * description: A swap object. Available if the relation `swap` is expanded. + * type: object * claim_order_id: * description: "The id of the Claim that the Line Item belongs to." * type: string + * example: null + * claim_order: + * description: A claim order object. Available if the relation `claim_order` is expanded. + * type: object + * tax_lines: + * description: Available if the relation `tax_lines` is expanded. + * type: array + * items: + * $ref: "#/components/schemas/line_item_tax_line" + * adjustments: + * description: Available if the relation `adjustments` is expanded. + * type: array + * items: + * $ref: "#/components/schemas/line_item_adjustment" * title: * description: "The title of the Line Item, this should be easily identifiable by the Customer." * type: string + * example: Medusa Coffee Mug * description: * description: "A more detailed description of the contents of the Line Item." * type: string + * example: One Size * thumbnail: * description: "A URL string to a small image of the contents of the Line Item." * type: string + * format: uri + * example: https://medusa-public-images.s3.eu-west-1.amazonaws.com/coffee-mug.png + * is_return: + * description: "Is the item being returned" + * type: boolean + * example: false * is_giftcard: * description: "Flag to indicate if the Line Item is a Gift Card." * type: boolean + * example: false * should_merge: * description: "Flag to indicate if new Line Items with the same variant should be merged or added as an additional Line Item." * type: boolean + * example: false * allow_discounts: * description: "Flag to indicate if the Line Item should be included when doing discount calculations." * type: boolean + * example: false + * has_shipping: + * description: "Flag to indicate if the Line Item has fulfillment associated with it." + * type: boolean + * example: false * unit_price: * description: "The price of one unit of the content in the Line Item. This should be in the currency defined by the Cart/Order/Swap/Claim that the Line Item belongs to." * type: boolean + * example: 8000 * variant_id: * description: "The id of the Product Variant contained in the Line Item." * type: string + * example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 * variant: - * description: "The Product Variant contained in the Line Item." - * anyOf: - * - $ref: "#/components/schemas/product_variant" + * description: A product variant object. The Product Variant contained in the Line Item. Available if the relation `variant` is expanded. + * type: object * quantity: * description: "The quantity of the content in the Line Item." * type: integer + * example: 1 * fulfilled_quantity: * description: "The quantity of the Line Item that has been fulfilled." * type: integer + * example: 0 * returned_quantity: * description: "The quantity of the Line Item that has been returned." * type: integer + * example: 0 * shipped_quantity: * description: "The quantity of the Line Item that has been shipped." * type: integer - * created_at: - * description: "The date with timezone at which the resource was created." - * type: string - * format: date-time - * updated_at: - * description: "The date with timezone at which the resource was last updated." - * type: string - * format: date-time - * metadata: - * description: "An optional key-value map with additional information." - * type: object + * example: 0 * refundable: * description: "The amount that can be refunded from the given Line Item. Takes taxes and discounts into consideration." * type: integer + * example: 0 + * subtotal: + * type: integer + * description: The subtotal of the line item + * example: 8000 + * tax_total: + * type: integer + * description: The total of tax of the line item + * example: 0 + * total: + * type: integer + * description: The total amount of the line item + * example: 8000 + * original_total: + * type: integer + * description: The original total amount of the line item + * example: 8000 + * original_tax_total: + * type: integer + * description: The original tax total amount of the line item + * example: 0 + * discount_total: + * type: integer + * description: The total of discount of the line item + * example: 0 + * gift_card_total: + * type: integer + * description: The total of the gift card of the line item + * example: 0 + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." + * format: date-time + * updated_at: + * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/money-amount.ts b/packages/medusa/src/models/money-amount.ts index 7d724bfc3a..646ec92328 100644 --- a/packages/medusa/src/models/money-amount.ts +++ b/packages/medusa/src/models/money-amount.ts @@ -6,6 +6,7 @@ import { JoinColumn, ManyToOne, } from "typeorm" + import { Currency } from "./currency" import { PriceList } from "./price-list" import { ProductVariant } from "./product-variant" @@ -70,42 +71,71 @@ export class MoneyAmount extends SoftDeletableEntity { * title: "Money Amount" * description: "Money Amounts represents an amount that a given Product Variant can be purcased for. Each Money Amount either has a Currency or Region associated with it to indicate the pricing in a given Currency or, for fully region-based pricing, the given price in a specific Region. If region-based pricing is used the amount will be in the currency defined for the Reigon." * x-resourceId: money_amount + * required: + * - currency_code + * - amount * properties: * id: - * description: "The id of the Money Amount. This value will be prefixed by `ma_`." * type: string + * description: The money amount's ID + * example: ma_01F0YESHRFQNH5S8Q0PK84YYZN * currency_code: * description: "The 3 character currency code that the Money Amount is given in." * type: string + * example: usd + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. + * currency: + * description: Available if the relation `currency` is expanded. + * $ref: "#/components/schemas/currency" * amount: * description: "The amount in the smallest currecny unit (e.g. cents 100 cents to charge $1) that the Product Variant will cost." * type: integer + * example: 100 * min_quantity: * description: "The minimum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities." * type: integer + * example: 1 * max_quantity: * description: "The maximum quantity that the Money Amount applies to. If this value is not set, the Money Amount applies to all quantities." * type: integer + * example: 1 + * price_list_id: + * type: string + * description: The ID of the price list associated with the money amount + * example: pl_01G8X3CKJXCG5VXVZ87H9KC09W + * price_list: + * description: Available if the relation `price_list` is expanded. + * $ref: "#/components/schemas/price_list" * variant_id: - * description: "The id of the Product Variant that the Money Amount belongs to." + * description: "The id of the Product Variant contained in the Line Item." * type: string + * example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + * variant: + * description: The Product Variant contained in the Line Item. Available if the relation `variant` is expanded. + * type: object * region_id: - * description: "The id of the Region that the Money Amount is defined for." * type: string + * description: The region's ID + * example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G * region: - * description: "The Region that the Money Amount is defined for." - * anyOf: - * - $ref: "#/components/schemas/region" + * description: A region object. Available if the relation `region` is expanded. + * type: object * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/note.ts b/packages/medusa/src/models/note.ts index dba0fca4e9..7fe459aaca 100644 --- a/packages/medusa/src/models/note.ts +++ b/packages/medusa/src/models/note.ts @@ -6,9 +6,10 @@ import { JoinColumn, ManyToOne, } from "typeorm" -import { User } from "./user" -import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" + import { DbAwareColumn } from "../utils/db-aware-column" +import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" +import { User } from "./user" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -45,36 +46,48 @@ export class Note extends SoftDeletableEntity { * title: "Note" * description: "Notes are elements which we can use in association with different resources to allow users to describe additional information in relation to these." * x-resourceId: note + * required: + * - value + * - resource_type + * - resource_id * properties: * id: - * description: "The id of the Note. This value will be prefixed by `note_`." * type: string + * description: The note's ID + * example: note_01G8TM8ENBMC7R90XRR1G6H26Q * resource_type: * description: "The type of resource that the Note refers to." * type: string + * example: order * resource_id: - * description: "The id of the resource that the Note refers to." + * description: "The ID of the resource that the Note refers to." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK * value: * description: "The contents of the note." * type: string - * author: - * description: "The author of the note." - * anyOf: - * - $ref: "#/components/schemas/user" - * created_at: - * description: "The date with timezone at which the resource was created." + * example: This order must be fulfilled on Monday + * author_id: * type: string + * description: The ID of the author (user) + * example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V + * author: + * description: Available if the relation `author` is expanded. + * $ref: "#/components/schemas/user" + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/notification-provider.ts b/packages/medusa/src/models/notification-provider.ts index eb0dd58da5..fe35201082 100644 --- a/packages/medusa/src/models/notification-provider.ts +++ b/packages/medusa/src/models/notification-provider.ts @@ -14,11 +14,15 @@ export class NotificationProvider { * title: "Notification Provider" * description: "Represents a notification provider plugin and holds its installation status." * x-resourceId: notification_provider + * required: + * - id * properties: * id: * description: "The id of the notification provider as given by the plugin." * type: string + * example: sendgrid * is_installed: * description: "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`." * type: boolean + * default: true */ diff --git a/packages/medusa/src/models/notification.ts b/packages/medusa/src/models/notification.ts index 550925756c..2bc26339b5 100644 --- a/packages/medusa/src/models/notification.ts +++ b/packages/medusa/src/models/notification.ts @@ -7,10 +7,10 @@ import { ManyToOne, OneToMany, } from "typeorm" -import { BaseEntity } from "../interfaces/models/base-entity" -import { DbAwareColumn } from "../utils/db-aware-column" +import { BaseEntity } from "../interfaces/models/base-entity" import { Customer } from "./customer" +import { DbAwareColumn } from "../utils/db-aware-column" import { NotificationProvider } from "./notification-provider" import { generateEntityId } from "../utils/generate-entity-id" @@ -69,35 +69,42 @@ export class Notification extends BaseEntity { * title: "Notification" * description: "Notifications a communications sent via Notification Providers as a reaction to internal events such as `order.placed`. Notifications can be used to show a chronological timeline for communications sent to a Customer regarding an Order, and enables resends." * x-resourceId: notification + * required: + * - resource_type + * - resource_id + * - to * properties: * id: - * description: "The id of the Notification. This value will be prefixed by `noti_`." * type: string + * description: The notification's ID + * example: noti_01G53V9Y6CKMCGBM1P0X7C28RX * event_name: * description: "The name of the event that the notification was sent for." * type: string + * example: order.placed * resource_type: * description: "The type of resource that the Notification refers to." * type: string + * example: order * resource_id: - * description: "The id of the resource that the Notification refers to." + * description: "The ID of the resource that the Notification refers to." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK * customer_id: - * description: "The id of the Customer that the Notification was sent to." + * description: "The ID of the Customer that the Notification was sent to." * type: string + * example: cus_01G2SG30J8C85S4A5CHM2S1NS2 * customer: - * description: "The Customer that the Notification was sent to." - * anyOf: - * - $ref: "#/components/schemas/customer" + * description: A customer object. Available if the relation `customer` is expanded. + * type: object * to: * description: "The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id" * type: string + * example: "user@example.com" * data: * description: "The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend." * type: object - * parent_id: - * description: "The id of the Notification that was originally sent." - * type: string + * example: {} * resends: * description: "The resends that have been completed after the original Notification." * type: array @@ -106,13 +113,17 @@ export class Notification extends BaseEntity { * provider_id: * description: "The id of the Notification Provider that handles the Notification." * type: string + * example: sengrid + * provider: + * description: Available if the relation `provider` is expanded. + * $ref: "#/components/schemas/notification_provider" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time */ @@ -123,35 +134,56 @@ export class Notification extends BaseEntity { * x-resourceId: notification_resend * properties: * id: - * description: "The id of the Notification. This value will be prefixed by `noti_`." + * description: The notification resend's ID * type: string + * example: noti_01F0YET45G9NHP08Z66CE4QKBS * event_name: * description: "The name of the event that the notification was sent for." * type: string + * example: order.placed * resource_type: * description: "The type of resource that the Notification refers to." * type: string + * example: order * resource_id: - * description: "The id of the resource that the Notification refers to." + * description: "The ID of the resource that the Notification refers to." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + * customer_id: + * description: "The ID of the Customer that the Notification was sent to." + * type: string + * example: cus_01G2SG30J8C85S4A5CHM2S1NS2 + * customer: + * description: A customer object. Available if the relation `customer` is expanded. + * type: object * to: * description: "The address that the Notification was sent to. This will usually be an email address, but represent other addresses such as a chat bot user id" * type: string + * example: "user@example.com" * data: * description: "The data that the Notification was sent with. This contains all the data necessary for the Notification Provider to initiate a resend." * type: object + * example: {} * parent_id: - * description: "The id of the Notification that was originally sent." + * description: "The ID of the Notification that was originally sent." * type: string + * example: noti_01G53V9Y6CKMCGBM1P0X7C28RX + * parent_notification: + * description: Available if the relation `parent_notification` is expanded. + * $ref: "#/components/schemas/notification" * provider_id: - * description: "The id of the Notification Provider that handles the Notification." + * description: "The ID of the Notification Provider that handles the Notification." * type: string + * example: sengrid + * provider: + * description: Available if the relation `provider` is expanded. + * $ref: "#/components/schemas/notification_provider" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time */ diff --git a/packages/medusa/src/models/oauth.ts b/packages/medusa/src/models/oauth.ts index fc74730643..e0cae3beff 100644 --- a/packages/medusa/src/models/oauth.ts +++ b/packages/medusa/src/models/oauth.ts @@ -1,4 +1,5 @@ import { BeforeInsert, Column, Entity, Index, PrimaryColumn } from "typeorm" + import { DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils/generate-entity-id" @@ -28,3 +29,39 @@ export class Oauth { this.id = generateEntityId(this.id, "oauth") } } + +/** + * @schema OAuth + * title: "OAuth" + * description: "Represent an OAuth app" + * x-resourceId: OAuth + * required: + * - id + * - display_name + * - application_name + * properties: + * id: + * type: string + * description: The app's ID + * example: example_app + * display_name: + * type: string + * description: The app's display name + * example: Example app + * application_name: + * type: string + * description: The app's name + * example: example + * install_url: + * type: string + * description: The URL to install the app + * format: uri + * uninstall_url: + * type: string + * description: The URL to uninstall the app + * format: uri + * data: + * type: object + * description: Any data necessary to the app. + * example: {} + */ diff --git a/packages/medusa/src/models/order.ts b/packages/medusa/src/models/order.ts index 43abfeb176..39c17a2a39 100644 --- a/packages/medusa/src/models/order.ts +++ b/packages/medusa/src/models/order.ts @@ -11,14 +11,18 @@ import { OneToMany, OneToOne, } from "typeorm" -import { BaseEntity } from "../interfaces/models/base-entity" import { DbAwareColumn, resolveDbGenerationStrategy, resolveDbType, } from "../utils/db-aware-column" -import { manualAutoIncrement } from "../utils/manual-auto-increment" +import { + FeatureFlagColumn, + FeatureFlagDecorators, +} from "../utils/feature-flag-decorators" + import { Address } from "./address" +import { BaseEntity } from "../interfaces/models/base-entity" import { Cart } from "./cart" import { ClaimOrder } from "./claim-order" import { Currency } from "./currency" @@ -33,14 +37,11 @@ import { Payment } from "./payment" import { Refund } from "./refund" import { Region } from "./region" import { Return } from "./return" +import { SalesChannel } from "./sales-channel" import { ShippingMethod } from "./shipping-method" import { Swap } from "./swap" import { generateEntityId } from "../utils/generate-entity-id" -import { - FeatureFlagColumn, - FeatureFlagDecorators, -} from "../utils/feature-flag-decorators" -import { SalesChannel } from "./sales-channel" +import { manualAutoIncrement } from "../utils/manual-auto-increment" export enum OrderStatus { PENDING = "pending", @@ -270,19 +271,29 @@ export class Order extends BaseEntity { * title: "Order" * description: "Represents an order" * x-resourceId: order + * required: + * - customer_id + * - email + * - region_id + * - currency_code * properties: * id: * type: string + * description: The order's ID + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK * status: * type: string + * description: The order's status * enum: * - pending * - completed * - archived * - canceled * - requires_action + * default: pending * fulfillment_status: * type: string + * description: The order's fulfillment status * enum: * - not_fulfilled * - partially_fulfilled @@ -293,8 +304,10 @@ export class Order extends BaseEntity { * - returned * - canceled * - requires_action + * default: not_fulfilled * payment_status: * type: string + * description: The order's payment status * enum: * - not_paid * - awaiting @@ -303,116 +316,195 @@ export class Order extends BaseEntity { * - refuneded * - canceled * - requires_action + * default: not_paid * display_id: * type: integer + * description: The order's display ID + * example: 2 * cart_id: * type: string - * currency_code: - * type: string - * tax_rate: - * type: number - * discounts: - * type: array - * items: - * $ref: "#/components/schemas/discount" - * email: - * type: string - * billing_address_id: - * type: string - * billing_address: - * anyOf: - * - $ref: "#/components/schemas/address" - * shipping_address_id: - * type: string - * shipping_address: - * anyOf: - * - $ref: "#/components/schemas/address" - * items: - * type: array - * items: - * $ref: "#/components/schemas/line_item" - * region_id: - * type: string - * region: - * anyOf: - * - $ref: "#/components/schemas/region" - * gift_cards: - * type: array - * items: - * $ref: "#/components/schemas/gift_card" + * description: The ID of the cart associated with the order + * example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + * cart: + * description: A cart object. Available if the relation `cart` is expanded. + * type: object * customer_id: * type: string + * description: The ID of the customer associated with the order + * example: cus_01G2SG30J8C85S4A5CHM2S1NS2 * customer: - * anyOf: - * - $ref: "#/components/schemas/customer" - * payment_session: - * anyOf: - * - $ref: "#/components/schemas/payment_session" - * payment_sessions: + * description: A customer object. Available if the relation `customer` is expanded. + * type: object + * email: + * description: The email associated with the order + * type: string + * format: email + * billing_address_id: + * type: string + * description: The ID of the billing address associated with the order + * example: addr_01G8ZH853YPY9B94857DY91YGW + * billing_address: + * description: Available if the relation `billing_address` is expanded. + * $ref: "#/components/schemas/address" + * shipping_address_id: + * type: string + * description: The ID of the shipping address associated with the order + * example: addr_01G8ZH853YPY9B94857DY91YGW + * shipping_address: + * description: Available if the relation `shipping_address` is expanded. + * $ref: "#/components/schemas/address" + * region_id: + * type: string + * description: The region's ID + * example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + * region: + * description: A region object. Available if the relation `region` is expanded. + * type: object + * currency_code: + * description: "The 3 character currency code that is used in the order" + * type: string + * example: usd + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. + * currency: + * description: Available if the relation `currency` is expanded. + * $ref: "#/components/schemas/currency" + * tax_rate: + * description: The order's tax rate + * type: number + * example: 0 + * discounts: * type: array + * description: The discounts used in the order. Available if the relation `discounts` is expanded. * items: - * $ref: "#/components/schemas/payment_session" - * payments: + * type: object + * description: A discount object. + * gift_cards: * type: array + * description: The gift cards used in the order. Available if the relation `gift_cards` is expanded. * items: - * $ref: "#/components/schemas/payment" + * type: object + * description: A gift card object. * shipping_methods: * type: array + * description: The shipping methods used in the order. Available if the relation `shipping_methods` is expanded. * items: * $ref: "#/components/schemas/shipping_method" + * payments: + * type: array + * description: The payments used in the order. Available if the relation `payments` is expanded. + * items: + * $ref: "#/components/schemas/payment" * fulfillments: * type: array + * description: The fulfillments used in the order. Available if the relation `fulfillments` is expanded. * items: * $ref: "#/components/schemas/fulfillment" * returns: * type: array + * description: The returns associated with the order. Available if the relation `returns` is expanded. * items: - * $ref: "#/components/schemas/return" + * type: object + * description: A return object. * claims: * type: array + * description: The claims associated with the order. Available if the relation `claims` is expanded. * items: - * $ref: "#/components/schemas/claim_order" + * type: object + * description: A claim order object. * refunds: * type: array + * description: The refunds associated with the order. Available if the relation `refunds` is expanded. * items: - * $ref: "#/components/schemas/refund" + * type: object + * description: A refund object. * swaps: * type: array + * description: The swaps associated with the order. Available if the relation `swaps` is expanded. * items: - * $ref: "#/components/schemas/refund" + * type: object + * description: A swap object. + * draft_order_id: + * type: string + * description: The ID of the draft order this order is associated with. + * example: null + * draft_order: + * description: A draft order object. Available if the relation `draft_order` is expanded. + * type: object + * items: + * type: array + * description: The line items that belong to the order. Available if the relation `items` is expanded. + * items: + * $ref: "#/components/schemas/line_item" * gift_card_transactions: * type: array + * description: The gift card transactions used in the order. Available if the relation `gift_card_transactions` is expanded. * items: * $ref: "#/components/schemas/gift_card_transaction" * canceled_at: * type: string + * description: The date the order was canceled on. * format: date-time - * created_at: - * type: string - * format: date-time - * update_at: - * type: string - * format: date-time - * deleted_at: - * type: string - * format: date-time - * metadata: - * type: object - * shipping_total: - * type: integer - * discount_total: - * type: integer - * tax_total: - * type: integer - * subtotal: - * type: integer - * refundable_amount: - * type: integer - * gift_card_total: - * type: integer - * paid_total: - * type: integer * no_notification: * description: "Flag for describing whether or not notifications related to this should be send." * type: boolean + * example: false + * idempotency_key: + * type: string + * description: Randomly generated key used to continue the processing of the order in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. + * external_id: + * description: The ID of an external order. + * type: string + * example: null + * sales_channel_id: + * type: string + * description: The ID of the sales channel this order is associated with. + * example: null + * sales_channel: + * description: A sales channel object. Available if the relation `sales_channel` is expanded. + * type: object + * shipping_total: + * type: integer + * description: The total of shipping + * example: 1000 + * discount_total: + * type: integer + * description: The total of discount + * example: 800 + * tax_total: + * type: integer + * description: The total of tax + * example: 0 + * refunded_total: + * type: integer + * description: The total amount refunded if the order is returned. + * example: 0 + * total: + * type: integer + * description: The total amount of the order + * example: 8200 + * subtotal: + * type: integer + * description: The subtotal of the order + * example: 8000 + * paid_total: + * type: integer + * description: The total amount paid + * example: 8000 + * refundable_amount: + * type: integer + * description: The amount that can be refunded + * example: 8200 + * gift_card_total: + * type: integer + * description: The total of gift cards + * example: 0 + * gift_card_tax_total: + * type: integer + * description: The total of gift cards with taxes + * example: 0 */ diff --git a/packages/medusa/src/models/payment-provider.ts b/packages/medusa/src/models/payment-provider.ts index b94e361f45..d213ef9820 100644 --- a/packages/medusa/src/models/payment-provider.ts +++ b/packages/medusa/src/models/payment-provider.ts @@ -14,11 +14,15 @@ export class PaymentProvider { * title: "Payment Provider" * description: "Represents a Payment Provider plugin and holds its installation status." * x-resourceId: payment_provider + * required: + * - id * properties: * id: * description: "The id of the payment provider as given by the plugin." * type: string + * example: manual * is_installed: * description: "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`." * type: boolean + * default: true */ diff --git a/packages/medusa/src/models/payment-session.ts b/packages/medusa/src/models/payment-session.ts index dbcdbffe35..b458b26892 100644 --- a/packages/medusa/src/models/payment-session.ts +++ b/packages/medusa/src/models/payment-session.ts @@ -7,9 +7,10 @@ import { ManyToOne, Unique, } from "typeorm" + import { BaseEntity } from "../interfaces" -import { DbAwareColumn } from "../utils/db-aware-column" import { Cart } from "./cart" +import { DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils" export enum PaymentSessionStatus { @@ -58,19 +59,30 @@ export class PaymentSession extends BaseEntity { * title: "Payment Session" * description: "Payment Sessions are created when a Customer initilizes the checkout flow, and can be used to hold the state of a payment flow. Each Payment Session is controlled by a Payment Provider, who is responsible for the communication with external payment services. Authorized Payment Sessions will eventually get promoted to Payments to indicate that they are authorized for capture/refunds/etc." * x-resourceId: payment_session + * required: + * - cart_id + * - provider_id + * - status * properties: * id: - * description: "The id of the Payment Session. This value will be prefixed with `ps_`." * type: string + * description: The payment session's ID + * example: ps_01G901XNSRM2YS3ASN9H5KG3FZ * cart_id: * description: "The id of the Cart that the Payment Session is created for." * type: string + * example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + * cart: + * description: A cart object. Available if the relation `cart` is expanded. + * type: object * provider_id: * description: "The id of the Payment Provider that is responsible for the Payment Session" * type: string + * example: manual * is_selected: * description: "A flag to indicate if the Payment Session has been selected as the method that will be used to complete the purchase." * type: boolean + * example: true * status: * description: "Indicates the status of the Payment Session. Will default to `pending`, and will eventually become `authorized`. Payment Sessions may have the status of `requires_more` to indicate that further actions are to be completed by the Customer." * type: string @@ -80,15 +92,23 @@ export class PaymentSession extends BaseEntity { * - requires_more * - error * - canceled + * example: pending * data: * description: "The data required for the Payment Provider to identify, modify and process the Payment Session. Typically this will be an object that holds an id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state." * type: object - * created_at: - * description: "The date with timezone at which the resource was created." + * example: {} + * idempotency_key: * type: string + * description: Randomly generated key used to continue the completion of a cart in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time */ diff --git a/packages/medusa/src/models/payment.ts b/packages/medusa/src/models/payment.ts index 7ce67831c6..607e9a0a40 100644 --- a/packages/medusa/src/models/payment.ts +++ b/packages/medusa/src/models/payment.ts @@ -9,11 +9,11 @@ import { } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" -import { Swap } from "./swap" -import { Currency } from "./currency" -import { Cart } from "./cart" -import { Order } from "./order" import { BaseEntity } from "../interfaces/models/base-entity" +import { Cart } from "./cart" +import { Currency } from "./currency" +import { Order } from "./order" +import { Swap } from "./swap" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -85,34 +85,61 @@ export class Payment extends BaseEntity { * title: "Payment" * description: "Payments represent an amount authorized with a given payment method, Payments can be captured, canceled or refunded." * x-resourceId: payment + * required: + * - amount + * - currency_code + * - provider_id * properties: * id: - * description: "The id of the Payment. This value will be prefixed with `pay_`." * type: string + * description: The payment's ID + * example: pay_01G2SJNT6DEEWDFNAJ4XWDTHKE * swap_id: - * description: "The id of the Swap that the Payment is used for." - * type: string - * order_id: - * description: "The id of the Order that the Payment is used for." + * description: "The ID of the Swap that the Payment is used for." * type: string + * example: null + * swap: + * description: A swap object. Available if the relation `swap` is expanded. + * type: object * cart_id: * description: "The id of the Cart that the Payment Session is created for." * type: string + * cart: + * description: A cart object. Available if the relation `cart` is expanded. + * type: object + * order_id: + * description: "The ID of the Order that the Payment is used for." + * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + * order: + * description: An order object. Available if the relation `order` is expanded. + * type: object * amount: * description: "The amount that the Payment has been authorized for." * type: integer + * example: 100 * currency_code: * description: "The 3 character ISO currency code that the Payment is completed in." * type: string + * example: usd + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. + * currency: + * description: Available if the relation `currency` is expanded. + * $ref: "#/components/schemas/currency" * amount_refunded: * description: "The amount of the original Payment amount that has been refunded back to the Customer." * type: integer + * example: 0 * provider_id: * description: "The id of the Payment Provider that is responsible for the Payment" * type: string + * example: manual * data: * description: "The data required for the Payment Provider to identify, modify and process the Payment. Typically this will be an object that holds an id to the external payment session, but can be an empty object if the Payment Provider doesn't hold any state." * type: object + * example: {} * captured_at: * description: "The date with timezone at which the Payment was captured." * type: string @@ -121,15 +148,22 @@ export class Payment extends BaseEntity { * description: "The date with timezone at which the Payment was canceled." * type: string * format: date-time - * created_at: - * description: "The date with timezone at which the resource was created." + * idempotency_key: * type: string + * description: Randomly generated key used to continue the completion of a payment in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/price-list.ts b/packages/medusa/src/models/price-list.ts index 86daaa5b96..f3dd85f402 100644 --- a/packages/medusa/src/models/price-list.ts +++ b/packages/medusa/src/models/price-list.ts @@ -6,8 +6,9 @@ import { ManyToMany, OneToMany, } from "typeorm" -import { PriceListStatus, PriceListType } from "../types/price-list" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" +import { PriceListStatus, PriceListType } from "../types/price-list" + import { CustomerGroup } from "./customer-group" import { MoneyAmount } from "./money-amount" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" @@ -68,37 +69,65 @@ export class PriceList extends SoftDeletableEntity { * title: "Price List" * description: "Price Lists represents a set of prices that overrides the default price for one or more product variants." * x-resourceId: price_list + * required: + * - name + * - description * properties: * id: - * description: "The id of the Price List. This value will be prefixed by `pl_`." * type: string + * description: The price list's ID + * example: pl_01G8X3CKJXCG5VXVZ87H9KC09W + * name: + * type: string + * description: The price list's name + * example: VIP Prices + * description: + * type: string + * description: The price list's description + * example: Prices for VIP customers * type: * description: "The type of Price List. This can be one of either `sale` or `override`." * type: string * enum: * - sale * - override + * default: sale + * status: + * description: "The status of the Price List" + * type: string + * enum: + * - active + * - draft + * default: draft * starts_at: * description: "The date with timezone that the Price List starts being valid." - * type: date-time + * type: string + * format: date-time * ends_at: * description: "The date with timezone that the Price List stops being valid." - * type: date-time + * type: string + * format: date-time * customer_groups: - * description: "The Customer Groups that the Price List applies to." + * description: The Customer Groups that the Price List applies to. Available if the relation `customer_groups` is expanded. * type: array * items: - * $ref: "#/components/schemas/customer_group" + * type: object + * description: A customer group object. + * prices: + * description: The Money Amounts that are associated with the Price List. Available if the relation `prices` is expanded. + * type: array + * items: + * $ref: "#/components/schemas/money_amount" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time */ diff --git a/packages/medusa/src/models/product-collection.ts b/packages/medusa/src/models/product-collection.ts index e09a58d978..6cd57df78a 100644 --- a/packages/medusa/src/models/product-collection.ts +++ b/packages/medusa/src/models/product-collection.ts @@ -1,9 +1,9 @@ import { BeforeInsert, Column, Entity, Index, OneToMany } from "typeorm" -import _ from "lodash" +import { DbAwareColumn } from "../utils/db-aware-column" import { Product } from "./product" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" -import { DbAwareColumn } from "../utils/db-aware-column" +import _ from "lodash" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -37,34 +37,41 @@ export class ProductCollection extends SoftDeletableEntity { * title: "Product Collection" * description: "Product Collections represents a group of Products that are related." * x-resourceId: product_collection + * required: + * - title * properties: * id: - * description: "The id of the Product Collection. This value will be prefixed with `pcol_`." * type: string + * description: The product collection's ID + * example: pcol_01F0YESBFAZ0DV6V831JXWH0BG * title: * description: "The title that the Product Collection is identified by." * type: string + * example: Summer Collection * handle: * description: "A unique string that identifies the Product Collection - can for example be used in slug structures." * type: string + * example: summer-collection * products: - * description: "The Products contained in the Product Collection." + * description: The Products contained in the Product Collection. Available if the relation `products` is expanded. * type: array * items: * type: object + * description: A product collection object. * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/product-option-value.ts b/packages/medusa/src/models/product-option-value.ts index bcb37106a4..849a9bda95 100644 --- a/packages/medusa/src/models/product-option-value.ts +++ b/packages/medusa/src/models/product-option-value.ts @@ -6,10 +6,11 @@ import { JoinColumn, ManyToOne, } from "typeorm" + +import { DbAwareColumn } from "../utils/db-aware-column" import { ProductOption } from "./product-option" import { ProductVariant } from "./product-variant" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" -import { DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -49,32 +50,47 @@ export class ProductOptionValue extends SoftDeletableEntity { * title: "Product Option Value" * description: "A value given to a Product Variant's option set. Product Variant have a Product Option Value for each of the Product Options defined on the Product." * x-resourceId: product_option_value + * required: + * - value + * - option_id + * - variant_id * properties: * id: - * description: "The id of the Product Option Value. This value will be prefixed with `optval_`." * type: string + * description: The product option value's ID + * example: optval_01F0YESHR7S6ECD03RF6W12DSJ * value: * description: "The value that the Product Variant has defined for the specific Product Option (e.g. if the Product Option is \"Size\" this value could be \"Small\", \"Medium\" or \"Large\")." * type: string + * example: large * option_id: - * description: "The id of the Product Option that the Product Option Value is defined for." + * description: "The ID of the Product Option that the Product Option Value is defined for." * type: string + * example: opt_01F0YESHQBZVKCEXJ24BS6PCX3 + * option: + * description: Available if the relation `option` is expanded. + * $ref: "#/components/schemas/product_option" * variant_id: - * description: "The id of the Product Variant that the Product Option Value is defined for." + * description: "The ID of the Product Variant that the Product Option Value is defined for." * type: string + * example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 + * variant: + * description: Available if the relation `variant` is expanded. + * $ref: "#/components/schemas/product_variant" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/product-option.ts b/packages/medusa/src/models/product-option.ts index 758d994d98..e81a1da6f8 100644 --- a/packages/medusa/src/models/product-option.ts +++ b/packages/medusa/src/models/product-option.ts @@ -7,10 +7,10 @@ import { OneToMany, } from "typeorm" +import { DbAwareColumn } from "../utils/db-aware-column" import { Product } from "./product" import { ProductOptionValue } from "./product-option-value" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" -import { DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -42,34 +42,44 @@ export class ProductOption extends SoftDeletableEntity { * title: "Product Option" * description: "Product Options define properties that may vary between different variants of a Product. Common Product Options are \"Size\" and \"Color\", but Medusa doesn't limit what Product Options that can be defined." * x-resourceId: product_option + * required: + * - title + * - product_id * properties: * id: - * description: "The id of the Product Option. This value will be prefixed with `opt_`." * type: string + * description: The product option's ID + * example: opt_01F0YESHQBZVKCEXJ24BS6PCX3 * title: * description: "The title that the Product Option is defined by (e.g. \"Size\")." * type: string + * example: Size * values: - * description: "The Product Option Values that are defined for the Product Option." + * description: The Product Option Values that are defined for the Product Option. Available if the relation `values` is expanded. * type: array * items: * $ref: "#/components/schemas/product_option_value" * product_id: - * description: "The id of the Product that the Product Option is defined for." + * description: "The ID of the Product that the Product Option is defined for." * type: string + * example: prod_01G1G5V2MBA328390B5AXJ610F + * product: + * description: A product object. Available if the relation `product` is expanded. + * type: object * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/product-tag.ts b/packages/medusa/src/models/product-tag.ts index 97d0df52ab..ea2066620f 100644 --- a/packages/medusa/src/models/product-tag.ts +++ b/packages/medusa/src/models/product-tag.ts @@ -1,6 +1,7 @@ import { BeforeInsert, Column, Entity } from "typeorm" -import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" + import { DbAwareColumn } from "../utils/db-aware-column" +import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -22,26 +23,31 @@ export class ProductTag extends SoftDeletableEntity { * title: "Product Tag" * description: "Product Tags can be added to Products for easy filtering and grouping." * x-resourceId: product_tag + * required: + * - value * properties: * id: - * description: "The id of the Product Tag. This value will be prefixed with `ptag_`." * type: string + * description: The product tag's ID + * example: ptag_01G8K2MTMG9168F2B70S1TAVK3 * value: - * description: "The value that the Product Tag represents (e.g. \"Pants\")." + * description: "The value that the Product Tag represents" * type: string + * example: Pants * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/product-tax-rate.ts b/packages/medusa/src/models/product-tax-rate.ts index ca8357224b..085ffcc8f9 100644 --- a/packages/medusa/src/models/product-tax-rate.ts +++ b/packages/medusa/src/models/product-tax-rate.ts @@ -1,12 +1,12 @@ import { - Entity, CreateDateColumn, - UpdateDateColumn, - ManyToOne, + Entity, JoinColumn, + ManyToOne, PrimaryColumn, + UpdateDateColumn, } from "typeorm" -import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" +import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" import { Product } from "./product" import { TaxRate } from "./tax-rate" @@ -43,26 +43,34 @@ export class ProductTaxRate { * title: "Product Tax Rate" * description: "Associates a tax rate with a product to indicate that the product is taxed in a certain way" * x-resourceId: product_tax_rate + * required: + * - product_id + * - rate_id * properties: * product_id: - * description: "The id of the Product" + * description: "The ID of the Product" * type: string + * example: prod_01G1G5V2MBA328390B5AXJ610F + * product: + * description: Available if the relation `product` is expanded. + * $ref: "#/components/schemas/product" * rate_id: - * description: "The id of the Tax Rate" + * description: "The ID of the Tax Rate" * type: string + * example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + * tax_rate: + * description: Available if the relation `tax_rate` is expanded. + * $ref: "#/components/schemas/tax_rate" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." - * type: string - * format: date-time - * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/product-type-tax-rate.ts b/packages/medusa/src/models/product-type-tax-rate.ts index d21374c4c8..c99b297452 100644 --- a/packages/medusa/src/models/product-type-tax-rate.ts +++ b/packages/medusa/src/models/product-type-tax-rate.ts @@ -42,26 +42,34 @@ export class ProductTypeTaxRate { * title: "Product Type Tax Rate" * description: "Associates a tax rate with a product type to indicate that the product type is taxed in a certain way" * x-resourceId: product_type_tax_rate + * required: + * - product_type_id + * - rate_id * properties: * product_type_id: - * description: "The id of the Product type" + * description: "The ID of the Product type" * type: string + * example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + * product_type: + * description: Available if the relation `product_type` is expanded. + * $ref: "#/components/schemas/product_type" * rate_id: * description: "The id of the Tax Rate" * type: string + * example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + * tax_rate: + * description: Available if the relation `tax_rate` is expanded. + * $ref: "#/components/schemas/tax_rate" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." - * type: string - * format: date-time - * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/product-type.ts b/packages/medusa/src/models/product-type.ts index 372c59a12f..f8ba32986c 100644 --- a/packages/medusa/src/models/product-type.ts +++ b/packages/medusa/src/models/product-type.ts @@ -1,6 +1,7 @@ import { BeforeInsert, Column, Entity } from "typeorm" -import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" + import { DbAwareColumn } from "../utils/db-aware-column" +import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -22,26 +23,31 @@ export class ProductType extends SoftDeletableEntity { * title: "Product Type" * description: "Product Type can be added to Products for filtering and reporting purposes." * x-resourceId: product_type + * required: + * - value * properties: * id: - * description: "The id of the Product Type. This value will be prefixed with `ptyp_`." * type: string + * description: The product type's ID + * example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A * value: - * description: "The value that the Product Type represents (e.g. \"Clothing\")." + * description: "The value that the Product Type represents." * type: string + * example: Clothing * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/product-variant.ts b/packages/medusa/src/models/product-variant.ts index ff8a6131fc..2045e6c648 100644 --- a/packages/medusa/src/models/product-variant.ts +++ b/packages/medusa/src/models/product-variant.ts @@ -8,11 +8,11 @@ import { OneToMany, } from "typeorm" -import { Product } from "./product" +import { DbAwareColumn } from "../utils/db-aware-column" import { MoneyAmount } from "./money-amount" +import { Product } from "./product" import { ProductOptionValue } from "./product-option-value" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" -import { DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -105,84 +105,114 @@ export class ProductVariant extends SoftDeletableEntity { * title: "Product Variant" * description: "Product Variants represent a Product with a specific set of Product Option configurations. The maximum number of Product Variants that a Product can have is given by the number of available Product Option combinations." * x-resourceId: product_variant + * required: + * - title + * - product_id + * - inventory_quantity * properties: * id: - * description: "The id of the Product Variant. This value will be prefixed with `variant_`." * type: string + * description: The product variant's ID + * example: variant_01G1G5V2MRX2V3PVSR2WXYPFB6 * title: * description: "A title that can be displayed for easy identification of the Product Variant." * type: string + * example: Small * product_id: - * description: "The id of the Product that the Product Variant belongs to." + * description: "The ID of the Product that the Product Variant belongs to." * type: string + * example: prod_01G1G5V2MBA328390B5AXJ610F + * product: + * description: A product object. Available if the relation `product` is expanded. + * type: object * prices: - * description: "The Money Amounts defined for the Product Variant. Each Money Amount represents a price in a given currency or a price in a specific Region." + * description: The Money Amounts defined for the Product Variant. Each Money Amount represents a price in a given currency or a price in a specific Region. Available if the relation `prices` is expanded. * type: array * items: * $ref: "#/components/schemas/money_amount" * sku: * description: "The unique stock keeping unit used to identify the Product Variant. This will usually be a unqiue identifer for the item that is to be shipped, and can be referenced across multiple systems." * type: string + * example: shirt-123 * barcode: * description: "A generic field for a GTIN number that can be used to identify the Product Variant." * type: string + * example: null * ean: * description: "An EAN barcode number that can be used to identify the Product Variant." * type: string + * example: null * upc: * description: "A UPC barcode number that can be used to identify the Product Variant." * type: string + * example: null + * variant_rank: + * description: The ranking of this variant + * type: number + * default: 0 * inventory_quantity: * description: "The current quantity of the item that is stocked." * type: integer + * example: 100 * allow_backorder: * description: "Whether the Product Variant should be purchasable when `inventory_quantity` is 0." * type: boolean + * default: false * manage_inventory: * description: "Whether Medusa should manage inventory for the Product Variant." * type: boolean + * default: true * hs_code: * description: "The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers." * type: string + * example: null * origin_country: * description: "The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers." * type: string + * example: null * mid_code: * description: "The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers." * type: string + * example: null * material: * description: "The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers." * type: string + * example: null * weight: * description: "The weight of the Product Variant. May be used in shipping rate calculations." - * type: string + * type: number + * example: null * height: * description: "The height of the Product Variant. May be used in shipping rate calculations." - * type: string + * type: number + * example: null * width: * description: "The width of the Product Variant. May be used in shipping rate calculations." - * type: string + * type: number + * example: null * length: * description: "The length of the Product Variant. May be used in shipping rate calculations." - * type: string + * type: number + * example: null * options: - * description: "The Product Option Values specified for the Product Variant." + * description: The Product Option Values specified for the Product Variant. Available if the relation `options` is expanded. * type: array * items: * $ref: "#/components/schemas/product_option_value" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/product.ts b/packages/medusa/src/models/product.ts index 08414bfc07..e679bcd122 100644 --- a/packages/medusa/src/models/product.ts +++ b/packages/medusa/src/models/product.ts @@ -1,4 +1,3 @@ -import _ from "lodash" import { BeforeInsert, Column, @@ -10,18 +9,20 @@ import { ManyToOne, OneToMany, } from "typeorm" + import { DbAwareColumn } from "../utils/db-aware-column" +import { FeatureFlagDecorators } from "../utils/feature-flag-decorators" import { Image } from "./image" import { ProductCollection } from "./product-collection" import { ProductOption } from "./product-option" import { ProductTag } from "./product-tag" import { ProductType } from "./product-type" import { ProductVariant } from "./product-variant" +import { SalesChannel } from "./sales-channel" import { ShippingProfile } from "./shipping-profile" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" +import _ from "lodash" import { generateEntityId } from "../utils/generate-entity-id" -import { FeatureFlagDecorators } from "../utils/feature-flag-decorators" -import { SalesChannel } from "./sales-channel" export enum ProductStatus { DRAFT = "draft", @@ -177,99 +178,147 @@ export class Product extends SoftDeletableEntity { * title: "Product" * description: "Products are a grouping of Product Variants that have common properties such as images and descriptions. Products can have multiple options which define the properties that Product Variants differ by." * x-resourceId: product + * required: + * - title + * - profile_id * properties: * id: - * description: "The id of the Product. This value will be prefixed with `prod_`." * type: string + * description: The product's ID + * example: prod_01G1G5V2MBA328390B5AXJ610F * title: * description: "A title that can be displayed for easy identification of the Product." * type: string + * example: Medusa Coffee Mug * subtitle: * description: "An optional subtitle that can be used to further specify the Product." * type: string * description: * description: "A short description of the Product." * type: string + * example: Every programmer's best friend. * handle: * description: "A unique identifier for the Product (e.g. for slug structure)." * type: string + * example: coffee-mug * is_giftcard: * description: "Whether the Product represents a Gift Card. Products that represent Gift Cards will automatically generate a redeemable Gift Card code once they are purchased." * type: boolean - * discountable: - * description: "Whether the Product can be discounted. Discounts will not apply to Line Items of this Product when this flag is set to `false`." - * type: boolean + * default: false + * status: + * description: The status of the product + * type: string + * enum: + * - draft + * - proposed + * - published + * - rejected + * default: draft * images: - * description: "Images of the Product" + * description: Images of the Product. Available if the relation `images` is expanded. * type: array * items: * $ref: "#/components/schemas/image" * thumbnail: * description: "A URL to an image file that can be used to identify the Product." * type: string + * format: uri * options: - * description: "The Product Options that are defined for the Product. Product Variants of the Product will have a unique combination of Product Option Values." + * description: The Product Options that are defined for the Product. Product Variants of the Product will have a unique combination of Product Option Values. Available if the relation `options` is expanded. * type: array * items: * $ref: "#/components/schemas/product_option" * variants: - * description: "The Product Variants that belong to the Product. Each will have a unique combination of Product Option Values." + * description: The Product Variants that belong to the Product. Each will have a unique combination of Product Option Values. Available if the relation `variants` is expanded. * type: array * items: * $ref: "#/components/schemas/product_variant" * profile_id: - * description: "The id of the Shipping Profile that the Product belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products." + * description: "The ID of the Shipping Profile that the Product belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products." * type: string + * example: sp_01G1G5V239ENSZ5MV4JAR737BM + * profile: + * description: Available if the relation `profile` is expanded. + * $ref: "#/components/schemas/shipping_profile" + * weight: + * description: "The weight of the Product Variant. May be used in shipping rate calculations." + * type: number + * example: null + * height: + * description: "The height of the Product Variant. May be used in shipping rate calculations." + * type: number + * example: null + * width: + * description: "The width of the Product Variant. May be used in shipping rate calculations." + * type: number + * example: null + * length: + * description: "The length of the Product Variant. May be used in shipping rate calculations." + * type: number + * example: null * hs_code: * description: "The Harmonized System code of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers." * type: string + * example: null * origin_country: * description: "The country in which the Product Variant was produced. May be used by Fulfillment Providers to pass customs information to shipping carriers." * type: string + * example: null * mid_code: * description: "The Manufacturers Identification code that identifies the manufacturer of the Product Variant. May be used by Fulfillment Providers to pass customs information to shipping carriers." * type: string + * example: null * material: * description: "The material and composition that the Product Variant is made of, May be used by Fulfillment Providers to pass customs information to shipping carriers." * type: string - * weight: - * description: "The weight of the Product Variant. May be used in shipping rate calculations." + * example: null + * collection_id: * type: string - * height: - * description: "The height of the Product Variant. May be used in shipping rate calculations." - * type: string - * width: - * description: "The width of the Product Variant. May be used in shipping rate calculations." - * type: string - * length: - * description: "The length of the Product Variant. May be used in shipping rate calculations." - * type: string - * type: - * description: "The Product Type of the Product (e.g. \"Clothing\")" - * anyOf: - * - $ref: "#/components/schemas/product_type" + * description: The Product Collection that the Product belongs to + * example: pcol_01F0YESBFAZ0DV6V831JXWH0BG * collection: - * description: "The Product Collection that the Product belongs to (e.g. \"SS20\")" - * anyOf: - * - $ref: "#/components/schemas/product_collection" + * description: A product collection object. Available if the relation `collection` is expanded. + * type: object + * type_id: + * type: string + * description: The Product type that the Product belongs to + * example: ptyp_01G8X9A7ESKAJXG2H0E6F1MW7A + * type: + * description: Available if the relation `type` is expanded. + * $ref: "#/components/schemas/product_type" * tags: - * description: "The Product Tags assigned to the Product." + * description: The Product Tags assigned to the Product. Available if the relation `tags` is expanded. * type: array * items: * $ref: "#/components/schemas/product_tag" - * created_at: - * description: "The date with timezone at which the resource was created." + * discountable: + * description: "Whether the Product can be discounted. Discounts will not apply to Line Items of this Product when this flag is set to `false`." + * type: boolean + * default: true + * external_id: + * description: The external ID of the product * type: string + * example: null + * sales_channels: + * description: The sales channels the product is associated with. Available if the relation `sales_channels` is expanded. + * type: array + * items: + * type: object + * description: A sales channel object. + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/refund.ts b/packages/medusa/src/models/refund.ts index 293e40ea90..1d50b608b7 100644 --- a/packages/medusa/src/models/refund.ts +++ b/packages/medusa/src/models/refund.ts @@ -1,14 +1,14 @@ import { - Entity, BeforeInsert, Column, + Entity, Index, - ManyToOne, JoinColumn, + ManyToOne, } from "typeorm" + import { BaseEntity } from "../interfaces/models/base-entity" import { DbAwareColumn } from "../utils/db-aware-column" - import { Order } from "./order" import { generateEntityId } from "../utils/generate-entity-id" @@ -56,19 +56,26 @@ export class Refund extends BaseEntity { * title: "Refund" * description: "Refund represent an amount of money transfered back to the Customer for a given reason. Refunds may occur in relation to Returns, Swaps and Claims, but can also be initiated by a store operator." * x-resourceId: refund + * required: + * - order_id + * - amount * properties: * id: - * description: "The id of the Refund. This value will be prefixed with `ref_`." * type: string + * description: The refund's ID + * example: ref_01G1G5V27GYX4QXNARRQCW1N8T * order_id: * description: "The id of the Order that the Refund is related to." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK * amount: * description: "The amount that has be refunded to the Customer." * type: integer + * example: 1000 * note: * description: "An optional note explaining why the amount was refunded." * type: string + * example: I didn't like it * reason: * description: "The reason given for the Refund, will automatically be set when processed as part of a Swap, Claim or Return." * type: string @@ -78,15 +85,27 @@ export class Refund extends BaseEntity { * - swap * - claim * - other - * created_at: - * description: "The date with timezone at which the resource was created." + * example: return + * idempotency_key: * type: string + * description: Randomly generated key used to continue the completion of the refund in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * deleted_at: + * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/region.ts b/packages/medusa/src/models/region.ts index 956f8e3c39..af65466600 100644 --- a/packages/medusa/src/models/region.ts +++ b/packages/medusa/src/models/region.ts @@ -9,14 +9,14 @@ import { OneToMany, } from "typeorm" -import { Currency } from "./currency" -import { TaxRate } from "./tax-rate" import { Country } from "./country" -import { PaymentProvider } from "./payment-provider" -import { FulfillmentProvider } from "./fulfillment-provider" -import { TaxProvider } from "./tax-provider" -import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" +import { Currency } from "./currency" import { DbAwareColumn } from "../utils/db-aware-column" +import { FulfillmentProvider } from "./fulfillment-provider" +import { PaymentProvider } from "./payment-provider" +import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" +import { TaxProvider } from "./tax-provider" +import { TaxRate } from "./tax-rate" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -104,50 +104,86 @@ export class Region extends SoftDeletableEntity { * title: "Region" * description: "Regions hold settings for how Customers in a given geographical location shop. The is, for example, where currencies and tax rates are defined. A Region can consist of multiple countries to accomodate common shopping settings across countries." * x-resourceId: region + * required: + * - name + * - currency_code + * - tax_rate * properties: * id: - * description: "The id of the Region. This value will be prefixed with `reg_`." * type: string + * description: The cart's ID + * example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G * name: * description: "The name of the region as displayed to the customer. If the Region only has one country it is recommended to write the country name." * type: string + * example: EU * currency_code: - * description: "The 3 character ISO currency code that Customers will shop in in the Region." + * description: "The 3 character currency code that the Region uses." * type: string + * example: usd + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. + * currency: + * description: Available if the relation `currency` is expanded. + * $ref: "#/components/schemas/currency" * tax_rate: * description: "The tax rate that should be charged on purchases in the Region." * type: number + * example: 0 + * tax_rates: + * description: The tax rates that are included in the Region. Available if the relation `tax_rates` is expanded. + * type: array + * items: + * $ref: "#/components/schemas/tax_rate" * tax_code: * description: "The tax code used on purchases in the Region. This may be used by other systems for accounting purposes." * type: string + * example: null + * gift_cards_taxable: + * description: Whether the gift cards are taxable or not in this region. + * type: boolean + * default: true + * automatic_taxes: + * description: Whether taxes should be automated in this region. + * type: boolean + * default: true * countries: - * description: "The countries that are included in the Region." + * description: The countries that are included in the Region. Available if the relation `countries` is expanded. * type: array * items: * $ref: "#/components/schemas/country" + * tax_provider_id: + * type: string + * description: The ID of the tax provider used in this region + * example: null + * tax_provider: + * description: Available if the relation `tax_provider` is expanded. + * $ref: "#/components/schemas/tax_provider" * payment_providers: - * description: "The Payment Providers that can be used to process Payments in the Region." + * description: The Payment Providers that can be used to process Payments in the Region. Available if the relation `payment_providers` is expanded. * type: array * items: * $ref: "#/components/schemas/payment_provider" * fulfillment_providers: - * description: "The Fulfillment Providers that can be used to fulfill orders in the Region." + * description: The Fulfillment Providers that can be used to fulfill orders in the Region. Available if the relation `payment_providers` is expanded. * type: array * items: * $ref: "#/components/schemas/fulfillment_provider" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/return-item.ts b/packages/medusa/src/models/return-item.ts index 607521b6b7..4f77b7f773 100644 --- a/packages/medusa/src/models/return-item.ts +++ b/packages/medusa/src/models/return-item.ts @@ -1,9 +1,9 @@ import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm" -import { DbAwareColumn } from "../utils/db-aware-column" -import { ReturnReason } from "./return-reason" -import { Return } from "./return" +import { DbAwareColumn } from "../utils/db-aware-column" import { LineItem } from "./line-item" +import { Return } from "./return" +import { ReturnReason } from "./return-reason" @Entity() export class ReturnItem { @@ -52,37 +52,53 @@ export class ReturnItem { * title: "Return Item" * description: "Correlates a Line Item with a Return, keeping track of the quantity of the Line Item that will be returned." * x-resourceId: return_item + * required: + * - return_id + * - item_id * properties: * return_id: * description: "The id of the Return that the Return Item belongs to." * type: string + * example: ret_01F0YET7XPCMF8RZ0Y151NZV2V + * return_order: + * description: Available if the relation `return_order` is expanded. + * $ref: "#/components/schemas/return" * item_id: * description: "The id of the Line Item that the Return Item references." * type: string + * example: item_01G8ZC9GWT6B2GP5FSXRXNFNGN * item: - * description: "The Line Item that the Return Item references." - * anyOf: - * - $ref: "#/components/schemas/line_item" + * description: Available if the relation `item` is expanded. + * $ref: "#/components/schemas/line_item" * quantity: * description: "The quantity of the Line Item that is included in the Return." * type: integer + * example: 1 * is_requested: * description: "Whether the Return Item was requested initially or received unexpectedly in the warehouse." * type: boolean + * default: true * requested_quantity: * description: "The quantity that was originally requested to be returned." * type: integer + * example: 1 * recieved_quantity: * description: "The quantity that was received in the warehouse." * type: integer + * example: 1 + * reason_id: + * description: The ID of the reason for returning the item. + * type: string + * example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ * reason: - * description: "The reason for returning the item." - * anyOf: - * - $ref: "#/components/schemas/return_reason" + * description: Available if the relation `reason` is expanded. + * $ref: "#/components/schemas/return_reason" * note: * description: "An optional note with additional details about the Return." * type: string + * example: I didn't like it. * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/return-reason.ts b/packages/medusa/src/models/return-reason.ts index 9668ddd28b..88597ba284 100644 --- a/packages/medusa/src/models/return-reason.ts +++ b/packages/medusa/src/models/return-reason.ts @@ -7,8 +7,9 @@ import { ManyToOne, OneToMany, } from "typeorm" -import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" + import { DbAwareColumn } from "../utils/db-aware-column" +import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -51,32 +52,50 @@ export class ReturnReason extends SoftDeletableEntity { * title: "Return Reason" * description: "A Reason for why a given product is returned. A Return Reason can be used on Return Items in order to indicate why a Line Item was returned." * x-resourceId: return_reason + * required: + * - value + * - label * properties: * id: - * description: "The id of the Return Reason will start with `rr_`." * type: string + * description: The cart's ID + * example: rr_01G8X82GCCV2KSQHDBHSSAH5TQ * description: * description: "A description of the Reason." * type: string + * example: Items that are damaged * label: * description: "A text that can be displayed to the Customer as a reason." * type: string + * example: Damaged goods * value: * description: "The value to identify the reason by." * type: string - * created_at: - * description: "The date with timezone at which the resource was created." + * example: damaged + * parent_return_reason_id: * type: string + * description: The ID of the parent reason. + * example: null + * parent_return_reason: + * description: Available if the relation `parent_return_reason` is expanded. + * $ref: "#/components/schemas/return_reason" + * return_reason_children: + * description: Available if the relation `return_reason_children` is expanded. + * $ref: "#/components/schemas/return_reason" + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/return.ts b/packages/medusa/src/models/return.ts index c6f25fb385..e4edc35cc4 100644 --- a/packages/medusa/src/models/return.ts +++ b/packages/medusa/src/models/return.ts @@ -10,12 +10,12 @@ import { } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" -import { Order } from "./order" -import { Swap } from "./swap" +import { BaseEntity } from "../interfaces/models/base-entity" import { ClaimOrder } from "./claim-order" +import { Order } from "./order" import { ReturnItem } from "./return-item" import { ShippingMethod } from "./shipping-method" -import { BaseEntity } from "../interfaces/models/base-entity" +import { Swap } from "./swap" import { generateEntityId } from "../utils/generate-entity-id" export enum ReturnStatus { @@ -98,10 +98,13 @@ export class Return extends BaseEntity { * title: "Return" * description: "Return orders hold information about Line Items that a Customer wishes to send back, along with how the items will be returned. Returns can be used as part of a Swap." * x-resourceId: return + * required: + * - refund_amount * properties: * id: - * description: "The id of the Return. This value will be prefixed with `ret_`." * type: string + * description: The return's ID + * example: ret_01F0YET7XPCMF8RZ0Y151NZV2V * status: * description: "Status of the Return." * type: string @@ -109,46 +112,71 @@ export class Return extends BaseEntity { * - requested * - received * - requires_action + * - canceled + * default: requested * items: - * description: "The Return Items that will be shipped back to the warehouse. + * description: The Return Items that will be shipped back to the warehouse. Available if the relation `items` is expanded. * type: array * items: * $ref: "#/components/schemas/return_item" * swap_id: - * description: "The id of the Swap that the Return is a part of." + * description: "The ID of the Swap that the Return is a part of." * type: string + * example: null + * swap: + * description: A swap object. Available if the relation `swap` is expanded. + * type: object * order_id: - * description: "The id of the Order that the Return is made from." + * description: "The ID of the Order that the Return is made from." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + * order: + * description: An order object. Available if the relation `order` is expanded. + * type: object * claim_order_id: - * description: "The id of the Claim that the Return is a part of." + * description: "The ID of the Claim that the Return is a part of." * type: string + * example: null + * claim_order: + * description: A claim order object. Available if the relation `claim_order` is expanded. + * type: object * shipping_method: - * description: "The Shipping Method that will be used to send the Return back. Can be null if the Customer facilitates the return shipment themselves." - * anyOf: - * - $ref: "#/components/schemas/shipping_method" + * description: The Shipping Method that will be used to send the Return back. Can be null if the Customer facilitates the return shipment themselves. Available if the relation `shipping_method` is expanded. + * type: array + * items: + * $ref: "#/components/schemas/shipping_method" * shipping_data: * description: "Data about the return shipment as provided by the Fulfilment Provider that handles the return shipment." * type: object + * example: {} * refund_amount: * description: "The amount that should be refunded as a result of the return." * type: integer + * example: 1000 + * no_notification: + * description: "When set to true, no notification will be sent related to this return." + * type: boolean + * example: false + * idempotency_key: + * type: string + * description: Randomly generated key used to continue the completion of the return in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. * received_at: * description: "The date with timezone at which the return was received." * type: string * format: date-time * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time - * no_notification: - * description: "When set to true, no notification will be sent related to this return." - * type: boolean * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/sales-channel.ts b/packages/medusa/src/models/sales-channel.ts index e4b9cf5f98..7fdaecd984 100644 --- a/packages/medusa/src/models/sales-channel.ts +++ b/packages/medusa/src/models/sales-channel.ts @@ -1,7 +1,7 @@ import { BeforeInsert, Column } from "typeorm" -import { SoftDeletableEntity } from "../interfaces" import { FeatureFlagEntity } from "../utils/feature-flag-decorators" +import { SoftDeletableEntity } from "../interfaces" import { generateEntityId } from "../utils" @FeatureFlagEntity("sales_channels") @@ -20,3 +20,41 @@ export class SalesChannel extends SoftDeletableEntity { this.id = generateEntityId(this.id, "sc") } } + +/** + * @schema sales_channel + * title: "Sales Channel" + * description: "A Sales Channel" + * x-resourceId: sales_channel + * required: + * - name + * properties: + * id: + * type: string + * description: The sales channel's ID + * example: sc_01G8X9A7ESKAJXG2H0E6F1MW7A + * name: + * description: "The name of the sales channel." + * type: string + * example: Market + * description: + * description: "The description of the sales channel." + * type: string + * example: Multi-vendor market + * is_disabled: + * description: "Specify if the sales channel is enabled or disabled." + * type: boolean + * default: false + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." + * format: date-time + * updated_at: + * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * deleted_at: + * type: string + * description: "The date with timezone at which the resource was deleted." + * format: date-time + */ \ No newline at end of file diff --git a/packages/medusa/src/models/shipping-method-tax-line.ts b/packages/medusa/src/models/shipping-method-tax-line.ts index 864f2ac8f0..d25159c6c6 100644 --- a/packages/medusa/src/models/shipping-method-tax-line.ts +++ b/packages/medusa/src/models/shipping-method-tax-line.ts @@ -8,8 +8,8 @@ import { Unique, } from "typeorm" -import { TaxLine } from "./tax-line" import { ShippingMethod } from "./shipping-method" +import { TaxLine } from "./tax-line" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -28,3 +28,50 @@ export class ShippingMethodTaxLine extends TaxLine { this.id = generateEntityId(this.id, "smtl") } } + +/** + * @schema sales_channel_tax_line + * title: "Sales Channel" + * description: "A Sales Channel" + * x-resourceId: sales_channel_tax_line + * required: + * - shipping_method_id + * - rate + * - name + * properties: + * id: + * type: string + * description: The line item tax line's ID + * example: smtl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 + * shipping_method_id: + * type: string + * description: The ID of the line item + * example: sm_01F0YET7DR2E7CYVSDHM593QG2 + * shipping_method: + * description: Available if the relation `shipping_method` is expanded. + * $ref: "#/components/schemas/shipping_method" + * code: + * description: "A code to identify the tax type by" + * type: string + * example: tax01 + * name: + * description: "A human friendly name for the tax" + * type: string + * example: Tax Example + * rate: + * description: "The numeric rate to charge tax by" + * type: number + * example: 10 + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." + * format: date-time + * updated_at: + * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} + */ \ No newline at end of file diff --git a/packages/medusa/src/models/shipping-method.ts b/packages/medusa/src/models/shipping-method.ts index 698a0223b9..9c7ad36d7a 100644 --- a/packages/medusa/src/models/shipping-method.ts +++ b/packages/medusa/src/models/shipping-method.ts @@ -10,15 +10,15 @@ import { OneToOne, PrimaryColumn, } from "typeorm" -import { DbAwareColumn } from "../utils/db-aware-column" -import { ClaimOrder } from "./claim-order" -import { Order } from "./order" import { Cart } from "./cart" -import { Swap } from "./swap" +import { ClaimOrder } from "./claim-order" +import { DbAwareColumn } from "../utils/db-aware-column" +import { Order } from "./order" import { Return } from "./return" -import { ShippingOption } from "./shipping-option" import { ShippingMethodTaxLine } from "./shipping-method-tax-line" +import { ShippingOption } from "./shipping-option" +import { Swap } from "./swap" import { generateEntityId } from "../utils/generate-entity-id" @Check( @@ -100,36 +100,67 @@ export class ShippingMethod { * title: "Shipping Method" * description: "Shipping Methods represent a way in which an Order or Return can be shipped. Shipping Methods are built from a Shipping Option, but may contain additional details, that can be necessary for the Fulfillment Provider to handle the shipment." * x-resourceId: shipping_method + * required: + * - shipping_option_id + * - price * properties: * id: - * description: "The id of the Shipping Method. This value will be prefixed with `sm_`." * type: string + * description: The shipping method's ID + * example: sm_01F0YET7DR2E7CYVSDHM593QG2 * shipping_option_id: * description: "The id of the Shipping Option that the Shipping Method is built from." * type: string + * example: so_01G1G5V27GYX4QXNARRQCW1N8T * shipping_option: - * description: "The Shipping Option that the Shipping Method is built from." - * anyOf: - * - $ref: "#/components/schemas/shipping_option" + * description: Available if the relation `shipping_option` is expanded. + * $ref: "#/components/schemas/shipping_option" * order_id: * description: "The id of the Order that the Shipping Method is used on." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + * order: + * description: An order object. Available if the relation `order` is expanded. + * type: object * return_id: * description: "The id of the Return that the Shipping Method is used on." * type: string + * example: null + * return_order: + * description: A return object. Available if the relation `return_order` is expanded. + * type: object * swap_id: * description: "The id of the Swap that the Shipping Method is used on." * type: string + * example: null + * swap: + * description: A swap object. Available if the relation `swap` is expanded. + * type: object * cart_id: * description: "The id of the Cart that the Shipping Method is used on." * type: string + * example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + * cart: + * description: A cart object. Available if the relation `cart` is expanded. + * type: object * claim_order_id: * description: "The id of the Claim that the Shipping Method is used on." * type: string + * example: null + * claim_order: + * description: A claim order object. Available if the relation `claim_order` is expanded. + * type: object + * tax_lines: + * type: array + * description: Available if the relation `tax_lines` is expanded. + * items: + * $ref: "#/components/schemas/tax_line" * price: * description: "The amount to charge for the Shipping Method. The currency of the price is defined by the Region that the Order that the Shipping Method belongs to is a part of." * type: integer + * example: 200 * data: * description: "Additional data that the Fulfillment Provider needs to fulfill the shipment. This is used in combination with the Shipping Options data, and may contain information such as a drop point id." * type: object + * example: {} */ diff --git a/packages/medusa/src/models/shipping-option-requirement.ts b/packages/medusa/src/models/shipping-option-requirement.ts index 087db3ec59..7c32ac4c95 100644 --- a/packages/medusa/src/models/shipping-option-requirement.ts +++ b/packages/medusa/src/models/shipping-option-requirement.ts @@ -51,20 +51,35 @@ export class ShippingOptionRequirement { * title: "Shipping Option Requirement" * description: "A requirement that a Cart must satisfy for the Shipping Option to be available to the Cart." * x-resourceId: shipping_option_requirement + * required: + * - shipping_option_id + * - type + * - amount * properties: * id: - * description: "The id of the Shipping Option Requirement. This value will be prefixed with `sor_`." * type: string + * description: The shipping option requirement's ID + * example: sor_01G1G5V29AB4CTNDRFSRWSRKWD * shipping_option_id: - * description: "The id of the Shipping Option that the Shipping Option Requirement belongs to." + * description: "The id of the Shipping Option that the hipping option requirement belongs to" * type: string + * example: so_01G1G5V27GYX4QXNARRQCW1N8T + * shipping_option: + * description: Available if the relation `shipping_option` is expanded. + * $ref: "#/components/schemas/shipping_option" * type: * description: "The type of the requirement, this defines how the value will be compared to the Cart's total. `min_subtotal` requirements define the minimum subtotal that is needed for the Shipping Option to be available, while the `max_subtotal` defines the maximum subtotal that the Cart can have for the Shipping Option to be available." * type: string * enum: * - min_subtotal * - max_subtotal + * example: min_subtotal * amount: * description: "The amount to compare the Cart subtotal to." * type: integer + * example: 100 + * deleted_at: + * type: string + * description: "The date with timezone at which the resource was deleted." + * format: date-time */ diff --git a/packages/medusa/src/models/shipping-option.ts b/packages/medusa/src/models/shipping-option.ts index d42ffd2861..dd5f8c563e 100644 --- a/packages/medusa/src/models/shipping-option.ts +++ b/packages/medusa/src/models/shipping-option.ts @@ -8,12 +8,12 @@ import { ManyToOne, OneToMany, } from "typeorm" -import { DbAwareColumn } from "../utils/db-aware-column" -import { ShippingProfile } from "./shipping-profile" -import { Region } from "./region" +import { DbAwareColumn } from "../utils/db-aware-column" import { FulfillmentProvider } from "./fulfillment-provider" +import { Region } from "./region" import { ShippingOptionRequirement } from "./shipping-option-requirement" +import { ShippingProfile } from "./shipping-profile" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @@ -86,59 +86,80 @@ export class ShippingOption extends SoftDeletableEntity { * title: "Shipping Option" * description: "Shipping Options represent a way in which an Order or Return can be shipped. Shipping Options have an associated Fulfillment Provider that will be used when the fulfillment of an Order is initiated. Shipping Options themselves cannot be added to Carts, but serve as a template for Shipping Methods. This distinction makes it possible to customize individual Shipping Methods with additional information." * x-resourceId: shipping_option + * required: + * - name + * - region_id + * - profile_id + * - provider_id + * - price_type * properties: * id: - * description: "The id of the Shipping Option. This value will be prefixed with `so_`." * type: string + * description: The shipping option's ID + * example: so_01G1G5V27GYX4QXNARRQCW1N8T * name: * description: "The name given to the Shipping Option - this may be displayed to the Customer." * type: string + * example: PostFake Standard * region_id: - * description: "The id of the Region that the Shipping Option belongs to." * type: string + * description: The region's ID + * example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G * region: - * description: "The id of the Region that the Shipping Option belongs to." - * anyOf: - * - $ref: "#/components/schemas/region" + * description: A region object. Available if the relation `region` is expanded. + * type: object * profile_id: - * description: "The id of the Shipping Profile that the Shipping Option belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products." + * description: "The ID of the Shipping Profile that the shipping option belongs to. Shipping Profiles have a set of defined Shipping Options that can be used to Fulfill a given set of Products." * type: string + * example: sp_01G1G5V239ENSZ5MV4JAR737BM + * profile: + * description: Available if the relation `profile` is expanded. + * $ref: "#/components/schemas/shipping_profile" * provider_id: * description: "The id of the Fulfillment Provider, that will be used to process Fulfillments from the Shipping Option." * type: string + * example: manual + * provider: + * description: Available if the relation `provider` is expanded. + * $ref: "#/components/schemas/fulfillment_provider" * price_type: * description: "The type of pricing calculation that is used when creatin Shipping Methods from the Shipping Option. Can be `flat_rate` for fixed prices or `calculated` if the Fulfillment Provider can provide price calulations." * type: string * enum: * - flat_rate * - calculated + * example: flat_rate * amount: * description: "The amount to charge for shipping when the Shipping Option price type is `flat_rate`." * type: integer + * example: 200 * is_return: * description: "Flag to indicate if the Shipping Option can be used for Return shipments." * type: boolean + * default: false * requirements: - * description: "The requirements that must be satisfied for the Shipping Option to be available for a Cart." + * description: The requirements that must be satisfied for the Shipping Option to be available for a Cart. Available if the relation `requirements` is expanded. * type: array * items: * $ref: "#/components/schemas/shipping_option_requirement" * data: * description: "The data needed for the Fulfillment Provider to identify the Shipping Option." * type: object + * example: {} * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/shipping-profile.ts b/packages/medusa/src/models/shipping-profile.ts index abc03cd031..6e71743a35 100644 --- a/packages/medusa/src/models/shipping-profile.ts +++ b/packages/medusa/src/models/shipping-profile.ts @@ -1,8 +1,8 @@ import { BeforeInsert, Column, Entity, OneToMany } from "typeorm" -import { DbAwareColumn } from "../utils/db-aware-column" -import { ShippingOption } from "./shipping-option" +import { DbAwareColumn } from "../utils/db-aware-column" import { Product } from "./product" +import { ShippingOption } from "./shipping-option" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @@ -40,13 +40,18 @@ export class ShippingProfile extends SoftDeletableEntity { * title: "Shipping Profile" * description: "Shipping Profiles have a set of defined Shipping Options that can be used to fulfill a given set of Products." * x-resourceId: shipping_profile + * required: + * - name + * - type * properties: * id: - * description: "The id of the Shipping Profile. This value will be prefixed with `sp_`." * type: string + * description: The shipping profile's ID + * example: sp_01G1G5V239ENSZ5MV4JAR737BM * name: * description: "The name given to the Shipping profile - this may be displayed to the Customer." * type: string + * example: Default Shipping Profile * type: * description: "The type of the Shipping Profile, may be `default`, `gift_card` or `custom`." * type: string @@ -54,30 +59,32 @@ export class ShippingProfile extends SoftDeletableEntity { * - default * - gift_card * - custom + * example: default * products: - * description: "The Products that the Shipping Profile defines Shipping Options for." + * description: The Products that the Shipping Profile defines Shipping Options for. Available if the relation `products` is expanded. * type: array * items: - * $ref: "#/components/schemas/product" + * type: object + * description: A product object. * shipping_options: - * description: "The Shipping Options that can be used to fulfill the Products in the Shipping Profile." + * description: The Shipping Options that can be used to fulfill the Products in the Shipping Profile. Available if the relation `shipping_options` is expanded. * type: array * items: - * anyOf: - * - $ref: "#/components/schemas/shipping_option" + * $ref: "#/components/schemas/shipping_option" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/shipping-tax-rate.ts b/packages/medusa/src/models/shipping-tax-rate.ts index 6f8f50838d..cec3394126 100644 --- a/packages/medusa/src/models/shipping-tax-rate.ts +++ b/packages/medusa/src/models/shipping-tax-rate.ts @@ -42,26 +42,34 @@ export class ShippingTaxRate { * title: "Shipping Tax Rate" * description: "Associates a tax rate with a shipping option to indicate that the shipping option is taxed in a certain way" * x-resourceId: shipping_tax_rate + * required: + * - shipping_option_id + * - rate_id * properties: * shipping_option_id: - * description: "The id of the Shipping Option" + * description: "The ID of the Shipping Option" * type: string + * example: so_01G1G5V27GYX4QXNARRQCW1N8T + * shipping_option: + * description: Available if the relation `shipping_option` is expanded. + * $ref: "#/components/schemas/shipping_option" * rate_id: - * description: "The id of the Tax Rate" + * description: "The ID of the Tax Rate" * type: string + * example: txr_01G8XDBAWKBHHJRKH0AV02KXBR + * tax_rate: + * description: Available if the relation `tax_rate` is expanded. + * $ref: "#/components/schemas/tax_rate" * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." - * type: string - * format: date-time - * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/staged-job.ts b/packages/medusa/src/models/staged-job.ts index a5887fd544..8b304161fa 100644 --- a/packages/medusa/src/models/staged-job.ts +++ b/packages/medusa/src/models/staged-job.ts @@ -1,4 +1,5 @@ import { BeforeInsert, Column, Entity, PrimaryColumn } from "typeorm" + import { DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils/generate-entity-id" @@ -18,3 +19,25 @@ export class StagedJob { this.id = generateEntityId(this.id, "job") } } + +/** + * @schema staged_job + * title: "Staged Job" + * description: "A staged job resource" + * x-resourceId: staged_job + * required: + * - event_name + * properties: + * id: + * type: string + * description: The staged job's ID + * example: job_01F0YET7BZTARY9MKN1SJ7AAXF + * event_name: + * description: "The name of the event" + * type: string + * example: order.placed + * data: + * description: Data necessary for the job + * type: object + * example: {} + */ \ No newline at end of file diff --git a/packages/medusa/src/models/store.ts b/packages/medusa/src/models/store.ts index d5c4f0cb04..9ef2bed042 100644 --- a/packages/medusa/src/models/store.ts +++ b/packages/medusa/src/models/store.ts @@ -8,17 +8,17 @@ import { ManyToOne, OneToOne, } from "typeorm" -import { BaseEntity } from "../interfaces/models/base-entity" -import { DbAwareColumn } from "../utils/db-aware-column" - -import { Currency } from "./currency" -import { generateEntityId } from "../utils/generate-entity-id" -import { SalesChannel } from "./sales-channel" import { FeatureFlagColumn, FeatureFlagDecorators, } from "../utils/feature-flag-decorators" +import { BaseEntity } from "../interfaces/models/base-entity" +import { Currency } from "./currency" +import { DbAwareColumn } from "../utils/db-aware-column" +import { SalesChannel } from "./sales-channel" +import { generateEntityId } from "../utils/generate-entity-id" + @Entity() export class Store extends BaseEntity { @Column({ default: "Medusa Store" }) @@ -79,31 +79,49 @@ export class Store extends BaseEntity { * x-resourceId: store * properties: * id: - * description: "The id of the Store. This value will be prefixed with `store_`." * type: string + * description: The store's ID + * example: store_01G1G5V21KADXNGH29BJMAJ4B4 * name: * description: "The name of the Store - this may be displayed to the Customer." * type: string + * example: Medusa Store * default_currency_code: - * description: "The default currency code used when no other currency code is specified." + * description: "The 3 character currency code that is the default of the store." * type: string + * example: usd + * externalDocs: + * url: https://en.wikipedia.org/wiki/ISO_4217#Active_codes + * description: See a list of codes. + * default_currency: + * description: Available if the relation `default_currency` is expanded. + * $ref: "#/components/schemas/currency" * currencies: - * description: "The currencies that are enabled for the Store." + * description: The currencies that are enabled for the Store. Available if the relation `currencies` is expanded. * type: array * items: * $ref: "#/components/schemas/currency" * swap_link_template: - * description: "A template to generate Swap links from use {{cart_id}} to include the Swap's `cart_id` in the link." + * description: "A template to generate Swap links from. Use {{cart_id}} to include the Swap's `cart_id` in the link." * type: string - * created_at: - * description: "The date with timezone at which the resource was created." + * example: null + * payment_link_template: + * description: "A template to generate Payment links from. Use {{cart_id}} to include the payment's `cart_id` in the link." * type: string - * format: date-time - * updated_at: - * description: "The date with timezone at which the resource was last updated." + * example: null + * invite_link_template: + * description: "A template to generate Invite links from" * type: string - * format: date-time - * metadata: - * description: "An optional key-value map with additional information." + * example: null + * default_sales_channel_id: + * type: string + * description: The sales channel ID the cart is associated with. + * example: null + * default_sales_channel: + * description: A sales channel object. Available if the relation `default_sales_channel` is expanded. * type: object + * metadata: + * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/swap.ts b/packages/medusa/src/models/swap.ts index bc6c25c3e7..35cbcbf69a 100644 --- a/packages/medusa/src/models/swap.ts +++ b/packages/medusa/src/models/swap.ts @@ -10,13 +10,13 @@ import { } from "typeorm" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" -import { Order } from "./order" -import { Fulfillment } from "./fulfillment" import { Address } from "./address" -import { LineItem } from "./line-item" -import { Return } from "./return" import { Cart } from "./cart" +import { Fulfillment } from "./fulfillment" +import { LineItem } from "./line-item" +import { Order } from "./order" import { Payment } from "./payment" +import { Return } from "./return" import { ShippingMethod } from "./shipping-method" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @@ -122,23 +122,25 @@ export class Swap extends SoftDeletableEntity { * title: "Swap" * description: "Swaps can be created when a Customer wishes to exchange Products that they have purchased to different Products. Swaps consist of a Return of previously purchased Products and a Fulfillment of new Products, the amount paid for the Products being returned will be used towards payment for the new Products. In the case where the amount paid for the the Products being returned exceed the amount to be paid for the new Products, a Refund will be issued for the difference." * x-resourceId: swap + * required: + * - fulfillment_status + * - payment_status + * - order_id * properties: * id: - * description: "The id of the Swap. This value will be prefixed with `swap_`." * type: string + * description: The swap's ID + * example: swap_01F0YET86Y9G92D3YDR9Y6V676 * fulfillment_status: * description: "The status of the Fulfillment of the Swap." * type: string * enum: * - not_fulfilled - * - partially_fulfilled * - fulfilled - * - partially_shipped * - shipped - * - partially_returned - * - returned * - canceled * - requires_action + * example: not_fulfilled * payment_status: * description: "The status of the Payment of the Swap. The payment may either refer to the refund of an amount or the authorization of a new amount." * type: string @@ -146,60 +148,73 @@ export class Swap extends SoftDeletableEntity { * - not_paid * - awaiting * - captured + * - confirmed * - canceled * - difference_refunded + * - partially_refunded + * - refunded * - requires_action + * example: not_paid * order_id: - * description: "The id of the Order where the Line Items to be returned where purchased." + * description: "The ID of the Order where the Line Items to be returned where purchased." * type: string + * example: order_01G8TJSYT9M6AVS5N4EMNFS1EK + * order: + * description: An order object. Available if the relation `order` is expanded. + * type: object * additional_items: - * description: "The new Line Items to ship to the Customer." + * description: The new Line Items to ship to the Customer. Available if the relation `additional_items` is expanded. * type: array * items: * $ref: "#/components/schemas/line_item" * return_order: - * description: "The Return that is issued for the return part of the Swap." - * anyOf: - * - $ref: "#/components/schemas/return" + * description: A return order object. The Return that is issued for the return part of the Swap. Available if the relation `return_order` is expanded. + * type: object * fulfillments: - * description: "The Fulfillments used to send the new Line Items." + * description: The Fulfillments used to send the new Line Items. Available if the relation `fulfillments` is expanded. * type: array * items: * $ref: "#/components/schemas/fulfillment" * payment: - * description: "The Payment authorized when the Swap requires an additional amount to be charged from the Customer." - * anyOf: - * - $ref: "#/components/schemas/payment" + * description: The Payment authorized when the Swap requires an additional amount to be charged from the Customer. Available if the relation `payment` is expanded. + * $ref: "#/components/schemas/payment" * difference_due: * description: "The difference that is paid or refunded as a result of the Swap. May be negative when the amount paid for the returned items exceed the total of the new Products." * type: integer + * example: 0 + * shipping_address_id: + * description: The Address to send the new Line Items to - in most cases this will be the same as the shipping address on the Order. + * type: string + * example: addr_01G8ZH853YPY9B94857DY91YGW * shipping_address: - * description: "The Address to send the new Line Items to - in most cases this will be the same as the shipping address on the Order." - * anyOf: - * - $ref: "#/components/schemas/address" + * description: Available if the relation `shipping_address` is expanded. + * $ref: "#/components/schemas/address" * shipping_methods: - * description: "The Shipping Methods used to fulfill the addtional items purchased." + * description: The Shipping Methods used to fulfill the addtional items purchased. Available if the relation `shipping_methods` is expanded. * type: array * items: * $ref: "#/components/schemas/shipping_method" * cart_id: * description: "The id of the Cart that the Customer will use to confirm the Swap." * type: string + * example: cart_01G8ZH853Y6TFXWPG5EYE81X63 + * cart: + * description: A cart object. Available if the relation `cart` is expanded. + * type: object * allow_backorder: * description: "If true, swaps can be completed with items out of stock" * type: boolean + * default: false + * idempotency_key: + * type: string + * description: Randomly generated key used to continue the completion of the swap in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. * confirmed_at: * description: "The date with timezone at which the Swap was confirmed by the Customer." * type: string * format: date-time - * created_at: - * description: "The date with timezone at which the resource was created." - * type: string - * format: date-time - * updated_at: - * description: "The date with timezone at which the resource was last updated." - * type: string - * format: date-time * canceled_at: * description: "The date with timezone at which the Swap was canceled." * type: string @@ -207,7 +222,21 @@ export class Swap extends SoftDeletableEntity { * no_notification: * description: "If set to true, no notification will be sent related to this swap" * type: boolean + * example: false + * created_at: + * type: string + * description: "The date with timezone at which the resource was created." + * format: date-time + * updated_at: + * type: string + * description: "The date with timezone at which the resource was updated." + * format: date-time + * deleted_at: + * type: string + * description: "The date with timezone at which the resource was deleted." + * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/tax-line.ts b/packages/medusa/src/models/tax-line.ts index 410a40f8f8..d39bd1d3b6 100644 --- a/packages/medusa/src/models/tax-line.ts +++ b/packages/medusa/src/models/tax-line.ts @@ -1,5 +1,5 @@ -import { Column } from "typeorm" import { BaseEntity } from "../interfaces/models/base-entity" +import { Column } from "typeorm" import { DbAwareColumn } from "../utils/db-aware-column" export class TaxLine extends BaseEntity { @@ -21,28 +21,36 @@ export class TaxLine extends BaseEntity { * title: "Tax Line" * description: "Line item that specifies an amount of tax to add to a line item." * x-resourceId: tax_line + * required: + * - rate + * - name * properties: * id: - * description: "The id of the Tax Line. This value will be prefixed by `tl_`." * type: string + * description: The tax line's ID + * example: tl_01G1G5V2DRX1SK6NQQ8VVX4HQ8 * code: * description: "A code to identify the tax type by" * type: string + * example: tax01 * name: * description: "A human friendly name for the tax" * type: string + * example: Tax Example * rate: * description: "The numeric rate to charge tax by" * type: number + * example: 10 * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/tax-provider.ts b/packages/medusa/src/models/tax-provider.ts index 538ebea35f..14c0f20aa2 100644 --- a/packages/medusa/src/models/tax-provider.ts +++ b/packages/medusa/src/models/tax-provider.ts @@ -18,7 +18,9 @@ export class TaxProvider { * id: * description: "The id of the tax provider as given by the plugin." * type: string + * example: manual * is_installed: * description: "Whether the plugin is installed in the current version. Plugins that are no longer installed are not deleted by will have this field set to `false`." * type: boolean + * default: true */ diff --git a/packages/medusa/src/models/tax-rate.ts b/packages/medusa/src/models/tax-rate.ts index c822c06167..83b6576fed 100644 --- a/packages/medusa/src/models/tax-rate.ts +++ b/packages/medusa/src/models/tax-rate.ts @@ -7,13 +7,13 @@ import { ManyToMany, ManyToOne, } from "typeorm" -import { DbAwareColumn } from "../utils/db-aware-column" -import { Region } from "./region" +import { BaseEntity } from "../interfaces/models/base-entity" +import { DbAwareColumn } from "../utils/db-aware-column" import { Product } from "./product" import { ProductType } from "./product-type" +import { Region } from "./region" import { ShippingOption } from "./shipping-option" -import { BaseEntity } from "../interfaces/models/base-entity" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -95,34 +95,73 @@ export class TaxRate extends BaseEntity { * title: "Tax Rate" * description: "A Tax Rate can be used to associate a certain rate to charge on products within a given Region" * x-resourceId: line_item + * required: + * - name + * - region_id * properties: * id: - * description: "The id of the Tax Rate. This value will be prefixed by `txr_`." * type: string + * description: The tax rate's ID + * example: txr_01G8XDBAWKBHHJRKH0AV02KXBR * rate: * description: "The numeric rate to charge" * type: number + * example: 10 * code: * description: "A code to identify the tax type by" * type: string + * example: tax01 * name: * description: "A human friendly name for the tax" * type: string + * example: Tax Example * region_id: + * type: string * description: "The id of the Region that the rate belongs to" - * type: string + * example: reg_01G1G5V26T9H8Y0M4JNE3YGA4G + * region: + * description: A region object. Available if the relation `region` is expanded. + * type: object + * products: + * type: array + * description: The products that belong to this tax rate. Available if the relation `products` is expanded. + * items: + * type: object + * description: A product object. + * product_types: + * type: array + * description: The product types that belong to this tax rate. Available if the relation `product_types` is expanded. + * items: + * type: object + * description: A product type object. + * shipping_options: + * type: array + * description: The shipping options that belong to this tax rate. Available if the relation `shipping_options` is expanded. + * items: + * type: object + * description: A shipping option object. + * product_count: + * description: "The count of products" + * type: integer + * example: null + * product_type_count: + * description: "The count of product types" + * type: integer + * example: null + * shipping_option_count: + * description: "The count of shipping options" + * type: integer + * example: null * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object - * refundable: - * description: "The amount that can be refunded from the given Line Item. Takes taxes and discounts into consideration." - * type: integer + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/tracking-link.ts b/packages/medusa/src/models/tracking-link.ts index 3996ad42c7..53b7372df9 100644 --- a/packages/medusa/src/models/tracking-link.ts +++ b/packages/medusa/src/models/tracking-link.ts @@ -1,8 +1,8 @@ import { BeforeInsert, Column, Entity, JoinColumn, ManyToOne } from "typeorm" +import { DbAwareColumn } from "../utils/db-aware-column" import { Fulfillment } from "./fulfillment" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" -import { DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils/generate-entity-id" @Entity() @@ -37,32 +37,49 @@ export class TrackingLink extends SoftDeletableEntity { * title: "Tracking Link" * description: "Tracking Link holds information about tracking numbers for a Fulfillment. Tracking Links can optionally contain a URL that can be visited to see the status of the shipment." * x-resourceId: tracking_link + * required: + * - tracking_number + * - fulfillment_id * properties: * id: - * description: "The id of the Tracking Link. This value will be prefixed with `tlink_`." * type: string + * description: The tracking link's ID + * example: tlink_01G8ZH853Y6TFXWPG5EYE81X63 * url: * description: "The URL at which the status of the shipment can be tracked." * type: string + * format: uri * tracking_number: * description: "The tracking number given by the shipping carrier." * type: string + * format: RH370168054CN * fulfillment_id: + * type: string * description: "The id of the Fulfillment that the Tracking Link references." + * example: ful_01G8ZRTMQCA76TXNAT81KPJZRF + * fulfillment: + * description: Available if the relation `fulfillment` is expanded. + * $ref: "#/components/schemas/fulfillment" + * idempotency_key: * type: string + * description: Randomly generated key used to continue the completion of a process in case of failure. + * externalDocs: + * url: https://docs.medusajs.com/advanced/backend/payment/overview#idempotency-key + * description: Learn more how to use the idempotency key. * created_at: - * description: "The date with timezone at which the resource was created." * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: - * description: "The date with timezone at which the resource was last updated." * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: - * description: "The date with timezone at which the resource was deleted." * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: - * description: "An optional key-value map with additional information." * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/packages/medusa/src/models/user.ts b/packages/medusa/src/models/user.ts index 110c04acd0..5473352734 100644 --- a/packages/medusa/src/models/user.ts +++ b/packages/medusa/src/models/user.ts @@ -1,4 +1,5 @@ import { BeforeInsert, Column, Entity, Index } from "typeorm" + import { DbAwareColumn } from "../utils/db-aware-column" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity" import { generateEntityId } from "../utils/generate-entity-id" @@ -49,28 +50,43 @@ export class User extends SoftDeletableEntity { * title: "User" * description: "Represents a User who can manage store settings." * x-resourceId: user + * required: + * - email * properties: * id: - * description: "The unique id of the User. This will be prefixed with `usr_`" * type: string + * description: The user's ID + * example: usr_01G1G5V26F5TB3GPAPNJ8X1S3V * email: * description: "The email of the User" * type: string + * format: email * first_name: + * description: "The first name of the User" * type: string + * example: Levi * last_name: - * description: "The Customer's billing address." - * anyOf: - * - $ref: "#/components/schemas/address" + * description: "The last name of the User" + * type: string + * example: Bogan + * api_token: + * description: An API token associated with the user. + * type: string + * example: null * created_at: * type: string + * description: "The date with timezone at which the resource was created." * format: date-time * updated_at: * type: string + * description: "The date with timezone at which the resource was updated." * format: date-time * deleted_at: * type: string + * description: "The date with timezone at which the resource was deleted." * format: date-time * metadata: * type: object + * description: An optional key-value map with additional details + * example: {car: "white"} */ diff --git a/scripts/build-openapi.js b/scripts/build-openapi.js index 0fe688f567..171d79dec0 100755 --- a/scripts/build-openapi.js +++ b/scripts/build-openapi.js @@ -3,6 +3,7 @@ const fs = require("fs") const OAS = require("oas-normalize") const swaggerInline = require("swagger-inline") +const { exec } = require("child_process") // Storefront API swaggerInline( @@ -20,6 +21,7 @@ swaggerInline( .catch((err) => { console.log("Error in store") console.error(err) + process.exit(0) }) }) @@ -31,6 +33,12 @@ swaggerInline( } ).then((gen) => { fs.writeFileSync("./docs/api/store-spec3.yaml", gen) + exec("rm -rf docs/api/store/ && yarn run -- redocly split docs/api/store-spec3.yaml --outDir=docs/api/store/", (error, stdout, stderr) => { + if (error) { + throw new Error(`error: ${error.message}`) + } + console.log(`${stderr || stdout}`); + }); }) // Admin API @@ -49,6 +57,7 @@ swaggerInline( .catch((err) => { console.log("Error in admin") console.error(err) + process.exit(0) }) }) @@ -60,4 +69,11 @@ swaggerInline( } ).then((gen) => { fs.writeFileSync("./docs/api/admin-spec3.yaml", gen) + exec("rm -rf docs/api/admin/ && yarn run -- redocly split docs/api/admin-spec3.yaml --outDir=docs/api/admin/", (error, stdout, stderr) => { + if (error) { + throw new Error(`error: ${error.message}`) + } + console.log(`${stderr || stdout}`); + return; + }); }) diff --git a/www/docs/.yarn/install-state.gz b/www/docs/.yarn/install-state.gz index c1440e5ceb610b92134a684150febf4271b649f1..b513dc15e14bdf026ddf9294a7335edcf3ecd48e 100644 GIT binary patch delta 1366258 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�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%0Av8S2#MAApM{>)Vu7ThPJfg?lG?Msc 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ρ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� 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�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

eb{#wiIgflq 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%0D}x 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

~M$f7SO``J>gfU_*(trIkpMLr1=(}_XU;snb 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%0Dp-Pg|W7z#j2 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 WqXY`W&G)?e-ai2$6U0EdJw^aWqgM(5 delta 1207851 zcmV(rK<>Ym{#}Z(RDgs5v;z8h1TUITkN^7LtbhEU z{)d16|NMuu{_!9F><|5~|Mb`Y{vZDR|HvPGKl*R~H-G$#MG*PRU;b|Y>G@Az`?)8XSY5oae3-Gm0btti^Y|Bns` z!GR=gRHwp04nki=ZHID=Y$^K-T5=wEf8(2f$D+4R0{7S;ypr0;4nr$r=j@Z${LS*_ z6JeRPPrH>W95LDS7jXWc6`G?{>cu~)T?<9sZ9 z*xvNoSgZ^E=Aj55UR|Ypob?wdw7dNX&S#$*a^PFcsuf37O>1Zc2RpykbAU|=5CWBd zRLn8J=m)9DIC`}3A#$i8TMIO09JYJs+&Wv_c!tSO(h4vG4-GbTemBx}Bt;Eh%c9xO zqW4VDPLm%P*zSUV-~!>cK`4(tycN1*op!%pd!ag$;Q~Bg0=xe1BRh8j8wk&Zb;p&` z+&Wcq_%xB#+7@c$Whwk_8$eVL5H+TM=3E0m;?+w2u?N~qb9MS(4J5YBeCk^a9bGjm zxQ>hx!zBKrZ6JPh*s>=c|JcC^Vdl*4M#^r^FK;1ac{sHXJD)eT0HIF$vOB&DFDoIS zxvYf?tc~SmyA&-TE7+We|^fp&6Qs-u2$&U?${Tv30vCEGFIML?Sznj;stsu zkXcV0={8>V?H?s7%6Rv33M^Ifm$y_!1;D{MAxQNQ05V@wK5zNE<&9FxqKCk=dD?L> zj#=lqXHr;qv$3PssVylu5sr<`wjY-X8c0eBqLs8~JD&nc(Q+=P)u#>j?aXR9 z$%3rqDg8IypBxxfeC(g;n`0P^3p}-CE7>4n5m*CPPwfPTKdSr`HgTxg!cEA^y?|tL zx}Rd5#?L{g()K=eUuS3g`{_XN8rizUmHbx`QO*hYcgk2t;zJhLNSoJxg@89^J7c|O zkB+%Ng5FHtOR!01y!WN1L*BcvDPgfK5R;p| zmxZ@J)E~}{gN+EUDov+$gRY% zPg_xiF3r_h$*Q8@O5(`zemZrHR1S(F(f}+jM@P#~HO=4IEmiJ+0$2x39+ClhLNC$c zMU;&x1mK64eyW1M1o^-#)e`iz5=zqeIzh+}V2BKt*lRpa`wk$Edm&6kHy>i97L_ft zsa_kD4nN~+o*K18M2yxWu|O4)@S_@!<#oGZmLtxS!XME<;^u>G36N<2~74&5-y<=%c)XJ z?g0L(-3Z$?6Qx`0Ua)+#jjtw;Fw$-p-sQ&t(};x83vbSSoyLVxo%jNYyFUm?L!`}N z+p0!ahdRn)BavVQfGr3rH1Q))3`;jE%MzT`0e>I$5HBF+~_)4Gf5Oh?CK^5;yj zM$H8PUKZJkc7b32`10yudd=l{ISFeinZ;qcmZBYr`AYS6RwO$obWD27V|mV-n5})8 zeps6@oa}p@klUjQpK88Nr2*)c7fwn^lX-b%S^psd*9l*X$7hN@hcW`gQ5-dnK$Yaj z9hV@;iz*m@V%e%_CcDu=&EeB-V&PwX?RBwY9f9^*jtw_hBm7Rn>_f0ydZ9Re0W>es z(Z;}TVEa5~$_NaY!I4HHz-(TR@E{R9;SCcT>u}IBnY;6vXHn;p*M5n+P?g$kzE#Hf z;Sk4%wOZLuNP<@pr~zIc)s{}^!3vFzh+yIy!9<6D2)N6qOu>?F4MH1ddpydZY0F2t zkk?e5BHQqmjTLPg@f|RV&E)J@G8hq>*!O%B{{%=d+$md4E8?t^jbA}tO=UJ_Y$esL zkl#GYb(1vx2>BahFTsKll*#LG9zuC_DRbt)KZC&OFc(X3z@O8k4W5rM?75^0L;x(}ftiDrX(#lR8$gxsjYV)3OMd zRawgOnM3Ke62PL<5~Eh+gmE|v03teV({%+p%Tj|w3k$?h)$8gksn;^E8bg(D1}0wO zpfP$n?+00yC3bz$)hJlbkG4mduMHB`u9u8|#!=yX>0%Q%g!H>u;7#ay5>*CcNnkd| zZls`TIuJ~^uCw(j%XapDStTdUIfjb=Z(7FPHH?l+>G6l$XSM5dS`lY8n;Z#WAkyQQ z9;anG^ho&TD1g%4AH*RZF_I+M8HBUUD!kv^bo~s@tmd*!j#!HD$CJanMs1h%sQC$h zcfF>mq7>Q}d>!YuyI22?Ra2I~zJqkW*oLF`*ZXGwA+dI8_Yibte~i z)d6fpSI7hntQDSKRi5KC>QfP4h(v*ZYAr{ftu_J`;9-Qm1Qla_h>i+suQFmMUz((oo#&7Jb^IOeFY|?z=wk>_?V-z8#;0Q(L2p)FL6e^|btiT!9t~QH z(@3(%*S*bw;frInjeE-!*qW+4k#gORM^lRKWMx}xB;32VBIRqWIITcC**Sax~zFgJn)Y zP=n4bs}No5w4L;Sn1G&z7szKH=O~WK1Q7fXpGV&J3tGNkiNS?{bJXE|XK=VHy{~+1 z5(utjl+ZfCu)g#S^j3OdP2EJruY58`s270Tm{K@hj{Z9)1wNCMvq79P5_2@5z~UQP zj8S32xf34A?fBRGJ;Fc0u77$b`~_VH;VpgWSyV!97N8V=fKQJGEPhwp1Z;77K&T|a z37rf1qqE&%*b2O4v4X>!w$i=8^D61=-X|~TzIY|mOz9?k1)IdvL0X#=dZ4pwR-BE^ zZ7EBKm#uMqsydPpbsQ{*n7xWt>sqELrGC(W9dbc!!L!9@U{@3iPf_nF`^0q2f(-4*Q*J8 zI(sk;(M_B4m$RRLjdC*!LA~))!fe~J0-4d>p7Z=& zT^+vPcfY=Qk^`7xvEj|Oc(>xkTh&Cw;Q~mZTf2yN95Z2Yrjt8&YlEb5L{^4yauknB zm4r0|0IOEqJrIjQJS9xAGqpJ+3Vzs8hZSfJY~(-J9kQHgx=x2YumWfX6$0}&nu2b3p*10v&mZqcS5%=_xR@JYVx z$g6iT;6)O^#x~T~xY+O1H+VLQ=c{N|K87s4 zEkOudRa3T=8r-Xsp`dYM{%AkuSt?dIsFh2FmMt4wyFGEA^RhENz?m*^(*R28>vCTO z&ld2!jt*yGe=q6Stc2yz_E*7h&%yw9&b(Z&@mdjYEyZ7A00iik9-)ixr)8%96OlxJ z^CLnB(NUdwp&|Qz^3DJfV#iFRf^-_TR+Z6#foW1o<{STod$5W zuW6~G6%s&*cnkfRyr2RGvvGn9Ts2})8yBMBozwG~M7+*>Wi3PA@L|WqUT0^0nroR) z2XA`SDfpI-efb(G75yRtF4mD{3JrXJcb#~(8d9%55F|K$y>0gdCV1K#9R80T*+Y z$Y~GX_$}Y;v2F`?0pI+oNN#@dNM@|om!er6x$e{JvlEg}V6Dm0VpYHBC~fb5YwX{J zv^7*U&>>j-xUHHA!4NVtyY;>f#81r&VlZB^k8H}j`4olS&|sBUZTq91N+X&X2TJ4- zvf!6rdH<%sG#=nzX#(}%X z*5l)#)rtM1cbNbKZ4GMDO_!0-0v3NPB=M0XlXpbw_ze}+?40C9k)6KDq(W5WNJ0Y1 zvYY`viq$rr=9AGQ|ph?B^>^wzUlT|XD-&+BL!70E#XO3wk?M;__(9ySJX- zB&Viacm;}jL6m$j)-5H5zCh1lG1$N+vHOqu-#;CB?B{VBU*j|3YzJ4Vn*^Vm!&iD+oSVxY_ z4rY9gTTwv-A2g62_bQm3cDId$}+m%h;gD}Qis z_e3PZ$8*_dBrZTJ93DL6Eu;R|mUG}O*7P~Yd>QAwtEJ3SlOcnn#rD&XRzmWYPiOYp z_~Gh)&cF6~Z)MVXi^O4R8z729#gjq>^H*z9%hh|P1z}|82Kgo57rt0@>+@#;*3_C} z8I(GCRXB9$gnbB)ED8b+J^$BxF?J(ZB)yivm+lL5s}P(rOhXf4GL#DknC@&M{ZioA5KsOwj=n)` zoBb}86l|B^0KwHar^VhJ;WNcSpa{mw||323-rfr zuen;iMM=RmAq&a-2tva9)qFYv$MbSY(?m1Dk=Cw1P$Ty{$%U26fxc2;!Wq>a*Q72zBtd}%7 zwv`0JN%UrmCsjJq!Yn`K8Gq3n@hA?yzSc&~k4J-!sm0T`;@@J=C#(6OQ;rus&QmB< zK95QmYDd7vkEZDd9xyp7BY%l#$mF5>oM3099W*kSWa4}N%0rq(59oYGobu zN2#hGW*|e-mi(_E{;?^1LO`rT@Z*$#XS=XO*S0qF4QwHX?GL5V^=@Zp1ieAB z7hqU*Appw1Gx>ofAaARsFA8zs7_`CbRQ$0xN=*hM?z#}5<$p<#wF9R(ur{D!bJ>Wa zWRIh)N!Qb8ZtOwB-gTS>6Ps4^vc}bUI?flp?0X;v(L{eEopWAbpZ0iJEb3$cPzz*Fj{YV&K-KqhE(f0%;tgz#haK7 zFfv&~efivMbI$z{^;_SQ0zyc7w#Qr{0eM_Np0))d&rD@<9}uIvYAwFPb^h=zE5lyhPWa zy;t`x!5#lt!cgImW}%?&9mLj^`E2G~0#;EWS_gEEZ@NCmVm*D12++&c;<)UusL26- z^nXT>SICo-EO5yDxgBNxbmyZg;*@Ny?NT+F%7w_~vv79M$g$@INy z<0cpwXFqrR)J|>pC9A4~cEWOs`c6aD?MEOr=sUqD1zr=QzzOf$lyiwfY;E(((BqqQ z1LCZNKwi)u_m0HJ<>Z@r#f&{5nMdcw&wqoFeJ?KOe){n|>v9v@ee%A;x1KWanz3;T zxV0Viz3RmP41yo_axb4y)Vt*c49ES}O3l{OQ!eG4obCc@D?fkAiBhcpYp1I%7Sczh za~Zgo-6-}Hsl1YuNzIq_E!VU75i;l)JnK4!oim>PYnORnVVcPEA>i!i9EFBt@PAOv zTTX((F3Gt0<{B!Mp|dcj-x5Va-MrNPQE&9Jc>wy|p{jEWx;5kAr4e`E9NIN{Mz}DW zxO-*3MX?vKBB`0opqcSet~C!2v9-~*~b0UF9y7!tOHr5>vzX-01OKCg0c3I-GxlYeT}NOaVtxf1YT(aA}>n1L1&VR0Tn^yBr-?n|EFgN;9H60EKt0 z8ze`Ar^hufcJ9d<_AU8Le1GWFLT`-(0y@ab@otroGjIFaH(!bL#hv69S|pvTR-JTj zyE#due}fd4X^H~G9zV}DYazua*UpF6rHNh@d+`*B2ez=Yf9-M_KqB>P`XGx5FIQPg#litIBNf8&wTVMm8x7(wZEPqRZ4XSY80p&DB zq$*QQ*B(2x)K60?$@|S1NsA}1i$A_&f>qv~^_>Oms^sf#HyBC!0LY#YE9ZtU7k;1% z)VzMf0FAqcqm}Now?14+q61jg$X+PMpKOu^A#{bN`Nwq=x?WR5Pn6`-E3=iJQEA_R=w#BYh4!R~T|uJVlnzd(ef;1&t)<`5`T_Tu;AF}h2qX5+BM%Rbh z6-aqVO*QEQeH&I)vY^C%qs-v^|ESpSD+N(PkYZC>+1)!xp;Y>B5xypZO_M z#NBO@zVG``9@&Jv)u5yF3{i=hcloN7s2SNJa$9-6PjM&b|91d`RTS05VB=wY8D=X zYfZ2J))tm%D2YoM&{9hddhk`{ z52}r;(KW~5)%2B@1(GL%kZ8FcT;+AOOXu0C`16)};&G&oS7+UNnAgq0`nVZI(_`BK zoJmsY#e=#Y?)j^O1a;j9#Lz8}vW-j4lYg?Y2-J`}#;@meJ872hTt0Wzz`4`WxN}vm zyJ}zhcoJLJZ}%!2kZK` z?gOOgz5+pRN*-1iYcQ`;kdVKA5FBCeR0sM+9=F zKIgbmA%(W*U2Vl`s&tAnrwTv*fGS_2>nL#T*c~GN3^yJXN8*0H0NYCyN4|!>#ZgBP ztefO8UVpFJ9cG0hEMrYHN5xUlgzD-5dPjT;3V1F&IpyX?_USmvT zM~)!N0p$U6M+no2oV~Jov^siFsFLyYyBeCr$gd-G+6Or5^<`yLvyFfSm^WTY^(ApsW-P?m%L zxm_yoqg2Wv`BT(7JAXS*iV}Or^Qgj7yXcAcKq{xs@gqnjld|W8sk6dluyVt*;>?b(s#Nz*G0sbUz!A~XooRGg zjU7xag@W=C>}tbTW`laMygqRuuMZFj{v?0e1S1$I>H@R^dVfk>5K~g*OgScQ$#(aN zs64x59lo*K2@<07s+yj1fk6-4;~7@E#Z96S^9Vw=+LzRF|pfG z70?4ZBvpY7Q+_BwgP#XVA&$1oay>aY4HB{q3WCO`hbVX2xx1IP`lPk6KRR+rmC-wa z@>cOL9$R+RYVjgoRriPiPgnX?5guiLn?~fMIqJ>HPk$h~f0+Y=^bCC>4&iAZA#?bG~>FNoHI4C_&udLQQAt0H1t!LSbuL>TtoA0Eo9SSim^R~3nmub%BhZc;C|fjAHoIs*&HhKqK+ zZ>6H>n)m|L7vJ4jsJ&fR`<}RR$naEdT?#C<4!I<|N$HSpQXYUHweY-EBN6V`C~WqL z0=+pH$f`@c)XXaKdFul;4ciruJngYWS)?#GYk#?cveI_6wmE8w!n&glr~)2q?#?+T zBg`R%&)LVK4sxwD`@Tqwn?HOn`9ypvu+`S4{-(y+GUdoj1pT1j+7mwIT5kmy)=61* zQIRh7JujCHDMcKuxWWQj;8aohFDgq;(8~9ZAEPJHA`5VF`F2yjnxj&ezdBVsXV+Z{ zs((7gNVfvlF&4i0H8Hu@Tx$?*6xpEE^5W{ZZH;)erLrJ>6;%DCA_WodCf0Fh-YM1h zQCF8oTu@aaa?M@uP!NYNA7w4qt%DeDCv8Im@Q1s( zNS;+$K3TM2MPBAba8;`=FK3iG{JaF&s(*DDSJdOWbQkAKs?Y&4QbAKx~F}CM5FD(ss?@CghFn~~Y-`1+YO?%8bTal{sKAa{`qe?xl8h^=r zcR8Z_SKOTDa)X7+HhCzEq*it#CsIGF67%R>PD&uq5s!4&YE6~Z^pY$kYZi+tP7vUe zTQ_6dJj4zOBX;5RJE0nNmW z)#YOYH>iO~8N^zb#z=jQ$N8;Y1%KnUOA(KC9Vwm)+~}Uek>48efWwr*rA*|U^-0{% z#jSG+luw22&;IpqAhVUkROCWN;LaPAJsd%DPN#-yq;B5R=Yo3)D>YStT@b3I&bj-E zeM+h*U2-$fsUOcm@f0f4O$boJO7=acPs_%1J`GvE4^Ulo6~Elu19pWZ>wj2W+o69D zxoN*rd8_}T8=7FhL_M19O%k1CA5pm06Rc0Fo5QQ|WIJx2MKbA-H8vlye+76E?cLnq zGi?oU00^5yOiBUTrN9#6Jz~3?=CT5)!-9!IA@}m5IO|{`A_J$I;;5+9)Ed&Fv+oT{2Zt1_&QzP)&NPyoMWUV9d1ZMHmU1vNlE0! z4q=Dbo%sE;X&5QVwc7KT&-J!nrUWf7&Gy8E&8^tj9 zY)j(T8Qk^U{RMqzQVoRug1Tdl*L2=80=aEKI#Q7Ht-(dTO}9>IiQH~i?(#EEC0I?b zcGd>&i7qD*L6a`Y>3@J%_iMkD=5ykA}I_pI~>k(mTI9?o>E$e;IW`MpA^aNm~yUsZOaIkdTp9t^Hj0XX;@ z=cuJ#EJT!3va+Ve*D;l}CX*B#Og4=TEth1E`{7USVg{n7{eRn9$l{g2_fbzO3^8=b z=7n2X6wn#a4FCaNaNi*(;=lyoasmNYd{z=?(wD^VYWs=fMtbKey91lDM1D;Nxn9-Y zfBT5|=|?JZ8-HSGiIimkQ5mS6TB#Js*__4uavQ@s?YqJ^4d8aa?@d+5vAt}%b~k`{ zS%g73DEnNCi_&%Pcz@cy+184t=ShM7175hA^w_uk`i`nhJE699!R`Az;)^N)V0ftk z-tC_$Wo-FD;r7U$040E%DXIch-XUvF8Y08XI&wluZGQ)1;p>b~AE9Z8<_q#RbrzUZ z^HtNhVDvog%L*j{3%lIJOg2&Uf~t6dN{B@>v=e+8UkMrudE|0kL4R2i!;p0)vB!3( zZ8dTjPeXq4$4d)5qeNNbOFk|L5*SD=Qg~Jm7Ke(J^Sb3yQH@gQ^HNCow=B8})Dm5Q z6eO8w34i`dYXqg<+=Sw8y-gyOAd)oCPYInv_~pTB_$dRJdab)vYvP#P?@w)M0_$r5 z9gLnYT{>B};<_dIBD*|53b?dg^q|S5>7b?ldb?3HUCre~A zMXx3&Ten+E#X6{e)oCCf12ix066oXu+h0Exhksi4w7QhT`G+78+h7P!Re;hoivs@ z)XW%^%hIgdi5{uKUqn>NuUaro4RxK05{m&EoX>|K zkDQR6F;_^L0tqUvaY>gd_R}9VD!`+BpMOy5se|I;wx+iV7e`%G9N@ogeB;z{Ogo`| zYRD?J;keB2J{56HjTl+$)3~tKv5847!R66VSnv2Zx+Lq;zkqC%_w|4Rp3i8UY)oI$ z=v*8qF~5AtteY@Fg~MgIU3s3S%jIJ31c;ND9;NwT4$1A#0EILaD!U_ZF8EfmjVDcP0il56B}cI^(#OBw)E$%@IAoZ+f^;=v#xsp_otEMxIEtk zlL62PjM5{IIy!+dB<4FJ(C+*=o_{8tkU)!Rm7u`|d`MlCGgI*qQ4>E_>6Y7KN|(+Z zdLYU)tt`%c9vA4^x*RDi-j7K2n*HY&I}Y($rk~iGtEFF+^@Ri??hR0*t5F8%zKLr9 zqLa7kdOP|VaxP;wW$$4Em&qsc%A39Q3mD%0WfWs~tkufsc*iU0&SDR2$A3+v)=_rI zzt*;$=nR5Uv*zJTrpBY7$asuA)u9Qv{M>3`^^ef#D#v=G*VOmr`g3`eesS`fxeq&^@3i2Vto=UETUkEMD4g z7~lp)k|pOAO7fOw<2guE>#odH-oSRHe{67QR}n9XfWQz>C>}mmV7!Rr;_0?zmefZ8 zqR6}@+8D1$XR4fWHqETbwS*>PG*}#z3*EgQ{)LN5R8M1<5AFgOSn`DE2v>RW#a-!g zb#^@tH@uloj<|xTCgn`cWAZ2o0 zhYM=FrSDU&!E{W5Rl2CEZL#+VF(*S4*G6rTqasYT1k_-(xu(xKTEv;-ZlUD-518JC7tb?Yb>Gy*humWLnn@ zu8S+g;2hq1-kd!?qRyT-7xt8BgW3pbM808bZ}TBT{cl>1iyeCq(zNbfs;W2$sh6ys zt)#R))e&xT-8Gu=4BaUu5NLuSnRB}VSh){HwQnjGO6@Gxbuvv9amP56*b~Lq1vr); z0y^J8>I^|W>7LoTFn3j=W(tXLlx>rBEbbw!T^ON&Qjv~l$9{GPj%a6w0wgn2* zARiD8$z!n@(A|jweh9h}!JNE&iL&_%iGOwjD8+OE1uqu&HmVjB?w2c*b`#CX$W-~4 ztZ;CM<{-YQOiX#=(ehZSiog5&d>pTJLtduY@z`sU4(X=RN~$Gng?@?MxhHkHlwh^5 z&u4TgC~19@q-AvK^W=ZR3MpuR_7tiw2`sqnr&D=dKJnQ`u=)F^5O0{Yw%_WR>;>LP zoQ3OX(6Sw4rQ71t{*XHHTL~Es*UR0%RgOIBL)u``S(x`;{PH1F(%vRIC&IK~o*#ap z*yL8KfP_CZ-~`FYIRqy2%XkDNy04}y*x-66iaIViYE_m(Tf%=heg%Q|)@Y4y^O`C4 zBvB28K9nA(JObOfUF=A_3#rC-QO3mONK*Ib);7MJV!yxgnbb|w4>w|p$Zt}-oh zoQqpl!IdCU16ItMlx&6Mtlg)Mx7rgrM&d%a%|wx%taE?(-4>Oq0w2HWbQSPC62^x# zbuKm0>`EbBFy%QrqxC6F+y9!Fg!q&5t7Ho%Yjz7(%&(@&LBYO`>dbY!m=Nl465CDD z?nhNgxsSDhc9%L6m8GnR>sP$<8{na0!-{^(qe~p`g!;o34MGLEd|4S3jn4^_HzBi$ zIrt_5pYnf5yvhp7E8`f^hcMkV$92Q4>Et#Yp}VDRLXV-2L=L{J&H!!**1h-T?yfML z3L#}BXgrSNJ<6t#taX9{6BM`e6=wzhwl_47i$zQAPm@qNIJ$0Na%SYZ%h9P)i@2wt zvPRXW0pQC`i29HkaL!Px$h?VF-3SL=+D=mv!?J(&3Qj(+`>1WMR9vWlRJV0IK*^m? zvH4WalCp9+IVdh?5D}>~z-{9wvy&XZ?a=7~EAZPSyg3Zur9NidRpgDSQozmlq_vlT zEF{|_%>zVwD}DY^l~Zgu!XdJ`lf%_913z2Ftv<|&7{r@$piZ#(j9XL!j?g$CCDu_$ z+mnAdKW_WV7ZFA)U0D^jLpc(Sz~*K}egZ*#p!wRf9+uc12kg_tn>kd=QsX{P2QA z+x}??a&-+{6vro51$=%0WokQT8{F$lNvPVoRIFM}2(qb=IWbZd5x>LMo?CuMH+}#{weGHz0@j1z;Pi@w|UrP?;{j`d2^`u7I{evGy;c(vblmmWVM!Ur;|* z(7_|@edVUCS69D1Ny{6=;@U2;w`!#t82eU_^J#~C)!Z2^G>&VeV>&d;Z=fx7J;rs@S($lMy1gUL^ufH>KT7YP?G7| z0NIPg1lqd>xJbuS@AD9KyHQn$H|}B<5ODLK#+T8K?QJR}Do5k^O<#aFv^TbuN>&Bfo&T2YvZ_i~ z`II4qp$wZs;oEip(e3*VefNK2v3zQ9Arna!_2ytwY$#AA<(Uuu7S&yJ`*goW`wM<6 zmC8%vBh@cZiy^iPn^jLYjuWFY6%p0CEZr2mro5~i-mp2QT2U{Z=U~W<*8RCjWM!@(Uk&O7kKrvE;HpQUfJ19h^x6cjTIPRpD|kC!sM+0H z`e4oG#yVumKXbV^nRL0iUFewVr#n;Ihbr?ntbr_A~b=sI3HAR22}-ENl6O5Qf*D4p-XlO$N@-*AJTC( zNzKY=$sFUUzp^KLP~d;3tM#`&T#7jo1$w9mzp4uIUgQ=Nz0@$_1Zm(GT$XtcaW8K} zhyi@#v{4n#8qASb|6>lhraolwc6d{^#cRE9B}Tv)b3RsclyILY>r((%`qQ@nz2szF z5l&z;UB#2ub-c$%_(E-FnsQNe15c_N!DCUSZ3~t-)0V72O(1^}waV=wBuKihrK*L; ztyBe;RNQkLTy0a8f{LVbc6*!z<{u*N}DLE=5)h4b%hJNv_#)CZClxyz!bg$v(H+5>NC} zNXT5mP-XX(^p|7E54N}$(sEz{{y}nft@jg4s~$kf;)_VuWBrl5U-ToEvI*+d*{wQ7 zx}4-BhwwzoO-9t2^nQryS5iLqG7>8%D$hgjY(OwcHUWQvlpiiS5CEviFKL*6E@{KB zj$UqwM3;p)YRu3{<`~tSp%mFjQZL-UIupQjhag^ehexxVAyI6T<(0wX(mX#y9$yUa zTm~dzUmdaL)>-=u4V-x(@A!Fq@M|t!_Z7P`1}l|TK=v{zRBd)+Nrj#0c3ExGI5%`8zIE&7`n|4nNnUO{{V11L zr=$bJaV&Y}B?R`LTXMVKnpdvS*F!b$3Tszo?)Cj@?NZeB-#29yA>;t+sP#auL+APJ z=%zd9r9_jfU+>U}`_zXV1Pz%d^EWV-2SMq2Wwn1d1=+%9zG=7HU$VHDt9Txtgj7VL zeLbA!N>s=oG%EU$-8#)?m|@dH6L{T>Znax)X+MoSw<842>~1vIJpperU%l4O92G1NXI{d3eLwQ} z^J;%1&I>3OB1bJTHylD-@td3$P3I~AWf7s#djxjWl07h1?Om2SG8Kf;_kAS3s6IG*D604D8zKR^`dp=h~i9YE-h{el_pbPs7ffd+J;w^uA zAWe$q~+@fbqEut(9 zVha0Pf4Ve_Neq!!Mn%oL)(nH^>!9cbDY%SU9w!J&=%{~+c{$C` zgdt!WMXVakSwp+UT~EHd_3N_8K7Pa1Dunk*9P$ML`lONMsY7)LT z*(zT%gwHHFUd6eBRP+ut91K(-iuJ103myYsNjg+mlRAJJ-UW9qlNMklKQi@3lSMKB zSguS0#_Wm7G@=6J>MHs{0+!_LI$6>&!Qo7|<4LK<-TSWaj|h=l*QEv207n(2*5418Q^$m`NM_{eh7gyxIRdpfGrDW*HZviETRWT`kWiGBC2 zETz7xZs}?n(Vi+f)CGTQFwt^nQ^=%J>RsLB9)9hWb-VJ2WedjwsIfaj0#7+C%=jUEs7pn~1ZZ-;BBOu$biHzUrMw7x)p8KM z#xK#7Ly@Zb7uvGlQEih}RZmf|pBmv+KR4zP$;GNm@~Ey<1OeqZeefEcXq52~TRxS~ zNqp(Jy3Y6gP3v?1HSWUsY1?w1(c{?A&mQ68Bv$>I_|R>ZK;w*i(N~%Ow?(uq|#=$47BJ{ za*{x@gs|!yNoQ6C*ezKboZoRfpkE=J)!k;Y2O)2rN=mDws;*@X8HMlV!#kKb`c$d0 ztJJ(=&^Orf)`CcpA?p55AfZTpmjtPiIq~bY?eFBueKMCxDB3lDhofc*OP?Jdp?8&D z$*)8(SDzAZL*ZA@lCn&)3vCKK#asJn%+*yxCLU-VNGZ`NFl-W4Wnk2O;ZSN>w~pgX zDg;#($#4{PoZv?!_Twy8;Pg-H^UjLx%Mw!yhk8{ech*JZ$E8sfdgsfE%$DyqFCF^ieiT57tq1TW>HL`Ea-ugM=+BIJ{jQyGfsEX8es4VKB&(W!^ z*fo3kd-51RO>}R!6{0?|cHm@i!_-UC0F`{Ajwew<+6UPZ{Q9c-^Swz&3+h&>k!tyT zna>v!I?0f>idJA;e>dHRYUkyLV@gbkr<$eCg4?t72TVun8<|D1SFA*aW(K`Vw&MnpI{Q+%E)s}Q z{Z@SP`f;pk)p#Tjn4gk|} zo3Lmb;XJAE@=lYf1y&$El+*5um*ZV>3gcGW7mm#4nyg$H|H-z)k{%WsCaI`$RQn?@ zPuc1zB&`BVUcvrQ07^mD|H9gaiio@HfJ3}~`rUΞRxa)gY1+coBcbc<=gjW{?7gnJJ1BfV?m$%5R6jN$G?D#+VFgg) zyf>SA&$_g*6e9>{``XQi~NT3lOq!fYtuguY9&PZ^qafi*5EJ%F34 zM+8T^^jd9776FH4r302LJ8JqSL#4U~?Y7r*^Iwn6Ynt&cw3NgV5l9v?NxK{*Tzy+ z#)DABUn!jMn&A`m2Jw3;H2nyW=Nj|#mj|*(9r2^At1|_jkmaNc1^*+V0$iM2y#wU( z{z1&+RT;om*d@u(Hna8vNtYW40~>$crqY{ZTB|Y

a9xbn?Qfx)tThqL==}Z1dX- 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�^*D{L&AUr=s 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ⅈ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%0D2Xd^`F&G2cQG9cp^8!z_qQJ6m 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

oRy&SH6=+ry+1BGxSEQt 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⁡u~|dykZk`8_i-p$ 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 z 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∓^`zK=X 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

k~7fTM4n6C>V%1ww@u!;rqXcM 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 z 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·ZxynKvtdLaYamsS^=@o#n0u4Xp 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%0Dg8VpFUsPT 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%0DFCBPc6Qc%XCKWAk6&;v)0MBX_w|S{JOv#tu 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℘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

&>pAx6N#B9>PDo|I903^=&WQ9meW# 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

-
-
- -

- We are still working on building out our documentation and guides, - but if you are interested in learning more please reach out - we - would love to jump on a call with you and help you get set up! -

-
- {/*
- -
*/} -
-
- ) - ) -} - -export default Banner diff --git a/www/docs/src/components/Banner/banner.module.css b/www/docs/src/components/Banner/banner.module.css deleted file mode 100644 index 1802b91642..0000000000 --- a/www/docs/src/components/Banner/banner.module.css +++ /dev/null @@ -1,18 +0,0 @@ -.bannerContainer { - height: 100%; - padding: 10px 0px; - margin-bottom: 20px; - background-color: var(--ifm-medusa-gray); - border-radius: 5px; -} - -.bannerContainer svg { - max-width: 100px; - margin-left: 15px; -} - -.banner { - display: flex; - flex-direction: row; - justify-content: space-between; -} diff --git a/www/docs/src/components/Banner/index.js b/www/docs/src/components/Banner/index.js deleted file mode 100644 index e70a0aadc3..0000000000 --- a/www/docs/src/components/Banner/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as Banner } from "./Banner" diff --git a/www/docs/src/components/Layout/Layout.js b/www/docs/src/components/Layout/Layout.js index 41199808a8..8fb93152c5 100644 --- a/www/docs/src/components/Layout/Layout.js +++ b/www/docs/src/components/Layout/Layout.js @@ -1,4 +1,5 @@ -import React from "react" +import React, { useEffect } from "react" + import RootLayout from "@theme/Layout" const Layout = ({ children, ...props }) => { diff --git a/www/docs/src/components/Tabs/tabs.module.css b/www/docs/src/components/Tabs/tabs.module.css index 2f7721a777..41e999ef4c 100644 --- a/www/docs/src/components/Tabs/tabs.module.css +++ b/www/docs/src/components/Tabs/tabs.module.css @@ -11,5 +11,4 @@ color: var(--ifm-color-primary); border-bottom: 3px solid var(--ifm-color-primary) !important; font-weight: 500; - transition: ; } diff --git a/www/docs/src/css/custom.css b/www/docs/src/css/custom.css index 8973844eed..3e4f918b06 100644 --- a/www/docs/src/css/custom.css +++ b/www/docs/src/css/custom.css @@ -284,7 +284,7 @@ details summary { cursor: pointer; } -.theme-doc-markdown a:not(.box-link):hover { +[data-theme="dark"] .theme-doc-markdown a.card:hover { color: rgba(255, 255, 255, 0.8); text-decoration: none; } @@ -317,4 +317,13 @@ details summary { max-width: 100%; word-break: break-word; white-space: break-spaces; +} + +/* API Reference Styling */ +html[data-theme="dark"] .redocusaurus .expanded + tr > td > div { + background-color: var(--ifm-medusa-gray); +} + +.redocusaurus a { + color: var(--ifm-link-color) !important; } \ No newline at end of file diff --git a/www/docs/src/theme/DocCard/index.js b/www/docs/src/theme/DocCard/index.js index 99edf4a633..189c81a27f 100644 --- a/www/docs/src/theme/DocCard/index.js +++ b/www/docs/src/theme/DocCard/index.js @@ -9,6 +9,7 @@ import clsx from 'clsx'; import isInternalUrl from '@docusaurus/isInternalUrl'; import styles from './styles.module.css'; import {translate} from '@docusaurus/Translate'; + function CardContainer({href, children}) { return ( { + if (isBrowser) { + + //redocusaurus in dark mode displays styling wrong + //until the issue is resolved, this is a work around to hide + //the bad styling + window.onload = function () { + setLoading(false); + } + + //fallback in case the onload function does not execute + setTimeout(() => { + if (loading) { + setLoading(false); + } + }, 1000) + + function scrollHandler () { + const redocSidebar = document.querySelector('.redocusaurus .menu-content'); + const navbar = document.querySelector('.navbar'); + if (!redocSidebar || !navbar) { + return; + } + + let offset = navbar.clientHeight; + for (let [_, className] of navbar.classList.entries()) { + if (className.indexOf('navbarHidden') !== -1) { + offset = 0; + break; + } + } + + redocSidebar.style.top = `${offset}px` + } + + window.addEventListener('scroll', scrollHandler); + + return () => { + window.removeEventListener('scroll', scrollHandler); + } + } + }, [isBrowser]) + + return ( +
+ +
+ ); +} diff --git a/www/docs/src/theme/SearchPage/index.js b/www/docs/src/theme/SearchPage/index.js index 20bc1d0e29..512eda54de 100644 --- a/www/docs/src/theme/SearchPage/index.js +++ b/www/docs/src/theme/SearchPage/index.js @@ -22,6 +22,7 @@ import clsx from 'clsx'; import styles from './styles.module.css'; import {useAllDocsData} from '@docusaurus/plugin-content-docs/client'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; + // Very simple pluralization: probably good enough for now function useDocumentsFoundPlural() { const {selectMessage} = usePluralForm(); diff --git a/www/docs/yarn.lock b/www/docs/yarn.lock index 6a64ed6a82..6d70c77115 100644 --- a/www/docs/yarn.lock +++ b/www/docs/yarn.lock @@ -448,6 +448,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.16.0, @babel/helper-annotate-as-pure@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: e413cd022e1e21232c1ce98f3e1198ec5f4774c7eceb81155a45f9cb6d8481f3983c52f83252309856668e728c751f0340d29854b604530a694899208df6bcc3 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-annotate-as-pure@npm:7.16.7" @@ -457,15 +466,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: e413cd022e1e21232c1ce98f3e1198ec5f4774c7eceb81155a45f9cb6d8481f3983c52f83252309856668e728c751f0340d29854b604530a694899208df6bcc3 - languageName: node - linkType: hard - "@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.16.7" @@ -706,6 +706,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-module-imports@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: a92e28fc4b5dbb0d0afd4a313efc0cf5b26ce1adc0c01fc22724c997789ac7d7f4f30bc9143d94a6ba8b0a035933cf63a727a365ce1c57dbca0935f48de96244 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-module-imports@npm:7.16.7" @@ -715,15 +724,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-module-imports@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: a92e28fc4b5dbb0d0afd4a313efc0cf5b26ce1adc0c01fc22724c997789ac7d7f4f30bc9143d94a6ba8b0a035933cf63a727a365ce1c57dbca0935f48de96244 - languageName: node - linkType: hard - "@babel/helper-module-transforms@npm:^7.12.1": version: 7.17.6 resolution: "@babel/helper-module-transforms@npm:7.17.6" @@ -2874,7 +2874,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.18.6": +"@babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.6": version: 7.18.9 resolution: "@babel/runtime@npm:7.18.9" dependencies: @@ -2932,7 +2932,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.18.10, @babel/traverse@npm:^7.18.11, @babel/traverse@npm:^7.18.8, @babel/traverse@npm:^7.18.9": +"@babel/traverse@npm:^7.18.10, @babel/traverse@npm:^7.18.11, @babel/traverse@npm:^7.18.8, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.4.5": version: 7.18.11 resolution: "@babel/traverse@npm:7.18.11" dependencies: @@ -2977,7 +2977,7 @@ __metadata: dependencies: "@babel/helper-validator-identifier": ^7.18.6 to-fast-properties: ^2.0.0 - checksum: 89cd4c0e3ac93d8ddb80b93261374ad85354663ce6a5415477192e57c4ab7bdb055d75e0c8da132629db423870d63496c9edc04b42de13d638906a669070d5ae + checksum: 6984d0846df8c08818c767808f818ed5a883cadaf72a935e494d0bd9237c85f88e0ba1264923b61a3c6e9cfa793df72b54b5f8e5315d0abd7e6a083c99a0f9bf languageName: node linkType: hard @@ -3522,6 +3522,43 @@ __metadata: languageName: node linkType: hard +"@emotion/is-prop-valid@npm:^1.1.0": + version: 1.2.0 + resolution: "@emotion/is-prop-valid@npm:1.2.0" + dependencies: + "@emotion/memoize": ^0.8.0 + checksum: 098bfde166ddbc3ad635157dff8dd8b90ceb5ee2804b3dbc9ffbffcac33955390d6c6e94dc36b1fde8c90f49dc1e1359dfdcd967906b006a3966382dbe8cc90b + languageName: node + linkType: hard + +"@emotion/memoize@npm:^0.8.0": + version: 0.8.0 + resolution: "@emotion/memoize@npm:0.8.0" + checksum: 246087ec09b32b295af67a094253831f398aabd953d03d14f186acb8607ed2a755e944f5e20b5ccebb461f15c2e5ccbf8fe977bcf3be951cf10961c504e1e65b + languageName: node + linkType: hard + +"@emotion/stylis@npm:^0.8.4": + version: 0.8.5 + resolution: "@emotion/stylis@npm:0.8.5" + checksum: f109e3f11cb0d48e8658aaa23578c5bcfe35e297819cfb089a3de6ba8dc0f89b0960474922690c6028df5d2e1895b4967f2fb280642c030054c312f1e137ce26 + languageName: node + linkType: hard + +"@emotion/unitless@npm:^0.7.4": + version: 0.7.5 + resolution: "@emotion/unitless@npm:0.7.5" + checksum: 4d0d94f53cb97b4481bbfa394953e1899a0b877644642ba9dd7247c27eb8c48e14e22aeb11411d7d9874685ad85dd5fb5b50eb78c6d8840eb56a84b92dcef2f4 + languageName: node + linkType: hard + +"@exodus/schemasafe@npm:^1.0.0-rc.2": + version: 1.0.0-rc.7 + resolution: "@exodus/schemasafe@npm:1.0.0-rc.7" + checksum: b612252f93578cf776d18d8a238332a003815b4ac47528163bc91122edfdf8aea27ec5cd5877b1e8ed1fb99d07e49041ee78b76a0bcab782ca2706200ae0618d + languageName: node + linkType: hard + "@gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" @@ -3726,6 +3763,54 @@ __metadata: languageName: node linkType: hard +"@redocly/ajv@npm:^8.6.4": + version: 8.6.4 + resolution: "@redocly/ajv@npm:8.6.4" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 07ffbd7480962506e696b675e4fb4b53d188e0871312a75be2d569f3ea081ed9982db6d4575f3c955adcad4742c2af45eb01dc5968937467658bec5500d6a47b + languageName: node + linkType: hard + +"@redocly/openapi-core@npm:1.0.0-beta.102": + version: 1.0.0-beta.102 + resolution: "@redocly/openapi-core@npm:1.0.0-beta.102" + dependencies: + "@redocly/ajv": ^8.6.4 + "@types/node": ^14.11.8 + colorette: ^1.2.0 + js-levenshtein: ^1.1.6 + js-yaml: ^4.1.0 + lodash.isequal: ^4.5.0 + minimatch: ^5.0.1 + node-fetch: ^2.6.1 + pluralize: ^8.0.0 + yaml-ast-parser: 0.0.43 + checksum: 1851aff7d79c045e86e824ecf1ecdcfc0e275e8c1dd3972fab2461a4d57c701006b642663528b1dbab69965ee964ea2008b0e53d399613fe49ccd96e48cf83ac + languageName: node + linkType: hard + +"@redocly/openapi-core@npm:^1.0.0-beta.97": + version: 1.0.0-beta.103 + resolution: "@redocly/openapi-core@npm:1.0.0-beta.103" + dependencies: + "@redocly/ajv": ^8.6.4 + "@types/node": ^14.11.8 + colorette: ^1.2.0 + js-levenshtein: ^1.1.6 + js-yaml: ^4.1.0 + lodash.isequal: ^4.5.0 + minimatch: ^5.0.1 + node-fetch: ^2.6.1 + pluralize: ^8.0.0 + yaml-ast-parser: 0.0.43 + checksum: 3c6ffd629da4a690ef549e2f2a234c802a0e47e234d5d687e5d1989a2eeefdbbbbd4a150c3fcc4d3cb2d27d7a7c5e48f4684c3bdd98301d7d16f6d4ad66d08c0 + languageName: node + linkType: hard + "@segment/snippet@npm:^4.13.2": version: 4.15.3 resolution: "@segment/snippet@npm:4.15.3" @@ -4080,6 +4165,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:^7.0.7": + version: 7.0.11 + resolution: "@types/json-schema@npm:7.0.11" + checksum: bd1f9a7b898ff15c4bb494eb19124f2d688b804c39f07cbf135ac73f35324970e9e8329b72aae1fb543d925ea295a1568b23056c26658cecec4741fa28c3b81a + languageName: node + linkType: hard + "@types/keyv@npm:^3.1.1": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" @@ -4119,6 +4211,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^14.11.8": + version: 14.18.21 + resolution: "@types/node@npm:14.18.21" + checksum: 2bdfa6eb23f13e058818b8f53a6759ab5eefd5809febd680be4689665d75813e5ac32388429f52df64073d0f1502364a316161af47469745014722e2f1566637 + languageName: node + linkType: hard + "@types/parse-json@npm:^4.0.0": version: 4.0.0 resolution: "@types/parse-json@npm:4.0.0" @@ -4964,6 +5063,28 @@ __metadata: languageName: node linkType: hard +"babel-plugin-styled-components@npm:>= 1.12.0": + version: 2.0.7 + resolution: "babel-plugin-styled-components@npm:2.0.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.0 + "@babel/helper-module-imports": ^7.16.0 + babel-plugin-syntax-jsx: ^6.18.0 + lodash: ^4.17.11 + picomatch: ^2.3.0 + peerDependencies: + styled-components: ">= 2" + checksum: 1c639742fb177f36648077a44fd473fe050aa5c664a16ecaa8e366426c44520c2a0011682b90f5b62f3c4317c22938410a6044b7cd99eaba831c00d41a2395c1 + languageName: node + linkType: hard + +"babel-plugin-syntax-jsx@npm:^6.18.0": + version: 6.18.0 + resolution: "babel-plugin-syntax-jsx@npm:6.18.0" + checksum: d5954e9c2a3dd519f23e78674ecfba61394a8fae63499afdeca4214fad68997556ebd15ce012bbc4d527ae0e3cecc98d3e8f78004a68707122642d0df4ab7213 + languageName: node + linkType: hard + "bail@npm:^1.0.0": version: 1.0.5 resolution: "bail@npm:1.0.5" @@ -5221,6 +5342,13 @@ __metadata: languageName: node linkType: hard +"call-me-maybe@npm:^1.0.1": + version: 1.0.1 + resolution: "call-me-maybe@npm:1.0.1" + checksum: 551991433adc2d257d24a5dea5049addc75b182cc7f64860d41bb5ec2c2f1f72efcd6f34be475e70bbb62fde9f9ba380c1a52c922daf2b4111f25fee2509550f + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -5252,6 +5380,13 @@ __metadata: languageName: node linkType: hard +"camelize@npm:^1.0.0": + version: 1.0.0 + resolution: "camelize@npm:1.0.0" + checksum: b2cf60c12d002f6f5bff1dc56dedd9fa98767af2090c9699a0cd4da48d02f0b3939d09722028145555528b82da3140a117f92f1f9ecc7928af4fb3bfe86fec35 + languageName: node + linkType: hard + "caniuse-api@npm:^3.0.0": version: 3.0.0 resolution: "caniuse-api@npm:3.0.0" @@ -5403,6 +5538,13 @@ __metadata: languageName: node linkType: hard +"classnames@npm:^2.3.1": + version: 2.3.1 + resolution: "classnames@npm:2.3.1" + checksum: e3b832219042802464e648c41c2e8be96c2c64d2522cfa22fbb5ec088418406c61ab351a682c077c07f691c8b00c9f0ee7939b20fabc6c23da69063252a4ab89 + languageName: node + linkType: hard + "clean-css@npm:^5.2.2": version: 5.2.4 resolution: "clean-css@npm:5.2.4" @@ -5455,6 +5597,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: 6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 + languageName: node + linkType: hard + "clone-deep@npm:^4.0.1": version: 4.0.1 resolution: "clone-deep@npm:4.0.1" @@ -5475,7 +5628,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.1.1": +"clsx@npm:^1.1.0, clsx@npm:^1.1.1": version: 1.1.1 resolution: "clsx@npm:1.1.1" checksum: 5c34e1d5623e3dce0dbf22eedd4f3cc7cd0dee6b1b1ef3ad49d042c9d86372a1dc7788c2ca3213ec08e65ad0e91572ae7cb77183a478c9977bd5327e8f43ffe5 @@ -5544,6 +5697,13 @@ __metadata: languageName: node linkType: hard +"colorette@npm:^1.2.0": + version: 1.4.0 + resolution: "colorette@npm:1.4.0" + checksum: 4955c8f7daafca8ae7081d672e4bd89d553bd5782b5846d5a7e05effe93c2f15f7e9c0cb46f341b59f579a39fcf436241ff79594899d75d5f3460c03d607fe9e + languageName: node + linkType: hard + "colorette@npm:^2.0.10": version: 2.0.16 resolution: "colorette@npm:2.0.16" @@ -5735,6 +5895,24 @@ __metadata: languageName: node linkType: hard +"copyfiles@npm:^2.4.1": + version: 2.4.1 + resolution: "copyfiles@npm:2.4.1" + dependencies: + glob: ^7.0.5 + minimatch: ^3.0.3 + mkdirp: ^1.0.4 + noms: 0.0.0 + through2: ^2.0.1 + untildify: ^4.0.0 + yargs: ^16.1.0 + bin: + copyfiles: copyfiles + copyup: copyfiles + checksum: e65cd055ec9acc14997b0ace83973d73f8d9c68167cbf4293c40b52d100af09a8c8da329042d52dc33422c0a8cbf74c6efb25e9ae088667721653659bd67bf57 + languageName: node + linkType: hard + "core-js-compat@npm:^3.20.2, core-js-compat@npm:^3.21.0": version: 3.21.1 resolution: "core-js-compat@npm:3.21.1" @@ -5829,6 +6007,13 @@ __metadata: languageName: node linkType: hard +"css-color-keywords@npm:^1.0.0": + version: 1.0.0 + resolution: "css-color-keywords@npm:1.0.0" + checksum: af205a86c68e0051846ed91eb3e30b4517e1904aac040013ff1d742019b3f9369ba5658ba40901dbbc121186fc4bf0e75a814321cc3e3182fbb2feb81c6d9cb7 + languageName: node + linkType: hard + "css-declaration-sorter@npm:^6.3.0": version: 6.3.0 resolution: "css-declaration-sorter@npm:6.3.0" @@ -5907,6 +6092,17 @@ __metadata: languageName: node linkType: hard +"css-to-react-native@npm:^3.0.0": + version: 3.0.0 + resolution: "css-to-react-native@npm:3.0.0" + dependencies: + camelize: ^1.0.0 + css-color-keywords: ^1.0.0 + postcss-value-parser: ^4.0.2 + checksum: 03dcf5381ff6a888e3621aaffd812fd52df803d01c264b99142a9f73942007c2e953bd27339d6e2da2504a940a2b0d3cc702d3a737165703a0d8ae9c5626c1c1 + languageName: node + linkType: hard + "css-tree@npm:^1.1.2, css-tree@npm:^1.1.3": version: 1.1.3 resolution: "css-tree@npm:1.1.3" @@ -6054,6 +6250,13 @@ __metadata: languageName: node linkType: hard +"decko@npm:^1.2.0": + version: 1.2.0 + resolution: "decko@npm:1.2.0" + checksum: bae2187734b6faa9db1cf53b04bb107f79a55735d85c7511f941d7fd1cac36991ad2048dee8451dcbcb4efa23a46e5dfd46f71a51585457cd5b912869b5d346b + languageName: node + linkType: hard + "decompress-response@npm:^3.3.0": version: 3.3.0 resolution: "decompress-response@npm:3.3.0" @@ -6238,10 +6441,24 @@ __metadata: prism-react-renderer: ^1.3.1 react: ^17.0.1 react-dom: ^17.0.1 + redocusaurus: ^1.3.0 url-loader: ^4.1.1 languageName: unknown linkType: soft +"docusaurus-plugin-redoc@npm:1.2.3": + version: 1.2.3 + resolution: "docusaurus-plugin-redoc@npm:1.2.3" + dependencies: + "@redocly/openapi-core": 1.0.0-beta.102 + joi: ^17.5.0 + redoc: 2.0.0-rc.72 + peerDependencies: + "@docusaurus/utils": ^2.0.0-beta.18 + checksum: a17edb882ece33bc72960c8a354ab51e7d3511c9ae10cae84ede2abc78b746c8e4ba1169c5f3f6b515f7b9dc6558bca5ae2a0526c6c9582924b92d95513bfe22 + languageName: node + linkType: hard + "docusaurus-plugin-segment@npm:^1.0.3": version: 1.0.3 resolution: "docusaurus-plugin-segment@npm:1.0.3" @@ -6251,6 +6468,22 @@ __metadata: languageName: node linkType: hard +"docusaurus-theme-redoc@npm:1.3.0": + version: 1.3.0 + resolution: "docusaurus-theme-redoc@npm:1.3.0" + dependencies: + clsx: ^1.1.1 + copyfiles: ^2.4.1 + lodash: ^4.17.21 + mobx: ^6.5.0 + redoc: 2.0.0-rc.72 + styled-components: ^5.3.5 + peerDependencies: + "@docusaurus/theme-common": ^2.0.0-beta.18 + checksum: 4f1cbf137709f50c9182c00eb16338f898f3490b213682b667502429415e039b4b26a96134c6673cc95e341d4537963c95464dbf64d446e580f40cee0c44c028 + languageName: node + linkType: hard + "docusaurus2-dotenv@npm:^1.4.0": version: 1.4.0 resolution: "docusaurus2-dotenv@npm:1.4.0" @@ -6323,6 +6556,13 @@ __metadata: languageName: node linkType: hard +"dompurify@npm:^2.2.8": + version: 2.3.10 + resolution: "dompurify@npm:2.3.10" + checksum: 602b9e23b2653c0757b9ed862ec5523df6211f5a97b47bbc7ea243c0945fa9637fe3b07b7d7a950b70471259b6aae3f50c1707f3418b29ec98f2dc8b946df6dc + languageName: node + linkType: hard + "domutils@npm:^2.5.2, domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" @@ -6547,6 +6787,13 @@ __metadata: languageName: node linkType: hard +"es6-promise@npm:^3.2.1": + version: 3.3.1 + resolution: "es6-promise@npm:3.3.1" + checksum: b4fc87cb8509c001f62f860f97b05d1fd3f87220c8b832578e6a483c719ca272b73a77f2231cb26395fa865e1cab2fd4298ab67786b69e97b8d757b938f4fc1f + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -6656,7 +6903,7 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:^4.0.0": +"eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.7": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" checksum: 5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b @@ -6769,6 +7016,13 @@ __metadata: languageName: node linkType: hard +"fast-safe-stringify@npm:^2.0.7": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: d90ec1c963394919828872f21edaa3ad6f1dddd288d2bd4e977027afff09f5db40f94e39536d4646f7e01761d704d72d51dce5af1b93717f3489ef808f5f4e4d + languageName: node + linkType: hard + "fast-url-parser@npm:1.1.3": version: 1.1.3 resolution: "fast-url-parser@npm:1.1.3" @@ -6941,6 +7195,13 @@ __metadata: languageName: node linkType: hard +"foreach@npm:^2.0.4": + version: 2.0.6 + resolution: "foreach@npm:2.0.6" + checksum: dc79f83997ac986dadbc95b4035ce8b86699fb654eb85446b0ad779fe69d567fc9894075e460243ca8bc20adb8fd178ad203aef66dc3c620ac78b18a4cb7059c + languageName: node + linkType: hard + "fork-ts-checker-webpack-plugin@npm:^6.5.0": version: 6.5.0 resolution: "fork-ts-checker-webpack-plugin@npm:6.5.0" @@ -7095,6 +7356,13 @@ __metadata: languageName: node linkType: hard +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + "get-intrinsic@npm:^1.0.2": version: 1.1.1 resolution: "get-intrinsic@npm:1.1.1" @@ -7184,7 +7452,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.4": +"glob@npm:^7.0.5, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -7475,7 +7743,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.1.0": +"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.1.0": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -7659,6 +7927,13 @@ __metadata: languageName: node linkType: hard +"http2-client@npm:^1.2.5": + version: 1.3.5 + resolution: "http2-client@npm:1.3.5" + checksum: 4974f10f5c8b5b7b9e23771190471d02690e9a22c22e028d84715b7ecdcda05017fc9e565476558da3bdf0ba642d24186a94818d0b9afee706ccf9874034be73 + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -7792,7 +8067,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.1, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -7843,10 +8118,10 @@ __metadata: languageName: node linkType: hard -"ip@npm:^1.1.5": - version: 1.1.8 - resolution: "ip@npm:1.1.8" - checksum: ab32a5ecfa678d4c158c1381c4c6744fce89a1d793e1b6635ba79d0753c069030b672d765887b6fff55670c711dfa47475895e5d6013efbbcf04687c51cb8db9 +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: 8d186cc5585f57372847ae29b6eba258c68862055e18a75cc4933327232cb5c107f89800ce29715d542eef2c254fbb68b382e780a7414f9ee7caf60b7a473958 languageName: node linkType: hard @@ -8156,7 +8431,7 @@ __metadata: languageName: node linkType: hard -"joi@npm:^17.6.0": +"joi@npm:^17.5.0, joi@npm:^17.6.0": version: 17.6.0 resolution: "joi@npm:17.6.0" dependencies: @@ -8169,6 +8444,13 @@ __metadata: languageName: node linkType: hard +"js-levenshtein@npm:^1.1.6": + version: 1.1.6 + resolution: "js-levenshtein@npm:1.1.6" + checksum: 14045735325ea1fd87f434a74b11d8a14380f090f154747e613529c7cff68b5ee607f5230fa40665d5fb6125a3791f4c223f73b9feca754f989b059f5c05864f + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -8231,6 +8513,15 @@ __metadata: languageName: node linkType: hard +"json-pointer@npm:0.6.2, json-pointer@npm:^0.6.2": + version: 0.6.2 + resolution: "json-pointer@npm:0.6.2" + dependencies: + foreach: ^2.0.4 + checksum: 47f6103032c0340b3392cb650e0ec817f785eccb553407da13fae85bc535483c9b359d7e756de4ed73130172c28d2b02f8beb53a700a98b12e72c7bf70e734b7 + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -8401,6 +8692,13 @@ __metadata: languageName: node linkType: hard +"lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: dfdb2356db19631a4b445d5f37868a095e2402292d59539a987f134a8778c62a2810c2452d11ae9e6dcac71fc9de40a6fedcb20e2952a15b431ad8b29e50e28f + languageName: node + linkType: hard + "lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -8415,7 +8713,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21": +"lodash@npm:^4.17.11, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -8472,6 +8770,13 @@ __metadata: languageName: node linkType: hard +"lunr@npm:^2.3.9": + version: 2.3.9 + resolution: "lunr@npm:2.3.9" + checksum: 77d7dbb4fbd602aac161e2b50887d8eda28c0fa3b799159cee380fbb311f1e614219126ecbbd2c3a9c685f1720a8109b3c1ca85cc893c39b6c9cc6a62a1d8a8b + languageName: node + linkType: hard + "make-dir@npm:^3.0.0, make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -8482,8 +8787,8 @@ __metadata: linkType: hard "make-fetch-happen@npm:^10.0.3": - version: 10.1.8 - resolution: "make-fetch-happen@npm:10.1.8" + version: 10.2.0 + resolution: "make-fetch-happen@npm:10.2.0" dependencies: agentkeepalive: ^4.2.1 cacache: ^16.1.0 @@ -8501,7 +8806,14 @@ __metadata: promise-retry: ^2.0.1 socks-proxy-agent: ^7.0.0 ssri: ^9.0.0 - checksum: 68dd3d1f1da1f9fdf92010b1d5efcda15a95391b9fb3a2868b45f9aeb46f1254ab25847cf7e27852070f3b9387ab2d2b8ecca419b1b6ad572b99ebe23e68815e + checksum: ec51ded78f2d47be39aab4c4c1091e1850cf32b66472e252fc8927e26ad393c5c582178a95d5e77153566e9b2584909f2a7427ca5963f034b8ff0ba9c9f6518d + languageName: node + linkType: hard + +"mark.js@npm:^8.11.1": + version: 8.11.1 + resolution: "mark.js@npm:8.11.1" + checksum: 5e69e776db61abdd857b5cbb7070c8a3b1b0e5c12bf077fcd5a8c6f17b1f85ed65275aba5662b57136d1b9f82b54bb34d4ef4220f7703c9a7ab806ae1e208cff languageName: node linkType: hard @@ -8512,6 +8824,15 @@ __metadata: languageName: node linkType: hard +"marked@npm:^4.0.15": + version: 4.0.17 + resolution: "marked@npm:4.0.17" + bin: + marked: bin/marked.js + checksum: e923db2223ab7045c3f6422a31c3dcb97a9dae4a08b8dd2b1710563c4d4687703d5826d2b07382f684c7f2ebe677dfd4470cd683c9f3a7f703102531f3a0812f + languageName: node + linkType: hard + "mdast-squeeze-paragraphs@npm:^4.0.0": version: 4.0.0 resolution: "mdast-squeeze-paragraphs@npm:4.0.0" @@ -8733,7 +9054,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": +"minimatch@npm:^3.0.3, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -8844,6 +9165,45 @@ __metadata: languageName: node linkType: hard +"mobx-react-lite@npm:^3.4.0": + version: 3.4.0 + resolution: "mobx-react-lite@npm:3.4.0" + peerDependencies: + mobx: ^6.1.0 + react: ^16.8.0 || ^17 || ^18 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 7aa64fb8740d48de23c370385331063f0a0821a87ed7a1eb0324305e8ef2f5173806c3e5ff2bfb7696e5b80faf19de11e2d3c0b64268df21895d4eec4816e325 + languageName: node + linkType: hard + +"mobx-react@npm:^7.2.0": + version: 7.5.1 + resolution: "mobx-react@npm:7.5.1" + dependencies: + mobx-react-lite: ^3.4.0 + peerDependencies: + mobx: ^6.1.0 + react: ^16.8.0 || ^17 || ^18 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: acb48e66d0e7ca54666a9dd9aafd651659f5f556a0df6e2108ca23a4daf397e770787dba3bb81ee2b2312262b3c84442db62573547ca3e30500cdef4925a877e + languageName: node + linkType: hard + +"mobx@npm:^6.5.0": + version: 6.6.1 + resolution: "mobx@npm:6.6.1" + checksum: e46384971efa1b396b18914580c881157d2800ca84fd0ecc2bf9a8ddf6f6b18b01e7955512dc8b542d4d4b0d464b276117db59311a027c7925bceb21d10c22d8 + languageName: node + linkType: hard + "mrmime@npm:^1.0.0": version: 1.0.0 resolution: "mrmime@npm:1.0.0" @@ -8935,7 +9295,16 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:2.6.7": +"node-fetch-h2@npm:^2.3.0": + version: 2.3.0 + resolution: "node-fetch-h2@npm:2.3.0" + dependencies: + http2-client: ^1.2.5 + checksum: 10f117c5aa1d475fff05028dddd617a61606083e4d6c4195dd5f5b03c973182e0d125e804771e6888d04f7d92b5c9c27a6149d1beedd6af1e0744f163e8a02d9 + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7, node-fetch@npm:^2.6.1": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" dependencies: @@ -8976,6 +9345,15 @@ __metadata: languageName: node linkType: hard +"node-readfiles@npm:^0.2.0": + version: 0.2.0 + resolution: "node-readfiles@npm:0.2.0" + dependencies: + es6-promise: ^3.2.1 + checksum: 9de2f741baae29f2422b22ef4399b5f7cb6c20372d4e88447a98d00a92cf1a35efdf942d24eee153a87d885aa7e7442b4bc6de33d4b91c47ba9da501780c76a1 + languageName: node + linkType: hard + "node-releases@npm:^2.0.2": version: 2.0.2 resolution: "node-releases@npm:2.0.2" @@ -8990,6 +9368,16 @@ __metadata: languageName: node linkType: hard +"noms@npm:0.0.0": + version: 0.0.0 + resolution: "noms@npm:0.0.0" + dependencies: + inherits: ^2.0.1 + readable-stream: ~1.0.31 + checksum: 7790dbbef45c593b5444b361cb9cde3260244ab66aaa199c0728d334525eb69df96231115cff260b71b92fc7a6915a642aa22f2f8448696d8dd6e7d7cebfccce + languageName: node + linkType: hard + "nopt@npm:^5.0.0": version: 5.0.0 resolution: "nopt@npm:5.0.0" @@ -9073,6 +9461,64 @@ __metadata: languageName: node linkType: hard +"oas-kit-common@npm:^1.0.8": + version: 1.0.8 + resolution: "oas-kit-common@npm:1.0.8" + dependencies: + fast-safe-stringify: ^2.0.7 + checksum: 5619a0bd19a07b52af1afeff26e44601002c0fd558d0020fdb720cb3723b60c83b80efede3a62110ce315f15b971751fb46396760e0e507fb8fd412cdc3808dd + languageName: node + linkType: hard + +"oas-linter@npm:^3.2.2": + version: 3.2.2 + resolution: "oas-linter@npm:3.2.2" + dependencies: + "@exodus/schemasafe": ^1.0.0-rc.2 + should: ^13.2.1 + yaml: ^1.10.0 + checksum: 5a8ea3d8a0bf185b676659d1e1c0b9b50695aeff53ccd5c264c8e99b4a7c0021f802b937913d76f0bc1a6a2b8ae151df764d95302b0829063b9b26f8c436871c + languageName: node + linkType: hard + +"oas-resolver@npm:^2.5.6": + version: 2.5.6 + resolution: "oas-resolver@npm:2.5.6" + dependencies: + node-fetch-h2: ^2.3.0 + oas-kit-common: ^1.0.8 + reftools: ^1.1.9 + yaml: ^1.10.0 + yargs: ^17.0.1 + bin: + resolve: resolve.js + checksum: cfba5ba3f7ea6673a840836cf194a80ba7f77e6d1ee005aa35cc838cad56d7e455fa53753ae7cc38810c96405b8606e675098ea7023639cf546cb10343f180f9 + languageName: node + linkType: hard + +"oas-schema-walker@npm:^1.1.5": + version: 1.1.5 + resolution: "oas-schema-walker@npm:1.1.5" + checksum: 8ba6bd2a9a8ede2c5574f217653a9e2b889a7c5be69c664a57e293591c58952e8510f4f9e2a82fd5f52491c859ce5c2b68342e9b971e9667f6b811e7fb56fd54 + languageName: node + linkType: hard + +"oas-validator@npm:^5.0.8": + version: 5.0.8 + resolution: "oas-validator@npm:5.0.8" + dependencies: + call-me-maybe: ^1.0.1 + oas-kit-common: ^1.0.8 + oas-linter: ^3.2.2 + oas-resolver: ^2.5.6 + oas-schema-walker: ^1.1.5 + reftools: ^1.1.9 + should: ^13.2.1 + yaml: ^1.10.0 + checksum: 16bb722042dcba93892c50db2201df6aeea9c3dd60e2f7bc18b36f23c610d136f52a5946908817f6fdd4139219fa4b177f952b9831039078b4c8730fa026b180 + languageName: node + linkType: hard + "object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -9158,6 +9604,16 @@ __metadata: languageName: node linkType: hard +"openapi-sampler@npm:^1.3.0": + version: 1.3.0 + resolution: "openapi-sampler@npm:1.3.0" + dependencies: + "@types/json-schema": ^7.0.7 + json-pointer: 0.6.2 + checksum: e4bd3d0c2125e060d5d9a86273b4ec9554b4f819632e716c31361334eb849eea9606b7cb8b727a50dbd8f8398a7da166fab3384d096c85d243dc37f0b8802346 + languageName: node + linkType: hard + "opener@npm:^1.5.2": version: 1.5.2 resolution: "opener@npm:1.5.2" @@ -9352,6 +9808,13 @@ __metadata: languageName: node linkType: hard +"path-browserify@npm:^1.0.1": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: 8b8c3fd5c66bd340272180590ae4ff139769e9ab79522e2eb82e3d571a89b8117c04147f65ad066dccfb42fcad902e5b7d794b3d35e0fd840491a8ddbedf8c66 + languageName: node + linkType: hard + "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -9424,6 +9887,13 @@ __metadata: languageName: node linkType: hard +"perfect-scrollbar@npm:^1.5.1": + version: 1.5.5 + resolution: "perfect-scrollbar@npm:1.5.5" + checksum: 10f0c3a1205328b22e232be4ee9f0e832e96fb5b6c524d1d04e11f97ad910018c1c0659af145e0ae0dc2b41e67a96df12787de5366ff5ba86034339071ca722b + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -9431,7 +9901,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be @@ -9456,6 +9926,22 @@ __metadata: languageName: node linkType: hard +"pluralize@npm:^8.0.0": + version: 8.0.0 + resolution: "pluralize@npm:8.0.0" + checksum: 2044cfc34b2e8c88b73379ea4a36fc577db04f651c2909041b054c981cd863dd5373ebd030123ab058d194ae615d3a97cfdac653991e499d10caf592e8b3dc33 + languageName: node + linkType: hard + +"polished@npm:^4.1.3": + version: 4.2.2 + resolution: "polished@npm:4.2.2" + dependencies: + "@babel/runtime": ^7.17.8 + checksum: 1d054d1fea18ac7d921ca91504ffcf1ef0f505eda6acbfec6e205a98ebfea80b658664995deb35907dabc5f75f287dc2894812503a8aed28285bb91f25cf7400 + languageName: node + linkType: hard + "postcss-calc@npm:^8.2.3": version: 8.2.4 resolution: "postcss-calc@npm:8.2.4" @@ -9874,7 +10360,7 @@ __metadata: languageName: node linkType: hard -"postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": +"postcss-value-parser@npm:^4.0.2, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": version: 4.2.0 resolution: "postcss-value-parser@npm:4.2.0" checksum: f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 @@ -9974,7 +10460,7 @@ __metadata: languageName: node linkType: hard -"prismjs@npm:^1.28.0": +"prismjs@npm:^1.27.0, prismjs@npm:^1.28.0": version: 1.28.0 resolution: "prismjs@npm:1.28.0" checksum: bf879309e74188b424cf8bb3962f9df9e7004a71f44f82a3cfbd26f884c9a0bb91f529db79503c1bc0b570ed7b94a10c3303153642da533c1e10f51779c0617f @@ -10024,7 +10510,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": +"prop-types@npm:^15.5.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -10361,6 +10847,18 @@ __metadata: languageName: node linkType: hard +"react-tabs@npm:^3.2.2": + version: 3.2.3 + resolution: "react-tabs@npm:3.2.3" + dependencies: + clsx: ^1.1.0 + prop-types: ^15.5.0 + peerDependencies: + react: ^16.3.0 || ^17.0.0-0 + checksum: 1891471b3708ceb3292c05fa51cc9ea7fb40c2f85b9c7494d368d563d73cd6c4ae6e65e06c42fc9595f637885f42685a64581a54832a1675526f2631a35b8d3b + languageName: node + linkType: hard + "react-textarea-autosize@npm:^8.3.2": version: 8.3.3 resolution: "react-textarea-autosize@npm:8.3.3" @@ -10384,7 +10882,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.1": +"readable-stream@npm:^2.0.1, readable-stream@npm:~2.3.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" dependencies: @@ -10410,6 +10908,18 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:~1.0.31": + version: 1.0.34 + resolution: "readable-stream@npm:1.0.34" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.1 + isarray: 0.0.1 + string_decoder: ~0.10.x + checksum: 02272551396ed8930ddee1a088bdf0379f0f7cc47ac49ed8804e998076cb7daec9fbd2b1fd9c0490ec72e56e8bb3651abeb8080492b8e0a9c3f2158330908ed6 + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -10444,6 +10954,62 @@ __metadata: languageName: node linkType: hard +"redoc@npm:2.0.0-rc.72": + version: 2.0.0-rc.72 + resolution: "redoc@npm:2.0.0-rc.72" + dependencies: + "@redocly/openapi-core": ^1.0.0-beta.97 + classnames: ^2.3.1 + decko: ^1.2.0 + dompurify: ^2.2.8 + eventemitter3: ^4.0.7 + json-pointer: ^0.6.2 + lunr: ^2.3.9 + mark.js: ^8.11.1 + marked: ^4.0.15 + mobx-react: ^7.2.0 + openapi-sampler: ^1.3.0 + path-browserify: ^1.0.1 + perfect-scrollbar: ^1.5.1 + polished: ^4.1.3 + prismjs: ^1.27.0 + prop-types: ^15.7.2 + react-tabs: ^3.2.2 + slugify: ~1.4.7 + stickyfill: ^1.1.1 + style-loader: ^3.3.1 + swagger2openapi: ^7.0.6 + url-template: ^2.0.8 + peerDependencies: + core-js: ^3.1.4 + mobx: ^6.0.4 + react: ^16.8.4 || ^17.0.0 + react-dom: ^16.8.4 || ^17.0.0 + styled-components: ^4.1.1 || ^5.1.1 + checksum: 778c9ec2d3d697e7254835b5ae14eb7bab6dd25b22a7dc286fb6ce4d3aaff5d1234a83b846050d35ea04d3491a777b4eef2df48c01215a3721788425144eb635 + languageName: node + linkType: hard + +"redocusaurus@npm:^1.3.0": + version: 1.3.0 + resolution: "redocusaurus@npm:1.3.0" + dependencies: + docusaurus-plugin-redoc: 1.2.3 + docusaurus-theme-redoc: 1.3.0 + peerDependencies: + "@docusaurus/theme-common": ^2.0.0-beta.18 + "@docusaurus/utils": ^2.0.0-beta.18 + checksum: ba56718c03c7a8d6c5c0ca8ee6209970c485e3166b636f18c0fb0d703f8987fa20a7fbda49f76ecba81da9c63005009491e2b774046ddee7c8b864d45da1f578 + languageName: node + linkType: hard + +"reftools@npm:^1.1.9": + version: 1.1.9 + resolution: "reftools@npm:1.1.9" + checksum: 4b44c9e75d6e5328b43b974de08776ee1718a0b48f24e033b2699f872cc9a698234a4aa0553b9e1a766b828aeb9834e4aa988410f0279e86179edb33b270da6c + languageName: node + linkType: hard + "regenerate-unicode-properties@npm:^10.0.1": version: 10.0.1 resolution: "regenerate-unicode-properties@npm:10.0.1" @@ -10643,6 +11209,13 @@ __metadata: languageName: node linkType: hard +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" @@ -11104,6 +11677,62 @@ __metadata: languageName: node linkType: hard +"should-equal@npm:^2.0.0": + version: 2.0.0 + resolution: "should-equal@npm:2.0.0" + dependencies: + should-type: ^1.4.0 + checksum: b375e1da2586671e2b9442ac5b700af508f56438af9923f69123b1fe4e02ccddc9a8a3eb803447a6df91e616cec236c41d6f28fdaa100467f9fdb81651089538 + languageName: node + linkType: hard + +"should-format@npm:^3.0.3": + version: 3.0.3 + resolution: "should-format@npm:3.0.3" + dependencies: + should-type: ^1.3.0 + should-type-adaptors: ^1.0.1 + checksum: ef2a31148d79a3fabd0dc6c1c1b10f90d9e071ad8e1f99452bd01e8aceaca62985b43974cf8103185fa1a3ade85947c6f664e44ca9af253afd1ce93c223bd8e4 + languageName: node + linkType: hard + +"should-type-adaptors@npm:^1.0.1": + version: 1.1.0 + resolution: "should-type-adaptors@npm:1.1.0" + dependencies: + should-type: ^1.3.0 + should-util: ^1.0.0 + checksum: cf127f8807f69ace9db04dbec3f274330a854405feef9821b5fa525748961da65747869cca36c813132b98757bd3e42d53541579cb16630ccf3c0dd9c0082320 + languageName: node + linkType: hard + +"should-type@npm:^1.3.0, should-type@npm:^1.4.0": + version: 1.4.0 + resolution: "should-type@npm:1.4.0" + checksum: 50cb50d776ee117b151068367c09ec12ac8e6f5fe2bd4d167413972813f06e930fe8624232a56c335846d3afcb784455f9a9690baa4350b3919bd001f0c4c94b + languageName: node + linkType: hard + +"should-util@npm:^1.0.0": + version: 1.0.1 + resolution: "should-util@npm:1.0.1" + checksum: 1790719e05eae9edae86e44cbbad98529bd333df3f7cdfd63ea80acb6af718990e70abbc173aa9ccb93fff5ab6ee08d38412d707ff4003840be2256a278a61f3 + languageName: node + linkType: hard + +"should@npm:^13.2.1": + version: 13.2.3 + resolution: "should@npm:13.2.3" + dependencies: + should-equal: ^2.0.0 + should-format: ^3.0.3 + should-type: ^1.4.0 + should-type-adaptors: ^1.0.1 + should-util: ^1.0.0 + checksum: 99581d8615f6fb27cd23c9f431cfacef58d118a90d0cccf58775b90631a47441397cfbdcbe6379e2718e9e60f293e3dfc0e87857f4b5a36fe962814e46ab05fa + languageName: node + linkType: hard + "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -11168,6 +11797,13 @@ __metadata: languageName: node linkType: hard +"slugify@npm:~1.4.7": + version: 1.4.7 + resolution: "slugify@npm:1.4.7" + checksum: 27d31bac7bd28a7a702ab7b18996d2a41086d81a97cdc5487f131d7cedb009a745bcd10c8b263e48deb9f055e6c5a6b0bdb37f1156d5dd29b66f8ba981945302 + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -11198,12 +11834,12 @@ __metadata: linkType: hard "socks@npm:^2.6.2": - version: 2.6.2 - resolution: "socks@npm:2.6.2" + version: 2.7.0 + resolution: "socks@npm:2.7.0" dependencies: - ip: ^1.1.5 + ip: ^2.0.0 smart-buffer: ^4.2.0 - checksum: 3a97a3fa751d43294c1861bc3519bf3e3ebccc9136e690df96ee7b496b280a42fae3ae39480928ba7d940c1644737eab126502d433af026b209c57f1ca6cb7b3 + checksum: 5cc9ea8d0f1fae370d7ac319b5dd8973fa24bc58d0194a8140687fd10be53a1f348b1b02b97932ce67ddae0edf459e5da0fe4b13cd5dd22ce46ac4d1a83239ec languageName: node linkType: hard @@ -11337,6 +11973,13 @@ __metadata: languageName: node linkType: hard +"stickyfill@npm:^1.1.1": + version: 1.1.1 + resolution: "stickyfill@npm:1.1.1" + checksum: 8f11804fd3bba852cf3277dc4d6366a2bd592d3f7f3d9ab30b7adab4190a20e1296960b5107257081645b0d28afcbbab9f80e347cc425f2cd72b0a4f6917b4ab + languageName: node + linkType: hard + "string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -11368,6 +12011,13 @@ __metadata: languageName: node linkType: hard +"string_decoder@npm:~0.10.x": + version: 0.10.31 + resolution: "string_decoder@npm:0.10.31" + checksum: 1c628d78f974aa7539c496029f48e7019acc32487fc695464f9d6bdfec98edd7d933a06b3216bc2016918f6e75074c611d84430a53cb0e43071597d6c1ac5e25 + languageName: node + linkType: hard + "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -11434,6 +12084,15 @@ __metadata: languageName: node linkType: hard +"style-loader@npm:^3.3.1": + version: 3.3.1 + resolution: "style-loader@npm:3.3.1" + peerDependencies: + webpack: ^5.0.0 + checksum: b325f4ce5d0ee9797878d9db42a5c45ef6d757ad42de85bc550ef90c2fb78b762bbdff3214ddf1f4c8e1307fe1879fc47ea34ee48f8f56191309f8fc28f4d2b6 + languageName: node + linkType: hard + "style-to-object@npm:0.3.0, style-to-object@npm:^0.3.0": version: 0.3.0 resolution: "style-to-object@npm:0.3.0" @@ -11443,6 +12102,28 @@ __metadata: languageName: node linkType: hard +"styled-components@npm:^5.3.5": + version: 5.3.5 + resolution: "styled-components@npm:5.3.5" + dependencies: + "@babel/helper-module-imports": ^7.0.0 + "@babel/traverse": ^7.4.5 + "@emotion/is-prop-valid": ^1.1.0 + "@emotion/stylis": ^0.8.4 + "@emotion/unitless": ^0.7.4 + babel-plugin-styled-components: ">= 1.12.0" + css-to-react-native: ^3.0.0 + hoist-non-react-statics: ^3.0.0 + shallowequal: ^1.1.0 + supports-color: ^5.5.0 + peerDependencies: + react: ">= 16.8.0" + react-dom: ">= 16.8.0" + react-is: ">= 16.8.0" + checksum: b51d3e6d3476a7bcccaceb84a7d7e53d4e74822a887d4b58ad1a3018c7c0e733495f33a16fe84b2e9ac76552d45356c130ba2f9c629fe82c975a1486ee75d369 + languageName: node + linkType: hard + "stylehacks@npm:^5.1.0": version: 5.1.0 resolution: "stylehacks@npm:5.1.0" @@ -11455,7 +12136,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^5.3.0": +"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" dependencies: @@ -11513,6 +12194,29 @@ __metadata: languageName: node linkType: hard +"swagger2openapi@npm:^7.0.6": + version: 7.0.8 + resolution: "swagger2openapi@npm:7.0.8" + dependencies: + call-me-maybe: ^1.0.1 + node-fetch: ^2.6.1 + node-fetch-h2: ^2.3.0 + node-readfiles: ^0.2.0 + oas-kit-common: ^1.0.8 + oas-resolver: ^2.5.6 + oas-schema-walker: ^1.1.5 + oas-validator: ^5.0.8 + reftools: ^1.1.9 + yaml: ^1.10.0 + yargs: ^17.0.1 + bin: + boast: boast.js + oas-validate: oas-validate.js + swagger2openapi: swagger2openapi.js + checksum: 441a4d3a7d353f99395b14a0c8d6124be6390f2f8aa53336905e7314a7f80b66f5f2a40ac0dc2dbe2f7bc01f52a223a94f54a2ece345095fd3ad8ae8b03d688b + languageName: node + linkType: hard + "tapable@npm:^1.0.0": version: 1.1.3 resolution: "tapable@npm:1.1.3" @@ -11606,6 +12310,16 @@ __metadata: languageName: node linkType: hard +"through2@npm:^2.0.1": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: ~2.3.6 + xtend: ~4.0.1 + checksum: cbfe5b57943fa12b4f8c043658c2a00476216d79c014895cef1ac7a1d9a8b31f6b438d0e53eecbb81054b93128324a82ecd59ec1a4f91f01f7ac113dcb14eade + languageName: node + linkType: hard + "thunky@npm:^1.0.2": version: 1.1.0 resolution: "thunky@npm:1.1.0" @@ -11932,6 +12646,13 @@ __metadata: languageName: node linkType: hard +"untildify@npm:^4.0.0": + version: 4.0.0 + resolution: "untildify@npm:4.0.0" + checksum: d758e624c707d49f76f7511d75d09a8eda7f2020d231ec52b67ff4896bcf7013be3f9522d8375f57e586e9a2e827f5641c7e06ee46ab9c435fc2b2b2e9de517a + languageName: node + linkType: hard + "update-browserslist-db@npm:^1.0.5": version: 1.0.5 resolution: "update-browserslist-db@npm:1.0.5" @@ -12003,6 +12724,13 @@ __metadata: languageName: node linkType: hard +"url-template@npm:^2.0.8": + version: 2.0.8 + resolution: "url-template@npm:2.0.8" + checksum: 56a15057eacbcf05d52b0caed8279c8451b3dd9d32856a1fdd91c6dc84dcb1646f12bafc756b7ade62ca5b1564da8efd7baac5add35868bafb43eb024c62805b + languageName: node + linkType: hard + "use-composed-ref@npm:^1.0.0": version: 1.2.1 resolution: "use-composed-ref@npm:1.2.1" @@ -12485,13 +13213,20 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.0, xtend@npm:^4.0.1": +"xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: 366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e languageName: node linkType: hard +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" @@ -12499,6 +13234,13 @@ __metadata: languageName: node linkType: hard +"yaml-ast-parser@npm:0.0.43": + version: 0.0.43 + resolution: "yaml-ast-parser@npm:0.0.43" + checksum: 4d2f1e761067b2c6abdd882279a406f879258787af470a6d4a659cb79cb2ab056b870b25f1f80f46ed556e8b499d611d247806376f53edf3412f72c0a8ea2e98 + languageName: node + linkType: hard + "yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2": version: 1.10.2 resolution: "yaml@npm:1.10.2" @@ -12506,6 +13248,50 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^20.2.2": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.0.0": + version: 21.0.1 + resolution: "yargs-parser@npm:21.0.1" + checksum: 384ca19e113a053bb7858cf47f891e630c10ea6ad91f9ad7cae84ea1cdfb09b155a2d0fa97b51116ee6f01e038faaa6c46964953afecd453fa64a761bb87475f + languageName: node + linkType: hard + +"yargs@npm:^16.1.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651 + languageName: node + linkType: hard + +"yargs@npm:^17.0.1": + version: 17.5.1 + resolution: "yargs@npm:17.5.1" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.0.0 + checksum: 349c823b772bc5383d56684bca8615020ae5cc0b81bacafe1ef268b281ade93528da1982b0f2dd898e0c678932d9147b8a2e93e341733622773caf7048196de4 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" diff --git a/yarn.lock b/yarn.lock index a35b2b1fac..073b73c3a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6297,6 +6297,57 @@ __metadata: languageName: node linkType: hard +"@redocly/ajv@npm:^8.6.4": + version: 8.6.4 + resolution: "@redocly/ajv@npm:8.6.4" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 07ffbd7480962506e696b675e4fb4b53d188e0871312a75be2d569f3ea081ed9982db6d4575f3c955adcad4742c2af45eb01dc5968937467658bec5500d6a47b + languageName: node + linkType: hard + +"@redocly/cli@npm:latest": + version: 1.0.0-beta.105 + resolution: "@redocly/cli@npm:1.0.0-beta.105" + dependencies: + "@redocly/openapi-core": 1.0.0-beta.105 + assert-node-version: ^1.0.3 + chokidar: ^3.5.1 + colorette: ^1.2.0 + glob: ^7.1.6 + glob-promise: ^3.4.0 + handlebars: ^4.7.6 + portfinder: ^1.0.26 + simple-websocket: ^9.0.0 + yargs: 17.0.1 + bin: + openapi: bin/cli.js + redocly: bin/cli.js + checksum: 1431b538c7e541cdbcf27784942a32f834f6430cf7385e3dae21f764bde4fb097ab6b69e209c3ee0ba01b2aca07f4edab3a4d46b7670677cb64aba42fc45d01e + languageName: node + linkType: hard + +"@redocly/openapi-core@npm:1.0.0-beta.105": + version: 1.0.0-beta.105 + resolution: "@redocly/openapi-core@npm:1.0.0-beta.105" + dependencies: + "@redocly/ajv": ^8.6.4 + "@types/node": ^14.11.8 + colorette: ^1.2.0 + js-levenshtein: ^1.1.6 + js-yaml: ^4.1.0 + lodash.isequal: ^4.5.0 + minimatch: ^5.0.1 + node-fetch: ^2.6.1 + pluralize: ^8.0.0 + yaml-ast-parser: 0.0.43 + checksum: e7ba983158815ead9bf40f813bef5beef6646564e31a50cde50400d19b56194a7af0ce50225080422efe63240167b572846bb894cb18a9c2972648784acf9b7c + languageName: node + linkType: hard + "@rollup/plugin-alias@npm:^3.1.1": version: 3.1.9 resolution: "@rollup/plugin-alias@npm:3.1.9" @@ -8805,6 +8856,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^14.11.8": + version: 14.18.22 + resolution: "@types/node@npm:14.18.22" + checksum: 6ade9441d9ad57c1a32351f57ca81a9f721809fb91574fd214fcedcf4d60c24194db412d35f3bdfa8ad94b2fbcc38aaa417e9602dbdb649d4c84d6a54342f924 + languageName: node + linkType: hard + "@types/node@npm:^14.17.14": version: 14.18.21 resolution: "@types/node@npm:14.18.21" @@ -10744,6 +10802,16 @@ __metadata: languageName: node linkType: hard +"assert-node-version@npm:^1.0.3": + version: 1.0.3 + resolution: "assert-node-version@npm:1.0.3" + dependencies: + expected-node-version: ^1.0.0 + semver: ^5.0.3 + checksum: 7feff6b946555ecd1e79a7b4f93272a320e8e323d9a0d207d20622b4d8fa8baef4bc2ebeb661762631ecffd21c92817b77da9dba2546704a922918431b8217e2 + languageName: node + linkType: hard + "assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": version: 1.0.0 resolution: "assert-plus@npm:1.0.0" @@ -10842,6 +10910,15 @@ __metadata: languageName: node linkType: hard +"async@npm:^2.6.2": + version: 2.6.4 + resolution: "async@npm:2.6.4" + dependencies: + lodash: ^4.17.14 + checksum: 0ebb3273ef96513389520adc88e0d3c45e523d03653cc9b66f5c46f4239444294899bfd13d2b569e7dbfde7da2235c35cf5fd3ece9524f935d41bbe4efccdad0 + languageName: node + linkType: hard + "async@npm:^3.2.3": version: 3.2.4 resolution: "async@npm:3.2.4" @@ -13324,7 +13401,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^1.2.2, colorette@npm:^1.4.0": +"colorette@npm:^1.2.0, colorette@npm:^1.2.2, colorette@npm:^1.4.0": version: 1.4.0 resolution: "colorette@npm:1.4.0" checksum: 4955c8f7daafca8ae7081d672e4bd89d553bd5782b5846d5a7e05effe93c2f15f7e9c0cb46f341b59f579a39fcf436241ff79594899d75d5f3460c03d607fe9e @@ -14763,7 +14840,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.0.0, debug@npm:^3.0.1, debug@npm:^3.1.0, debug@npm:^3.2.7": +"debug@npm:^3.0.0, debug@npm:^3.0.1, debug@npm:^3.1.0, debug@npm:^3.1.1, debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -16955,6 +17032,13 @@ __metadata: languageName: node linkType: hard +"expected-node-version@npm:^1.0.0": + version: 1.0.2 + resolution: "expected-node-version@npm:1.0.2" + checksum: a10609c3cba8b8eaabff81cfe1bee9c93a02dad4380289eaa88c2776c9ff321b4ac1523773e380788ba103359dab443fc895ca461b7b82902a28c1033286b34a + languageName: node + linkType: hard + "express-graphql@npm:^0.12.0": version: 0.12.0 resolution: "express-graphql@npm:0.12.0" @@ -24177,6 +24261,13 @@ __metadata: languageName: node linkType: hard +"lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: dfdb2356db19631a4b445d5f37868a095e2402292d59539a987f134a8778c62a2810c2452d11ae9e6dcac71fc9de40a6fedcb20e2952a15b431ad8b29e50e28f + languageName: node + linkType: hard + "lodash.isinteger@npm:^4.0.4": version: 4.0.4 resolution: "lodash.isinteger@npm:4.0.4" @@ -28972,6 +29063,13 @@ __metadata: languageName: node linkType: hard +"pluralize@npm:^8.0.0": + version: 8.0.0 + resolution: "pluralize@npm:8.0.0" + checksum: 2044cfc34b2e8c88b73379ea4a36fc577db04f651c2909041b054c981cd863dd5373ebd030123ab058d194ae615d3a97cfdac653991e499d10caf592e8b3dc33 + languageName: node + linkType: hard + "pn@npm:^1.1.0": version: 1.1.0 resolution: "pn@npm:1.1.0" @@ -29027,6 +29125,17 @@ __metadata: languageName: node linkType: hard +"portfinder@npm:^1.0.26": + version: 1.0.28 + resolution: "portfinder@npm:1.0.28" + dependencies: + async: ^2.6.2 + debug: ^3.1.1 + mkdirp: ^0.5.5 + checksum: fefd3d65a6464b498e0e9b4a4b82f29489441bb1892a3350403cfdf6e591e583d9e75bac1c6ae8ca2cdf1a942ae18890831a0a855bb1bb977678acdf9e5a560f + languageName: node + linkType: hard + "posix-character-classes@npm:^0.1.0": version: 0.1.1 resolution: "posix-character-classes@npm:0.1.1" @@ -31889,6 +31998,7 @@ __metadata: "@babel/runtime": ^7.11.2 "@changesets/changelog-github": ^0.4.5 "@changesets/cli": ^2.23.0 + "@redocly/cli": latest "@typescript-eslint/eslint-plugin": ^5.0.0 "@typescript-eslint/parser": ^5.0.0 axios: ^0.21.1 @@ -32214,7 +32324,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:2.x || 3.x || 4 || 5, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.5.1, semver@npm:^5.6.0, semver@npm:^5.7.0, semver@npm:^5.7.1": +"semver@npm:2 || 3 || 4 || 5, semver@npm:2.x || 3.x || 4 || 5, semver@npm:^5.0.3, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.5.1, semver@npm:^5.6.0, semver@npm:^5.7.0, semver@npm:^5.7.1": version: 5.7.1 resolution: "semver@npm:5.7.1" bin: @@ -32684,6 +32794,19 @@ __metadata: languageName: node linkType: hard +"simple-websocket@npm:^9.0.0": + version: 9.1.0 + resolution: "simple-websocket@npm:9.1.0" + dependencies: + debug: ^4.3.1 + queue-microtask: ^1.2.2 + randombytes: ^2.1.0 + readable-stream: ^3.6.0 + ws: ^7.4.2 + checksum: fc245963d54d5a6647d407b9f6ad46da14e90479e0f150c62a94a22fd17e578412f110678a70641fe0a849165051327243edbfe9a886cb19ddf94154881cde5c + languageName: node + linkType: hard + "simplebar-react@npm:^1.0.0-alpha.6": version: 1.2.3 resolution: "simplebar-react@npm:1.2.3" @@ -37148,6 +37271,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^7.4.2": + version: 7.5.9 + resolution: "ws@npm:7.5.9" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: aec4ef4eb65821a7dde7b44790f8699cfafb7978c9b080f6d7a98a7f8fc0ce674c027073a78574c94786ba7112cc90fa2cc94fc224ceba4d4b1030cff9662494 + languageName: node + linkType: hard + "ws@npm:^8.2.3": version: 8.8.0 resolution: "ws@npm:8.8.0" @@ -37355,6 +37493,13 @@ __metadata: languageName: node linkType: hard +"yaml-ast-parser@npm:0.0.43": + version: 0.0.43 + resolution: "yaml-ast-parser@npm:0.0.43" + checksum: 4d2f1e761067b2c6abdd882279a406f879258787af470a6d4a659cb79cb2ab056b870b25f1f80f46ed556e8b499d611d247806376f53edf3412f72c0a8ea2e98 + languageName: node + linkType: hard + "yaml-loader@npm:^0.6.0": version: 0.6.0 resolution: "yaml-loader@npm:0.6.0" @@ -37406,6 +37551,21 @@ __metadata: languageName: node linkType: hard +"yargs@npm:17.0.1": + version: 17.0.1 + resolution: "yargs@npm:17.0.1" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: 3eb39d6dd477331826ef0a4732e05777b1f3ad85a4c1e44155f278369038206e504d3a36ec12470e9a9364117685f1d5a0b01f954a1bb7edb47ec34eda254e1c + languageName: node + linkType: hard + "yargs@npm:^14.2.2": version: 14.2.3 resolution: "yargs@npm:14.2.3"

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 diff --git a/www/docs/docusaurus.config.js b/www/docs/docusaurus.config.js index 767b64d1ba..557958ade3 100644 --- a/www/docs/docusaurus.config.js +++ b/www/docs/docusaurus.config.js @@ -1,5 +1,6 @@ const path = require("path") const docsPath = path.join(__dirname, "../../docs/content") +const apisPath = path.join(__dirname, "../../docs/api") const algoliaAppId = process.env.ALGOLIA_APP_ID || "temp" const algoliaApiKey = process.env.ALGOLIA_API_KEY || "temp" @@ -65,13 +66,32 @@ module.exports = { }, { type: 'dropdown', - label: 'References', + label: 'REST API Reference', items: [ { - href: `https://docs.medusajs.com/api/store`, - target: "_self", - label: "API Reference", + type: 'html', + value: ` + Store + + ` }, + { + type: 'html', + value: ` + Admin + + ` + }, + ], + }, + { + type: 'dropdown', + label: 'References', + items: [ { to: "cli/reference", label: "CLI Reference", @@ -158,9 +178,45 @@ module.exports = { showLastUpdateTime: true }, theme: { - customCss: require.resolve("./src/css/custom.css"), + customCss: require.resolve("./src/css/custom.css") }, }, ], + [ + 'redocusaurus', + { + // Plugin Options for loading OpenAPI files + specs: [ + { + spec: path.join(apisPath, 'store/openapi.yaml'), + route: '/api/store', + layout: { + noFooter: true + } + }, + { + spec: path.join(apisPath, 'admin/openapi.yaml'), + route: '/api/admin', + layout: { + noFooter: true + } + } + ], + // Theme Options for modifying how redoc renders them + theme: { + primaryColorDark: '#242526', + options: { + disableSearch: true, + nativeScrollbars: true, + sortTagsAlphabetically: true, + hideDownloadButton: true, + expandResponses: "200,204", + generatedPayloadSamplesMaxDepth: 4, + showObjectSchemaExamples: true, + requiredPropsFirst: true + } + } + }, + ], ], } diff --git a/www/docs/package.json b/www/docs/package.json index 72d9aee188..ee6d98ad7e 100644 --- a/www/docs/package.json +++ b/www/docs/package.json @@ -30,6 +30,7 @@ "prism-react-renderer": "^1.3.1", "react": "^17.0.1", "react-dom": "^17.0.1", + "redocusaurus": "^1.3.0", "url-loader": "^4.1.1" }, "browserslist": { diff --git a/www/docs/src/components/Banner/Banner.js b/www/docs/src/components/Banner/Banner.js deleted file mode 100644 index d33c2ae513..0000000000 --- a/www/docs/src/components/Banner/Banner.js +++ /dev/null @@ -1,56 +0,0 @@ -import React, { useEffect, useState } from "react" - -import CloseIcon from "../close-icon" -import ConfLogo from "../../../static/img/logo.svg" -import clsx from "clsx" -import styles from "./banner.module.css" -import {useColorMode} from '@docusaurus/theme-common'; - -const Banner = (props) => { - const [isBannerVisible, setIsBannerVisible] = useState(true) - const { isDarkTheme } = useColorMode() - - const handleDismissBanner = () => { - setIsBannerVisible(false) - if (localStorage) { - localStorage.setItem("mc::banner", false) - } - } - - useEffect(() => { - if (localStorage) { - const shouldShow = localStorage.getItem("mc::banner") - if (!shouldShow) { - setIsBannerVisible(true) - } - - if (shouldShow === "false") { - setIsBannerVisible(false) - } - } - }, []) - - return ( - isBannerVisible && ( -